summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/categoriesdialog.cpp2
-rw-r--r--src/categoriesdialog.ui12
-rw-r--r--src/categoriestable.cpp76
-rw-r--r--src/categoriestable.h37
5 files changed, 126 insertions, 2 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 500b0ca5..125b6ebd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -44,6 +44,7 @@ mo2_add_filter(NAME src/browser GROUPS
mo2_add_filter(NAME src/core GROUPS
categories
+ categoriestable
archivefiletree
installationmanager
nexusinterface
diff --git a/src/categoriesdialog.cpp b/src/categoriesdialog.cpp
index a94484ae..3f4ea034 100644
--- a/src/categoriesdialog.cpp
+++ b/src/categoriesdialog.cpp
@@ -226,7 +226,7 @@ void CategoriesDialog::fillTable()
itemData.insert(itemData.length(), newData);
QStringList names;
for (auto cat : itemData) {
- names.append(categories->getCategoryName(categories->resolveNexusID(cat.toList()[1].toInt())));
+ names.append(cat.toList()[0].toString());
}
item->setData(Qt::UserRole, itemData);
item->setData(Qt::DisplayRole, names.join(", "));
diff --git a/src/categoriesdialog.ui b/src/categoriesdialog.ui
index d2fbf537..04aa5704 100644
--- a/src/categoriesdialog.ui
+++ b/src/categoriesdialog.ui
@@ -45,7 +45,7 @@
</widget>
</item>
<item row="0" column="3">
- <widget class="QTableWidget" name="categoriesTable">
+ <widget class="CategoriesTable" name="categoriesTable">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
@@ -145,6 +145,9 @@ p, li { white-space: pre-wrap; }
</item>
<item row="0" column="4" colspan="2">
<widget class="QGroupBox" name="groupBox">
+ <property name="toolTip">
+ <string>Drag &amp; drop nexus categories from this pane onto the target category on the left.</string>
+ </property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
@@ -173,6 +176,13 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>CategoriesTable</class>
+ <extends>QTableWidget</extends>
+ <header>categoriestable.h</header>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections>
<connection>
diff --git a/src/categoriestable.cpp b/src/categoriestable.cpp
new file mode 100644
index 00000000..ed45826f
--- /dev/null
+++ b/src/categoriestable.cpp
@@ -0,0 +1,76 @@
+/*
+Copyright (C) 2012 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "categoriestable.h"
+
+CategoriesTable::CategoriesTable(QWidget* parent) : QTableWidget(parent) {}
+
+bool CategoriesTable::dropMimeData(int row, int column, const QMimeData* data, Qt::DropAction action)
+{
+ if (row == -1)
+ return false;
+
+ if (action == Qt::IgnoreAction)
+ return true;
+
+ if (!data->hasFormat("application/x-qabstractitemmodeldatalist"))
+ return false;
+
+ QByteArray encoded = data->data("application/x-qabstractitemmodeldatalist");
+ QDataStream stream(&encoded, QIODevice::ReadOnly);
+
+ while (!stream.atEnd())
+ {
+ int curRow, curCol;
+ QMap<int, QVariant> roleDataMap;
+ stream >> curRow >> curCol >> roleDataMap;
+
+ for (auto item : findItems(roleDataMap.value(Qt::DisplayRole).toString(), Qt::MatchContains | Qt::MatchWrap))
+ {
+ if (item->column() != 3) continue;
+ QVariantList newData;
+ for (auto nexData : item->data(Qt::UserRole).toList()) {
+ if (nexData.toList()[1].toInt() != roleDataMap.value(Qt::UserRole)) {
+ newData.insert(newData.length(), nexData);
+ }
+ }
+ QStringList names;
+ for (auto nexData : newData) {
+ names.append(nexData.toList()[0].toString());
+ }
+ item->setData(Qt::DisplayRole, names.join(", "));
+ item->setData(Qt::UserRole, newData);
+ }
+
+ auto nexusItem = item(row, 3);
+ auto itemData = nexusItem->data(Qt::UserRole).toList();
+ QVariantList newData;
+ newData.append(roleDataMap.value(Qt::DisplayRole).toString());
+ newData.append(roleDataMap.value(Qt::UserRole).toInt());
+ itemData.insert(itemData.length(), newData);
+ QStringList names;
+ for (auto cat : itemData) {
+ names.append(cat.toList()[0].toString());
+ }
+ nexusItem->setData(Qt::UserRole, itemData);
+ nexusItem->setData(Qt::DisplayRole, names.join(", "));
+ }
+
+ return true;
+}
diff --git a/src/categoriestable.h b/src/categoriestable.h
new file mode 100644
index 00000000..7aaf62a9
--- /dev/null
+++ b/src/categoriestable.h
@@ -0,0 +1,37 @@
+/*
+Copyright (C) 2012 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CATEGORIESTABLE_H
+#define CATEGORIESTABLE_H
+
+#include <QTableWidget>
+#include <log.h>
+
+class CategoriesTable : public QTableWidget
+{
+ Q_OBJECT
+public:
+ CategoriesTable(QWidget *parent = 0);
+
+protected:
+ virtual bool dropMimeData(int row, int column, const QMimeData* data, Qt::DropAction action);
+
+};
+
+#endif // CATEGORIESTABLE_H