#ifndef VTABLESWIDGET_H #define VTABLESWIDGET_H #include #include #include #include #include "Cutter.h" namespace Ui { class VTablesWidget; } class VTableModel : public QAbstractItemModel { Q_OBJECT private: QList *vtables; public: enum Columns { NAME = 0, ADDRESS, COUNT }; static const int VTableDescriptionRole = Qt::UserRole; VTableModel(QList *vtables, QObject* parent = nullptr); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; void beginReload(); void endReload(); }; class VTableSortFilterProxyModel : public QSortFilterProxyModel { public: VTableSortFilterProxyModel(VTableModel* model, QObject *parent = nullptr); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; }; class VTablesWidget : public QDockWidget { Q_OBJECT public: explicit VTablesWidget(QWidget *parent = 0); ~VTablesWidget(); private slots: void refreshVTables(); void on_vTableTreeView_doubleClicked(const QModelIndex &index); private: std::unique_ptr ui; VTableModel *model; QSortFilterProxyModel *proxy; QList vtables; }; #endif // VTABLESWIDGET_H