forked from osmocom/wireshark
Qt: ColumnPreferences hide hidden columns
Filter on columns being hidden or not Change-Id: Ia41f556e00c7de471b1d4b7f9b5f6c099b7ddcf3 Reviewed-on: https://code.wireshark.org/review/34820 Petri-Dish: Roland Knall <rknall@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall <rknall@gmail.com>
This commit is contained in:
parent
6820e3515a
commit
366bd1947d
|
@ -38,6 +38,8 @@ ColumnPreferencesFrame::ColumnPreferencesFrame(QWidget *parent) :
|
|||
ui->setupUi(this);
|
||||
|
||||
model_ = new ColumnListModel();
|
||||
proxyModel_ = new ColumnProxyModel();
|
||||
proxyModel_->setSourceModel(model_);
|
||||
|
||||
int one_em = ui->columnTreeView->fontMetrics().height();
|
||||
ui->columnTreeView->setColumnWidth(ColumnListModel::COL_FIELDS, one_em * 10);
|
||||
|
@ -55,8 +57,9 @@ ColumnPreferencesFrame::ColumnPreferencesFrame(QWidget *parent) :
|
|||
ui->newToolButton->setStockIcon("list-add");
|
||||
ui->deleteToolButton->setStockIcon("list-remove");
|
||||
|
||||
ui->columnTreeView->setModel(model_);
|
||||
ui->columnTreeView->setModel(proxyModel_);
|
||||
ui->columnTreeView->setItemDelegate(new ColumnTypeDelegate());
|
||||
ui->columnTreeView->setSortingEnabled(false);
|
||||
|
||||
ui->columnTreeView->resizeColumnToContents(ColumnListModel::COL_DISPLAYED);
|
||||
ui->columnTreeView->resizeColumnToContents(ColumnListModel::COL_TITLE);
|
||||
|
@ -87,7 +90,7 @@ void ColumnPreferencesFrame::on_deleteToolButton_clicked()
|
|||
if ( ui->columnTreeView->selectionModel()->selectedIndexes().count() > 0 )
|
||||
{
|
||||
QModelIndex selIndex = ui->columnTreeView->selectionModel()->selectedIndexes().at(0);
|
||||
model_->deleteEntry(selIndex.row());
|
||||
model_->deleteEntry(proxyModel_->mapToSource(selIndex).row());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,6 +100,11 @@ void ColumnPreferencesFrame::selectionChanged(const QItemSelection &/*selected*/
|
|||
ui->deleteToolButton->setEnabled( ui->columnTreeView->selectionModel()->selectedIndexes().count() > 0 );
|
||||
}
|
||||
|
||||
void ColumnPreferencesFrame::on_chkShowDisplayedOnly_stateChanged(int /*state*/)
|
||||
{
|
||||
proxyModel_->setShowDisplayedOnly(ui->chkShowDisplayedOnly->checkState() == Qt::Checked ? true : false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Editor modelines
|
||||
*
|
||||
|
|
|
@ -10,13 +10,10 @@
|
|||
#ifndef COLUMN_PREFERENCES_FRAME_H
|
||||
#define COLUMN_PREFERENCES_FRAME_H
|
||||
|
||||
#include <QFrame>
|
||||
#include <ui/qt/models/column_list_model.h>
|
||||
|
||||
class QComboBox;
|
||||
class QLineEdit;
|
||||
class QTreeWidgetItem;
|
||||
class ColumnListModel;
|
||||
class QItemSelection;
|
||||
#include <QFrame>
|
||||
#include <QItemSelection>
|
||||
|
||||
namespace Ui {
|
||||
class ColumnPreferencesFrame;
|
||||
|
@ -27,7 +24,7 @@ class ColumnPreferencesFrame : public QFrame
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ColumnPreferencesFrame(QWidget *parent = 0);
|
||||
explicit ColumnPreferencesFrame(QWidget *parent = Q_NULLPTR);
|
||||
~ColumnPreferencesFrame();
|
||||
|
||||
void unstash();
|
||||
|
@ -35,11 +32,13 @@ public:
|
|||
private:
|
||||
Ui::ColumnPreferencesFrame *ui;
|
||||
ColumnListModel * model_;
|
||||
ColumnProxyModel * proxyModel_;
|
||||
|
||||
private slots:
|
||||
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
|
||||
void on_newToolButton_clicked();
|
||||
void on_deleteToolButton_clicked();
|
||||
void on_chkShowDisplayedOnly_stateChanged(int);
|
||||
};
|
||||
|
||||
#endif // COLUMN_PREFERENCES_FRAME_H
|
||||
|
|
|
@ -35,10 +35,10 @@
|
|||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerShowSortIndicator" stdset="0">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -50,6 +50,13 @@
|
|||
<item>
|
||||
<widget class="StockIconToolButton" name="deleteToolButton"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="chkShowDisplayedOnly">
|
||||
<property name="text">
|
||||
<string>Show displayed columns only</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -37,6 +37,30 @@ struct ListElement
|
|||
|
||||
static QList<ListElement> store_;
|
||||
|
||||
ColumnProxyModel::ColumnProxyModel(QObject * parent) :
|
||||
QSortFilterProxyModel(parent),
|
||||
showDisplayedOnly_(false)
|
||||
{}
|
||||
|
||||
bool ColumnProxyModel::filterAcceptsRow(int source_row, const QModelIndex &/*source_parent*/) const
|
||||
{
|
||||
bool displayed = false;
|
||||
if ( sourceModel() &&
|
||||
sourceModel()->index(source_row, ColumnListModel::COL_DISPLAYED).data(ColumnListModel::DisplayedState).toBool() )
|
||||
displayed = true;
|
||||
|
||||
if ( showDisplayedOnly_ && ! displayed )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ColumnProxyModel::setShowDisplayedOnly(bool set)
|
||||
{
|
||||
showDisplayedOnly_ = set;
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
ColumnTypeDelegate::ColumnTypeDelegate(QObject * parent) :
|
||||
QStyledItemDelegate(parent)
|
||||
{}
|
||||
|
@ -268,9 +292,9 @@ QVariant ColumnListModel::data(const QModelIndex &index, int role) const
|
|||
}
|
||||
}
|
||||
else if ( role == OriginalType )
|
||||
{
|
||||
return qVariantFromValue(ne.originalType);
|
||||
}
|
||||
else if ( role == DisplayedState )
|
||||
return qVariantFromValue(ne.displayed);
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
|
|
@ -13,8 +13,23 @@
|
|||
#include <QAbstractListModel>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QStyledItemDelegate>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QMimeData>
|
||||
|
||||
class ColumnProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
public:
|
||||
ColumnProxyModel(QObject *parent = Q_NULLPTR);
|
||||
|
||||
void setShowDisplayedOnly(bool set);
|
||||
|
||||
protected:
|
||||
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
|
||||
|
||||
private:
|
||||
bool showDisplayedOnly_;
|
||||
};
|
||||
|
||||
class ColumnTypeDelegate : public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -48,7 +63,8 @@ public:
|
|||
} Columns;
|
||||
|
||||
enum {
|
||||
OriginalType = Qt::UserRole
|
||||
OriginalType = Qt::UserRole,
|
||||
DisplayedState
|
||||
} UserTypes;
|
||||
|
||||
void saveColumns();
|
||||
|
|
Loading…
Reference in New Issue