diff options
author | Christian Kamm <[email protected]> | 2011-06-23 15:12:03 +0200 |
---|---|---|
committer | Fawzi Mohamed <[email protected]> | 2011-06-23 22:22:03 +0200 |
commit | 4f05d53ef5fb22da6e0c3fe042b321a46cf6aa27 (patch) | |
tree | 5c08d4ab779591997162f7824cee1c333acb998e /src/plugins | |
parent | 1d78e594d8d3d895a1961fdf105f0af68d5fcc2e (diff) |
QmlJS: Add 'reset code model' action.
Having to restart Creator should be a thing of the past.
Task-number: QTCREATORBUG-4813
Change-Id: Ide242ee299b5d34aecba4823032e27741dde4a86
Reviewed-on: http://codereview.qt.nokia.com/668
Reviewed-by: Qt Sanity Bot <[email protected]>
Reviewed-by: Fawzi Mohamed <[email protected]>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/qmljstools/qmljsmodelmanager.cpp | 19 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljsmodelmanager.h | 3 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljstoolsconstants.h | 3 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljstoolsplugin.cpp | 45 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljstoolsplugin.h | 6 |
5 files changed, 75 insertions, 1 deletions
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 411dc0364a0..dceea2f3025 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -695,3 +695,22 @@ ModelManagerInterface::BuiltinPackagesHash ModelManager::builtinPackages() const { return Interpreter::CppQmlTypesLoader::builtinPackages; } + +void ModelManager::resetCodeModel() +{ + QStringList documents; + + { + QMutexLocker locker(&m_mutex); + + // find all documents currently in the code model + foreach (Document::Ptr doc, _snapshot) + documents.append(doc->fileName()); + + // reset the snapshot + _snapshot = Snapshot(); + } + + // start a reparse thread + updateSourceFiles(documents, false); +} diff --git a/src/plugins/qmljstools/qmljsmodelmanager.h b/src/plugins/qmljstools/qmljsmodelmanager.h index e3bd1b80fbb..57373cf98ff 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.h +++ b/src/plugins/qmljstools/qmljsmodelmanager.h @@ -88,6 +88,9 @@ public: virtual CppQmlTypeHash cppQmlTypes() const; virtual BuiltinPackagesHash builtinPackages() const; +public slots: + virtual void resetCodeModel(); + Q_SIGNALS: void projectPathChanged(const QString &projectPath); diff --git a/src/plugins/qmljstools/qmljstoolsconstants.h b/src/plugins/qmljstools/qmljstoolsconstants.h index 73cfa2c5c47..69fa2fcc81c 100644 --- a/src/plugins/qmljstools/qmljstoolsconstants.h +++ b/src/plugins/qmljstools/qmljstoolsconstants.h @@ -49,6 +49,9 @@ const char * const QML_JS_CODE_STYLE_SETTINGS_NAME = QT_TRANSLATE_NOOP("QmlJSToo const char * const QML_JS_SETTINGS_ID = "QmlJS"; const char * const QML_JS_SETTINGS_NAME = QT_TRANSLATE_NOOP("QmlJSTools", "Qt Quick"); +const char * const M_TOOLS_QMLJS = "QmlJSTools.Tools.Menu"; +const char * const RESET_CODEMODEL = "QmlJSTools.ResetCodeModel"; + } // namespace Constants } // namespace QmlJSEditor diff --git a/src/plugins/qmljstools/qmljstoolsplugin.cpp b/src/plugins/qmljstools/qmljstoolsplugin.cpp index 5e750bc8e8e..2506bb859ab 100644 --- a/src/plugins/qmljstools/qmljstoolsplugin.cpp +++ b/src/plugins/qmljstools/qmljstoolsplugin.cpp @@ -46,12 +46,18 @@ #include <extensionsystem/pluginmanager.h> #include <coreplugin/icore.h> +#include <coreplugin/coreconstants.h> +#include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/actionmanager/actioncontainer.h> +#include <coreplugin/actionmanager/command.h> +#include <coreplugin/progressmanager/progressmanager.h> #include <QtCore/QtPlugin> #include <QtCore/QFileInfo> #include <QtCore/QDir> #include <QtCore/QDebug> #include <QtCore/QSettings> +#include <QtGui/QMenu> using namespace QmlJSTools::Internal; @@ -75,7 +81,9 @@ bool QmlJSToolsPlugin::initialize(const QStringList &arguments, QString *error) { Q_UNUSED(arguments) Q_UNUSED(error) -// Core::ICore *core = Core::ICore::instance(); + + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); m_settings = new QmlJSToolsSettings(this); // force registration of qmljstools settings @@ -97,6 +105,27 @@ bool QmlJSToolsPlugin::initialize(const QStringList &arguments, QString *error) TextEditor::CodeStylePreferencesManager::instance()->registerFactory( new QmlJSTools::QmlJSCodeStylePreferencesFactory()); + // Menus + Core::ActionContainer *mtools = am->actionContainer(Core::Constants::M_TOOLS); + Core::ActionContainer *mqmljstools = am->createMenu(Constants::M_TOOLS_QMLJS); + QMenu *menu = mqmljstools->menu(); + menu->setTitle(tr("&QML/JS")); + menu->setEnabled(true); + mtools->addMenu(mqmljstools); + + // Update context in global context + m_resetCodeModelAction = new QAction(tr("Reset Code Model"), this); + Core::Context globalContext(Core::Constants::C_GLOBAL); + Core::Command *cmd = am->registerAction(m_resetCodeModelAction, Core::Id(Constants::RESET_CODEMODEL), globalContext); + connect(m_resetCodeModelAction, SIGNAL(triggered()), m_modelManager, SLOT(resetCodeModel())); + mqmljstools->addAction(cmd); + + // watch task progress + connect(core->progressManager(), SIGNAL(taskStarted(QString)), + this, SLOT(onTaskStarted(QString))); + connect(core->progressManager(), SIGNAL(allTasksFinished(QString)), + this, SLOT(onAllTasksFinished(QString))); + return true; } @@ -110,4 +139,18 @@ ExtensionSystem::IPlugin::ShutdownFlag QmlJSToolsPlugin::aboutToShutdown() return SynchronousShutdown; } +void QmlJSToolsPlugin::onTaskStarted(const QString &type) +{ + if (type == QmlJSTools::Constants::TASK_INDEX) { + m_resetCodeModelAction->setEnabled(false); + } +} + +void QmlJSToolsPlugin::onAllTasksFinished(const QString &type) +{ + if (type == QmlJSTools::Constants::TASK_INDEX) { + m_resetCodeModelAction->setEnabled(true); + } +} + Q_EXPORT_PLUGIN(QmlJSToolsPlugin) diff --git a/src/plugins/qmljstools/qmljstoolsplugin.h b/src/plugins/qmljstools/qmljstoolsplugin.h index c6019e42f43..824ec83f5c7 100644 --- a/src/plugins/qmljstools/qmljstoolsplugin.h +++ b/src/plugins/qmljstools/qmljstoolsplugin.h @@ -42,6 +42,7 @@ QT_BEGIN_NAMESPACE class QFileInfo; class QDir; +class QAction; QT_END_NAMESPACE namespace QmlJSTools { @@ -67,9 +68,14 @@ public: ShutdownFlag aboutToShutdown(); ModelManager *modelManager() { return m_modelManager; } +private slots: + void onTaskStarted(const QString &type); + void onAllTasksFinished(const QString &type); + private: ModelManager *m_modelManager; QmlJSToolsSettings *m_settings; + QAction *m_resetCodeModelAction; static QmlJSToolsPlugin *m_instance; }; |