slight drag and drop fix
parent
2661bcaa61
commit
b8a75b5725
|
@ -58,7 +58,7 @@ DirectoryNode* DirectoryNode::placeData(QString name, QVariant data) {
|
|||
return new DirectoryNode(subdir(dir), file, data);
|
||||
}
|
||||
|
||||
QString DirectoryNode::path() {
|
||||
QString DirectoryNode::path() const {
|
||||
if (!parent || parent->name.isEmpty()) return name;
|
||||
if (name.isEmpty()) return parent->path(); // nameless nodes don't add an extra /
|
||||
return parent->path() % "/" % name;
|
||||
|
@ -82,6 +82,15 @@ DirectoryNode* DirectoryNode::findData(const QVariant& d) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
bool DirectoryNode::isChildOf(Xybrid::UI::DirectoryNode* dn) const {
|
||||
auto c = this;
|
||||
forever {
|
||||
if (!c) return false;
|
||||
if (c == dn) return true;
|
||||
c = c->parent;
|
||||
}
|
||||
}
|
||||
|
||||
void DirectoryNode::treeExec(const std::function<void(Xybrid::UI::DirectoryNode*)>& f) {
|
||||
for (auto c : children) c->treeExec(f);
|
||||
f(this);
|
||||
|
|
|
@ -31,9 +31,10 @@ namespace Xybrid::UI {
|
|||
DirectoryNode* placeData(QString name, QVariant data);
|
||||
//void placeData(const QVector<std::pair<QString, QVariant>>&);
|
||||
|
||||
QString path();
|
||||
QString path() const;
|
||||
DirectoryNode* findPath(QString path);
|
||||
DirectoryNode* findData(const QVariant&);
|
||||
bool isChildOf(DirectoryNode*) const;
|
||||
|
||||
void treeExec(const std::function<void(DirectoryNode*)>&);
|
||||
|
||||
|
|
|
@ -257,6 +257,8 @@ bool SampleListModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
|
|||
if (!tdn) tdn = root.get();
|
||||
if (!tdn->isDirectory()) tdn = tdn->parent;
|
||||
|
||||
if (tdn->isChildOf(dn)) return false; // can't drag a folder within itself
|
||||
|
||||
dn->parent = tdn;
|
||||
propagateSampleNames(dn);
|
||||
refresh();
|
||||
|
|
Loading…
Reference in New Issue