Status bar: update the empty/full icon states even when status bar icons updating is disabled.

This commit is contained in:
OBattler
2024-09-18 09:38:47 +02:00
parent 7068655343
commit 7ae5110af2
5 changed files with 47 additions and 18 deletions

View File

@@ -61,6 +61,8 @@ extern uint64_t tsc;
extern MainWindow *main_window;
static bool sbar_initialized = false;
namespace {
struct PixmapSetActive {
QPixmap normal;
@@ -380,6 +382,31 @@ hdd_count(int bus)
return c;
}
void
MachineStatus::refreshEmptyIcons()
{
/* Check if icons are initialized. */
if (!sbar_initialized)
return;
for (size_t i = 0; i < FDD_NUM; ++i)
d->fdd[i].setEmpty(machine_status.fdd[i].empty);
for (size_t i = 0; i < CDROM_NUM; ++i)
d->cdrom[i].setEmpty(machine_status.cdrom[i].empty);
for (size_t i = 0; i < ZIP_NUM; i++)
d->zip[i].setEmpty(machine_status.zip[i].empty);
for (size_t i = 0; i < MO_NUM; i++)
d->mo[i].setEmpty(machine_status.mo[i].empty);
d->cassette.setEmpty(machine_status.cassette.empty);
for (size_t i = 0; i < NET_CARD_MAX; i++)
d->net[i].setEmpty(machine_status.net[i].empty);
for (int i = 0; i < 2; ++i)
d->cartridge[i].setEmpty(machine_status.cartridge[i].empty);
}
void
MachineStatus::refreshIcons()
{
@@ -387,48 +414,32 @@ MachineStatus::refreshIcons()
if (!update_icons)
return;
for (size_t i = 0; i < FDD_NUM; ++i) {
for (size_t i = 0; i < FDD_NUM; ++i)
d->fdd[i].setActive(machine_status.fdd[i].active);
d->fdd[i].setEmpty(machine_status.fdd[i].empty);
}
for (size_t i = 0; i < CDROM_NUM; ++i) {
d->cdrom[i].setActive(machine_status.cdrom[i].active);
if (machine_status.cdrom[i].active)
ui_sb_update_icon(SB_CDROM | i, 0);
d->cdrom[i].setEmpty(machine_status.cdrom[i].empty);
}
for (size_t i = 0; i < ZIP_NUM; i++) {
d->zip[i].setActive(machine_status.zip[i].active);
if (machine_status.zip[i].active)
ui_sb_update_icon(SB_ZIP | i, 0);
d->zip[i].setEmpty(machine_status.zip[i].empty);
}
for (size_t i = 0; i < MO_NUM; i++) {
d->mo[i].setActive(machine_status.mo[i].active);
if (machine_status.mo[i].active)
ui_sb_update_icon(SB_MO | i, 0);
d->mo[i].setEmpty(machine_status.mo[i].empty);
}
d->cassette.setEmpty(machine_status.cassette.empty);
for (size_t i = 0; i < HDD_BUS_USB; i++) {
d->hdds[i].setActive(machine_status.hdd[i].active);
if (machine_status.hdd[i].active)
ui_sb_update_icon(SB_HDD | i, 0);
}
for (size_t i = 0; i < NET_CARD_MAX; i++) {
for (size_t i = 0; i < NET_CARD_MAX; i++)
d->net[i].setActive(machine_status.net[i].active);
d->net[i].setEmpty(machine_status.net[i].empty);
}
for (int i = 0; i < 2; ++i) {
d->cartridge[i].setEmpty(machine_status.cartridge[i].empty);
}
}
void
@@ -664,6 +675,10 @@ MachineStatus::refresh(QStatusBar *sbar)
sbar->addWidget(d->sound.get());
d->text = std::make_unique<QLabel>();
sbar->addWidget(d->text.get());
sbar_initialized = true;
refreshEmptyIcons();
}
void
@@ -719,4 +734,6 @@ MachineStatus::updateTip(int tag)
case SB_TEXT:
break;
}
refreshEmptyIcons();
}

View File

@@ -75,6 +75,7 @@ public slots:
void refresh(QStatusBar *sbar);
void message(const QString &msg);
void updateTip(int tag);
void refreshEmptyIcons();
void refreshIcons();
private:

View File

@@ -1904,6 +1904,13 @@ MainWindow::updateUiPauseState()
ui->actionPause->setToolTip(tooltip_text);
}
void
MainWindow::updateStatusEmptyIcons()
{
if (status != nullptr)
status->refreshEmptyIcons();
}
void
MainWindow::on_actionPreferences_triggered()
{

View File

@@ -63,6 +63,7 @@ public slots:
void togglePause();
void initRendererMonitorSlot(int monitor_index);
void destroyRendererMonitorSlot(int monitor_index);
void updateStatusEmptyIcons();
void updateUiPauseState();
private slots:
void on_actionFullscreen_triggered();

View File

@@ -256,6 +256,9 @@ ui_sb_update_icon_state(int tag, int state)
case SB_TEXT:
break;
}
if (main_window != nullptr)
main_window->updateStatusEmptyIcons();
}
void