[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:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user