summaryrefslogtreecommitdiff
path: root/src/modinfodialogtab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinfodialogtab.cpp')
-rw-r--r--src/modinfodialogtab.cpp209
1 files changed, 209 insertions, 0 deletions
diff --git a/src/modinfodialogtab.cpp b/src/modinfodialogtab.cpp
new file mode 100644
index 00000000..9748d059
--- /dev/null
+++ b/src/modinfodialogtab.cpp
@@ -0,0 +1,209 @@
+#include "modinfodialogtab.h"
+#include "ui_modinfodialog.h"
+#include "texteditor.h"
+#include "directoryentry.h"
+#include "modinfo.h"
+
+ModInfoDialogTab::ModInfoDialogTab(ModInfoDialogTabContext cx) :
+ ui(cx.ui), m_core(cx.core), m_plugin(cx.plugin), m_parent(cx.parent),
+ m_origin(cx.origin), m_tabID(cx.id), m_hasData(false), m_firstActivation(true)
+{
+}
+
+void ModInfoDialogTab::activated()
+{
+ if (m_firstActivation) {
+ m_firstActivation = false;
+ firstActivation();
+ }
+}
+
+void ModInfoDialogTab::resetFirstActivation()
+{
+ m_firstActivation = true;
+}
+
+void ModInfoDialogTab::update()
+{
+ // no-op
+}
+
+bool ModInfoDialogTab::feedFile(const QString&, const QString&)
+{
+ // no-op
+ return false;
+}
+
+void ModInfoDialogTab::firstActivation()
+{
+ // no-op
+}
+
+bool ModInfoDialogTab::canClose()
+{
+ return true;
+}
+
+void ModInfoDialogTab::saveState(Settings&)
+{
+ // no-op
+}
+
+void ModInfoDialogTab::restoreState(const Settings& s)
+{
+ // no-op
+}
+
+bool ModInfoDialogTab::deleteRequested()
+{
+ // no-op
+ return false;
+}
+
+bool ModInfoDialogTab::canHandleSeparators() const
+{
+ return false;
+}
+
+bool ModInfoDialogTab::canHandleUnmanaged() const
+{
+ return false;
+}
+
+bool ModInfoDialogTab::usesOriginFiles() const
+{
+ return true;
+}
+
+void ModInfoDialogTab::setMod(ModInfoPtr mod, MOShared::FilesOrigin* origin)
+{
+ m_mod = mod;
+ m_origin = origin;
+}
+
+ModInfo& ModInfoDialogTab::mod() const
+{
+ Q_ASSERT(m_mod);
+ return *m_mod;
+}
+
+ModInfoPtr ModInfoDialogTab::modPtr() const
+{
+ Q_ASSERT(m_mod);
+ return m_mod;
+}
+
+MOShared::FilesOrigin* ModInfoDialogTab::origin() const
+{
+ return m_origin;
+}
+
+ModInfoTabIDs ModInfoDialogTab::tabID() const
+{
+ return m_tabID;
+}
+
+bool ModInfoDialogTab::hasData() const
+{
+ return m_hasData;
+}
+
+OrganizerCore& ModInfoDialogTab::core()
+{
+ return m_core;
+}
+
+PluginContainer& ModInfoDialogTab::plugin()
+{
+ return m_plugin;
+}
+
+QWidget* ModInfoDialogTab::parentWidget()
+{
+ return m_parent;
+}
+
+void ModInfoDialogTab::emitOriginModified()
+{
+ if (m_origin) {
+ emit originModified(m_origin->getID());
+ }
+}
+
+void ModInfoDialogTab::emitModOpen(QString name)
+{
+ emit modOpen(name);
+}
+
+void ModInfoDialogTab::setHasData(bool b)
+{
+ if (m_hasData != b) {
+ m_hasData = b;
+ emit hasDataChanged();
+ }
+}
+
+void ModInfoDialogTab::setFocus()
+{
+ emit wantsFocus();
+}
+
+
+NotesTab::NotesTab(ModInfoDialogTabContext cx)
+ : ModInfoDialogTab(std::move(cx))
+{
+ connect(ui->comments, &QLineEdit::editingFinished, [&]{ onComments(); });
+ connect(ui->notes, &HTMLEditor::editingFinished, [&]{ onNotes(); });
+}
+
+void NotesTab::clear()
+{
+ ui->comments->clear();
+ ui->notes->clear();
+ setHasData(false);
+}
+
+void NotesTab::update()
+{
+ const auto comments = mod().comments();
+ const auto notes = mod().notes();
+
+ ui->comments->setText(comments);
+ ui->notes->setText(notes);
+ checkHasData();
+}
+
+bool NotesTab::canHandleSeparators() const
+{
+ return true;
+}
+
+void NotesTab::onComments()
+{
+ mod().setComments(ui->comments->text());
+ checkHasData();
+}
+
+void NotesTab::onNotes()
+{
+ // Avoid saving html stub if notes field is empty.
+ if (ui->notes->toPlainText().isEmpty()) {
+ mod().setNotes({});
+ } else {
+ mod().setNotes(ui->notes->toHtml());
+ }
+
+ checkHasData();
+}
+
+bool NotesTab::usesOriginFiles() const
+{
+ return false;
+}
+
+void NotesTab::checkHasData()
+{
+ setHasData(
+ !ui->comments->text().isEmpty() ||
+ !ui->notes->toPlainText().isEmpty());
+}