summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-05-31 12:49:25 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-05-31 12:49:25 -0400
commit0f6f0c23943116ea668ab035055cb8b0e4a6574e (patch)
tree8825aa16814cc7bed4dfc3e3ac132e0e1ddd3896 /src
parent65428e89ad9c2489d40cc01e026e6a73e64df258 (diff)
replaced all the manual UserRole stuff with a few constants and helper functions
setConflictItem() is now used by all conflict lists to setup the data (filename, archive, etc.) and visuals (italic for archives) merged openDataFile() and previewDataFile() into their caller as they weren't used anywhere else previewDataFile() used to do a fromNativeSeparators() before previewing, moved that to previewFileWithAlternatives() instead brought overwrittenTree double click in line with overwriteTree, there's no difference between apply() and close() because there's only a close button
Diffstat (limited to 'src')
-rw-r--r--src/modinfodialog.cpp133
-rw-r--r--src/modinfodialog.h10
-rw-r--r--src/modinfodialog.ui9
-rw-r--r--src/organizercore.cpp2
4 files changed, 91 insertions, 63 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 1dd44112..e639dcc7 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -57,6 +57,10 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
using namespace MOBase;
using namespace MOShared;
+const auto FILENAME_USERROLE = Qt::UserRole + 1;
+const auto ORIGIN_USERROLE = Qt::UserRole + 2;
+const auto ARCHIVE_USERROLE = Qt::UserRole + 3;
+
class ModFileListWidget : public QListWidgetItem {
friend bool operator<(const ModFileListWidget &LHS, const ModFileListWidget &RHS);
@@ -744,18 +748,10 @@ QTreeWidgetItem* ModInfoDialog::createOverwriteItem(
QStringList fields(relativeName);
fields.append(altString);
- QTreeWidgetItem *item = new QTreeWidgetItem(fields);
- item->setData(0, Qt::UserRole, fileName);
- item->setData(1, Qt::UserRole, ToQString(m_Directory->getOriginByID(alternatives.back().first).getName()));
- item->setData(1, Qt::UserRole + 1, alternatives.back().first);
- item->setData(1, Qt::UserRole + 2, archive);
+ const auto origin = ToQString(m_Directory->getOriginByID(alternatives.back().first).getName());
- if (archive) {
- QFont font = item->font(0);
- font.setItalic(true);
- item->setFont(0, font);
- item->setFont(1, font);
- }
+ QTreeWidgetItem *item = new QTreeWidgetItem(fields);
+ setConflictItem(item, fileName, origin, archive);
return item;
}
@@ -764,13 +760,7 @@ QTreeWidgetItem* ModInfoDialog::createNoConflictItem(
bool archive, const QString& fileName, const QString& relativeName)
{
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList({relativeName}));
- item->setData(0, Qt::UserRole, fileName);
-
- if (archive) {
- QFont font = item->font(0);
- font.setItalic(true);
- item->setFont(0, font);
- }
+ setConflictItem(item, fileName, "", archive);
return item;
}
@@ -785,16 +775,7 @@ QTreeWidgetItem* ModInfoDialog::createOverwrittenItem(
fields.append(ToQString(realOrigin.getName()));
QTreeWidgetItem *item = new QTreeWidgetItem(fields);
- item->setData(0, Qt::UserRole, fileName);
- item->setData(1, Qt::UserRole, ToQString(realOrigin.getName()));
- item->setData(1, Qt::UserRole + 2, archive);
-
- if (archive) {
- QFont font = item->font(0);
- font.setItalic(true);
- item->setFont(0, font);
- item->setFont(1, font);
- }
+ setConflictItem(item, fileName, ToQString(realOrigin.getName()), archive);
return item;
}
@@ -908,9 +889,44 @@ QTreeWidgetItem* ModInfoDialog::createAdvancedConflictItem(
item->setText(1, relativeName);
item->setText(2, after);
+ setConflictItem(item, fileName, "", archive);
+
return item;
}
+void ModInfoDialog::setConflictItem(
+ QTreeWidgetItem* item,
+ const QString& fileName, const QString& origin, bool archive) const
+{
+ item->setData(0, FILENAME_USERROLE, fileName);
+ item->setData(0, ORIGIN_USERROLE, origin);
+ item->setData(0, ARCHIVE_USERROLE, archive);
+
+ if (archive) {
+ QFont font = item->font(0);
+ font.setItalic(true);
+
+ for (int i=0; i<item->columnCount(); ++i) {
+ item->setFont(i, font);
+ }
+ }
+}
+
+QString ModInfoDialog::conflictFileName(const QTreeWidgetItem* conflictItem) const
+{
+ return conflictItem->data(0, FILENAME_USERROLE).toString();
+}
+
+QString ModInfoDialog::conflictOrigin(const QTreeWidgetItem* conflictItem) const
+{
+ return conflictItem->data(0, ORIGIN_USERROLE).toString();
+}
+
+bool ModInfoDialog::conflictIsArchive(const QTreeWidgetItem* conflictItem) const
+{
+ return conflictItem->data(0, ARCHIVE_USERROLE).toBool();
+}
+
void ModInfoDialog::refreshFiles()
{
if (m_RootPath.length() > 0) {
@@ -1860,8 +1876,12 @@ void ModInfoDialog::on_primaryCategoryBox_currentIndexChanged(int index)
void ModInfoDialog::on_overwriteTree_itemDoubleClicked(QTreeWidgetItem *item, int)
{
- this->close();
- emit modOpen(item->data(1, Qt::UserRole).toString(), TAB_CONFLICTS);
+ const auto origin = conflictOrigin(item);
+
+ if (!origin.isEmpty()) {
+ close();
+ emit modOpen(origin, TAB_CONFLICTS);
+ }
}
FileRenamer::RenameResults ModInfoDialog::hideFile(FileRenamer& renamer, const QString &oldName)
@@ -1907,14 +1927,14 @@ void ModInfoDialog::changeConflictItemsVisibility(
qDebug().nospace() << "cannot unhide " << item->text(0) << ", skipping";
continue;
}
- result = unhideFile(renamer, item->data(0, Qt::UserRole).toString());
+ result = unhideFile(renamer, conflictFileName(item));
} else {
if (!canHideConflictItem(item)) {
qDebug().nospace() << "cannot hide " << item->text(0) << ", skipping";
continue;
}
- result = hideFile(renamer, item->data(0, Qt::UserRole).toString());
+ result = hideFile(renamer, conflictFileName(item));
}
switch (result) {
@@ -1953,7 +1973,9 @@ void ModInfoDialog::openConflictItems(const QList<QTreeWidgetItem*>& items)
// the menu item is only shown for a single selection, but handle all of them
// in case this changes
for (auto* item : items) {
- openDataFile(item);
+ if (item) {
+ m_OrganizerCore->executeFileVirtualized(this, conflictFileName(item));
+ }
}
}
@@ -1962,28 +1984,10 @@ void ModInfoDialog::previewConflictItems(const QList<QTreeWidgetItem*>& items)
// the menu item is only shown for a single selection, but handle all of them
// in case this changes
for (auto* item : items) {
- previewDataFile(item);
- }
-}
-
-void ModInfoDialog::openDataFile(const QTreeWidgetItem* item)
-{
- if (!item) {
- return;
- }
-
- QFileInfo targetInfo(item->data(0, Qt::UserRole).toString());
- m_OrganizerCore->executeFileVirtualized(this, targetInfo);
-}
-
-void ModInfoDialog::previewDataFile(const QTreeWidgetItem* item)
-{
- if (!item) {
- return;
+ if (item) {
+ m_OrganizerCore->previewFileWithAlternatives(this, conflictFileName(item));
+ }
}
-
- QString fileName = QDir::fromNativeSeparators(item->data(0, Qt::UserRole).toString());
- m_OrganizerCore->previewFileWithAlternatives(this, fileName);
}
bool ModInfoDialog::canPreviewFile(bool isArchive, const QString& filename) const
@@ -2028,19 +2032,17 @@ bool ModInfoDialog::canUnhideFile(bool isArchive, const QString& filename) const
bool ModInfoDialog::canHideConflictItem(const QTreeWidgetItem* item) const
{
- return canHideFile(item->data(1, Qt::UserRole + 2).toBool(), item->text(0));
+ return canHideFile(conflictIsArchive(item), conflictFileName(item));
}
bool ModInfoDialog::canUnhideConflictItem(const QTreeWidgetItem* item) const
{
- return canUnhideFile(item->data(1, Qt::UserRole + 2).toBool(), item->text(0));
+ return canUnhideFile(conflictIsArchive(item), conflictFileName(item));
}
bool ModInfoDialog::canPreviewConflictItem(const QTreeWidgetItem* item) const
{
- return canPreviewFile(
- item->data(1, Qt::UserRole + 2).toBool(),
- item->data(0, Qt::UserRole).toString());
+ return canPreviewFile(conflictIsArchive(item), conflictFileName(item));
}
void ModInfoDialog::on_overwriteTree_customContextMenuRequested(const QPoint &pos)
@@ -2058,6 +2060,11 @@ void ModInfoDialog::on_noConflictTree_customContextMenuRequested(const QPoint &p
showConflictMenu(pos, ui->noConflictTree);
}
+void ModInfoDialog::on_conflictsAdvancedList_customContextMenuRequested(const QPoint &pos)
+{
+ showConflictMenu(pos, ui->conflictsAdvancedList);
+}
+
void ModInfoDialog::showConflictMenu(const QPoint &pos, QTreeWidget* tree)
{
auto actions = createConflictMenuActions(tree->selectedItems());
@@ -2181,8 +2188,12 @@ ModInfoDialog::ConflictActions ModInfoDialog::createConflictMenuActions(
void ModInfoDialog::on_overwrittenTree_itemDoubleClicked(QTreeWidgetItem *item, int)
{
- emit modOpen(item->data(1, Qt::UserRole).toString(), TAB_CONFLICTS);
- this->accept();
+ const auto origin = conflictOrigin(item);
+
+ if (!origin.isEmpty()) {
+ close();
+ emit modOpen(origin, TAB_CONFLICTS);
+ }
}
void ModInfoDialog::on_refreshButton_clicked()
diff --git a/src/modinfodialog.h b/src/modinfodialog.h
index 40e45eb4..59912127 100644
--- a/src/modinfodialog.h
+++ b/src/modinfodialog.h
@@ -368,6 +368,7 @@ private slots:
void on_overwriteTree_customContextMenuRequested(const QPoint &pos);
void on_overwrittenTree_customContextMenuRequested(const QPoint &pos);
void on_noConflictTree_customContextMenuRequested(const QPoint &pos);
+ void on_conflictsAdvancedList_customContextMenuRequested(const QPoint &pos);
void on_fileTree_customContextMenuRequested(const QPoint &pos);
void on_refreshButton_clicked();
@@ -450,6 +451,13 @@ private:
const QString& fileName, const QString& relativeName,
const MOShared::FileEntry::AlternativesVector& alternatives);
+ void setConflictItem(
+ QTreeWidgetItem* item,
+ const QString& fileName, const QString& origin, bool archive) const;
+
+ QString conflictFileName(const QTreeWidgetItem* conflictItem) const;
+ QString conflictOrigin(const QTreeWidgetItem* conflictItem) const;
+ bool conflictIsArchive(const QTreeWidgetItem* conflictItem) const;
void restoreTabState(const QByteArray &state);
void restoreConflictsState(const QByteArray &state);
@@ -461,8 +469,6 @@ private:
bool canUnhideConflictItem(const QTreeWidgetItem* item) const;
bool canPreviewConflictItem(const QTreeWidgetItem* item) const;
- void openDataFile(const QTreeWidgetItem* item);
- void previewDataFile(const QTreeWidgetItem* item);
void changeFiletreeVisibility(bool visible);
void openConflictItems(const QList<QTreeWidgetItem*>& items);
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui
index 8744b216..93291c02 100644
--- a/src/modinfodialog.ui
+++ b/src/modinfodialog.ui
@@ -707,6 +707,15 @@ text-align: left;</string>
</property>
<item>
<widget class="QTreeWidget" name="conflictsAdvancedList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::CustomContextMenu</enum>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::ExtendedSelection</enum>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
<property name="columnCount">
<number>3</number>
</property>
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 3ad4e586..892162f6 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -1321,6 +1321,8 @@ bool OrganizerCore::executeFileVirtualized(
bool OrganizerCore::previewFileWithAlternatives(
QWidget* parent, QString fileName, int selectedOrigin)
{
+ fileName = QDir::fromNativeSeparators(fileName);
+
// what we have is an absolute path to the file in its actual location (for the primary origin)
// what we want is the path relative to the virtual data directory