summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modinfodialog.cpp173
-rw-r--r--src/modinfodialog.h44
-rw-r--r--src/modinfodialog.ui5
-rw-r--r--src/modinfodialogcategories.cpp9
-rw-r--r--src/modinfodialogcategories.h3
-rw-r--r--src/modinfodialogconflicts.cpp11
-rw-r--r--src/modinfodialogconflicts.h4
-rw-r--r--src/modinfodialogesps.cpp4
-rw-r--r--src/modinfodialogesps.h2
-rw-r--r--src/modinfodialogfiletree.cpp4
-rw-r--r--src/modinfodialogfiletree.h2
-rw-r--r--src/modinfodialogimages.cpp5
-rw-r--r--src/modinfodialogimages.h2
-rw-r--r--src/modinfodialognexus.cpp4
-rw-r--r--src/modinfodialognexus.h2
-rw-r--r--src/modinfodialogtab.cpp29
-rw-r--r--src/modinfodialogtab.h11
-rw-r--r--src/modinfodialogtextfiles.cpp12
-rw-r--r--src/modinfodialogtextfiles.h6
-rw-r--r--src/resources.qrc210
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>