diff --git a/src/plugins/compilerexplorer/CompilerExplorer.json.in b/src/plugins/compilerexplorer/CompilerExplorer.json.in index f8363936bd0..db289e41a8a 100644 --- a/src/plugins/compilerexplorer/CompilerExplorer.json.in +++ b/src/plugins/compilerexplorer/CompilerExplorer.json.in @@ -15,5 +15,15 @@ ], "Description" : "Integrates https://godbolt.org into Qt Creator.", "Url" : "http://www.qt.io", - ${IDE_PLUGIN_DEPENDENCIES} + ${IDE_PLUGIN_DEPENDENCIES}, + "Mimetypes" : [ + "", + "", + " ", + " ", + " Compiler Explorer file", + " ", + " ", + "" + ] } diff --git a/src/plugins/compilerexplorer/compilerexplorereditor.cpp b/src/plugins/compilerexplorer/compilerexplorereditor.cpp index c43d3a3a34d..45d19e358cc 100644 --- a/src/plugins/compilerexplorer/compilerexplorereditor.cpp +++ b/src/plugins/compilerexplorer/compilerexplorereditor.cpp @@ -84,14 +84,15 @@ public: } }; -JsonSettingsDocument::JsonSettingsDocument(CompilerExplorerSettings *ceSettings) - : m_ceSettings(ceSettings) +JsonSettingsDocument::JsonSettingsDocument() { setId(Constants::CE_EDITOR_ID); - - connect(m_ceSettings, &CompilerExplorerSettings::changed, this, [this] { emit changed(); }); + setMimeType("application/compiler-explorer"); + connect(&m_ceSettings, &CompilerExplorerSettings::changed, this, [this] { emit changed(); }); } +JsonSettingsDocument::~JsonSettingsDocument() {} + Core::IDocument::OpenResult JsonSettingsDocument::open(QString *errorString, const Utils::FilePath &filePath, const Utils::FilePath &realFilePath) @@ -120,7 +121,7 @@ Core::IDocument::OpenResult JsonSettingsDocument::open(QString *errorString, return OpenResult::CannotHandle; } - m_ceSettings->fromMap(doc.toVariant().toMap()); + m_ceSettings.fromMap(doc.toVariant().toMap()); emit settingsChanged(); return OpenResult::Success; } @@ -133,15 +134,15 @@ bool JsonSettingsDocument::saveImpl(QString *errorString, if (autoSave) { if (m_windowStateCallback) - m_ceSettings->windowState.setVolatileValue(m_windowStateCallback()); + m_ceSettings.windowState.setVolatileValue(m_windowStateCallback()); - m_ceSettings->volatileToMap(map); + m_ceSettings.volatileToMap(map); } else { if (m_windowStateCallback) - m_ceSettings->windowState.setValue(m_windowStateCallback()); + m_ceSettings.windowState.setValue(m_windowStateCallback()); - m_ceSettings->apply(); - m_ceSettings->toMap(map); + m_ceSettings.apply(); + m_ceSettings.toMap(map); } QJsonDocument doc = QJsonDocument::fromVariant(map); @@ -162,8 +163,7 @@ bool JsonSettingsDocument::saveImpl(QString *errorString, bool JsonSettingsDocument::isModified() const { - bool isDirty = m_ceSettings->isDirty(); - return isDirty; + return m_ceSettings.isDirty(); } bool JsonSettingsDocument::setContents(const QByteArray &contents) @@ -174,7 +174,7 @@ bool JsonSettingsDocument::setContents(const QByteArray &contents) QTC_ASSERT(doc.isObject(), return false); - m_ceSettings->fromMap(doc.toVariant().toMap()); + m_ceSettings.fromMap(doc.toVariant().toMap()); emit settingsChanged(); return true; @@ -455,7 +455,7 @@ void CompilerWidget::doCompile() m_compileWatcher->setFuture(f); } -EditorWidget::EditorWidget(QSharedPointer document, QWidget *parent) +EditorWidget::EditorWidget(const QSharedPointer &document, QWidget *parent) : Utils::FancyMainWindow(parent) , m_document(document) { @@ -494,7 +494,7 @@ EditorWidget::EditorWidget(QSharedPointer document, QWidge m_compilerWidgets.append(dockWidget); }; - auto addSourceEditor = [this, document, addCompiler]( + auto addSourceEditor = [this, document = document.get(), addCompiler]( const std::shared_ptr &sourceSettings) { auto sourceEditor = new SourceEditorWidget(sourceSettings); sourceEditor->setWindowTitle("Source Code #" + QString::number(m_sourceWidgets.size() + 1)); @@ -607,7 +607,7 @@ class Editor : public Core::IEditor { public: Editor() - : m_document(new JsonSettingsDocument(&m_settings)) + : m_document(new JsonSettingsDocument()) { setWidget(new EditorWidget(m_document)); } @@ -617,7 +617,6 @@ public: Core::IDocument *document() const override { return m_document.data(); } QWidget *toolBar() override { return nullptr; } - CompilerExplorerSettings m_settings; QSharedPointer m_document; }; @@ -631,6 +630,7 @@ EditorFactory::EditorFactory() { setId(Constants::CE_EDITOR_ID); setDisplayName(Tr::tr("Compiler Explorer Editor")); + setMimeTypes({"application/compiler-explorer"}); setEditorCreator([]() { return new Editor(); }); } diff --git a/src/plugins/compilerexplorer/compilerexplorereditor.h b/src/plugins/compilerexplorer/compilerexplorereditor.h index cb13bda6278..f63da2ccc45 100644 --- a/src/plugins/compilerexplorer/compilerexplorereditor.h +++ b/src/plugins/compilerexplorer/compilerexplorereditor.h @@ -35,7 +35,9 @@ class JsonSettingsDocument : public Core::IDocument { Q_OBJECT public: - JsonSettingsDocument(CompilerExplorerSettings *ceSettings); + JsonSettingsDocument(); + ~JsonSettingsDocument() override; + OpenResult open(QString *errorString, const Utils::FilePath &filePath, const Utils::FilePath &realFilePath) override; @@ -50,7 +52,7 @@ public: bool isModified() const override; bool isSaveAsAllowed() const override { return true; } - CompilerExplorerSettings *settings() { return m_ceSettings; } + CompilerExplorerSettings *settings() { return &m_ceSettings; } void setWindowStateCallback(std::function callback) { @@ -61,7 +63,7 @@ signals: void settingsChanged(); private: - CompilerExplorerSettings *m_ceSettings; + mutable CompilerExplorerSettings m_ceSettings; std::function m_windowStateCallback; }; @@ -118,7 +120,7 @@ class EditorWidget : public Utils::FancyMainWindow { Q_OBJECT public: - EditorWidget(QSharedPointer document = nullptr, QWidget *parent = nullptr); + EditorWidget(const QSharedPointer &document, QWidget *parent = nullptr); ~EditorWidget() override; signals: