mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 09:35:32 -07:00
Play/record indicators for cassette
This commit is contained in:
@@ -500,7 +500,10 @@ pc_cas_set_motor(pc_cassette_t *cas, unsigned char val)
|
||||
else
|
||||
timer_disable(&cas->timer);
|
||||
|
||||
ui_sb_update_icon(SB_CASSETTE, !!val);
|
||||
if (!cas->save)
|
||||
ui_sb_update_icon(SB_CASSETTE, !!val);
|
||||
else
|
||||
ui_sb_update_icon_write(SB_CASSETTE, !!val);
|
||||
}
|
||||
|
||||
unsigned char
|
||||
@@ -665,8 +668,12 @@ cassette_callback(void *priv)
|
||||
|
||||
pc_cas_clock(cas, 8);
|
||||
|
||||
if (cas->motor)
|
||||
ui_sb_update_icon(SB_CASSETTE, 1);
|
||||
if (cas->motor) {
|
||||
if (cas->pcm && cas->save)
|
||||
ui_sb_update_icon_write(SB_CASSETTE, 1);
|
||||
else
|
||||
ui_sb_update_icon(SB_CASSETTE, 1);
|
||||
}
|
||||
|
||||
timer_advance_u64(&cas->timer, 8ULL * PITCONST);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@ getIndicatorIcon(IconIndicator indicator)
|
||||
return QIcon(":/settings/qt/icons/active.ico");
|
||||
case WriteActive:
|
||||
return QIcon(":/settings/qt/icons/write_active.ico");
|
||||
case Record:
|
||||
return QIcon(":/settings/qt/icons/record.ico");
|
||||
case Disabled:
|
||||
return QIcon(":/settings/qt/icons/disabled.ico");
|
||||
case WriteProtected:
|
||||
@@ -41,17 +43,21 @@ getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode,
|
||||
|
||||
auto painter = QPainter(&iconPixmap);
|
||||
auto indicatorPixmap = getIndicatorIcon((indicator == ReadWriteActive || indicator == WriteProtectedActive
|
||||
|| indicator == PlayActive || indicator == PauseActive)? Active : indicator)
|
||||
.pixmap((indicator == Play || indicator == Pause) ? size / 2. : size);
|
||||
|| indicator == PlayActive || indicator == PauseActive) ? Active :
|
||||
(indicator == RecordWriteActive) ? Record : indicator)
|
||||
.pixmap((indicator == Play || indicator == Pause || indicator == Record || indicator == RecordWriteActive) ? size / 2. : size);
|
||||
|
||||
if (indicator == WriteProtectedBrowse)
|
||||
indicatorPixmap = getIndicatorIcon(WriteProtected).pixmap(size);
|
||||
|
||||
painter.drawPixmap(0, (indicator == Play || indicator == Pause) ? (size.height() / 2) : 0, indicatorPixmap);
|
||||
if (indicator == Record || indicator == RecordWriteActive)
|
||||
painter.drawPixmap(size.width() / 2, size.height() / 2, indicatorPixmap);
|
||||
else
|
||||
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)) {
|
||||
} else if ((indicator == ReadWriteActive) || (indicator == WriteProtectedActive) || (indicator == RecordWriteActive)) {
|
||||
auto writeIndicatorPixmap = getIndicatorIcon(indicator == WriteProtectedActive ? WriteProtected : WriteActive).pixmap(size);
|
||||
painter.drawPixmap(0, 0, writeIndicatorPixmap);
|
||||
} else if (indicator == WriteProtectedBrowse) {
|
||||
|
||||
@@ -20,7 +20,9 @@ enum IconIndicator {
|
||||
Play,
|
||||
Pause,
|
||||
PlayActive,
|
||||
PauseActive
|
||||
PauseActive,
|
||||
Record,
|
||||
RecordWriteActive
|
||||
};
|
||||
|
||||
QPixmap getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode, IconIndicator indicator);
|
||||
|
||||
@@ -83,6 +83,7 @@ struct PixmapSetEmpty {
|
||||
struct PixmapSetEmptyActive {
|
||||
QPixmap normal;
|
||||
QPixmap active;
|
||||
QPixmap record;
|
||||
QPixmap play;
|
||||
QPixmap pause;
|
||||
QPixmap play_active;
|
||||
@@ -90,6 +91,7 @@ struct PixmapSetEmptyActive {
|
||||
QPixmap empty;
|
||||
QPixmap empty_active;
|
||||
QPixmap write_active;
|
||||
QPixmap record_write_active;
|
||||
QPixmap read_write_active;
|
||||
QPixmap empty_write_active;
|
||||
QPixmap empty_read_write_active;
|
||||
@@ -175,6 +177,16 @@ struct StateEmptyActive {
|
||||
bool wp = false;
|
||||
bool play = false;
|
||||
bool pause = false;
|
||||
bool record = false;
|
||||
|
||||
void setRecord(bool b)
|
||||
{
|
||||
if (!label || b == record)
|
||||
return;
|
||||
|
||||
record = b;
|
||||
refresh();
|
||||
}
|
||||
|
||||
void setPlay(bool b)
|
||||
{
|
||||
@@ -240,6 +252,8 @@ struct StateEmptyActive {
|
||||
label->setPixmap(active ? pixmaps->wp_active : pixmaps->wp);
|
||||
else if (active && write_active && !wp)
|
||||
label->setPixmap(pixmaps->read_write_active);
|
||||
else if (record && !active && !wp)
|
||||
label->setPixmap(write_active ? pixmaps->record_write_active : pixmaps->record);
|
||||
else if ((play || pause) && !write_active)
|
||||
label->setPixmap(play ? (active ? pixmaps->play_active : pixmaps->play) : (active ? pixmaps->pause_active : pixmaps->pause));
|
||||
else
|
||||
@@ -280,12 +294,14 @@ 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);
|
||||
record = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Record);
|
||||
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);
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
record_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, RecordWriteActive);
|
||||
read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, ReadWriteActive);
|
||||
empty = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, None);
|
||||
empty_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, Active);
|
||||
@@ -525,10 +541,21 @@ MachineStatus::refreshEmptyIcons()
|
||||
void
|
||||
MachineStatus::refreshIcons()
|
||||
{
|
||||
/* Always show record/play statuses of cassette even if icon updates are disabled, since it's important to indicate play/record modes. */
|
||||
if (cassette_enable) {
|
||||
d->cassette.setRecord(!!cassette->save);
|
||||
d->cassette.setPlay(!cassette->save);
|
||||
}
|
||||
|
||||
/* Check if icons should show activity. */
|
||||
if (!update_icons)
|
||||
return;
|
||||
|
||||
if (cassette_enable) {
|
||||
d->cassette.setWriteActive(machine_status.cassette.write_active);
|
||||
d->cassette.setActive(machine_status.cassette.active);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < FDD_NUM; ++i) {
|
||||
d->fdd[i].setActive(machine_status.fdd[i].active);
|
||||
d->fdd[i].setWriteActive(machine_status.fdd[i].write_active);
|
||||
|
||||
Reference in New Issue
Block a user