forked from osmocom/wireshark
Qt: Add InfoProxyModel
Add an identity model, which can be used to display non-selectable information at the end of any list Change-Id: Iaca436f34cb8e5b251eb0dc00ea2c0ce1bd9e0e2 Reviewed-on: https://code.wireshark.org/review/25280 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
c1301a4862
commit
ac9c89de65
|
@ -83,6 +83,7 @@ set(WIRESHARK_MODEL_HEADERS
|
||||||
models/export_objects_model.h
|
models/export_objects_model.h
|
||||||
models/fileset_entry_model.h
|
models/fileset_entry_model.h
|
||||||
models/html_text_delegate.h
|
models/html_text_delegate.h
|
||||||
|
models/info_proxy_model.h
|
||||||
models/interface_sort_filter_model.h
|
models/interface_sort_filter_model.h
|
||||||
models/interface_tree_cache_model.h
|
models/interface_tree_cache_model.h
|
||||||
models/interface_tree_model.h
|
models/interface_tree_model.h
|
||||||
|
@ -306,6 +307,7 @@ set(WIRESHARK_MODEL_SRCS
|
||||||
models/export_objects_model.cpp
|
models/export_objects_model.cpp
|
||||||
models/fileset_entry_model.cpp
|
models/fileset_entry_model.cpp
|
||||||
models/html_text_delegate.cpp
|
models/html_text_delegate.cpp
|
||||||
|
models/info_proxy_model.cpp
|
||||||
models/interface_sort_filter_model.cpp
|
models/interface_sort_filter_model.cpp
|
||||||
models/interface_tree_cache_model.cpp
|
models/interface_tree_cache_model.cpp
|
||||||
models/interface_tree_model.cpp
|
models/interface_tree_model.cpp
|
||||||
|
|
|
@ -215,6 +215,7 @@ MOC_MODELS_HDRS = \
|
||||||
models/export_objects_model.h \
|
models/export_objects_model.h \
|
||||||
models/fileset_entry_model.h \
|
models/fileset_entry_model.h \
|
||||||
models/html_text_delegate.h \
|
models/html_text_delegate.h \
|
||||||
|
models/info_proxy_model.h \
|
||||||
models/interface_sort_filter_model.h \
|
models/interface_sort_filter_model.h \
|
||||||
models/interface_tree_cache_model.h \
|
models/interface_tree_cache_model.h \
|
||||||
models/interface_tree_model.h \
|
models/interface_tree_model.h \
|
||||||
|
@ -563,6 +564,7 @@ WIRESHARK_QT_MODELS_SRCS = \
|
||||||
models/export_objects_model.cpp \
|
models/export_objects_model.cpp \
|
||||||
models/fileset_entry_model.cpp \
|
models/fileset_entry_model.cpp \
|
||||||
models/html_text_delegate.cpp \
|
models/html_text_delegate.cpp \
|
||||||
|
models/info_proxy_model.cpp \
|
||||||
models/interface_sort_filter_model.cpp \
|
models/interface_sort_filter_model.cpp \
|
||||||
models/interface_tree_cache_model.cpp \
|
models/interface_tree_cache_model.cpp \
|
||||||
models/interface_tree_model.cpp \
|
models/interface_tree_model.cpp \
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
/* info_proxy_model.cpp
|
||||||
|
* Proxy model for displaying an info text at the end of any QAbstractListModel
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <ui/qt/models/info_proxy_model.h>
|
||||||
|
|
||||||
|
#include <QFont>
|
||||||
|
|
||||||
|
InfoProxyModel::InfoProxyModel(int column, QObject * parent) : QIdentityProxyModel (parent)
|
||||||
|
{
|
||||||
|
column_ = column;
|
||||||
|
}
|
||||||
|
|
||||||
|
InfoProxyModel::~InfoProxyModel()
|
||||||
|
{
|
||||||
|
infos_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void InfoProxyModel::appendInfo(QString info)
|
||||||
|
{
|
||||||
|
if ( ! infos_.contains(info) )
|
||||||
|
infos_ << info;
|
||||||
|
}
|
||||||
|
|
||||||
|
int InfoProxyModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
return sourceModel()->rowCount(parent) + infos_.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant InfoProxyModel::data (const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if ( ! index.isValid() )
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
if ( index.row() < sourceModel()->rowCount() )
|
||||||
|
return sourceModel()->data(mapToSource(index), role);
|
||||||
|
|
||||||
|
int ifIdx = index.row() - sourceModel()->rowCount();
|
||||||
|
if ( index.column() != column_ || ifIdx < 0 || ifIdx >= infos_.count() )
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
switch ( role )
|
||||||
|
{
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
return infos_.at(ifIdx);
|
||||||
|
break;
|
||||||
|
case Qt::FontRole:
|
||||||
|
QFont font = QIdentityProxyModel::data(index, Qt::FontRole).value<QFont>();
|
||||||
|
font.setItalic(true);
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QIdentityProxyModel::data(index, role);
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::ItemFlags InfoProxyModel::flags(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if ( index.row() < sourceModel()->rowCount() )
|
||||||
|
return sourceModel()->flags(mapToSource(index));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex InfoProxyModel::index(int row, int column, const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
if ( row >= sourceModel()->rowCount() && row < rowCount() )
|
||||||
|
return createIndex(row, column);
|
||||||
|
|
||||||
|
return QIdentityProxyModel::index(row, column, parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex InfoProxyModel::mapToSource(const QModelIndex &proxyIndex) const
|
||||||
|
{
|
||||||
|
if ( ! proxyIndex.isValid() )
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
|
if ( proxyIndex.row() >= sourceModel()->rowCount() )
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
|
return QIdentityProxyModel::mapToSource(proxyIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex InfoProxyModel::mapFromSource(const QModelIndex &fromIndex) const
|
||||||
|
{
|
||||||
|
return QIdentityProxyModel::mapFromSource(fromIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Editor modelines
|
||||||
|
*
|
||||||
|
* Local Variables:
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*
|
||||||
|
* ex: set shiftwidth=4 tabstop=8 expandtab:
|
||||||
|
* :indentSize=4:tabSize=8:noTabs=true:
|
||||||
|
*/
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* info_proxy_model.h
|
||||||
|
* Proxy model for displaying an info text at the end of any QAbstractListModel
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INFO_PROXY_MODEL_H
|
||||||
|
#define INFO_PROXY_MODEL_H
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QIdentityProxyModel>
|
||||||
|
|
||||||
|
class InfoProxyModel : public QIdentityProxyModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit InfoProxyModel(int column, QObject * parent);
|
||||||
|
~InfoProxyModel();
|
||||||
|
|
||||||
|
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
virtual QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||||
|
|
||||||
|
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||||
|
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
|
||||||
|
virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
|
||||||
|
virtual QModelIndex mapFromSource(const QModelIndex &fromIndex) const;
|
||||||
|
|
||||||
|
void appendInfo(QString info);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int column_;
|
||||||
|
|
||||||
|
QStringList infos_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // INFO_PROXY_MODEL_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Editor modelines
|
||||||
|
*
|
||||||
|
* Local Variables:
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* tab-width: 8
|
||||||
|
* indent-tabs-mode: nil
|
||||||
|
* End:
|
||||||
|
*
|
||||||
|
* ex: set shiftwidth=4 tabstop=8 expandtab:
|
||||||
|
* :indentSize=4:tabSize=8:noTabs=true:
|
||||||
|
*/
|
Loading…
Reference in New Issue