From bc350fc8cee764191f428fe0d7033d7d03f61933 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 19 Sep 2025 19:04:24 -0300 Subject: [PATCH] QIcon caching optimizations in settings pages --- src/qt/qt_settingsfloppycdrom.cpp | 27 +++++++++++++++----------- src/qt/qt_settingsfloppycdrom.hpp | 9 +++++++++ src/qt/qt_settingsharddisks.cpp | 29 +++++++++++++++++----------- src/qt/qt_settingsotherremovable.cpp | 24 +++++++++++++---------- src/qt/qt_settingsotherremovable.hpp | 8 ++++++++ 5 files changed, 65 insertions(+), 32 deletions(-) diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index f597aebe6..588b1aff9 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -34,43 +34,41 @@ extern "C" { #include <86box/cdrom.h> } -#include - #include "qt_models_common.hpp" #include "qt_harddrive_common.hpp" #include "qt_settings_bus_tracking.hpp" #include "qt_progsettings.hpp" -static void -setFloppyType(QAbstractItemModel *model, const QModelIndex &idx, int type) +void +SettingsFloppyCDROM::setFloppyType(QAbstractItemModel *model, const QModelIndex &idx, int type) { QIcon icon; if (type == 0) - icon = QIcon(":/settings/qt/icons/floppy_disabled.ico"); + icon = floppy_disabled_icon; else if (type >= 1 && type <= 6) - icon = QIcon(":/settings/qt/icons/floppy_525.ico"); + icon = floppy_525_icon; else - icon = QIcon(":/settings/qt/icons/floppy_35.ico"); + icon = floppy_35_icon; model->setData(idx, QObject::tr(fdd_getname(type))); model->setData(idx, type, Qt::UserRole); model->setData(idx, icon, Qt::DecorationRole); } -static void -setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) +void +SettingsFloppyCDROM::setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) { QIcon icon; switch (bus) { case CDROM_BUS_DISABLED: - icon = QIcon(":/settings/qt/icons/cdrom_disabled.ico"); + icon = cdrom_disabled_icon; break; case CDROM_BUS_ATAPI: case CDROM_BUS_SCSI: case CDROM_BUS_MITSUMI: case CDROM_BUS_MKE: - icon = QIcon(":/settings/qt/icons/cdrom.ico"); + icon = cdrom_icon; break; } @@ -116,6 +114,10 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) { ui->setupUi(this); + floppy_disabled_icon = QIcon(":/settings/qt/icons/floppy_disabled.ico"); + floppy_525_icon = QIcon(":/settings/qt/icons/floppy_525.ico"); + floppy_35_icon = QIcon(":/settings/qt/icons/floppy_35.ico"); + auto *model = ui->comboBoxFloppyType->model(); int i = 0; while (true) { @@ -150,6 +152,9 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) this, &SettingsFloppyCDROM::onFloppyRowChanged); ui->tableViewFloppy->setCurrentIndex(model->index(0, 0)); + cdrom_disabled_icon = QIcon(":/settings/qt/icons/cdrom_disabled.ico"); + cdrom_icon = QIcon(":/settings/qt/icons/cdrom.ico"); + Harddrives::populateCDROMBuses(ui->comboBoxBus->model()); model = ui->comboBoxSpeed->model(); for (int i = 0; i < 72; i++) diff --git a/src/qt/qt_settingsfloppycdrom.hpp b/src/qt/qt_settingsfloppycdrom.hpp index 063942201..ba7b396b7 100644 --- a/src/qt/qt_settingsfloppycdrom.hpp +++ b/src/qt/qt_settingsfloppycdrom.hpp @@ -2,6 +2,7 @@ #define QT_SETTINGSFLOPPYCDROM_HPP #include +#include namespace Ui { class SettingsFloppyCDROM; @@ -36,7 +37,15 @@ private slots: private: Ui::SettingsFloppyCDROM *ui; + void setFloppyType(QAbstractItemModel *model, const QModelIndex &idx, int type); + void setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel); void enableCurrentlySelectedChannel(); + + QIcon floppy_disabled_icon; + QIcon floppy_525_icon; + QIcon floppy_35_icon; + QIcon cdrom_disabled_icon; + QIcon cdrom_icon; }; #endif // QT_SETTINGSFLOPPYCDROM_HPP diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index 6d82f2b77..40142f4d2 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -44,6 +44,8 @@ const int DataBusChannel = Qt::UserRole + 1; const int DataBusPrevious = Qt::UserRole + 2; const int DataBusChannelPrevious = Qt::UserRole + 3; +QIcon hard_disk_icon; + #if 0 static void normalize_hd_list() @@ -78,28 +80,31 @@ addRow(QAbstractItemModel *model, hard_disk_t *hd) model->insertRow(row); + auto busIndex = model->index(row, ColumnBus); QString busName = Harddrives::BusChannelName(hd->bus_type, hd->channel); - model->setData(model->index(row, ColumnBus), busName); - model->setData(model->index(row, ColumnBus), QIcon(":/settings/qt/icons/hard_disk.ico"), Qt::DecorationRole); - model->setData(model->index(row, ColumnBus), hd->bus_type, DataBus); - model->setData(model->index(row, ColumnBus), hd->bus_type, DataBusPrevious); - model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannel); - model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannelPrevious); + model->setData(busIndex, busName); + model->setData(busIndex, hard_disk_icon, Qt::DecorationRole); + model->setData(busIndex, hd->bus_type, DataBus); + model->setData(busIndex, hd->bus_type, DataBusPrevious); + model->setData(busIndex, hd->channel, DataBusChannel); + model->setData(busIndex, hd->channel, DataBusChannelPrevious); Harddrives::busTrackClass->device_track(1, DEV_HDD, hd->bus_type, hd->channel); + auto filenameIndex = model->index(row, ColumnFilename); QString fileName = hd->fn; if (fileName.startsWith(userPath, Qt::CaseInsensitive)) - model->setData(model->index(row, ColumnFilename), fileName.mid(userPath.size())); + model->setData(filenameIndex, fileName.mid(userPath.size())); else - model->setData(model->index(row, ColumnFilename), fileName); + model->setData(filenameIndex, fileName); - model->setData(model->index(row, ColumnFilename), fileName, Qt::UserRole); + model->setData(filenameIndex, fileName, Qt::UserRole); model->setData(model->index(row, ColumnCylinders), hd->tracks); model->setData(model->index(row, ColumnHeads), hd->hpc); model->setData(model->index(row, ColumnSectors), hd->spt); model->setData(model->index(row, ColumnSize), (hd->tracks * hd->hpc * hd->spt) >> 11); - model->setData(model->index(row, ColumnSpeed), QObject::tr(hdd_preset_getname(hd->speed_preset))); - model->setData(model->index(row, ColumnSpeed), hd->speed_preset, Qt::UserRole); + auto speedIndex = model->index(row, ColumnSpeed); + model->setData(speedIndex, QObject::tr(hdd_preset_getname(hd->speed_preset))); + model->setData(speedIndex, hd->speed_preset, Qt::UserRole); } SettingsHarddisks::SettingsHarddisks(QWidget *parent) @@ -108,6 +113,8 @@ SettingsHarddisks::SettingsHarddisks(QWidget *parent) { ui->setupUi(this); + hard_disk_icon = QIcon(":/settings/qt/icons/hard_disk.ico"); + QAbstractItemModel *model = new QStandardItemModel(0, 7, this); model->setHeaderData(ColumnBus, Qt::Horizontal, tr("Bus")); model->setHeaderData(ColumnFilename, Qt::Horizontal, tr("File")); diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index 4ba07161c..f2fa3c675 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -26,8 +26,6 @@ extern "C" { #include <86box/rdisk.h> } -#include - #include "qt_models_common.hpp" #include "qt_harddrive_common.hpp" #include "qt_settings_bus_tracking.hpp" @@ -47,17 +45,17 @@ rdiskDriveTypeName(int i) rdisk_drive_types[i].revision); } -static void -setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) +void +SettingsOtherRemovable::setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) { QIcon icon; switch (bus) { case MO_BUS_DISABLED: - icon = QIcon(":/settings/qt/icons/mo_disabled.ico"); + icon = mo_disabled_icon; break; case MO_BUS_ATAPI: case MO_BUS_SCSI: - icon = QIcon(":/settings/qt/icons/mo.ico"); + icon = mo_icon; break; default: @@ -71,17 +69,17 @@ setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t model->setData(i, icon, Qt::DecorationRole); } -static void -setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) +void +SettingsOtherRemovable::setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) { QIcon icon; switch (bus) { case RDISK_BUS_DISABLED: - icon = QIcon(":/settings/qt/icons/rdisk_disabled.ico"); + icon = rdisk_disabled_icon; break; case RDISK_BUS_ATAPI: case RDISK_BUS_SCSI: - icon = QIcon(":/settings/qt/icons/rdisk.ico"); + icon = rdisk_icon; break; default: @@ -123,6 +121,9 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) { ui->setupUi(this); + mo_disabled_icon = QIcon(":/settings/qt/icons/mo_disabled.ico"); + mo_icon = QIcon(":/settings/qt/icons/mo.ico"); + Harddrives::populateRemovableBuses(ui->comboBoxMOBus->model()); ui->comboBoxMOBus->model()->removeRows(3, ui->comboBoxMOBus->model()->rowCount() - 3); auto *model = ui->comboBoxMOType->model(); @@ -147,6 +148,9 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged); ui->tableViewMO->setCurrentIndex(model->index(0, 0)); + rdisk_disabled_icon = QIcon(":/settings/qt/icons/rdisk_disabled.ico"); + rdisk_icon = QIcon(":/settings/qt/icons/rdisk.ico"); + Harddrives::populateRemovableBuses(ui->comboBoxRDiskBus->model()); if ((ui->comboBoxRDiskBus->model()->rowCount() - 3) > 0) ui->comboBoxRDiskBus->model()->removeRows(3, ui->comboBoxRDiskBus->model()->rowCount() - 3); diff --git a/src/qt/qt_settingsotherremovable.hpp b/src/qt/qt_settingsotherremovable.hpp index 79fcfbf3f..2c7a4e80e 100644 --- a/src/qt/qt_settingsotherremovable.hpp +++ b/src/qt/qt_settingsotherremovable.hpp @@ -2,6 +2,7 @@ #define QT_SETTINGSOTHERREMOVABLE_HPP #include +#include namespace Ui { class SettingsOtherRemovable; @@ -37,8 +38,15 @@ private slots: private: Ui::SettingsOtherRemovable *ui; + void setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel); + void setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel); void enableCurrentlySelectedChannel_MO(); void enableCurrentlySelectedChannel_RDisk(); + + QIcon mo_disabled_icon; + QIcon mo_icon; + QIcon rdisk_disabled_icon; + QIcon rdisk_icon; }; #endif // QT_SETTINGSOTHERREMOVABLE_HPP