summaryrefslogtreecommitdiff
path: root/src/modlistbypriorityproxy.cpp
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-12-28 13:44:26 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-02 15:38:15 +0100
commitaddb38645b41507ae8e0536bb83d3b99d365f664 (patch)
treeb38a5f1d67dddd02c7fcebfc1dde37e427b4206c /src/modlistbypriorityproxy.cpp
parentcc5f0c8555fbbcc4b6d0dc29a42b8c7869df1859 (diff)
Clean drag&drop of URLs and mods/archives.
Diffstat (limited to 'src/modlistbypriorityproxy.cpp')
-rw-r--r--src/modlistbypriorityproxy.cpp72
1 files changed, 26 insertions, 46 deletions
diff --git a/src/modlistbypriorityproxy.cpp b/src/modlistbypriorityproxy.cpp
index 1bbf9459..dc51617e 100644
--- a/src/modlistbypriorityproxy.cpp
+++ b/src/modlistbypriorityproxy.cpp
@@ -210,64 +210,44 @@ bool ModListByPriorityProxy::canDropMimeData(const QMimeData* data, Qt::DropActi
bool ModListByPriorityProxy::dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent)
{
- // we need to fix the source row
+ // we need to fix the source model row
int sourceRow = -1;
- if (row >= 0) {
- if (!parent.isValid()) {
- if (row < m_Root.children.size()) {
- sourceRow = m_Root.children[row]->index;
- }
- else {
- sourceRow = ModInfo::getNumMods();
- }
+ if (data->hasUrls()) {
+ if (parent.isValid()) {
+ sourceRow = static_cast<TreeItem*>(parent.internalPointer())->index;
}
- else {
- auto* item = static_cast<TreeItem*>(parent.internalPointer());
- QStringList what;
- for (auto& child : item->children) {
- what.append(QString::number(child->index));
+ }
+ else {
+ if (row >= 0) {
+ if (!parent.isValid()) {
+ if (row < m_Root.children.size()) {
+ sourceRow = m_Root.children[row]->index;
+ }
+ else {
+ sourceRow = ModInfo::getNumMods();
+ }
}
+ else {
+ auto* item = static_cast<TreeItem*>(parent.internalPointer());
- if (row < item->children.size()) {
- sourceRow = item->children[row]->index;
- }
- else if (parent.row() + 1 < m_Root.children.size()) {
- sourceRow = m_Root.children[parent.row() + 1]->index;
+ if (row < item->children.size()) {
+ sourceRow = item->children[row]->index;
+ }
+ else if (parent.row() + 1 < m_Root.children.size()) {
+ sourceRow = m_Root.children[parent.row() + 1]->index;
+ }
}
}
- }
- else if (parent.isValid()) {
- // this is a drop in a separator
- sourceRow = m_Root.children[parent.row() + 1]->index;
+ else if (parent.isValid()) {
+ // this is a drop in a separator
+ sourceRow = m_Root.children[parent.row() + 1]->index;
+ }
}
return sourceModel()->dropMimeData(data, action, sourceRow, column, QModelIndex());
}
-Qt::ItemFlags ModListByPriorityProxy::flags(const QModelIndex& idx) const
-{
- if (!idx.isValid()) {
- return sourceModel()->flags(QModelIndex());
- }
-
- // we check the flags of the root node and if drop is not enabled, it
- // means we are dragging files.
- Qt::ItemFlags rootFlags = sourceModel()->flags(QModelIndex());
- if (!rootFlags.testFlag(Qt::ItemIsDropEnabled)) {
- return sourceModel()->flags(mapToSource(idx));
- }
-
- auto flags = sourceModel()->flags(mapToSource(idx));
- auto* item = static_cast<TreeItem*>(idx.internalPointer());
-
- if (item->mod->isSeparator()) {
- flags |= Qt::ItemIsDropEnabled;
- }
-
- return flags;
-}
-
QModelIndex ModListByPriorityProxy::index(int row, int column, const QModelIndex& parent) const
{
if (!hasIndex(row, column, parent)) {