summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/divelistview.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index 93454dda0..ae502eecc 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -797,8 +797,24 @@ void DiveListView::contextMenuEvent(QContextMenuEvent *event)
dive_trip_t *trip = (dive_trip_t *)contextMenuIndex.data(DiveTripModel::TRIP_ROLE).value<void *>();
QMenu popup(this);
if (currentLayout == DiveTripModel::TREE) {
- popup.addAction(tr("Expand all"), this, SLOT(expandAll()));
- popup.addAction(tr("Collapse all"), this, SLOT(collapseAll()));
+ // verify if there is a node that`s not expanded.
+ bool needs_expand = false;
+ bool needs_collapse = false;
+ for(int i = 0, end = model()->rowCount(); i < end; i++) {
+ QModelIndex idx = model()->index(i, 0);
+ if (idx.data(DiveTripModel::DIVE_ROLE).value<void *>())
+ continue;
+
+ if (!isExpanded(idx))
+ needs_expand = true;
+ else
+ needs_collapse = true;
+ }
+ if (needs_expand)
+ popup.addAction(tr("Expand all"), this, SLOT(expandAll()));
+ if (needs_collapse)
+ popup.addAction(tr("Collapse all"), this, SLOT(collapseAll()));
+
collapseAction = popup.addAction(tr("Collapse others"), this, SLOT(collapseAll()));
if (d) {
popup.addAction(tr("Remove dive(s) from trip"), this, SLOT(removeFromTrip()));