diff --git a/src/qt/icons/pause.ico b/src/qt/icons/pause.ico index a71a38e91..a6456910d 100644 Binary files a/src/qt/icons/pause.ico and b/src/qt/icons/pause.ico differ diff --git a/src/qt/icons/run.ico b/src/qt/icons/run.ico index dfb43b05b..b4bd9bf92 100644 Binary files a/src/qt/icons/run.ico and b/src/qt/icons/run.ico differ diff --git a/src/qt/qt_iconindicators.cpp b/src/qt/qt_iconindicators.cpp index b93c375b7..22ae9e9a6 100644 --- a/src/qt/qt_iconindicators.cpp +++ b/src/qt/qt_iconindicators.cpp @@ -6,6 +6,10 @@ QIcon getIndicatorIcon(IconIndicator indicator) { switch (indicator) { + case Play: + return QIcon(":/menuicons/qt/icons/run.ico"); + case Pause: + return QIcon(":/menuicons/qt/icons/pause.ico"); case Active: return QIcon(":/settings/qt/icons/active.ico"); case WriteActive: @@ -36,13 +40,18 @@ getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode, return iconPixmap; auto painter = QPainter(&iconPixmap); - auto indicatorPixmap = getIndicatorIcon((indicator == ReadWriteActive || indicator == WriteProtectedActive) ? Active : indicator).pixmap(size); + auto indicatorPixmap = getIndicatorIcon((indicator == ReadWriteActive || indicator == WriteProtectedActive + || indicator == PlayActive || indicator == PauseActive)? Active : indicator) + .pixmap((indicator == Play || indicator == Pause) ? size / 2. : size); if (indicator == WriteProtectedBrowse) indicatorPixmap = getIndicatorIcon(WriteProtected).pixmap(size); - painter.drawPixmap(0, 0, indicatorPixmap); - if ((indicator == ReadWriteActive) || (indicator == WriteProtectedActive)) { + painter.drawPixmap(0, (indicator == Play || indicator == Pause) ? (size.height() / 2) : 0, indicatorPixmap); + if (indicator == PlayActive || indicator == PauseActive) { + auto playPauseIndicatorPixmap = getIndicatorIcon(indicator == PlayActive ? Play : Pause).pixmap(size / 2.); + painter.drawPixmap(0, size.height() / 2, playPauseIndicatorPixmap); + } else if ((indicator == ReadWriteActive) || (indicator == WriteProtectedActive)) { auto writeIndicatorPixmap = getIndicatorIcon(indicator == WriteProtectedActive ? WriteProtected : WriteActive).pixmap(size); painter.drawPixmap(0, 0, writeIndicatorPixmap); } else if (indicator == WriteProtectedBrowse) { diff --git a/src/qt/qt_iconindicators.hpp b/src/qt/qt_iconindicators.hpp index 24ce80ad3..7d1b4e041 100644 --- a/src/qt/qt_iconindicators.hpp +++ b/src/qt/qt_iconindicators.hpp @@ -16,7 +16,11 @@ enum IconIndicator { Browse, WriteProtectedBrowse, Export, - Eject + Eject, + Play, + Pause, + PlayActive, + PauseActive }; QPixmap getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode, IconIndicator indicator); diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index e6ab80688..82ef63159 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -83,6 +83,10 @@ struct PixmapSetEmpty { struct PixmapSetEmptyActive { QPixmap normal; QPixmap active; + QPixmap play; + QPixmap pause; + QPixmap play_active; + QPixmap pause_active; QPixmap empty; QPixmap empty_active; QPixmap write_active; @@ -169,6 +173,26 @@ struct StateEmptyActive { bool active = false; bool write_active = false; bool wp = false; + bool play = false; + bool pause = false; + + void setPlay(bool b) + { + if (!label || b == play) + return; + + play = b; + refresh(); + } + + void setPause(bool b) + { + if (!label || b == pause) + return; + + pause = b; + refresh(); + } void setActive(bool b) { @@ -212,10 +236,12 @@ struct StateEmptyActive { else label->setPixmap(write_active ? pixmaps->empty_write_active : (active ? pixmaps->empty_active : pixmaps->empty)); } else { - if (wp) + if (wp && !(play || pause)) label->setPixmap(active ? pixmaps->wp_active : pixmaps->wp); - else if (active && write_active) + else if (active && write_active && !wp) label->setPixmap(pixmaps->read_write_active); + else if ((play || pause) && !write_active) + label->setPixmap(play ? (active ? pixmaps->play_active : pixmaps->play) : (active ? pixmaps->pause_active : pixmaps->pause)); else label->setPixmap(write_active ? pixmaps->write_active : (active ? pixmaps->active : pixmaps->normal)); } @@ -252,6 +278,10 @@ void PixmapSetEmptyActive::load(const QIcon &icon) { normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None); + play = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Play); + pause = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Pause); + play_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, PlayActive); + pause_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, PauseActive); wp = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteProtected); wp_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteProtectedActive); active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active); @@ -504,8 +534,11 @@ MachineStatus::refreshIcons() d->fdd[i].setWriteActive(machine_status.fdd[i].write_active); } for (size_t i = 0; i < CDROM_NUM; ++i) { + auto status = cdrom_get_current_status(&cdrom[i]); d->cdrom[i].setActive(machine_status.cdrom[i].active); d->cdrom[i].setWriteActive(machine_status.cdrom[i].write_active); + d->cdrom[i].setPlay(status == 0x11); + d->cdrom[i].setPause((!cdrom[i].is_chinon) ? (status == 0x12) : (status == 0x15)); if (machine_status.cdrom[i].active) { ui_sb_update_icon(SB_CDROM | i, 0); }