From 375b8e613eda4be77f01eb9a079caa741b958112 Mon Sep 17 00:00:00 2001 From: Silarn Date: Thu, 9 Jan 2020 18:06:07 -0600 Subject: Implement drag & drop nexus cat assignment --- src/CMakeLists.txt | 1 + src/categoriesdialog.cpp | 2 +- src/categoriesdialog.ui | 12 +++++++- src/categoriestable.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ src/categoriestable.h | 37 +++++++++++++++++++++++ 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/categoriestable.cpp create mode 100644 src/categoriestable.h (limited to 'src') 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 @@ - + Qt::CustomContextMenu @@ -145,6 +145,9 @@ p, li { white-space: pre-wrap; } + + Drag & drop nexus categories from this pane onto the target category on the left. + Qt::LeftToRight @@ -173,6 +176,13 @@ p, li { white-space: pre-wrap; } + + + CategoriesTable + QTableWidget +
categoriestable.h
+
+
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 . +*/ + +#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 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 . +*/ + +#ifndef CATEGORIESTABLE_H +#define CATEGORIESTABLE_H + +#include +#include + +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 -- cgit v1.3.1