diff --git a/src/plugins/bookmarks/bookmarksplugin.cpp b/src/plugins/bookmarks/bookmarksplugin.cpp index 1875606f224..ddf1984104f 100644 --- a/src/plugins/bookmarks/bookmarksplugin.cpp +++ b/src/plugins/bookmarks/bookmarksplugin.cpp @@ -36,169 +36,184 @@ #include #include #include -#include -#include + #include #include #include -#include +#include #include -using namespace Bookmarks::Constants; using namespace Core; using namespace TextEditor; +using namespace Bookmarks::Constants; + namespace Bookmarks { namespace Internal { -BookmarksPlugin::BookmarksPlugin() : - m_bookmarkManager(0), - m_toggleAction(0), - m_prevAction(0), - m_nextAction(0), - m_docPrevAction(0), - m_docNextAction(0), - m_editBookmarkAction(0), - m_bookmarkMarginAction(0), - m_bookmarkMarginActionLineNumber(0) +class BookmarksPluginRunData : public QObject { +public: + BookmarksPluginRunData(); + + void updateActions(bool enableToggle, int stateMask); + void editorOpened(Core::IEditor *editor); + void editorAboutToClose(Core::IEditor *editor); + + void requestContextMenu(TextEditor::TextEditorWidget *widget, + int lineNumber, QMenu *menu); + + BookmarkManager m_bookmarkManager; + BookmarkFilter m_bookmarkFilter; + BookmarkViewFactory m_bookmarkViewFactory; + + QAction m_toggleAction{BookmarksPlugin::tr("Toggle Bookmark"), nullptr}; + QAction m_prevAction{BookmarksPlugin::tr("Previous Bookmark"), nullptr}; + QAction m_nextAction{BookmarksPlugin::tr("Next Bookmark"), nullptr}; + QAction m_docPrevAction{BookmarksPlugin::tr("Previous Bookmark in Document"), nullptr}; + QAction m_docNextAction{BookmarksPlugin::tr("Next Bookmark in Document"), nullptr}; + QAction m_editBookmarkAction{BookmarksPlugin::tr("Edit Bookmark"), nullptr}; + QAction m_bookmarkMarginAction{BookmarksPlugin::tr("Toggle Bookmark"), nullptr}; + + int m_marginActionLineNumber = 0; + Utils::FileName m_marginActionFileName; +}; + +BookmarksPlugin::~BookmarksPlugin() +{ + delete m_runData; } -bool BookmarksPlugin::initialize(const QStringList & /*arguments*/, QString *) +bool BookmarksPlugin::initialize(const QStringList &, QString *) +{ + m_runData = new BookmarksPluginRunData; + return true; +} + +BookmarksPluginRunData::BookmarksPluginRunData() + : m_bookmarkFilter(&m_bookmarkManager) + , m_bookmarkViewFactory(&m_bookmarkManager) { ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS); ActionContainer *mbm = ActionManager::createMenu(Id(BOOKMARKS_MENU)); - mbm->menu()->setTitle(tr("&Bookmarks")); + mbm->menu()->setTitle(BookmarksPlugin::tr("&Bookmarks")); mtools->addMenu(mbm); const Context editorManagerContext(Core::Constants::C_EDITORMANAGER); - //Toggle - m_toggleAction = new QAction(tr("Toggle Bookmark"), this); - Command *cmd = ActionManager::registerAction(m_toggleAction, BOOKMARKS_TOGGLE_ACTION, editorManagerContext); - cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? tr("Meta+M") : tr("Ctrl+M"))); + // Toggle + Command *cmd = ActionManager::registerAction(&m_toggleAction, BOOKMARKS_TOGGLE_ACTION, + editorManagerContext); + cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? BookmarksPlugin::tr("Meta+M") + : BookmarksPlugin::tr("Ctrl+M"))); mbm->addAction(cmd); mbm->addSeparator(); - //Previous - m_prevAction = new QAction(tr("Previous Bookmark"), this); - cmd = ActionManager::registerAction(m_prevAction, BOOKMARKS_PREV_ACTION, editorManagerContext); - cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? tr("Meta+,") : tr("Ctrl+,"))); + // Previous + cmd = ActionManager::registerAction(&m_prevAction, BOOKMARKS_PREV_ACTION, editorManagerContext); + cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? BookmarksPlugin::tr("Meta+,") + : BookmarksPlugin::tr("Ctrl+,"))); mbm->addAction(cmd); - //Next - m_nextAction = new QAction(tr("Next Bookmark"), this); - cmd = ActionManager::registerAction(m_nextAction, BOOKMARKS_NEXT_ACTION, editorManagerContext); - cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? tr("Meta+.") : tr("Ctrl+."))); + // Next + cmd = ActionManager::registerAction(&m_nextAction, BOOKMARKS_NEXT_ACTION, editorManagerContext); + cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? BookmarksPlugin::tr("Meta+.") + : BookmarksPlugin::tr("Ctrl+."))); mbm->addAction(cmd); mbm->addSeparator(); - //Previous Doc - m_docPrevAction = new QAction(tr("Previous Bookmark in Document"), this); - cmd = ActionManager::registerAction(m_docPrevAction, BOOKMARKS_PREVDOC_ACTION, editorManagerContext); + // Previous Doc + cmd = ActionManager::registerAction(&m_docPrevAction, BOOKMARKS_PREVDOC_ACTION, + editorManagerContext); mbm->addAction(cmd); - //Next Doc - m_docNextAction = new QAction(tr("Next Bookmark in Document"), this); - cmd = ActionManager::registerAction(m_docNextAction, BOOKMARKS_NEXTDOC_ACTION, editorManagerContext); + // Next Doc + cmd = ActionManager::registerAction(&m_docNextAction, BOOKMARKS_NEXTDOC_ACTION, + editorManagerContext); mbm->addAction(cmd); - m_editBookmarkAction = new QAction(tr("Edit Bookmark"), this); - - m_bookmarkManager = new BookmarkManager; - - addAutoReleasedObject(new BookmarkFilter(m_bookmarkManager)); - - connect(m_toggleAction, &QAction::triggered, [this]() { + connect(&m_toggleAction, &QAction::triggered, [this] { BaseTextEditor *editor = BaseTextEditor::currentTextEditor(); if (editor && !editor->document()->isTemporary()) - m_bookmarkManager->toggleBookmark(editor->document()->filePath(), editor->currentLine()); + m_bookmarkManager.toggleBookmark(editor->document()->filePath(), editor->currentLine()); }); - connect(m_prevAction, &QAction::triggered, m_bookmarkManager, &BookmarkManager::prev); - connect(m_nextAction, &QAction::triggered, m_bookmarkManager, &BookmarkManager::next); - connect(m_docPrevAction, &QAction::triggered, m_bookmarkManager, &BookmarkManager::prevInDocument); - connect(m_docNextAction, &QAction::triggered, m_bookmarkManager, &BookmarkManager::nextInDocument); + connect(&m_prevAction, &QAction::triggered, &m_bookmarkManager, &BookmarkManager::prev); + connect(&m_nextAction, &QAction::triggered, &m_bookmarkManager, &BookmarkManager::next); + connect(&m_docPrevAction, &QAction::triggered, + &m_bookmarkManager, &BookmarkManager::prevInDocument); + connect(&m_docNextAction, &QAction::triggered, + &m_bookmarkManager, &BookmarkManager::nextInDocument); - connect(m_editBookmarkAction, &QAction::triggered, [this]() { - m_bookmarkManager->editByFileAndLine(m_bookmarkMarginActionFileName, m_bookmarkMarginActionLineNumber); + connect(&m_editBookmarkAction, &QAction::triggered, [this] { + m_bookmarkManager.editByFileAndLine(m_marginActionFileName, m_marginActionLineNumber); }); - connect(m_bookmarkManager, &BookmarkManager::updateActions, this, &BookmarksPlugin::updateActions); - updateActions(false, m_bookmarkManager->state()); - addAutoReleasedObject(new BookmarkViewFactory(m_bookmarkManager)); + connect(&m_bookmarkManager, &BookmarkManager::updateActions, + this, &BookmarksPluginRunData::updateActions); + updateActions(false, m_bookmarkManager.state()); - m_bookmarkMarginAction = new QAction(this); - m_bookmarkMarginAction->setText(tr("Toggle Bookmark")); - connect(m_bookmarkMarginAction, &QAction::triggered, [this]() { - m_bookmarkManager->toggleBookmark(m_bookmarkMarginActionFileName, - m_bookmarkMarginActionLineNumber); + connect(&m_bookmarkMarginAction, &QAction::triggered, [this] { + m_bookmarkManager.toggleBookmark(m_marginActionFileName, m_marginActionLineNumber); }); // EditorManager connect(EditorManager::instance(), &EditorManager::editorAboutToClose, - this, &BookmarksPlugin::editorAboutToClose); + this, &BookmarksPluginRunData::editorAboutToClose); connect(EditorManager::instance(), &EditorManager::editorOpened, - this, &BookmarksPlugin::editorOpened); - - return true; + this, &BookmarksPluginRunData::editorOpened); } -BookmarksPlugin::~BookmarksPlugin() -{ - delete m_bookmarkManager; -} - -void BookmarksPlugin::updateActions(bool enableToggle, int state) +void BookmarksPluginRunData::updateActions(bool enableToggle, int state) { const bool hasbm = state >= BookmarkManager::HasBookMarks; const bool hasdocbm = state == BookmarkManager::HasBookmarksInDocument; - m_toggleAction->setEnabled(enableToggle); - m_prevAction->setEnabled(hasbm); - m_nextAction->setEnabled(hasbm); - m_docPrevAction->setEnabled(hasdocbm); - m_docNextAction->setEnabled(hasdocbm); + m_toggleAction.setEnabled(enableToggle); + m_prevAction.setEnabled(hasbm); + m_nextAction.setEnabled(hasbm); + m_docPrevAction.setEnabled(hasdocbm); + m_docNextAction.setEnabled(hasdocbm); } -void BookmarksPlugin::editorOpened(IEditor *editor) +void BookmarksPluginRunData::editorOpened(IEditor *editor) { if (auto widget = qobject_cast(editor->widget())) { - connect(widget, &TextEditorWidget::markRequested, m_bookmarkManager, - [this, editor](TextEditorWidget *, int line, TextMarkRequestKind kind) { + connect(widget, &TextEditorWidget::markRequested, + this, [this, editor](TextEditorWidget *, int line, TextMarkRequestKind kind) { if (kind == BookmarkRequest && !editor->document()->isTemporary()) - m_bookmarkManager->toggleBookmark(editor->document()->filePath(), line); + m_bookmarkManager.toggleBookmark(editor->document()->filePath(), line); }); connect(widget, &TextEditorWidget::markContextMenuRequested, - this, &BookmarksPlugin::requestContextMenu); + this, &BookmarksPluginRunData::requestContextMenu); } } -void BookmarksPlugin::editorAboutToClose(IEditor *editor) +void BookmarksPluginRunData::editorAboutToClose(IEditor *editor) { if (auto widget = qobject_cast(editor->widget())) { disconnect(widget, &TextEditorWidget::markContextMenuRequested, - this, &BookmarksPlugin::requestContextMenu); + this, &BookmarksPluginRunData::requestContextMenu); } } -void BookmarksPlugin::requestContextMenu(TextEditorWidget *widget, +void BookmarksPluginRunData::requestContextMenu(TextEditorWidget *widget, int lineNumber, QMenu *menu) { if (widget->textDocument()->isTemporary()) return; - m_bookmarkMarginActionLineNumber = lineNumber; - m_bookmarkMarginActionFileName = widget->textDocument()->filePath(); + m_marginActionLineNumber = lineNumber; + m_marginActionFileName = widget->textDocument()->filePath(); - menu->addAction(m_bookmarkMarginAction); - if (m_bookmarkManager->hasBookmarkInPosition(m_bookmarkMarginActionFileName, m_bookmarkMarginActionLineNumber)) - menu->addAction(m_editBookmarkAction); + menu->addAction(&m_bookmarkMarginAction); + if (m_bookmarkManager.hasBookmarkInPosition(m_marginActionFileName, m_marginActionLineNumber)) + menu->addAction(&m_editBookmarkAction); } } // namespace Internal diff --git a/src/plugins/bookmarks/bookmarksplugin.h b/src/plugins/bookmarks/bookmarksplugin.h index c1a82a8def8..ee4c7d0b515 100644 --- a/src/plugins/bookmarks/bookmarksplugin.h +++ b/src/plugins/bookmarks/bookmarksplugin.h @@ -26,24 +26,11 @@ #pragma once #include -#include - -#include -#include - -QT_BEGIN_NAMESPACE -class QAction; -class QMenu; -QT_END_NAMESPACE - -namespace Core { class IEditor; } - -namespace TextEditor { class TextEditorWidget; } namespace Bookmarks { namespace Internal { -class BookmarkManager; +class BookmarksPluginRunData; class BookmarksPlugin : public ExtensionSystem::IPlugin { @@ -51,32 +38,14 @@ class BookmarksPlugin : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Bookmarks.json") public: - BookmarksPlugin(); - ~BookmarksPlugin(); - - bool initialize(const QStringList &arguments, QString *errorMessage); - void extensionsInitialized() {} + BookmarksPlugin() {} + ~BookmarksPlugin() final; private: - void updateActions(bool enableToggle, int stateMask); - void editorOpened(Core::IEditor *editor); - void editorAboutToClose(Core::IEditor *editor); + bool initialize(const QStringList &arguments, QString *errorMessage) final; + void extensionsInitialized() final {} - void requestContextMenu(TextEditor::TextEditorWidget *widget, - int lineNumber, QMenu *menu); - - BookmarkManager *m_bookmarkManager; - - QAction *m_toggleAction; - QAction *m_prevAction; - QAction *m_nextAction; - QAction *m_docPrevAction; - QAction *m_docNextAction; - QAction *m_editBookmarkAction; - - QAction *m_bookmarkMarginAction; - int m_bookmarkMarginActionLineNumber; - Utils::FileName m_bookmarkMarginActionFileName; + BookmarksPluginRunData *m_runData; }; } // namespace Internal