From cbdc4cc3284f13477bfbf292d15c4a5742627091 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Sun, 23 Jun 2019 03:03:41 -0400
Subject: split notes tab added new HTMLEditor that triggers an
editingFinished() on focus our, used by notes tab
---
src/modinfodialog.cpp | 14 +-------------
src/modinfodialog.ui | 17 +++++++++++------
src/modinfodialognexus.cpp | 2 --
src/modinfodialogtab.cpp | 39 +++++++++++++++++++++++++++++++++++++++
src/modinfodialogtab.h | 16 ++++++++++++++++
src/texteditor.cpp | 10 ++++++++++
src/texteditor.h | 17 +++++++++++++++++
7 files changed, 94 insertions(+), 21 deletions(-)
(limited to 'src')
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 30110d14..b78f4515 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -19,7 +19,6 @@ along with Mod Organizer. If not, see .
#include "modinfodialog.h"
#include "ui_modinfodialog.h"
-#include "descriptionpage.h"
#include "mainwindow.h"
#include "modidlineedit.h"
@@ -173,9 +172,6 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo
m_RootPath = modInfo->absolutePath();
- ui->commentsEdit->setText(modInfo->comments());
- ui->notesEdit->setText(modInfo->notes());
-
//TODO: No easy way to delegate links
//ui->descriptionView->page()->acceptNavigationRequest(QWebEnginePage::DelegateAllLinks);
@@ -238,14 +234,6 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo
ModInfoDialog::~ModInfoDialog()
{
- m_ModInfo->setComments(ui->commentsEdit->text());
-
- //Avoid saving html stump if notes field is empty.
- if (ui->notesEdit->toPlainText().isEmpty())
- m_ModInfo->setNotes(ui->notesEdit->toPlainText());
- else
- m_ModInfo->setNotes(ui->notesEdit->toHtml());
-
delete ui;
}
@@ -264,7 +252,7 @@ std::vector> ModInfoDialog::createTabs()
{
return createTabsImpl<
TextFilesTab, IniFilesTab, ImagesTab, ESPsTab,
- ConflictsTab, CategoriesTab, NexusTab>(
+ ConflictsTab, CategoriesTab, NexusTab, NotesTab>(
*m_OrganizerCore, *m_PluginContainer, this, ui);
}
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui
index 29a7400f..360ecc79 100644
--- a/src/modinfodialog.ui
+++ b/src/modinfodialog.ui
@@ -6,7 +6,7 @@
0
0
- 790
+ 735
534
@@ -20,7 +20,7 @@
QTabWidget::Rounded
- 0
+ 7
true
@@ -180,7 +180,7 @@
0
0
- 741
+ 686
436
@@ -859,7 +859,7 @@ text-align: left;
-
+
:/MO/gui/resources/internet-web-browser.png:/MO/gui/resources/internet-web-browser.png
@@ -963,7 +963,7 @@ p, li { white-space: pre-wrap; }
-
-
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -1071,7 +1071,7 @@ p, li { white-space: pre-wrap; }
-
-
+
Enter notes about the mod here. These can be viewed in the mod list by hovering over the notes column or the flags column.
@@ -1210,6 +1210,11 @@ p, li { white-space: pre-wrap; }
QPlainTextEdit
+
+ HTMLEditor
+ QTextEdit
+
+
diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp
index 753d43de..55b55439 100644
--- a/src/modinfodialognexus.cpp
+++ b/src/modinfodialognexus.cpp
@@ -248,8 +248,6 @@ void NexusTab::refreshData(int modID)
} else {
onModChanged();
}
-
- //MessageDialog::showMessage(tr("Info requested, please wait"), this);
}
bool NexusTab::tryRefreshData(int modID)
diff --git a/src/modinfodialogtab.cpp b/src/modinfodialogtab.cpp
index ae0de5e8..b59f4dcc 100644
--- a/src/modinfodialogtab.cpp
+++ b/src/modinfodialogtab.cpp
@@ -1,4 +1,6 @@
#include "modinfodialogtab.h"
+#include "ui_modinfodialog.h"
+#include "texteditor.h"
ModInfoDialogTab::ModInfoDialogTab(
OrganizerCore& oc, PluginContainer& plugin,
@@ -73,3 +75,40 @@ void ModInfoDialogTab::emitModOpen(QString name)
{
emit modOpen(name);
}
+
+
+NotesTab::NotesTab(
+ OrganizerCore& oc, PluginContainer& plugin,
+ QWidget* parent, Ui::ModInfoDialog* ui)
+ : ModInfoDialogTab(oc, plugin, parent, ui)
+{
+ connect(ui->commentsEdit, &QLineEdit::editingFinished, [&]{ onComments(); });
+ connect(ui->notesEdit, &HTMLEditor::editingFinished, [&]{ onNotes(); });
+}
+
+void NotesTab::clear()
+{
+ ui->commentsEdit->clear();
+ ui->notesEdit->clear();
+}
+
+void NotesTab::update()
+{
+ ui->commentsEdit->setText(mod()->comments());
+ ui->notesEdit->setText(mod()->notes());
+}
+
+void NotesTab::onComments()
+{
+ mod()->setComments(ui->commentsEdit->text());
+}
+
+void NotesTab::onNotes()
+{
+ // Avoid saving html stub if notes field is empty.
+ if (ui->notesEdit->toPlainText().isEmpty()) {
+ mod()->setNotes({});
+ } else {
+ mod()->setNotes(ui->notesEdit->toHtml());
+ }
+}
diff --git a/src/modinfodialogtab.h b/src/modinfodialogtab.h
index dd851b31..60371954 100644
--- a/src/modinfodialogtab.h
+++ b/src/modinfodialogtab.h
@@ -60,4 +60,20 @@ private:
MOShared::FilesOrigin* m_origin;
};
+
+class NotesTab : public ModInfoDialogTab
+{
+public:
+ NotesTab(
+ OrganizerCore& oc, PluginContainer& plugin,
+ QWidget* parent, Ui::ModInfoDialog* ui);
+
+ void clear() override;
+ void update() override;
+
+private:
+ void onComments();
+ void onNotes();
+};
+
#endif // MODINFODIALOGTAB_H
diff --git a/src/texteditor.cpp b/src/texteditor.cpp
index 99490b22..6c1685da 100644
--- a/src/texteditor.cpp
+++ b/src/texteditor.cpp
@@ -458,3 +458,13 @@ void TextEditorToolbar::onWordWrap(bool b)
{
m_wordWrap->setChecked(b);
}
+
+
+void HTMLEditor::focusOutEvent(QFocusEvent* e)
+{
+ if (document() && document()->isModified()) {
+ emit editingFinished();
+ }
+
+ QTextEdit::focusInEvent(e);
+}
diff --git a/src/texteditor.h b/src/texteditor.h
index eef5ca52..f3031731 100644
--- a/src/texteditor.h
+++ b/src/texteditor.h
@@ -137,4 +137,21 @@ private:
void paintLineNumbers(QPaintEvent* e, const QColor& textColor);
};
+
+class HTMLEditor : public QTextEdit
+{
+ Q_OBJECT;
+
+public:
+ using QTextEdit::QTextEdit;
+
+signals:
+ void editingFinished();
+
+protected:
+ void focusOutEvent(QFocusEvent* e);
+
+private:
+};
+
#endif // MO_TEXTEDITOR_H
--
cgit v1.3.1