slight drag and drop fix

portability/boost
zetaPRIME 2019-06-25 16:21:01 -04:00
parent 2661bcaa61
commit b8a75b5725
3 changed files with 14 additions and 2 deletions

View File

@ -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);

View File

@ -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*)>&);

View File

@ -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();