diff --git a/src/widgets/ColorThemeListView.cpp b/src/widgets/ColorThemeListView.cpp index 05cc4f2f..a5c93354 100644 --- a/src/widgets/ColorThemeListView.cpp +++ b/src/widgets/ColorThemeListView.cpp @@ -372,6 +372,7 @@ bool ColorSettingsModel::setData(const QModelIndex &index, const QVariant &value void ColorSettingsModel::updateTheme() { + beginResetModel(); theme.clear(); QJsonObject obj = ThemeWorker().getTheme(Config()->getColorTheme()).object(); @@ -391,9 +392,7 @@ void ColorSettingsModel::updateTheme() int r = s1.compare(s2, Qt::CaseSensitivity::CaseInsensitive); return r < 0; }); - if (!theme.isEmpty()) { - dataChanged(index(0), index(theme.size() - 1)); - } + endResetModel(); } QJsonDocument ColorSettingsModel::getTheme() const diff --git a/src/widgets/ImportsWidget.cpp b/src/widgets/ImportsWidget.cpp index 50b99ddb..261a11b3 100644 --- a/src/widgets/ImportsWidget.cpp +++ b/src/widgets/ImportsWidget.cpp @@ -9,14 +9,11 @@ #include #include -ImportsModel::ImportsModel(QList *imports, QObject *parent) - : AddressableItemModel(parent), imports(imports) -{ -} +ImportsModel::ImportsModel(QObject *parent) : AddressableItemModel(parent) {} int ImportsModel::rowCount(const QModelIndex &parent) const { - return parent.isValid() ? 0 : imports->count(); + return parent.isValid() ? 0 : imports.count(); } int ImportsModel::columnCount(const QModelIndex &) const @@ -26,7 +23,7 @@ int ImportsModel::columnCount(const QModelIndex &) const QVariant ImportsModel::data(const QModelIndex &index, int role) const { - const ImportDescription &import = imports->at(index.row()); + const ImportDescription &import = imports.at(index.row()); switch (role) { case Qt::ForegroundRole: if (index.column() < ImportsModel::ColumnCount) { @@ -91,22 +88,29 @@ QVariant ImportsModel::headerData(int section, Qt::Orientation, int role) const RVA ImportsModel::address(const QModelIndex &index) const { - const ImportDescription &import = imports->at(index.row()); + const ImportDescription &import = imports.at(index.row()); return import.plt; } QString ImportsModel::name(const QModelIndex &index) const { - const ImportDescription &import = imports->at(index.row()); + const ImportDescription &import = imports.at(index.row()); return import.name; } QString ImportsModel::libname(const QModelIndex &index) const { - const ImportDescription &import = imports->at(index.row()); + const ImportDescription &import = imports.at(index.row()); return import.libname; } +void ImportsModel::reload() +{ + beginResetModel(); + imports = Core()->getAllImports(); + endResetModel(); +} + ImportsProxyModel::ImportsProxyModel(ImportsModel *sourceModel, QObject *parent) : AddressableFilterProxyModel(sourceModel, parent) { @@ -162,7 +166,7 @@ bool ImportsProxyModel::lessThan(const QModelIndex &left, const QModelIndex &rig ImportsWidget::ImportsWidget(MainWindow *main) : ListDockWidget(main), - importsModel(new ImportsModel(&imports, this)), + importsModel(new ImportsModel(this)), importsProxyModel(new ImportsProxyModel(importsModel, this)) { setWindowTitle(tr("Imports")); @@ -184,8 +188,6 @@ ImportsWidget::~ImportsWidget() {} void ImportsWidget::refreshImports() { - importsModel->beginResetModel(); - imports = Core()->getAllImports(); - importsModel->endResetModel(); + importsModel->reload(); qhelpers::adjustColumns(ui->treeView, 4, 0); } diff --git a/src/widgets/ImportsWidget.h b/src/widgets/ImportsWidget.h index f440a2fa..85819bf5 100644 --- a/src/widgets/ImportsWidget.h +++ b/src/widgets/ImportsWidget.h @@ -52,7 +52,7 @@ private: "OemToChar|OemToCharA|OemToCharW|CharToOemBuffA|CharToOemBuffW|alloca|_" "alloca|strlen|wcslen|_mbslen|_mbstrlen|StrLen|lstrlen|" "ChangeWindowMessageFilter)\\z")); - QList *imports; + QList imports; public: enum Column { @@ -66,7 +66,7 @@ public: }; enum Role { ImportDescriptionRole = Qt::UserRole, AddressRole }; - ImportsModel(QList *imports, QObject *parent = nullptr); + ImportsModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override; @@ -77,6 +77,7 @@ public: RVA address(const QModelIndex &index) const override; QString name(const QModelIndex &index) const override; QString libname(const QModelIndex &index) const; + void reload(); }; class ImportsProxyModel : public AddressableFilterProxyModel @@ -105,7 +106,6 @@ private slots: private: ImportsModel *importsModel; ImportsProxyModel *importsProxyModel; - QList imports; void highlightUnsafe(); }; diff --git a/src/widgets/RelocsWidget.cpp b/src/widgets/RelocsWidget.cpp index 2d8118bc..bb3e7587 100644 --- a/src/widgets/RelocsWidget.cpp +++ b/src/widgets/RelocsWidget.cpp @@ -6,14 +6,11 @@ #include #include -RelocsModel::RelocsModel(QList *relocs, QObject *parent) - : AddressableItemModel(parent), relocs(relocs) -{ -} +RelocsModel::RelocsModel(QObject *parent) : AddressableItemModel(parent) {} int RelocsModel::rowCount(const QModelIndex &parent) const { - return parent.isValid() ? 0 : relocs->count(); + return parent.isValid() ? 0 : relocs.count(); } int RelocsModel::columnCount(const QModelIndex &) const @@ -23,7 +20,7 @@ int RelocsModel::columnCount(const QModelIndex &) const QVariant RelocsModel::data(const QModelIndex &index, int role) const { - const RelocDescription &reloc = relocs->at(index.row()); + const RelocDescription &reloc = relocs.at(index.row()); switch (role) { case Qt::DisplayRole: switch (index.column()) { @@ -67,16 +64,23 @@ QVariant RelocsModel::headerData(int section, Qt::Orientation, int role) const RVA RelocsModel::address(const QModelIndex &index) const { - const RelocDescription &reloc = relocs->at(index.row()); + const RelocDescription &reloc = relocs.at(index.row()); return reloc.vaddr; } QString RelocsModel::name(const QModelIndex &index) const { - const RelocDescription &reloc = relocs->at(index.row()); + const RelocDescription &reloc = relocs.at(index.row()); return reloc.name; } +void RelocsModel::reload() +{ + beginResetModel(); + relocs = Core()->getAllRelocs(); + endResetModel(); +} + RelocsProxyModel::RelocsProxyModel(RelocsModel *sourceModel, QObject *parent) : AddressableFilterProxyModel(sourceModel, parent) { @@ -121,7 +125,7 @@ bool RelocsProxyModel::lessThan(const QModelIndex &left, const QModelIndex &righ RelocsWidget::RelocsWidget(MainWindow *main) : ListDockWidget(main), - relocsModel(new RelocsModel(&relocs, this)), + relocsModel(new RelocsModel(this)), relocsProxyModel(new RelocsProxyModel(relocsModel, this)) { setWindowTitle(tr("Relocs")); @@ -140,8 +144,6 @@ RelocsWidget::~RelocsWidget() {} void RelocsWidget::refreshRelocs() { - relocsModel->beginResetModel(); - relocs = Core()->getAllRelocs(); - relocsModel->endResetModel(); + relocsModel->reload(); qhelpers::adjustColumns(ui->treeView, 3, 0); } diff --git a/src/widgets/RelocsWidget.h b/src/widgets/RelocsWidget.h index d2cf9c78..eb60b756 100644 --- a/src/widgets/RelocsWidget.h +++ b/src/widgets/RelocsWidget.h @@ -19,13 +19,13 @@ class RelocsModel : public AddressableItemModel friend RelocsWidget; private: - QList *relocs; + QList relocs; public: enum Column { VAddrColumn = 0, TypeColumn, NameColumn, CommentColumn, ColumnCount }; enum Role { RelocDescriptionRole = Qt::UserRole, AddressRole }; - RelocsModel(QList *relocs, QObject *parent = nullptr); + RelocsModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override; @@ -35,6 +35,8 @@ public: RVA address(const QModelIndex &index) const override; QString name(const QModelIndex &index) const override; + + void reload(); }; class RelocsProxyModel : public AddressableFilterProxyModel @@ -63,7 +65,6 @@ private slots: private: RelocsModel *relocsModel; RelocsProxyModel *relocsProxyModel; - QList relocs; }; #endif // RELOCSWIDGET_H