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/fileset_entry_model.h
|
||||
models/html_text_delegate.h
|
||||
models/info_proxy_model.h
|
||||
models/interface_sort_filter_model.h
|
||||
models/interface_tree_cache_model.h
|
||||
models/interface_tree_model.h
|
||||
|
@ -306,6 +307,7 @@ set(WIRESHARK_MODEL_SRCS
|
|||
models/export_objects_model.cpp
|
||||
models/fileset_entry_model.cpp
|
||||
models/html_text_delegate.cpp
|
||||
models/info_proxy_model.cpp
|
||||
models/interface_sort_filter_model.cpp
|
||||
models/interface_tree_cache_model.cpp
|
||||
models/interface_tree_model.cpp
|
||||
|
|
|
@ -215,6 +215,7 @@ MOC_MODELS_HDRS = \
|
|||
models/export_objects_model.h \
|
||||
models/fileset_entry_model.h \
|
||||
models/html_text_delegate.h \
|
||||
models/info_proxy_model.h \
|
||||
models/interface_sort_filter_model.h \
|
||||
models/interface_tree_cache_model.h \
|
||||
models/interface_tree_model.h \
|
||||
|
@ -563,6 +564,7 @@ WIRESHARK_QT_MODELS_SRCS = \
|
|||
models/export_objects_model.cpp \
|
||||
models/fileset_entry_model.cpp \
|
||||
models/html_text_delegate.cpp \
|
||||
models/info_proxy_model.cpp \
|
||||
models/interface_sort_filter_model.cpp \
|
||||
models/interface_tree_cache_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