diff options
Diffstat (limited to 'qt-ui/divelistview.cpp')
-rw-r--r-- | qt-ui/divelistview.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 92a10ca38..b2f33ffa1 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -47,8 +47,62 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec connect(showSearchBox, SIGNAL(triggered(bool)), this, SLOT(showSearchEdit())); connect(searchBox, SIGNAL(textChanged(QString)), model, SLOT(setFilterFixedString(QString))); selectedTrips.clear(); + + setupUi(); } +DiveListView::~DiveListView() +{ + QSettings settings; + settings.beginGroup("ListWidget"); + for (int i = DiveTripModel::NR; i < DiveTripModel::COLUMNS; i++){ + if (isColumnHidden(i)) + continue; + settings.setValue(QString("colwidth%1").arg(i), columnWidth(i)); + } + settings.endGroup(); +} + +void DiveListView::setupUi(){ + QSettings settings; + static bool firstRun = true; + if(firstRun) + backupExpandedRows(); + settings.beginGroup("ListWidget"); + /* if no width are set, use the calculated width for each column; + * for that to work we need to temporarily expand all rows */ + expandAll(); + for (int i = DiveTripModel::NR; i < DiveTripModel::COLUMNS; i++) { + if(isColumnHidden(i)) + continue; + QVariant width = settings.value(QString("colwidth%1").arg(i)); + if (width.isValid()) + setColumnWidth(i, width.toInt()); + else + setColumnWidth(i, 100); + } + settings.endGroup(); + if(firstRun) + restoreExpandedRows(); + else + collapseAll(); + firstRun = false; +} + +void DiveListView::backupExpandedRows(){ + expandedRows.clear(); + for(int i = 0; i < model()->rowCount(); i++){ + if(isExpanded( model()->index(i, 0) )){ + expandedRows.push_back(i); + } + } +} + +void DiveListView::restoreExpandedRows(){ + Q_FOREACH(const int &i, expandedRows){ + setExpanded( model()->index(i, 0), true ); + } +} void DiveListView::fixMessyQtModelBehaviour() { QAbstractItemModel *m = model(); @@ -132,9 +186,15 @@ void DiveListView::headerClicked(int i) sortByColumn(i, currentOrder); } else { // clear the model, repopulate with new indexes. + if(currentLayout == DiveTripModel::TREE){ + backupExpandedRows(); + } reload(newLayout, false); currentOrder = Qt::DescendingOrder; sortByColumn(i, currentOrder); + if (newLayout == DiveTripModel::TREE){ + restoreExpandedRows(); + } } // repopulate the selections. @@ -178,6 +238,7 @@ void DiveListView::reload(DiveTripModel::Layout layout, bool forceSort) setCurrentIndex(firstDiveOrTrip); } } + setupUi(); } void DiveListView::reloadHeaderActions() |