QIcon caching optimizations in settings pages

This commit is contained in:
RichardG867
2025-09-19 19:04:24 -03:00
parent 4b8b0efa48
commit bc350fc8ce
5 changed files with 65 additions and 32 deletions

View File

@@ -34,43 +34,41 @@ extern "C" {
#include <86box/cdrom.h> #include <86box/cdrom.h>
} }
#include <QStandardItemModel>
#include "qt_models_common.hpp" #include "qt_models_common.hpp"
#include "qt_harddrive_common.hpp" #include "qt_harddrive_common.hpp"
#include "qt_settings_bus_tracking.hpp" #include "qt_settings_bus_tracking.hpp"
#include "qt_progsettings.hpp" #include "qt_progsettings.hpp"
static void void
setFloppyType(QAbstractItemModel *model, const QModelIndex &idx, int type) SettingsFloppyCDROM::setFloppyType(QAbstractItemModel *model, const QModelIndex &idx, int type)
{ {
QIcon icon; QIcon icon;
if (type == 0) if (type == 0)
icon = QIcon(":/settings/qt/icons/floppy_disabled.ico"); icon = floppy_disabled_icon;
else if (type >= 1 && type <= 6) else if (type >= 1 && type <= 6)
icon = QIcon(":/settings/qt/icons/floppy_525.ico"); icon = floppy_525_icon;
else else
icon = QIcon(":/settings/qt/icons/floppy_35.ico"); icon = floppy_35_icon;
model->setData(idx, QObject::tr(fdd_getname(type))); model->setData(idx, QObject::tr(fdd_getname(type)));
model->setData(idx, type, Qt::UserRole); model->setData(idx, type, Qt::UserRole);
model->setData(idx, icon, Qt::DecorationRole); model->setData(idx, icon, Qt::DecorationRole);
} }
static void void
setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) SettingsFloppyCDROM::setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
{ {
QIcon icon; QIcon icon;
switch (bus) { switch (bus) {
case CDROM_BUS_DISABLED: case CDROM_BUS_DISABLED:
icon = QIcon(":/settings/qt/icons/cdrom_disabled.ico"); icon = cdrom_disabled_icon;
break; break;
case CDROM_BUS_ATAPI: case CDROM_BUS_ATAPI:
case CDROM_BUS_SCSI: case CDROM_BUS_SCSI:
case CDROM_BUS_MITSUMI: case CDROM_BUS_MITSUMI:
case CDROM_BUS_MKE: case CDROM_BUS_MKE:
icon = QIcon(":/settings/qt/icons/cdrom.ico"); icon = cdrom_icon;
break; break;
} }
@@ -116,6 +114,10 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
{ {
ui->setupUi(this); 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(); auto *model = ui->comboBoxFloppyType->model();
int i = 0; int i = 0;
while (true) { while (true) {
@@ -150,6 +152,9 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
this, &SettingsFloppyCDROM::onFloppyRowChanged); this, &SettingsFloppyCDROM::onFloppyRowChanged);
ui->tableViewFloppy->setCurrentIndex(model->index(0, 0)); 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()); Harddrives::populateCDROMBuses(ui->comboBoxBus->model());
model = ui->comboBoxSpeed->model(); model = ui->comboBoxSpeed->model();
for (int i = 0; i < 72; i++) for (int i = 0; i < 72; i++)

View File

@@ -2,6 +2,7 @@
#define QT_SETTINGSFLOPPYCDROM_HPP #define QT_SETTINGSFLOPPYCDROM_HPP
#include <QWidget> #include <QWidget>
#include <QStandardItemModel>
namespace Ui { namespace Ui {
class SettingsFloppyCDROM; class SettingsFloppyCDROM;
@@ -36,7 +37,15 @@ private slots:
private: private:
Ui::SettingsFloppyCDROM *ui; 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(); 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 #endif // QT_SETTINGSFLOPPYCDROM_HPP

View File

@@ -44,6 +44,8 @@ const int DataBusChannel = Qt::UserRole + 1;
const int DataBusPrevious = Qt::UserRole + 2; const int DataBusPrevious = Qt::UserRole + 2;
const int DataBusChannelPrevious = Qt::UserRole + 3; const int DataBusChannelPrevious = Qt::UserRole + 3;
QIcon hard_disk_icon;
#if 0 #if 0
static void static void
normalize_hd_list() normalize_hd_list()
@@ -78,28 +80,31 @@ addRow(QAbstractItemModel *model, hard_disk_t *hd)
model->insertRow(row); model->insertRow(row);
auto busIndex = model->index(row, ColumnBus);
QString busName = Harddrives::BusChannelName(hd->bus_type, hd->channel); QString busName = Harddrives::BusChannelName(hd->bus_type, hd->channel);
model->setData(model->index(row, ColumnBus), busName); model->setData(busIndex, busName);
model->setData(model->index(row, ColumnBus), QIcon(":/settings/qt/icons/hard_disk.ico"), Qt::DecorationRole); model->setData(busIndex, hard_disk_icon, Qt::DecorationRole);
model->setData(model->index(row, ColumnBus), hd->bus_type, DataBus); model->setData(busIndex, hd->bus_type, DataBus);
model->setData(model->index(row, ColumnBus), hd->bus_type, DataBusPrevious); model->setData(busIndex, hd->bus_type, DataBusPrevious);
model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannel); model->setData(busIndex, hd->channel, DataBusChannel);
model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannelPrevious); model->setData(busIndex, hd->channel, DataBusChannelPrevious);
Harddrives::busTrackClass->device_track(1, DEV_HDD, hd->bus_type, hd->channel); Harddrives::busTrackClass->device_track(1, DEV_HDD, hd->bus_type, hd->channel);
auto filenameIndex = model->index(row, ColumnFilename);
QString fileName = hd->fn; QString fileName = hd->fn;
if (fileName.startsWith(userPath, Qt::CaseInsensitive)) if (fileName.startsWith(userPath, Qt::CaseInsensitive))
model->setData(model->index(row, ColumnFilename), fileName.mid(userPath.size())); model->setData(filenameIndex, fileName.mid(userPath.size()));
else 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, ColumnCylinders), hd->tracks);
model->setData(model->index(row, ColumnHeads), hd->hpc); model->setData(model->index(row, ColumnHeads), hd->hpc);
model->setData(model->index(row, ColumnSectors), hd->spt); 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, ColumnSize), (hd->tracks * hd->hpc * hd->spt) >> 11);
model->setData(model->index(row, ColumnSpeed), QObject::tr(hdd_preset_getname(hd->speed_preset))); auto speedIndex = model->index(row, ColumnSpeed);
model->setData(model->index(row, ColumnSpeed), hd->speed_preset, Qt::UserRole); model->setData(speedIndex, QObject::tr(hdd_preset_getname(hd->speed_preset)));
model->setData(speedIndex, hd->speed_preset, Qt::UserRole);
} }
SettingsHarddisks::SettingsHarddisks(QWidget *parent) SettingsHarddisks::SettingsHarddisks(QWidget *parent)
@@ -108,6 +113,8 @@ SettingsHarddisks::SettingsHarddisks(QWidget *parent)
{ {
ui->setupUi(this); ui->setupUi(this);
hard_disk_icon = QIcon(":/settings/qt/icons/hard_disk.ico");
QAbstractItemModel *model = new QStandardItemModel(0, 7, this); QAbstractItemModel *model = new QStandardItemModel(0, 7, this);
model->setHeaderData(ColumnBus, Qt::Horizontal, tr("Bus")); model->setHeaderData(ColumnBus, Qt::Horizontal, tr("Bus"));
model->setHeaderData(ColumnFilename, Qt::Horizontal, tr("File")); model->setHeaderData(ColumnFilename, Qt::Horizontal, tr("File"));

View File

@@ -26,8 +26,6 @@ extern "C" {
#include <86box/rdisk.h> #include <86box/rdisk.h>
} }
#include <QStandardItemModel>
#include "qt_models_common.hpp" #include "qt_models_common.hpp"
#include "qt_harddrive_common.hpp" #include "qt_harddrive_common.hpp"
#include "qt_settings_bus_tracking.hpp" #include "qt_settings_bus_tracking.hpp"
@@ -47,17 +45,17 @@ rdiskDriveTypeName(int i)
rdisk_drive_types[i].revision); rdisk_drive_types[i].revision);
} }
static void void
setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) SettingsOtherRemovable::setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
{ {
QIcon icon; QIcon icon;
switch (bus) { switch (bus) {
case MO_BUS_DISABLED: case MO_BUS_DISABLED:
icon = QIcon(":/settings/qt/icons/mo_disabled.ico"); icon = mo_disabled_icon;
break; break;
case MO_BUS_ATAPI: case MO_BUS_ATAPI:
case MO_BUS_SCSI: case MO_BUS_SCSI:
icon = QIcon(":/settings/qt/icons/mo.ico"); icon = mo_icon;
break; break;
default: default:
@@ -71,17 +69,17 @@ setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t
model->setData(i, icon, Qt::DecorationRole); model->setData(i, icon, Qt::DecorationRole);
} }
static void void
setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) SettingsOtherRemovable::setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
{ {
QIcon icon; QIcon icon;
switch (bus) { switch (bus) {
case RDISK_BUS_DISABLED: case RDISK_BUS_DISABLED:
icon = QIcon(":/settings/qt/icons/rdisk_disabled.ico"); icon = rdisk_disabled_icon;
break; break;
case RDISK_BUS_ATAPI: case RDISK_BUS_ATAPI:
case RDISK_BUS_SCSI: case RDISK_BUS_SCSI:
icon = QIcon(":/settings/qt/icons/rdisk.ico"); icon = rdisk_icon;
break; break;
default: default:
@@ -123,6 +121,9 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent)
{ {
ui->setupUi(this); 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()); Harddrives::populateRemovableBuses(ui->comboBoxMOBus->model());
ui->comboBoxMOBus->model()->removeRows(3, ui->comboBoxMOBus->model()->rowCount() - 3); ui->comboBoxMOBus->model()->removeRows(3, ui->comboBoxMOBus->model()->rowCount() - 3);
auto *model = ui->comboBoxMOType->model(); auto *model = ui->comboBoxMOType->model();
@@ -147,6 +148,9 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent)
connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged); connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged);
ui->tableViewMO->setCurrentIndex(model->index(0, 0)); 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()); Harddrives::populateRemovableBuses(ui->comboBoxRDiskBus->model());
if ((ui->comboBoxRDiskBus->model()->rowCount() - 3) > 0) if ((ui->comboBoxRDiskBus->model()->rowCount() - 3) > 0)
ui->comboBoxRDiskBus->model()->removeRows(3, ui->comboBoxRDiskBus->model()->rowCount() - 3); ui->comboBoxRDiskBus->model()->removeRows(3, ui->comboBoxRDiskBus->model()->rowCount() - 3);

View File

@@ -2,6 +2,7 @@
#define QT_SETTINGSOTHERREMOVABLE_HPP #define QT_SETTINGSOTHERREMOVABLE_HPP
#include <QWidget> #include <QWidget>
#include <QStandardItemModel>
namespace Ui { namespace Ui {
class SettingsOtherRemovable; class SettingsOtherRemovable;
@@ -37,8 +38,15 @@ private slots:
private: private:
Ui::SettingsOtherRemovable *ui; 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_MO();
void enableCurrentlySelectedChannel_RDisk(); void enableCurrentlySelectedChannel_RDisk();
QIcon mo_disabled_icon;
QIcon mo_icon;
QIcon rdisk_disabled_icon;
QIcon rdisk_icon;
}; };
#endif // QT_SETTINGSOTHERREMOVABLE_HPP #endif // QT_SETTINGSOTHERREMOVABLE_HPP