[Gui] Tree: implement collapse/expand system with keys

Implemented using Alt modifier + arrow keys
 * Alt+Left : collapse selected items
 * Alt+Right : expand selected items
 * Alt+Up : expand selected items with all tier-1 children collapsed
 * Alt+Down : expand selected items with all tier-1 children expanded
This commit is contained in:
0penBrain
2021-12-02 17:38:36 +01:00
committed by wmayer
parent 7aef0b3de7
commit 92a8e0e3d8
2 changed files with 46 additions and 0 deletions

View File

@@ -1372,6 +1372,38 @@ void TreeWidget::keyPressEvent(QKeyEvent *event)
event->accept();
onSearchObjects();
return;
}else if(event->modifiers() == Qt::AltModifier) {
if(event->key() == Qt::Key_Left) {
for(auto &item: selectedItems()) {
item->setExpanded(false);
}
event->accept();
return;
}else if(event->key() == Qt::Key_Right) {
for(auto &item: selectedItems()) {
item->setExpanded(true);
}
event->accept();
return;
}else if(event->key() == Qt::Key_Up) {
for(auto &item: selectedItems()) {
item->setExpanded(true);
for (auto &child: childrenOfItem(*item)) {
child->setExpanded(false);
}
}
event->accept();
return;
}else if(event->key() == Qt::Key_Down) {
for(auto &item: selectedItems()) {
item->setExpanded(true);
for (auto &child: childrenOfItem(*item)) {
child->setExpanded(true);
}
}
event->accept();
return;
}
}else if(event->key() == Qt::Key_Left) {
auto index = currentIndex();
if(index.column()==1) {
@@ -2915,6 +2947,18 @@ void TreeWidget::synchronizeSelectionCheckBoxes() {
resizeColumnToContents(0);
}
QList<QTreeWidgetItem *> TreeWidget::childrenOfItem(const QTreeWidgetItem &item) const{
QList children = QList<QTreeWidgetItem *>();
// check item is in this tree
if (!this->indexFromItem(&item).isValid()) return children;
for (int i=0 ; i < item.childCount() ; i++) {
children.append(item.child(i));
}
return children;
}
void TreeWidget::onItemChanged(QTreeWidgetItem *item, int column) {
if (column == 0 && isSelectionCheckBoxesEnabled()) {
bool selected = item->isSelected();

View File

@@ -131,6 +131,8 @@ public:
void synchronizeSelectionCheckBoxes();
QList<QTreeWidgetItem *> childrenOfItem(const QTreeWidgetItem &item) const;
protected:
/// Observer message from the Selection
void onSelectionChanged(const SelectionChanges& msg) override;