aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorChristian Kamm <[email protected]>2011-06-23 15:12:03 +0200
committerFawzi Mohamed <[email protected]>2011-06-23 22:22:03 +0200
commit4f05d53ef5fb22da6e0c3fe042b321a46cf6aa27 (patch)
tree5c08d4ab779591997162f7824cee1c333acb998e /src/plugins
parent1d78e594d8d3d895a1961fdf105f0af68d5fcc2e (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.cpp19
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.h3
-rw-r--r--src/plugins/qmljstools/qmljstoolsconstants.h3
-rw-r--r--src/plugins/qmljstools/qmljstoolsplugin.cpp45
-rw-r--r--src/plugins/qmljstools/qmljstoolsplugin.h6
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;
};