@@ -33,8 +33,8 @@ namespace hal {
3333 setAcceptDrops (true );
3434 setContextMenuPolicy (Qt::CustomContextMenu);
3535 setItemDelegateForColumn (2 ,new WaveValueDelegate);
36- connect (this ,&QTreeView::expanded,this ,&WaveTreeView::handleExpandCollapse );
37- connect (this ,&QTreeView::collapsed,this ,&WaveTreeView::handleExpandCollapse );
36+ connect (this ,&QTreeView::expanded,this ,&WaveTreeView::handleExpand );
37+ connect (this ,&QTreeView::collapsed,this ,&WaveTreeView::handleCollapse );
3838 connect (this ,&QTreeView::customContextMenuRequested,this ,&WaveTreeView::handleContextMenuRequested);
3939 }
4040
@@ -387,9 +387,20 @@ namespace hal {
387387 QAbstractItemView::startDrag (supportedActions);
388388 }
389389
390- void WaveTreeView::handleExpandCollapse (const QModelIndex& index)
390+ void WaveTreeView::handleExpand (const QModelIndex& index)
391391 {
392- Q_UNUSED (index);
392+ const WaveTreeModel* wtm = static_cast <WaveTreeModel*>(model ());
393+ int grpId = wtm->groupId (index);
394+ if (grpId >= 0 ) mExpandedGroups .insert (grpId);
395+
396+ reorder ();
397+ }
398+
399+ void WaveTreeView::handleCollapse (const QModelIndex& index)
400+ {
401+ const WaveTreeModel* wtm = static_cast <WaveTreeModel*>(model ());
402+ int grpId = wtm->groupId (index);
403+ if (grpId >= 0 ) mExpandedGroups .remove (grpId);
393404
394405 reorder ();
395406 }
@@ -416,10 +427,13 @@ namespace hal {
416427 if (nVisible != mWaveItemHash ->visibleEntries ())
417428 {
418429 mWaveItemHash ->setVisibleEntries (nVisible);
430+
431+ /* // signal not connected
419432 if (verticalScrollBar()->isVisible())
420433 Q_EMIT numberVisibleChanged(nVisible, verticalScrollBar()->maximum(), verticalScrollBar()->value());
421434 else
422435 Q_EMIT numberVisibleChanged(nVisible, -1, -1);
436+ */
423437 }
424438 for (int i=0 ; i<nVisible; i++)
425439 {
@@ -477,6 +491,16 @@ namespace hal {
477491 auto it = notPlaced.find (wii);
478492 if (it != notPlaced.end ()) notPlaced.erase (it);
479493 }
494+
495+ // restore expanded or collapsed group state
496+ int grpId = wtm->groupId (currentIndex);
497+ if (grpId >= 0 )
498+ {
499+ if (mExpandedGroups .contains (grpId))
500+ expand (currentIndex);
501+ else
502+ collapse (currentIndex);
503+ }
480504 }
481505
482506 for (WaveItem* wi : notPlaced.values ())
0 commit comments