summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/qmldesignerplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/qmldesignerplugin.cpp')
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp121
1 files changed, 101 insertions, 20 deletions
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index b8685ba700..039528475a 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -3,19 +3,21 @@
#include "qmldesignerplugin.h"
#include "qmldesignertr.h"
+
#include "coreplugin/iwizardfactory.h"
#include "designmodecontext.h"
#include "designmodewidget.h"
#include "dynamiclicensecheck.h"
#include "exception.h"
#include "generateresource.h"
-#include "nodeinstanceview.h"
#include "openuiqmlfiledialog.h"
#include "qmldesignerconstants.h"
#include "qmldesignerexternaldependencies.h"
#include "qmldesignerprojectmanager.h"
#include "quick2propertyeditorview.h"
#include "settingspage.h"
+#include "shortcutmanager.h"
+#include "toolbar.h"
#include <colortool/colortool.h>
#include <connectionview.h>
@@ -38,9 +40,10 @@
#include <qmlprojectmanager/qmlproject.h>
+#include <app/app_version.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
-#include <coreplugin/coreconstants.h>
#include <coreplugin/coreplugintr.h>
#include <coreplugin/designmode.h>
#include <coreplugin/editormanager/editormanager.h>
@@ -56,8 +59,9 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmanager.h>
#include <projectexplorer/target.h>
-#include <qmljs/qmljsmodelmanagerinterface.h>
#include <sqlitelibraryinitializer.h>
+#include <qmldesignerbase/qmldesignerbaseplugin.h>
+#include <qmljs/qmljsmodelmanagerinterface.h>
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
@@ -67,6 +71,7 @@
#include <QApplication>
#include <QDebug>
#include <QProcessEnvironment>
+#include <QQuickItem>
#include <QScreen>
#include <QTimer>
#include <QWindow>
@@ -130,8 +135,7 @@ QtQuickDesignerFactory::QtQuickDesignerFactory()
class QmlDesignerPluginPrivate
{
public:
- DesignerSettings settings{Core::ICore::instance()->settings()};
- ExternalDependencies externalDependencies{settings};
+ ExternalDependencies externalDependencies{QmlDesignerBasePlugin::settings()};
QmlDesignerProjectManager projectManager{externalDependencies};
ViewManager viewManager{projectManager.asynchronousImageCache(), externalDependencies};
DocumentManager documentManager{projectManager, externalDependencies};
@@ -231,6 +235,15 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
Sqlite::LibraryInitializer::initialize();
QDir{}.mkpath(Core::ICore::cacheResourcePath().toString());
+ QAction *action = new QAction(tr("Give Feedback..."), this);
+ Core::Command *cmd = Core::ActionManager::registerAction(action, "Help.GiveFeedback");
+ Core::ActionManager::actionContainer(Core::Constants::M_HELP)
+ ->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
+
+ connect(action, &QAction::triggered, this, [this] {
+ lauchFeedbackPopup(Core::Constants::IDE_DISPLAY_NAME);
+ });
+
if (!Utils::HostOsInfo::canCreateOpenGLContext(errorMessage))
return false;
d = new QmlDesignerPluginPrivate;
@@ -247,7 +260,7 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
//TODO Move registering those types out of the property editor, since they are used also in the states editor
Quick2PropertyEditorView::registerQmlTypes();
- if (QmlDesigner::checkLicense() == QmlDesigner::FoundLicense::enterprise)
+ if (checkEnterpriseLicense())
Core::IWizardFactory::registerFeatureProvider(new EnterpriseFeatureProvider);
Exception::setWarnAboutException(!QmlDesignerPlugin::instance()
->settings()
@@ -259,6 +272,11 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
Core::AsynchronousMessageBox::warning(composedTitle, description.toString());
});
+ if (QmlProjectManager::QmlProject::isQtDesignStudio()) {
+ ToolBar::create();
+ ToolBar::createStatusBar();
+ }
+
return true;
}
@@ -274,29 +292,29 @@ bool QmlDesignerPlugin::delayedInitialize()
MetaInfo::setPluginPaths(pluginPaths);
d->viewManager.registerView(
- std::make_unique<QmlDesigner::Internal::ConnectionView>(d->externalDependencies));
+ std::make_unique<ConnectionView>(d->externalDependencies));
auto timelineView = d->viewManager.registerView(
- std::make_unique<QmlDesigner::TimelineView>(d->externalDependencies));
+ std::make_unique<TimelineView>(d->externalDependencies));
timelineView->registerActions();
d->viewManager.registerView(
- std::make_unique<QmlDesigner::CurveEditorView>(d->externalDependencies));
+ std::make_unique<CurveEditorView>(d->externalDependencies));
auto eventlistView = d->viewManager.registerView(
- std::make_unique<QmlDesigner::EventListPluginView>(d->externalDependencies));
+ std::make_unique<EventListPluginView>(d->externalDependencies));
eventlistView->registerActions();
auto transitionEditorView = d->viewManager.registerView(
- std::make_unique<QmlDesigner::TransitionEditorView>(d->externalDependencies));
+ std::make_unique<TransitionEditorView>(d->externalDependencies));
transitionEditorView->registerActions();
- d->viewManager.registerFormEditorTool(std::make_unique<QmlDesigner::SourceTool>());
- d->viewManager.registerFormEditorTool(std::make_unique<QmlDesigner::ColorTool>());
- d->viewManager.registerFormEditorTool(std::make_unique<QmlDesigner::TextTool>());
+ d->viewManager.registerFormEditorTool(std::make_unique<SourceTool>());
+ d->viewManager.registerFormEditorTool(std::make_unique<ColorTool>());
+ d->viewManager.registerFormEditorTool(std::make_unique<TextTool>());
d->viewManager.registerFormEditorTool(
- std::make_unique<QmlDesigner::PathTool>(d->externalDependencies));
- d->viewManager.registerFormEditorTool(std::make_unique<QmlDesigner::TransitionTool>());
+ std::make_unique<PathTool>(d->externalDependencies));
+ d->viewManager.registerFormEditorTool(std::make_unique<TransitionTool>());
if (QmlProjectManager::QmlProject::isQtDesignStudio()) {
d->mainWidget.initialize();
@@ -380,17 +398,18 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget)
Core::Context qmlDesignerEditor3dContext(Constants::C_QMLEDITOR3D);
Core::Context qmlDesignerNavigatorContext(Constants::C_QMLNAVIGATOR);
Core::Context qmlDesignerMaterialBrowserContext(Constants::C_QMLMATERIALBROWSER);
+ Core::Context qmlDesignerAssetsLibraryContext(Constants::C_QMLASSETSLIBRARY);
context->context().add(qmlDesignerMainContext);
context->context().add(qmlDesignerFormEditorContext);
context->context().add(qmlDesignerEditor3dContext);
context->context().add(qmlDesignerNavigatorContext);
context->context().add(qmlDesignerMaterialBrowserContext);
+ context->context().add(qmlDesignerAssetsLibraryContext);
context->context().add(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID);
d->shortCutManager.registerActions(qmlDesignerMainContext, qmlDesignerFormEditorContext,
- qmlDesignerEditor3dContext, qmlDesignerNavigatorContext,
- qmlDesignerMaterialBrowserContext);
+ qmlDesignerEditor3dContext, qmlDesignerNavigatorContext);
const QStringList mimeTypes = { QmlJSTools::Constants::QML_MIMETYPE,
QmlJSTools::Constants::QMLUI_MIMETYPE };
@@ -476,7 +495,7 @@ void QmlDesignerPlugin::hideDesigner()
d->shortCutManager.disconnectUndoActions(currentDesignDocument());
d->documentManager.setCurrentDesignDocument(nullptr);
d->shortCutManager.updateUndoActions(nullptr);
- emitUsageStatisticsTime(QmlDesigner::Constants::EVENT_DESIGNMODE_TIME, m_usageTimer.elapsed());
+ emitUsageStatisticsTime(Constants::EVENT_DESIGNMODE_TIME, m_usageTimer.elapsed());
}
void QmlDesignerPlugin::changeEditor()
@@ -576,6 +595,15 @@ void QmlDesignerPlugin::resetModelSelection()
rewriterView()->setSelectedModelNodes(QList<ModelNode>());
}
+QString QmlDesignerPlugin::identiferToDisplayString(const QString &identifier)
+{
+ for (AbstractView *view : viewManager().views())
+ if (view->widgetInfo().uniqueId.toLower() == identifier.toLower())
+ return view->widgetInfo().feedbackDisplayName;
+
+ return identifier;
+}
+
RewriterView *QmlDesignerPlugin::rewriterView() const
{
return currentDesignDocument()->rewriterView();
@@ -701,8 +729,61 @@ void QmlDesignerPlugin::trackWidgetFocusTime(QWidget *widget, const QString &ide
});
}
+void QmlDesignerPlugin::lauchFeedbackPopup(const QString &identifier)
+{
+ m_feedbackWidget = new QQuickWidget(Core::ICore::dialogParent());
+ m_feedbackWidget->setObjectName(Constants::OBJECT_NAME_TOP_FEEDBACK);
+
+ const QString qmlPath = Core::ICore::resourcePath("qmldesigner/feedback/FeedbackPopup.qml").toString();
+
+ m_feedbackWidget->setSource(QUrl::fromLocalFile(qmlPath));
+ if (!m_feedbackWidget->errors().isEmpty()) {
+ qDebug() << qmlPath;
+ qDebug() << m_feedbackWidget->errors().first().toString();
+ }
+ m_feedbackWidget->setWindowModality(Qt::ApplicationModal);
+ if (Utils::HostOsInfo::isMacHost())
+ m_feedbackWidget->setWindowFlags(Qt::Dialog);
+ else
+ m_feedbackWidget->setWindowFlags(Qt::SplashScreen);
+ m_feedbackWidget->setAttribute(Qt::WA_DeleteOnClose);
+
+ QQuickItem *root = m_feedbackWidget->rootObject();
+
+ QTC_ASSERT(root, return );
+
+ QObject *title = root->findChild<QObject *>("title");
+ QString name = QmlDesignerPlugin::tr("Enjoying the %1?").arg(identiferToDisplayString(identifier));
+ title->setProperty("text", name);
+ root->setProperty("identifier", identifier);
+
+ connect(root, SIGNAL(closeClicked()), this, SLOT(closeFeedbackPopup()));
+
+ QObject::connect(root,
+ SIGNAL(submitFeedback(QString, int)),
+ this,
+ SLOT(handleFeedback(QString, int)));
+
+ m_feedbackWidget->show();
+}
+
+void QmlDesignerPlugin::handleFeedback(const QString &feedback, int rating)
+{
+ const QString identifier = sender()->property("identifier").toString();
+ emit usageStatisticsInsertFeedback(identifier, feedback, rating);
+}
+
+void QmlDesignerPlugin::closeFeedbackPopup()
+{
+ if (m_feedbackWidget) {
+ m_feedbackWidget->deleteLater();
+ m_feedbackWidget = nullptr;
+ }
+}
+
void QmlDesignerPlugin::emitUsageStatisticsTime(const QString &identifier, int elapsed)
{
+
QTC_ASSERT(instance(), return);
emit instance()->usageStatisticsUsageTimer(normalizeIdentifier(identifier), elapsed);
}
@@ -744,7 +825,7 @@ ExternalDependenciesInterface &QmlDesignerPlugin::externalDependenciesForPluginI
DesignerSettings &QmlDesignerPlugin::settings()
{
- return instance()->d->settings;
+ return QmlDesignerBasePlugin::settings();
}
} // namespace QmlDesigner