diff --git a/include/buttonmanageritems.h b/include/buttonmanageritems.h index e141ada..813e004 100644 --- a/include/buttonmanageritems.h +++ b/include/buttonmanageritems.h @@ -39,6 +39,7 @@ public: T* getItemBelow() const; void reenumerateAllSiblings(); + void expandTree(); // expand this and every parent item protected: QTreeWidgetItem* mparent = nullptr; uint8_t pos = 0; diff --git a/src/buttonmanageritems.cpp b/src/buttonmanageritems.cpp index 51c1cbb..068001b 100644 --- a/src/buttonmanageritems.cpp +++ b/src/buttonmanageritems.cpp @@ -91,6 +91,14 @@ void ButtonManagerItem::reenumerateAllSiblings() { } } +void ButtonManagerItem::expandTree() { + ButtonManagerItem* c = this; + while(c) { + c->setExpanded(true); + c = c->getParent(); + } +} + void ButtonManagerItem::updateAllPosBellow(int8_t diff, uint8_t size) { for(uint8_t i = pos+1; i < size; ++i) { ButtonManagerItem* item = getSibling(i); @@ -149,11 +157,10 @@ void RowItem::moveUp() { Log::error << "row above could not be updated"; } - bool wasexpanded = isExpanded(); mparent->removeChild(this); mparent->insertChild(pos-1, this); - setExpanded(wasexpanded); + expandTree(); pos--; updatePosition(); @@ -233,11 +240,10 @@ void ButtonItem::moveUp() { Log::error << "button above could not be updated"; } - bool wasexpanded = isExpanded(); mparent->removeChild(this); mparent->insertChild(pos-1, this); - setExpanded(wasexpanded); + expandTree(); pos--; } @@ -285,7 +291,6 @@ void ButtonItem::moveToRowAbove() { // updateAllPosBellow(-1, rowconf.size()+1); // remove button from this row and attach to other - bool wasExpanded = isExpanded(); getParent()->removeChild(this); reenumerateAllSiblings(); // depends on mparent beeing set to the old row @@ -297,7 +302,7 @@ void ButtonItem::moveToRowAbove() { //update local pos pos = newrowconf.size()-1; - setExpanded(wasExpanded); + expandTree(); } void ButtonItem::moveToRowBelow() { @@ -316,7 +321,6 @@ void ButtonItem::moveToRowBelow() { rowconf.erase(rowconf.end()); // remove button from this row and attach to other - bool wasExpanded = isExpanded(); getParent()->removeChild(this); rowbelow->insertChild(0, this); @@ -329,7 +333,7 @@ void ButtonItem::moveToRowBelow() { //update new buttons below updateAllPosBellow(1, newrowconf.size()); - setExpanded(wasExpanded); + expandTree(); } @@ -400,11 +404,10 @@ void SampleItem::moveUp() { Log::error << "button above could not be updated"; } - bool wasexpanded = isExpanded(); mparent->removeChild(this); mparent->insertChild(pos-1, this); - setExpanded(wasexpanded); + expandTree(); pos--; updatePosition(); @@ -450,7 +453,6 @@ void SampleItem::moveToButtonAbove() { // updateAllPosBellow(-1, rowconf.size()+1); // remove button from this row and attach to other - bool wasExpanded = isExpanded(); getParent()->removeChild(this); reenumerateAllSiblings(); // depends on mparent beeing set to the old row @@ -462,8 +464,7 @@ void SampleItem::moveToButtonAbove() { //update local pos pos = newbuttonconf.size()-1; - setExpanded(wasExpanded); - mparent->setExpanded(true); + expandTree(); updatePosition(); } @@ -482,7 +483,6 @@ void SampleItem::moveToButtonBelow() { buttonConf.erase(buttonConf.end()); // remove button from this row and attach to other - bool wasExpanded = isExpanded(); getParent()->removeChild(this); buttonbelow->insertChild(0, this); @@ -495,6 +495,5 @@ void SampleItem::moveToButtonBelow() { //update new buttons below reenumerateAllSiblings(); - setExpanded(wasExpanded); - mparent->setExpanded(true); + expandTree(); } \ No newline at end of file