swaymux/tree/SwayTreeModel.cpp

47 lines
1.2 KiB
C++

//
// Created by grimmauld on 03.03.24.
//
#include "SwayTreeModel.h"
QModelIndex SwayTreeModel::findFocusedWindowIndex() const {
std::vector<int> indices;
for (const auto *head = getRoot()->findFocused(); head != nullptr; head = head->parentItem()) {
indices.insert(indices.cbegin(), head->row());
}
// weirdness, idk... ask QT
QModelIndex idx = this->index(indices.size() < 2 ? 0 : indices[1], 0);
for (int i = 2; i < indices.size(); ++i) {
idx = this->index(indices[i], 0, idx);
}
return idx;
}
std::set<SwayTreeNode *> SwayTreeModel::getSelectedNodes(const QTreeView *treeView) const {
std::set<SwayTreeNode *> selectedNodes;
auto indexes = treeView->selectionModel()->selectedIndexes();
for (auto i: indexes) {
if (rootItem == nullptr)
return selectedNodes;
std::vector<int> indices;
for (auto j = i; j.isValid(); j = j.parent()) {
indices.insert(indices.cbegin(), j.row());
}
auto *head = rootItem;
for (auto j: indices) {
head = head->child(j);
if (head == nullptr)
goto hell;
}
selectedNodes.insert(head);
hell:;
}
return selectedNodes;
}