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

View File

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

View File

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

View File

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

View File

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