GH-575 Add back file drop support to ModList
This commit is contained in:
parent
67b22c8105
commit
4440f68e59
@ -303,7 +303,73 @@ Qt::ItemFlags ModList::flags(const QModelIndex &index) const
|
|||||||
{
|
{
|
||||||
Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index);
|
Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index);
|
||||||
if (index.isValid())
|
if (index.isValid())
|
||||||
return Qt::ItemIsUserCheckable | defaultFlags;
|
return Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled |
|
||||||
|
defaultFlags;
|
||||||
else
|
else
|
||||||
return defaultFlags;
|
return Qt::ItemIsDropEnabled | defaultFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::DropActions ModList::supportedDropActions() const
|
||||||
|
{
|
||||||
|
// copy from outside, move from within and other mod lists
|
||||||
|
return Qt::CopyAction | Qt::MoveAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList ModList::mimeTypes() const
|
||||||
|
{
|
||||||
|
QStringList types;
|
||||||
|
types << "text/uri-list";
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ModList::dropMimeData(const QMimeData* data, Qt::DropAction action, int, int, const QModelIndex&)
|
||||||
|
{
|
||||||
|
if (action == Qt::IgnoreAction)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if the action is supported
|
||||||
|
if (!data || !(action & supportedDropActions()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// files dropped from outside?
|
||||||
|
if (data->hasUrls())
|
||||||
|
{
|
||||||
|
bool was_watching = is_watching;
|
||||||
|
bool added = false;
|
||||||
|
if (was_watching)
|
||||||
|
{
|
||||||
|
stopWatching();
|
||||||
|
}
|
||||||
|
auto urls = data->urls();
|
||||||
|
for (auto url : urls)
|
||||||
|
{
|
||||||
|
// only local files may be dropped...
|
||||||
|
if (!url.isLocalFile())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// TODO: implement not only copy, but also move
|
||||||
|
if (installMod(url.toLocalFile()))
|
||||||
|
{
|
||||||
|
added = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(added)
|
||||||
|
{
|
||||||
|
// re-sort the list
|
||||||
|
beginResetModel();
|
||||||
|
internalSort(mods);
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
if (was_watching)
|
||||||
|
{
|
||||||
|
startWatching();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -44,21 +44,22 @@ public:
|
|||||||
};
|
};
|
||||||
ModList(const QString &dir);
|
ModList(const QString &dir);
|
||||||
|
|
||||||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
virtual bool setData(const QModelIndex &index, const QVariant &value,
|
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
||||||
int role = Qt::EditRole);
|
Qt::DropActions supportedDropActions() const override;
|
||||||
|
|
||||||
/// flags, mostly to support drag&drop
|
/// flags, mostly to support drag&drop
|
||||||
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
|
virtual Qt::ItemFlags flags(const QModelIndex &index) const override;
|
||||||
|
QStringList mimeTypes() const override;
|
||||||
|
bool dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent) override;
|
||||||
|
|
||||||
virtual int rowCount(const QModelIndex &) const
|
virtual int rowCount(const QModelIndex &) const override
|
||||||
{
|
{
|
||||||
return size();
|
return size();
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
virtual QVariant headerData(int section, Qt::Orientation orientation,
|
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||||
int role = Qt::DisplayRole) const;
|
virtual int columnCount(const QModelIndex &parent) const override;
|
||||||
virtual int columnCount(const QModelIndex &parent) const;
|
|
||||||
|
|
||||||
size_t size() const
|
size_t size() const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user