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: