diff options
author | Jarek Kobus <[email protected]> | 2011-04-13 13:54:15 +0200 |
---|---|---|
committer | Jarek Kobus <[email protected]> | 2011-04-13 13:56:27 +0200 |
commit | d34c81a2a6dfa71f16015613b5d669b546884e0c (patch) | |
tree | 72e008219239ac42924b8cdaf3f01b1f6e48fffb /src | |
parent | 52f52ffde362d35c9c6d51c6c61ed8ef3da24934 (diff) |
Add "Add Library" action to project explorer's context menu
Reviewed-by: Tobias Hunger <[email protected]>
Task-number: QTCREATORBUG-4127
Diffstat (limited to 'src')
6 files changed, 80 insertions, 43 deletions
diff --git a/src/plugins/qt4projectmanager/profileeditor.cpp b/src/plugins/qt4projectmanager/profileeditor.cpp index 6bb066c1224..b341331ae7d 100644 --- a/src/plugins/qt4projectmanager/profileeditor.cpp +++ b/src/plugins/qt4projectmanager/profileeditor.cpp @@ -37,7 +37,6 @@ #include "qt4projectmanager.h" #include "qt4projectmanagerconstants.h" #include "profileeditorfactory.h" -#include "addlibrarywizard.h" #include <coreplugin/icore.h> #include <coreplugin/actionmanager/actionmanager.h> @@ -244,26 +243,6 @@ void ProFileEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) highlighter->rehighlight(); } -void ProFileEditorWidget::addLibrary() -{ - AddLibraryWizard wizard(file()->fileName(), this); - if (wizard.exec() != QDialog::Accepted) - return; - - TextEditor::BaseTextEditor *editable = editor(); - const int endOfDoc = editable->position(TextEditor::ITextEditor::EndOfDoc); - editable->setCursorPosition(endOfDoc); - QString snippet = wizard.snippet(); - - // add extra \n in case the last line is not empty - int line, column; - editable->convertPosition(endOfDoc, &line, &column); - if (!editable->textAt(endOfDoc - column, column).simplified().isEmpty()) - snippet = QLatin1Char('\n') + snippet; - - editable->insert(snippet); -} - void ProFileEditorWidget::jumpToFile() { openLink(findLinkAt(textCursor())); diff --git a/src/plugins/qt4projectmanager/profileeditor.h b/src/plugins/qt4projectmanager/profileeditor.h index b1c9f693b78..b746672fa61 100644 --- a/src/plugins/qt4projectmanager/profileeditor.h +++ b/src/plugins/qt4projectmanager/profileeditor.h @@ -94,7 +94,6 @@ protected: public slots: virtual void setFontSettings(const TextEditor::FontSettings &); - void addLibrary(); void jumpToFile(); private: diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index 88b108e2f7d..fa7e0c139e7 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp @@ -39,8 +39,10 @@ #include "qt4project.h" #include "qt4target.h" #include "profilereader.h" +#include "profileeditor.h" #include "qmakestep.h" #include "qt4buildconfiguration.h" +#include "addlibrarywizard.h" #include "wizards/qtquickapp.h" #include "wizards/html5app.h" @@ -285,6 +287,52 @@ ProjectExplorer::Project *Qt4Manager::contextProject() const return m_contextProject; } +void Qt4Manager::addLibrary() +{ + Core::EditorManager *em = Core::EditorManager::instance(); + ProFileEditorWidget *editor = qobject_cast<ProFileEditorWidget*>(em->currentEditor()->widget()); + if (editor) + addLibrary(editor->file()->fileName(), editor); +} + +void Qt4Manager::addLibraryContextMenu() +{ + ProjectExplorer::Node *node = ProjectExplorer::ProjectExplorerPlugin::instance()->currentNode(); + if (qobject_cast<Qt4ProFileNode *>(node)) + addLibrary(node->path()); +} + +void Qt4Manager::addLibrary(const QString &fileName, ProFileEditorWidget *editor) +{ + AddLibraryWizard wizard(fileName, Core::EditorManager::instance()); + if (wizard.exec() != QDialog::Accepted) + return; + + TextEditor::BaseTextEditor *editable = 0; + if (editor) { + editable = editor->editor(); + } else { + Core::EditorManager *em = Core::EditorManager::instance(); + editable = qobject_cast<TextEditor::BaseTextEditor *> + (em->openEditor(fileName, Qt4ProjectManager::Constants::PROFILE_EDITOR_ID)); + } + if (!editable) + return; + + const int endOfDoc = editable->position(TextEditor::ITextEditor::EndOfDoc); + editable->setCursorPosition(endOfDoc); + QString snippet = wizard.snippet(); + + // add extra \n in case the last line is not empty + int line, column; + editable->convertPosition(endOfDoc, &line, &column); + if (!editable->textAt(endOfDoc - column, column).simplified().isEmpty()) + snippet = QLatin1Char('\n') + snippet; + + editable->insert(snippet); +} + + void Qt4Manager::runQMake() { runQMake(projectExplorer()->startupProject(), 0); diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.h b/src/plugins/qt4projectmanager/qt4projectmanager.h index d77b44f321a..a3e9f97c205 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.h +++ b/src/plugins/qt4projectmanager/qt4projectmanager.h @@ -93,6 +93,8 @@ public: enum Action { BUILD, REBUILD, CLEAN }; public slots: + void addLibrary(); + void addLibraryContextMenu(); void runQMake(); void runQMakeContextMenu(); void buildSubDirContextMenu(); @@ -108,6 +110,7 @@ private slots: private: QList<Qt4Project *> m_projects; void handleSubDirContexMenu(Action action); + void addLibrary(const QString &fileName, Internal::ProFileEditorWidget *editor = 0); void runQMake(ProjectExplorer::Project *p, ProjectExplorer::Node *node); Internal::Qt4ProjectManagerPlugin *m_plugin; diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 90ab0884630..9f46028702b 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -109,6 +109,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * { Q_UNUSED(arguments) const Core::Context projectContext(Qt4ProjectManager::Constants::PROJECT_ID); + Core::Context projecTreeContext(ProjectExplorer::Constants::C_PROJECT_TREE); ProFileParser::initialize(); ProFileEvaluator::initialize(); @@ -243,35 +244,43 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * this, SLOT(buildStateChanged(ProjectExplorer::Project *))); connect(m_projectExplorer, SIGNAL(currentProjectChanged(ProjectExplorer::Project *)), this, SLOT(currentProjectChanged())); + connect(m_projectExplorer, SIGNAL(currentNodeChanged(ProjectExplorer::Node*,ProjectExplorer::Project*)), + this, SLOT(currentNodeChanged(ProjectExplorer::Node*))); Core::ActionContainer *contextMenu = am->createMenu(Qt4ProjectManager::Constants::M_CONTEXT); - Core::Command *cmd; - Core::Context proFileEditorContext = Core::Context(Qt4ProjectManager::Constants::C_PROFILEEDITOR); QAction *jumpToFile = new QAction(tr("Jump to File Under Cursor"), this); - cmd = am->registerAction(jumpToFile, + command = am->registerAction(jumpToFile, Constants::JUMP_TO_FILE, proFileEditorContext); - cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); + command->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); connect(jumpToFile, SIGNAL(triggered()), this, SLOT(jumpToFile())); - contextMenu->addAction(cmd); + contextMenu->addAction(command); - QAction *addLibrary = new QAction(tr("Add Library..."), this); - cmd = am->registerAction(addLibrary, + m_addLibraryAction = new QAction(tr("Add Library..."), this); + command = am->registerAction(m_addLibraryAction, Constants::ADDLIBRARY, proFileEditorContext); - connect(addLibrary, SIGNAL(triggered()), - this, SLOT(addLibrary())); - contextMenu->addAction(cmd); + connect(m_addLibraryAction, SIGNAL(triggered()), + m_qt4ProjectManager, SLOT(addLibrary())); + contextMenu->addAction(command); + + m_addLibraryActionContextMenu = new QAction(tr("Add Library..."), this); + command = am->registerAction(m_addLibraryActionContextMenu, + Constants::ADDLIBRARY, projecTreeContext); + connect(m_addLibraryActionContextMenu, SIGNAL(triggered()), + m_qt4ProjectManager, SLOT(addLibraryContextMenu())); + mproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_FILES); + msubproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_FILES); QAction *separator = new QAction(this); separator->setSeparator(true); contextMenu->addAction(am->registerAction(separator, Core::Id(Constants::SEPARATOR), proFileEditorContext)); - cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION); - contextMenu->addAction(cmd); + command = am->command(TextEditor::Constants::UN_COMMENT_SELECTION); + contextMenu->addAction(command); return true; } @@ -317,6 +326,11 @@ void Qt4ProjectManagerPlugin::currentProjectChanged() m_runQMakeAction->setEnabled(!m_projectExplorer->buildManager()->isBuilding(m_projectExplorer->currentProject())); } +void Qt4ProjectManagerPlugin::currentNodeChanged(ProjectExplorer::Node *node) +{ + m_addLibraryActionContextMenu->setEnabled(qobject_cast<Qt4ProFileNode *>(node)); +} + void Qt4ProjectManagerPlugin::buildStateChanged(ProjectExplorer::Project *pro) { ProjectExplorer::Project *currentProject = m_projectExplorer->currentProject(); @@ -326,14 +340,6 @@ void Qt4ProjectManagerPlugin::buildStateChanged(ProjectExplorer::Project *pro) m_runQMakeActionContextMenu->setEnabled(!m_projectExplorer->buildManager()->isBuilding(pro)); } -void Qt4ProjectManagerPlugin::addLibrary() -{ - Core::EditorManager *em = Core::EditorManager::instance(); - ProFileEditorWidget *editor = qobject_cast<ProFileEditorWidget*>(em->currentEditor()->widget()); - if (editor) - editor->addLibrary(); -} - void Qt4ProjectManagerPlugin::jumpToFile() { Core::EditorManager *em = Core::EditorManager::instance(); diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h index 40d42521425..100fb73515c 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h @@ -69,8 +69,8 @@ private slots: void updateContextMenu(ProjectExplorer::Project *project, ProjectExplorer::Node *node); void currentProjectChanged(); + void currentNodeChanged(ProjectExplorer::Node *node); void buildStateChanged(ProjectExplorer::Project *pro); - void addLibrary(); void jumpToFile(); #ifdef WITH_TESTS @@ -98,6 +98,8 @@ private: QAction *m_buildSubProjectContextMenu; QAction *m_rebuildSubProjectContextMenu; QAction *m_cleanSubProjectContextMenu; + QAction *m_addLibraryAction; + QAction *m_addLibraryActionContextMenu; GettingStartedWelcomePage *m_welcomePage; Core::Context m_projectContext; }; |