From 37ada91000dc14e0d154e1a3f4fd7f1f842ce956 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 21 May 2013 16:51:49 -0300 Subject: Added code for handling of show / hide of columns. The code also remembers to save in the config file. Signed-off-by: Tomaz Canabrava --- qt-ui/divelistview.cpp | 37 +++++++++++++++++++++++++++++++++++-- qt-ui/divelistview.h | 4 +++- 2 files changed, 38 insertions(+), 3 deletions(-) (limited to 'qt-ui') diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 5c8a93ff0..248a29634 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -10,8 +10,10 @@ #include #include #include +#include #include #include +#include DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false) @@ -20,6 +22,7 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate()); QSortFilterProxyModel *model = new QSortFilterProxyModel(this); setModel(model); + header()->setContextMenuPolicy(Qt::ActionsContextMenu); } void DiveListView::reload() @@ -37,11 +40,41 @@ void DiveListView::reload() else setCurrentIndex(firstDiveOrTrip); } + // Populate the context menu of the headers that will show + // the menu to show / hide columns. + if (!header()->actions().size()){ + QAction *visibleAction = new QAction("Visible:", header()); + header()->addAction(visibleAction); + QSettings s; + s.beginGroup("DiveListColumnState"); + for(int i = 0; i < model()->columnCount(); i++){ + QString title = QString("show %1").arg( model()->headerData( i, Qt::Horizontal).toString()); + QAction *a = new QAction(title, header()); + a->setCheckable(true); + a->setChecked( s.value(title, true).toBool()); + a->setProperty("index", i); + connect(a, SIGNAL(triggered(bool)), this, SLOT(hideColumnByIndex())); + header()->addAction(a); + } + s.endGroup(); + } } -void DiveListView::setModel(QAbstractItemModel* model) +void DiveListView::hideColumnByIndex() { - QTreeView::setModel(model); + QAction *action = qobject_cast(sender()); + if (!action) + return; + + QSettings s; + s.beginGroup("DiveListColumnState"); + s.setValue(action->text(), action->isChecked()); + s.endGroup(); + + if (action->isChecked()) + showColumn(action->property("index").toInt()); + else + hideColumn(action->property("index").toInt()); } void DiveListView::setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command) diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h index 09830b7b5..6cbcd8319 100644 --- a/qt-ui/divelistview.h +++ b/qt-ui/divelistview.h @@ -23,7 +23,6 @@ public: DiveListView(QWidget *parent = 0); void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected); void currentChanged(const QModelIndex& current, const QModelIndex& previous); - void setModel(QAbstractItemModel* model); void mousePressEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event); void keyPressEvent(QKeyEvent* event); @@ -31,6 +30,9 @@ public: void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command); void reload(); +public slots: + void hideColumnByIndex(); + Q_SIGNALS: void currentDiveChanged(int divenr); private: -- cgit v1.2.3-70-g09d2