diff options
| -rw-r--r-- | src/modinfodialog.cpp | 173 | ||||
| -rw-r--r-- | src/modinfodialog.h | 44 | ||||
| -rw-r--r-- | src/modinfodialog.ui | 5 | ||||
| -rw-r--r-- | src/modinfodialogcategories.cpp | 9 | ||||
| -rw-r--r-- | src/modinfodialogcategories.h | 3 | ||||
| -rw-r--r-- | src/modinfodialogconflicts.cpp | 11 | ||||
| -rw-r--r-- | src/modinfodialogconflicts.h | 4 | ||||
| -rw-r--r-- | src/modinfodialogesps.cpp | 4 | ||||
| -rw-r--r-- | src/modinfodialogesps.h | 2 | ||||
| -rw-r--r-- | src/modinfodialogfiletree.cpp | 4 | ||||
| -rw-r--r-- | src/modinfodialogfiletree.h | 2 | ||||
| -rw-r--r-- | src/modinfodialogimages.cpp | 5 | ||||
| -rw-r--r-- | src/modinfodialogimages.h | 2 | ||||
| -rw-r--r-- | src/modinfodialognexus.cpp | 4 | ||||
| -rw-r--r-- | src/modinfodialognexus.h | 2 | ||||
| -rw-r--r-- | src/modinfodialogtab.cpp | 29 | ||||
| -rw-r--r-- | src/modinfodialogtab.h | 11 | ||||
| -rw-r--r-- | src/modinfodialogtextfiles.cpp | 12 | ||||
| -rw-r--r-- | src/modinfodialogtextfiles.h | 6 | ||||
| -rw-r--r-- | src/resources.qrc | 210 |
20 files changed, 256 insertions, 286 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index 71e514b2..be7d4aa4 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -19,24 +19,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "modinfodialog.h" #include "ui_modinfodialog.h" -#include "mainwindow.h" - -#include "modidlineedit.h" -#include "iplugingame.h" -#include "nexusinterface.h" -#include "report.h" -#include "utility.h" -#include "messagedialog.h" -#include "bbcode.h" -#include "questionboxmemory.h" -#include "settings.h" -#include "categories.h" +#include "plugincontainer.h" #include "organizercore.h" -#include "pluginlistsortproxy.h" -#include "previewgenerator.h" -#include "previewdialog.h" -#include "texteditor.h" - #include "modinfodialogtextfiles.h" #include "modinfodialogimages.h" #include "modinfodialogesps.h" @@ -45,23 +29,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "modinfodialognexus.h" #include "modinfodialogfiletree.h" -#include <QDir> -#include <QDirIterator> -#include <QPushButton> -#include <QInputDialog> -#include <QMessageBox> -#include <QMenu> -#include <QFileSystemModel> -#include <QInputDialog> -#include <QPointer> -#include <QFileDialog> -#include <QShortcut> - -#include <Shlwapi.h> - -#include <sstream> - - using namespace MOBase; using namespace MOShared; @@ -144,13 +111,32 @@ FileRenamer::RenameResults unhideFile(FileRenamer& renamer, const QString &oldNa } -ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, bool unmanaged, OrganizerCore *organizerCore, PluginContainer *pluginContainer, QWidget *parent) - : TutorableDialog("ModInfoDialog", parent), ui(new Ui::ModInfoDialog), m_ModInfo(modInfo), - m_Origin(nullptr), m_OrganizerCore(organizerCore), m_PluginContainer(pluginContainer) +ModInfoDialog::ModInfoDialog( + ModInfo::Ptr modInfo, bool unmanaged, OrganizerCore *organizerCore, + PluginContainer *pluginContainer, QWidget *parent) : + TutorableDialog("ModInfoDialog", parent), ui(new Ui::ModInfoDialog), + m_ModInfo(modInfo), m_RootPath(modInfo->absolutePath()), + m_OrganizerCore(organizerCore), m_PluginContainer(pluginContainer), + m_Origin(nullptr) { ui->setupUi(this); + auto* ds = m_OrganizerCore->directoryStructure(); + if (ds->originExists(ToWString(m_ModInfo->name()))) { + m_Origin = &ds->getOriginByName(ToWString(m_ModInfo->name())); + if (m_Origin->isDisabled()) { + m_Origin = nullptr; + } + } + + this->setWindowTitle(m_ModInfo->name()); + this->setWindowModality(Qt::WindowModal); + + auto* sc = new QShortcut(QKeySequence::Delete, this); + connect(sc, &QShortcut::activated, [&]{ onDeleteShortcut(); }); + m_tabs = createTabs(); + bool tabSelected = false; for (std::size_t i=0; i<m_tabs.size(); ++i) { connect( @@ -163,64 +149,20 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, bool unmanaged, OrganizerCore close(); emit modOpen(name, static_cast<int>(i)); }); - } - - this->setWindowTitle(modInfo->name()); - this->setWindowModality(Qt::WindowModal); - - m_RootPath = modInfo->absolutePath(); - auto* sc = new QShortcut(QKeySequence::Delete, this); - connect(sc, &QShortcut::activated, [&]{ onDeleteShortcut(); }); + bool enabled = true; - auto* ds = m_OrganizerCore->directoryStructure(); - if (ds->originExists(ToWString(modInfo->name()))) { - m_Origin = &ds->getOriginByName(ToWString(modInfo->name())); - if (m_Origin->isDisabled()) { - m_Origin = nullptr; + if (unmanaged) { + enabled = m_tabs[i]->canHandleUnmanaged(); + } else if (m_ModInfo->hasFlag(ModInfo::FLAG_SEPARATOR)) { + enabled = m_tabs[i]->canHandleSeparators(); } - } - if (modInfo->hasFlag(ModInfo::FLAG_SEPARATOR)) - { - ui->tabWidget->setTabEnabled(TAB_TEXTFILES, false); - ui->tabWidget->setTabEnabled(TAB_INIFILES, false); - ui->tabWidget->setTabEnabled(TAB_IMAGES, false); - ui->tabWidget->setTabEnabled(TAB_ESPS, false); - ui->tabWidget->setTabEnabled(TAB_CONFLICTS, false); - ui->tabWidget->setTabEnabled(TAB_CATEGORIES, true); - ui->tabWidget->setTabEnabled(TAB_NEXUS, false); - ui->tabWidget->setTabEnabled(TAB_NOTES, true); - ui->tabWidget->setTabEnabled(TAB_FILETREE, false); - } - else if (unmanaged) - { - ui->tabWidget->setTabEnabled(TAB_TEXTFILES, false); - ui->tabWidget->setTabEnabled(TAB_INIFILES, false); - ui->tabWidget->setTabEnabled(TAB_IMAGES, false); - ui->tabWidget->setTabEnabled(TAB_ESPS, false); - ui->tabWidget->setTabEnabled(TAB_CONFLICTS, true); - ui->tabWidget->setTabEnabled(TAB_CATEGORIES, false); - ui->tabWidget->setTabEnabled(TAB_NEXUS, false); - ui->tabWidget->setTabEnabled(TAB_NOTES, false); - ui->tabWidget->setTabEnabled(TAB_FILETREE, false); - } else { - ui->tabWidget->setTabEnabled(TAB_TEXTFILES, true); - ui->tabWidget->setTabEnabled(TAB_INIFILES, true); - ui->tabWidget->setTabEnabled(TAB_IMAGES, true); - ui->tabWidget->setTabEnabled(TAB_ESPS, true); - ui->tabWidget->setTabEnabled(TAB_CONFLICTS, true); - ui->tabWidget->setTabEnabled(TAB_CATEGORIES, true); - ui->tabWidget->setTabEnabled(TAB_NEXUS, true); - ui->tabWidget->setTabEnabled(TAB_NOTES, true); - ui->tabWidget->setTabEnabled(TAB_FILETREE, true); - } + ui->tabWidget->setTabEnabled(static_cast<int>(i), enabled); - // activate first enabled tab - for (int i = 0; i < ui->tabWidget->count(); ++i) { - if (ui->tabWidget->isTabEnabled(i)) { - ui->tabWidget->setCurrentIndex(i); - break; + if (!tabSelected && enabled) { + ui->tabWidget->setCurrentIndex(static_cast<int>(i)); + tabSelected = true; } } @@ -234,23 +176,21 @@ ModInfoDialog::~ModInfoDialog() delete ui; } -template <class... Ts> -std::vector<std::unique_ptr<ModInfoDialogTab>> createTabsImpl( - OrganizerCore& oc, PluginContainer& plugin, - ModInfoDialog* self, Ui::ModInfoDialog* ui) +std::vector<std::unique_ptr<ModInfoDialogTab>> ModInfoDialog::createTabs() { std::vector<std::unique_ptr<ModInfoDialogTab>> v; - (v.push_back(std::make_unique<Ts>(oc, plugin, self, ui)), ...); - return v; -} + v.push_back(createTab<TextFilesTab>(TAB_TEXTFILES)); + v.push_back(createTab<IniFilesTab>(TAB_INIFILES)); + v.push_back(createTab<ImagesTab>(TAB_IMAGES)); + v.push_back(createTab<ESPsTab>(TAB_ESPS)); + v.push_back(createTab<ConflictsTab>(TAB_CONFLICTS)); + v.push_back(createTab<CategoriesTab>(TAB_CATEGORIES)); + v.push_back(createTab<NexusTab>(TAB_NEXUS)); + v.push_back(createTab<NotesTab>(TAB_NOTES)); + v.push_back(createTab<FileTreeTab>(TAB_FILETREE)); -std::vector<std::unique_ptr<ModInfoDialogTab>> ModInfoDialog::createTabs() -{ - return createTabsImpl< - TextFilesTab, IniFilesTab, ImagesTab, ESPsTab, - ConflictsTab, CategoriesTab, NexusTab, NotesTab, FileTreeTab>( - *m_OrganizerCore, *m_PluginContainer, this, ui); + return v; } int ModInfoDialog::exec() @@ -259,16 +199,6 @@ int ModInfoDialog::exec() return TutorableDialog::exec(); } -int ModInfoDialog::tabIndex(const QString &tabId) -{ - for (int i = 0; i < ui->tabWidget->count(); ++i) { - if (ui->tabWidget->widget(i)->objectName() == tabId) { - return i; - } - } - return -1; -} - void ModInfoDialog::saveState(Settings& s) const { s.directInterface().setValue("mod_info_tabs", saveTabState()); @@ -309,7 +239,7 @@ void ModInfoDialog::restoreTabState(const QByteArray &state) } // then actually move the tabs - QTabBar *tabBar = ui->tabWidget->findChild<QTabBar*>("qt_tabwidget_tabbar"); // magic name = bad + QTabBar *tabBar = ui->tabWidget->tabBar(); ui->tabWidget->blockSignals(true); for (int newPos = 0; newPos < count; ++newPos) { QString tabId = tabIds.at(newPos); @@ -331,6 +261,16 @@ QByteArray ModInfoDialog::saveTabState() const return result; } +int ModInfoDialog::tabIndex(const QString& tabId) +{ + for (int i = 0; i < ui->tabWidget->count(); ++i) { + if (ui->tabWidget->widget(i)->objectName() == tabId) { + return i; + } + } + return -1; +} + void ModInfoDialog::onDeleteShortcut() { for (auto& t : m_tabs) { @@ -373,9 +313,8 @@ void ModInfoDialog::on_closeButton_clicked() void ModInfoDialog::openTab(int tab) { - QTabWidget *tabWidget = findChild<QTabWidget*>("tabWidget"); - if (tabWidget->isTabEnabled(tab)) { - tabWidget->setCurrentIndex(tab); + if (ui->tabWidget->isTabEnabled(tab)) { + ui->tabWidget->setCurrentIndex(tab); } } diff --git a/src/modinfodialog.h b/src/modinfodialog.h index 49007c87..020e7958 100644 --- a/src/modinfodialog.h +++ b/src/modinfodialog.h @@ -23,38 +23,17 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "modinfo.h"
#include "tutorabledialog.h"
-#include "plugincontainer.h"
-#include "organizercore.h"
-#include "filterwidget.h"
#include "filerenamer.h"
-#include "expanderwidget.h"
-#include <QDialog>
-#include <QSignalMapper>
-#include <QSettings>
-#include <QNetworkAccessManager>
-#include <QNetworkReply>
-#include <QModelIndex>
-#include <QAction>
-#include <QPlainTextEdit>
-#include <QListWidgetItem>
-#include <QTreeWidgetItem>
-#include <QTextCodec>
-#include <set>
-#include <directoryentry.h>
+namespace Ui { class ModInfoDialog; }
+namespace MOShared { class FilesOrigin; }
-namespace Ui {
- class ModInfoDialog;
-}
-
-class QFileSystemModel;
-class QTreeView;
-class CategoryFactory;
-class TextEditor;
+class PluginContainer;
+class OrganizerCore;
+class Settings;
class ModInfoDialogTab;
-
bool canPreviewFile(PluginContainer& pluginContainer, bool isArchive, const QString& filename);
bool canOpenFile(bool isArchive, const QString& filename);
bool canHideFile(bool isArchive, const QString& filename);
@@ -131,9 +110,6 @@ signals: void modOpenPrev(int tab=-1);
void originModified(int originID);
-private:
- int tabIndex(const QString &tabId);
-
private slots:
void on_closeButton_clicked();
void on_tabWidget_currentChanged(int index);
@@ -141,8 +117,6 @@ private slots: void on_prevButton_clicked();
private:
- using FileEntry = MOShared::FileEntry;
-
Ui::ModInfoDialog *ui;
ModInfo::Ptr m_ModInfo;
std::vector<std::unique_ptr<ModInfoDialogTab>> m_tabs;
@@ -157,6 +131,14 @@ private: void restoreTabState(const QByteArray &state);
QByteArray saveTabState() const;
void onDeleteShortcut();
+ int tabIndex(const QString &tabId);
+
+ template <class T>
+ std::unique_ptr<ModInfoDialogTab> createTab(int index)
+ {
+ return std::make_unique<T>(
+ *m_OrganizerCore, *m_PluginContainer, this, ui, index);
+ }
};
#endif // MODINFODIALOG_H
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui index 65b89621..93550de3 100644 --- a/src/modinfodialog.ui +++ b/src/modinfodialog.ui @@ -20,7 +20,7 @@ <enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
- <number>8</number>
+ <number>0</number>
</property>
<property name="movable">
<bool>true</bool>
@@ -1148,6 +1148,9 @@ p, li { white-space: pre-wrap; } <property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
</widget>
</item>
</layout>
diff --git a/src/modinfodialogcategories.cpp b/src/modinfodialogcategories.cpp index 69c7c6b5..321c22b8 100644 --- a/src/modinfodialogcategories.cpp +++ b/src/modinfodialogcategories.cpp @@ -5,8 +5,8 @@ CategoriesTab::CategoriesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ModInfoDialogTab(oc, plugin, parent, ui) + QWidget* parent, Ui::ModInfoDialog* ui, int index) + : ModInfoDialogTab(oc, plugin, parent, ui, index) { connect( ui->categories, &QTreeWidget::itemChanged, @@ -35,6 +35,11 @@ void CategoriesTab::update() updatePrimary(); } +bool CategoriesTab::canHandleSeparators() const +{ + return true; +} + void CategoriesTab::add( const CategoryFactory &factory, const std::set<int>& enabledCategories, QTreeWidgetItem* root, int rootLevel) diff --git a/src/modinfodialogcategories.h b/src/modinfodialogcategories.h index 76426a5d..29d0b2a5 100644 --- a/src/modinfodialogcategories.h +++ b/src/modinfodialogcategories.h @@ -7,10 +7,11 @@ class CategoriesTab : public ModInfoDialogTab public: CategoriesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); void clear() override; void update() override; + bool canHandleSeparators() const override; private: void add( diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp index adde27ca..15bb7ed4 100644 --- a/src/modinfodialogconflicts.cpp +++ b/src/modinfodialogconflicts.cpp @@ -2,6 +2,8 @@ #include "ui_modinfodialog.h" #include "modinfodialog.h" #include "utility.h" +#include "settings.h" +#include "organizercore.h" using namespace MOShared; using namespace MOBase; @@ -131,8 +133,8 @@ public: ConflictsTab::ConflictsTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) : - ModInfoDialogTab(oc, plugin, parent, ui), + QWidget* parent, Ui::ModInfoDialog* ui, int index) : + ModInfoDialogTab(oc, plugin, parent, ui, index), m_general(this, ui, oc), m_advanced(this, ui, oc) { connect( @@ -174,6 +176,11 @@ void ConflictsTab::restoreState(const Settings& s) m_advanced.restoreState(s); } +bool ConflictsTab::canHandleUnmanaged() const +{ + return true; +} + void ConflictsTab::changeItemsVisibility( const QList<QTreeWidgetItem*>& items, bool visible) { diff --git a/src/modinfodialogconflicts.h b/src/modinfodialogconflicts.h index 9c011163..a05682ba 100644 --- a/src/modinfodialogconflicts.h +++ b/src/modinfodialogconflicts.h @@ -5,6 +5,7 @@ #include "expanderwidget.h" #include "filterwidget.h" #include "directoryentry.h" +#include <QTreeWidget> class ConflictsTab; class OrganizerCore; @@ -96,13 +97,14 @@ class ConflictsTab : public ModInfoDialogTab public: ConflictsTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); void update() override; void clear() override; void saveState(Settings& s) override; void restoreState(const Settings& s) override; + bool canHandleUnmanaged() const override; void openItems(const QList<QTreeWidgetItem*>& items); void previewItems(const QList<QTreeWidgetItem*>& items); diff --git a/src/modinfodialogesps.cpp b/src/modinfodialogesps.cpp index ea7eb3b0..dd4fff0b 100644 --- a/src/modinfodialogesps.cpp +++ b/src/modinfodialogesps.cpp @@ -124,8 +124,8 @@ private: ESPsTab::ESPsTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ModInfoDialogTab(oc, plugin, parent, ui) + QWidget* parent, Ui::ModInfoDialog* ui, int index) + : ModInfoDialogTab(oc, plugin, parent, ui, index) { QObject::connect( ui->activateESP, &QToolButton::clicked, [&]{ onActivate(); }); diff --git a/src/modinfodialogesps.h b/src/modinfodialogesps.h index e1a7a4f7..d8c8997e 100644 --- a/src/modinfodialogesps.h +++ b/src/modinfodialogesps.h @@ -12,7 +12,7 @@ class ESPsTab : public ModInfoDialogTab public: ESPsTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); void clear() override; bool feedFile(const QString& rootPath, const QString& fullPath) override; diff --git a/src/modinfodialogfiletree.cpp b/src/modinfodialogfiletree.cpp index b73a9e24..3e233ccc 100644 --- a/src/modinfodialogfiletree.cpp +++ b/src/modinfodialogfiletree.cpp @@ -15,8 +15,8 @@ const int max_scan_for_context_menu = 50; FileTreeTab::FileTreeTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ModInfoDialogTab(oc, plugin, parent, ui), m_fs(nullptr) + QWidget* parent, Ui::ModInfoDialog* ui, int index) + : ModInfoDialogTab(oc, plugin, parent, ui, index), m_fs(nullptr) { m_fs = new QFileSystemModel(this); m_fs->setReadOnly(false); diff --git a/src/modinfodialogfiletree.h b/src/modinfodialogfiletree.h index dcc096fe..d0c36edc 100644 --- a/src/modinfodialogfiletree.h +++ b/src/modinfodialogfiletree.h @@ -8,7 +8,7 @@ class FileTreeTab : public ModInfoDialogTab public: FileTreeTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); void clear() override; void update() override; diff --git a/src/modinfodialogimages.cpp b/src/modinfodialogimages.cpp index 1c7dcc1f..332a0984 100644 --- a/src/modinfodialogimages.cpp +++ b/src/modinfodialogimages.cpp @@ -82,8 +82,9 @@ void ScalableImage::mousePressEvent(QMouseEvent* e) ImagesTab::ImagesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ModInfoDialogTab(oc, plugin, parent, ui), m_image(new ScalableImage) + QWidget* parent, Ui::ModInfoDialog* ui, int index) : + ModInfoDialogTab(oc, plugin, parent, ui, index), + m_image(new ScalableImage) { ui->imagesImage->layout()->addWidget(m_image); ui->imagesThumbnails->setLayout(new QVBoxLayout); diff --git a/src/modinfodialogimages.h b/src/modinfodialogimages.h index 7853935a..689b8e93 100644 --- a/src/modinfodialogimages.h +++ b/src/modinfodialogimages.h @@ -36,7 +36,7 @@ class ImagesTab : public ModInfoDialogTab public: ImagesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); void clear() override; bool feedFile(const QString& rootPath, const QString& fullPath) override; diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp index 55b55439..9d51871c 100644 --- a/src/modinfodialognexus.cpp +++ b/src/modinfodialognexus.cpp @@ -9,8 +9,8 @@ NexusTab::NexusTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ModInfoDialogTab(oc, plugin, parent, ui), m_requestStarted(false) + QWidget* parent, Ui::ModInfoDialog* ui, int index) + : ModInfoDialogTab(oc, plugin, parent, ui, index), m_requestStarted(false) { ui->modID->setValidator(new QIntValidator(ui->modID)); ui->endorse->setVisible(core().settings().endorsementIntegration()); diff --git a/src/modinfodialognexus.h b/src/modinfodialognexus.h index 2e328c6d..7fe10171 100644 --- a/src/modinfodialognexus.h +++ b/src/modinfodialognexus.h @@ -35,7 +35,7 @@ class NexusTab : public ModInfoDialogTab public: NexusTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); ~NexusTab(); diff --git a/src/modinfodialogtab.cpp b/src/modinfodialogtab.cpp index 58745220..1b7fadbb 100644 --- a/src/modinfodialogtab.cpp +++ b/src/modinfodialogtab.cpp @@ -5,8 +5,9 @@ ModInfoDialogTab::ModInfoDialogTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ui(ui), m_core(oc), m_plugin(plugin), m_parent(parent), m_origin(nullptr) + QWidget* parent, Ui::ModInfoDialog* ui, int index) : + ui(ui), m_core(oc), m_plugin(plugin), m_parent(parent), + m_origin(nullptr), m_tabIndex(index) { } @@ -42,6 +43,16 @@ bool ModInfoDialogTab::deleteRequested() return false; } +bool ModInfoDialogTab::canHandleSeparators() const +{ + return false; +} + +bool ModInfoDialogTab::canHandleUnmanaged() const +{ + return false; +} + void ModInfoDialogTab::setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin) { m_mod = mod; @@ -58,6 +69,11 @@ MOShared::FilesOrigin* ModInfoDialogTab::origin() const return m_origin; } +int ModInfoDialogTab::tabIndex() const +{ + return m_tabIndex; +} + OrganizerCore& ModInfoDialogTab::core() { return m_core; @@ -88,8 +104,8 @@ void ModInfoDialogTab::emitModOpen(QString name) NotesTab::NotesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) - : ModInfoDialogTab(oc, plugin, parent, ui) + QWidget* parent, Ui::ModInfoDialog* ui, int index) + : ModInfoDialogTab(oc, plugin, parent, ui, index) { connect(ui->commentsEdit, &QLineEdit::editingFinished, [&]{ onComments(); }); connect(ui->notesEdit, &HTMLEditor::editingFinished, [&]{ onNotes(); }); @@ -107,6 +123,11 @@ void NotesTab::update() ui->notesEdit->setText(mod()->notes()); } +bool NotesTab::canHandleSeparators() const +{ + return true; +} + void NotesTab::onComments() { mod()->setComments(ui->commentsEdit->text()); diff --git a/src/modinfodialogtab.h b/src/modinfodialogtab.h index 0dc977a8..1f99344f 100644 --- a/src/modinfodialogtab.h +++ b/src/modinfodialogtab.h @@ -29,11 +29,16 @@ public: virtual void restoreState(const Settings& s); virtual bool deleteRequested(); + virtual bool canHandleSeparators() const; + virtual bool canHandleUnmanaged() const; + virtual void setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin); ModInfo::Ptr mod() const; MOShared::FilesOrigin* origin() const; + int tabIndex() const; + signals: void originModified(int originID); void modOpen(QString name); @@ -43,7 +48,7 @@ protected: ModInfoDialogTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); OrganizerCore& core(); PluginContainer& plugin(); @@ -59,6 +64,7 @@ private: QWidget* m_parent; ModInfo::Ptr m_mod; MOShared::FilesOrigin* m_origin; + int m_tabIndex; }; @@ -67,10 +73,11 @@ class NotesTab : public ModInfoDialogTab public: NotesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); void clear() override; void update() override; + bool canHandleSeparators() const override; private: void onComments(); diff --git a/src/modinfodialogtextfiles.cpp b/src/modinfodialogtextfiles.cpp index f48557b0..fddfafba 100644 --- a/src/modinfodialogtextfiles.cpp +++ b/src/modinfodialogtextfiles.cpp @@ -23,9 +23,9 @@ private: GenericFilesTab::GenericFilesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui, + QWidget* parent, Ui::ModInfoDialog* ui, int index, QListWidget* list, QSplitter* sp, TextEditor* e) - : ModInfoDialogTab(oc, plugin, parent, ui), m_list(list), m_editor(e) + : ModInfoDialogTab(oc, plugin, parent, ui, index), m_list(list), m_editor(e) { m_editor->setupToolbar(); @@ -113,9 +113,9 @@ void GenericFilesTab::select(FileListItem* item) TextFilesTab::TextFilesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) + QWidget* parent, Ui::ModInfoDialog* ui, int index) : GenericFilesTab( - oc, plugin, parent, ui, + oc, plugin, parent, ui, index, ui->textFileList, ui->tabTextSplitter, ui->textFileEditor) { } @@ -137,9 +137,9 @@ bool TextFilesTab::wantsFile(const QString& rootPath, const QString& fullPath) c IniFilesTab::IniFilesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui) + QWidget* parent, Ui::ModInfoDialog* ui, int index) : GenericFilesTab( - oc, plugin, parent, ui, + oc, plugin, parent, ui, index, ui->iniFileList, ui->tabIniSplitter, ui->iniFileEditor) { } diff --git a/src/modinfodialogtextfiles.h b/src/modinfodialogtextfiles.h index 0dc5ec89..f618a6bb 100644 --- a/src/modinfodialogtextfiles.h +++ b/src/modinfodialogtextfiles.h @@ -23,7 +23,7 @@ protected: GenericFilesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui, + QWidget* parent, Ui::ModInfoDialog* ui, int index, QListWidget* list, QSplitter* splitter, TextEditor* editor); virtual bool wantsFile(const QString& rootPath, const QString& fullPath) const = 0; @@ -39,7 +39,7 @@ class TextFilesTab : public GenericFilesTab public: TextFilesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); protected: bool wantsFile(const QString& rootPath, const QString& fullPath) const override; @@ -51,7 +51,7 @@ class IniFilesTab : public GenericFilesTab public: IniFilesTab( OrganizerCore& oc, PluginContainer& plugin, - QWidget* parent, Ui::ModInfoDialog* ui); + QWidget* parent, Ui::ModInfoDialog* ui, int index); protected: bool wantsFile(const QString& rootPath, const QString& fullPath) const override; diff --git a/src/resources.qrc b/src/resources.qrc index 8645b27e..6fc33293 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -1,106 +1,108 @@ <RCC> - <qresource prefix="/MO/gui"> - <file>resources/help-browser.png</file> - <file alias="add">resources/list-add.png</file> - <file>resources/document-save.png</file> - <file>resources/edit-find-replace.png</file> - <file>resources/go-jump.png</file> - <file>resources/media-playback-start.png</file> - <file alias="remove">resources/process-stop.png</file> - <file>resources/system-search.png</file> - <file>resources/view-refresh.png</file> - <file alias="installer">resources/system-installer.png</file> - <file>resources/start-here.png</file> - <file>resources/list-remove.png</file> - <file>resources/document-properties.png</file> - <file>resources/go-up.png</file> - <file>resources/go-down.png</file> - <file>resources/switch-instance-icon.png</file> - <file alias="profiles">resources/contact-new.png</file> - <file alias="settings">resources/preferences-system.png</file> - <file alias="executable">resources/application-x-executable.png</file> - <file alias="information">resources/dialog-information.png</file> - <file alias="locked">resources/emblem-readonly.png</file> - <file alias="next">resources/go-next_16.png</file> - <file alias="previous">resources/go-previous_16.png</file> - <file alias="refresh">resources/view-refresh_16.png</file> - <file alias="update_available">resources/software-update-available.png</file> - <file alias="important">resources/emblem-important.png</file> - <file alias="check">resources/check.png</file> - <file alias="warning">resources/dialog-warning.png</file> - <file alias="emblem_backup">resources/symbol-backup.png</file> - <file alias="icon_tools">resources/applications-accessories.png</file> - <file alias="problem">resources/emblem-unreadable.png</file> - <file>resources/internet-web-browser.png</file> - <file alias="update">resources/system-software-update.png</file> - <file alias="help">resources/help-browser_32.png</file> - <file>resources/system-installer.png</file> - <file alias="icon_executable">resources/function.png</file> - <file alias="plugins">resources/plugins.png</file> - <file alias="edit_clear">resources/edit-clear.png</file> - <file alias="link">resources/dynamic-blue-right.png</file> - <file alias="icon_favorite">resources/icon-favorite.png</file> - <file alias="emblem_notendorsed">resources/emblem-favorite.png</file> - <file alias="emblem_conflict">resources/error.png</file> - <file alias="run">resources/show.png</file> - <file alias="splash">splash.png</file> - <file alias="emblem_conflict_mixed">resources/conflict-mixed.png</file> - <file alias="emblem_conflict_overwrite">resources/conflict-overwrite.png</file> - <file alias="emblem_conflict_overwritten">resources/conflict-overwritten.png</file> - <file alias="emblem_conflict_redundant">resources/conflict-redundant.png</file> - <file alias="archive_loose_conflict_mixed">resources/conflict-mixed-blue.png</file> - <file alias="archive_loose_conflict_overwrite">resources/conflict-overwrite-blue.png</file> - <file alias="archive_loose_conflict_overwritten">resources/red-archive-conflict-loser.png</file> - <file alias="emblem_notes">resources/accessories-text-editor.png</file> - <file alias="version_date">resources/x-office-calendar.png</file> - <file alias="warning_16">resources/dialog-warning_16.png</file> - <file alias="attachment">resources/mail-attachment.png</file> - <file alias="backup">resources/document-save_32.png</file> - <file alias="restore">resources/edit-undo.png</file> - <file alias="sort">resources/arrange-boxes.png</file> - <file alias="badge_1">resources/badge_1.png</file> - <file alias="badge_2">resources/badge_2.png</file> - <file alias="badge_3">resources/badge_3.png</file> - <file alias="badge_4">resources/badge_4.png</file> - <file alias="badge_5">resources/badge_5.png</file> - <file alias="badge_6">resources/badge_6.png</file> - <file alias="badge_7">resources/badge_7.png</file> - <file alias="badge_8">resources/badge_8.png</file> - <file alias="badge_9">resources/badge_9.png</file> - <file alias="badge_more">resources/badge_more.png</file> - <file alias="active">resources/status_active.png</file> - <file alias="awaiting">resources/status_awaiting.png</file> - <file alias="inactive">resources/status_inactive.png</file> - <file alias="app_icon">resources/mo_icon.png</file> - <file alias="package">resources/package.png</file> - <file alias="instance_switch">resources/switch-instance-icon.png</file> - <file alias="open_folder">resources/open-Folder-Icon.png</file> - <file alias="multiply_red">resources/multiply-red.png</file> - <file alias="archive_conflict_loser">resources/archive-conflict-loser.png</file> - <file alias="archive_conflict_mixed">resources/archive-conflict-mixed.png</file> - <file alias="archive_conflict_neutral">resources/archive-conflict-neutral.png</file> - <file alias="archive_conflict_winner">resources/archive-conflict-winner.png</file> - <file alias="alternate_game_alt">resources/game-warning.png</file> - <file alias="alternate_game">resources/game-warning-16.png</file> - <file alias="tracked">resources/tracked.png</file> - </qresource> - <qresource prefix="/MO/gui/content"> - <file alias="plugin">resources/contents/jigsaw-piece.png</file> - <file alias="skyproc">resources/contents/hand-of-god.png</file> - <file alias="texture">resources/contents/empty-chessboard.png</file> - <file alias="music">resources/contents/double-quaver.png</file> - <file alias="sound">resources/contents/lyre.png</file> - <file alias="interface">resources/contents/usable.png</file> - <file alias="skse">resources/contents/checkbox-tree.png</file> - <file alias="script">resources/contents/tinker.png</file> - <file alias="mesh">resources/contents/breastplate.png</file> - <file alias="string">resources/contents/conversation.png</file> - <file alias="bsa">resources/contents/locked-chest.png</file> - <file alias="menu">resources/contents/config.png</file> - <file alias="inifile">resources/contents/feather-and-scroll.png</file> - <file alias="modgroup">resources/contents/xedit.png</file> - </qresource> - <qresource prefix="/qt/etc"> - <file>qt.conf</file> - </qresource> + <qresource prefix="/MO/gui"> + <file alias="save">resources/save.svg</file> + <file alias="word-wrap">resources/word-wrap.svg</file> + <file>resources/help-browser.png</file> + <file alias="add">resources/list-add.png</file> + <file>resources/document-save.png</file> + <file>resources/edit-find-replace.png</file> + <file>resources/go-jump.png</file> + <file>resources/media-playback-start.png</file> + <file alias="remove">resources/process-stop.png</file> + <file>resources/system-search.png</file> + <file>resources/view-refresh.png</file> + <file alias="installer">resources/system-installer.png</file> + <file>resources/start-here.png</file> + <file>resources/list-remove.png</file> + <file>resources/document-properties.png</file> + <file>resources/go-up.png</file> + <file>resources/go-down.png</file> + <file>resources/switch-instance-icon.png</file> + <file alias="profiles">resources/contact-new.png</file> + <file alias="settings">resources/preferences-system.png</file> + <file alias="executable">resources/application-x-executable.png</file> + <file alias="information">resources/dialog-information.png</file> + <file alias="locked">resources/emblem-readonly.png</file> + <file alias="next">resources/go-next_16.png</file> + <file alias="previous">resources/go-previous_16.png</file> + <file alias="refresh">resources/view-refresh_16.png</file> + <file alias="update_available">resources/software-update-available.png</file> + <file alias="important">resources/emblem-important.png</file> + <file alias="check">resources/check.png</file> + <file alias="warning">resources/dialog-warning.png</file> + <file alias="emblem_backup">resources/symbol-backup.png</file> + <file alias="icon_tools">resources/applications-accessories.png</file> + <file alias="problem">resources/emblem-unreadable.png</file> + <file>resources/internet-web-browser.png</file> + <file alias="update">resources/system-software-update.png</file> + <file alias="help">resources/help-browser_32.png</file> + <file>resources/system-installer.png</file> + <file alias="icon_executable">resources/function.png</file> + <file alias="plugins">resources/plugins.png</file> + <file alias="edit_clear">resources/edit-clear.png</file> + <file alias="link">resources/dynamic-blue-right.png</file> + <file alias="icon_favorite">resources/icon-favorite.png</file> + <file alias="emblem_notendorsed">resources/emblem-favorite.png</file> + <file alias="emblem_conflict">resources/error.png</file> + <file alias="run">resources/show.png</file> + <file alias="splash">splash.png</file> + <file alias="emblem_conflict_mixed">resources/conflict-mixed.png</file> + <file alias="emblem_conflict_overwrite">resources/conflict-overwrite.png</file> + <file alias="emblem_conflict_overwritten">resources/conflict-overwritten.png</file> + <file alias="emblem_conflict_redundant">resources/conflict-redundant.png</file> + <file alias="archive_loose_conflict_mixed">resources/conflict-mixed-blue.png</file> + <file alias="archive_loose_conflict_overwrite">resources/conflict-overwrite-blue.png</file> + <file alias="archive_loose_conflict_overwritten">resources/red-archive-conflict-loser.png</file> + <file alias="emblem_notes">resources/accessories-text-editor.png</file> + <file alias="version_date">resources/x-office-calendar.png</file> + <file alias="warning_16">resources/dialog-warning_16.png</file> + <file alias="attachment">resources/mail-attachment.png</file> + <file alias="backup">resources/document-save_32.png</file> + <file alias="restore">resources/edit-undo.png</file> + <file alias="sort">resources/arrange-boxes.png</file> + <file alias="badge_1">resources/badge_1.png</file> + <file alias="badge_2">resources/badge_2.png</file> + <file alias="badge_3">resources/badge_3.png</file> + <file alias="badge_4">resources/badge_4.png</file> + <file alias="badge_5">resources/badge_5.png</file> + <file alias="badge_6">resources/badge_6.png</file> + <file alias="badge_7">resources/badge_7.png</file> + <file alias="badge_8">resources/badge_8.png</file> + <file alias="badge_9">resources/badge_9.png</file> + <file alias="badge_more">resources/badge_more.png</file> + <file alias="active">resources/status_active.png</file> + <file alias="awaiting">resources/status_awaiting.png</file> + <file alias="inactive">resources/status_inactive.png</file> + <file alias="app_icon">resources/mo_icon.png</file> + <file alias="package">resources/package.png</file> + <file alias="instance_switch">resources/switch-instance-icon.png</file> + <file alias="open_folder">resources/open-Folder-Icon.png</file> + <file alias="multiply_red">resources/multiply-red.png</file> + <file alias="archive_conflict_loser">resources/archive-conflict-loser.png</file> + <file alias="archive_conflict_mixed">resources/archive-conflict-mixed.png</file> + <file alias="archive_conflict_neutral">resources/archive-conflict-neutral.png</file> + <file alias="archive_conflict_winner">resources/archive-conflict-winner.png</file> + <file alias="alternate_game_alt">resources/game-warning.png</file> + <file alias="alternate_game">resources/game-warning-16.png</file> + <file alias="tracked">resources/tracked.png</file> + </qresource> + <qresource prefix="/MO/gui/content"> + <file alias="plugin">resources/contents/jigsaw-piece.png</file> + <file alias="skyproc">resources/contents/hand-of-god.png</file> + <file alias="texture">resources/contents/empty-chessboard.png</file> + <file alias="music">resources/contents/double-quaver.png</file> + <file alias="sound">resources/contents/lyre.png</file> + <file alias="interface">resources/contents/usable.png</file> + <file alias="skse">resources/contents/checkbox-tree.png</file> + <file alias="script">resources/contents/tinker.png</file> + <file alias="mesh">resources/contents/breastplate.png</file> + <file alias="string">resources/contents/conversation.png</file> + <file alias="bsa">resources/contents/locked-chest.png</file> + <file alias="menu">resources/contents/config.png</file> + <file alias="inifile">resources/contents/feather-and-scroll.png</file> + <file alias="modgroup">resources/contents/xedit.png</file> + </qresource> + <qresource prefix="/qt/etc"> + <file>qt.conf</file> + </qresource> </RCC> |
