Write indicators (except for floppy drives)
This commit is contained in:
BIN
src/qt/icons/write_active.ico
Normal file
BIN
src/qt/icons/write_active.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
@@ -8,6 +8,8 @@ getIndicatorIcon(IconIndicator indicator)
|
||||
switch (indicator) {
|
||||
case Active:
|
||||
return QIcon(":/settings/qt/icons/active.ico");
|
||||
case WriteActive:
|
||||
return QIcon(":/settings/qt/icons/write_active.ico");
|
||||
case Disabled:
|
||||
return QIcon(":/settings/qt/icons/disabled.ico");
|
||||
default:
|
||||
@@ -24,9 +26,13 @@ getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode,
|
||||
return iconPixmap;
|
||||
|
||||
auto painter = QPainter(&iconPixmap);
|
||||
auto indicatorPixmap = getIndicatorIcon(indicator).pixmap(size);
|
||||
auto indicatorPixmap = getIndicatorIcon(indicator == ReadWriteActive ? Active : indicator).pixmap(size);
|
||||
|
||||
painter.drawPixmap(0, 0, indicatorPixmap);
|
||||
if (indicator == ReadWriteActive) {
|
||||
auto writeIndicatorPixmap = getIndicatorIcon(WriteActive).pixmap(size);
|
||||
painter.drawPixmap(0, 0, writeIndicatorPixmap);
|
||||
}
|
||||
painter.end();
|
||||
|
||||
return iconPixmap;
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
enum IconIndicator {
|
||||
None,
|
||||
Active,
|
||||
WriteActive,
|
||||
ReadWriteActive,
|
||||
Disabled,
|
||||
};
|
||||
|
||||
|
||||
@@ -68,6 +68,8 @@ namespace {
|
||||
struct PixmapSetActive {
|
||||
QPixmap normal;
|
||||
QPixmap active;
|
||||
QPixmap write_active;
|
||||
QPixmap read_write_active;
|
||||
void load(const QIcon &icon);
|
||||
};
|
||||
struct PixmapSetDisabled {
|
||||
@@ -85,6 +87,10 @@ struct PixmapSetEmptyActive {
|
||||
QPixmap active;
|
||||
QPixmap empty;
|
||||
QPixmap empty_active;
|
||||
QPixmap write_active;
|
||||
QPixmap read_write_active;
|
||||
QPixmap empty_write_active;
|
||||
QPixmap empty_read_write_active;
|
||||
void load(const QIcon &icon);
|
||||
};
|
||||
struct Pixmaps {
|
||||
@@ -105,6 +111,7 @@ struct StateActive {
|
||||
std::unique_ptr<QLabel> label;
|
||||
PixmapSetActive *pixmaps = nullptr;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
|
||||
void setActive(bool b)
|
||||
{
|
||||
@@ -115,11 +122,23 @@ struct StateActive {
|
||||
refresh();
|
||||
}
|
||||
|
||||
void setWriteActive(bool b)
|
||||
{
|
||||
if (!label || b == write_active)
|
||||
return;
|
||||
|
||||
write_active = b;
|
||||
refresh();
|
||||
}
|
||||
|
||||
void refresh()
|
||||
{
|
||||
if (!label)
|
||||
return;
|
||||
label->setPixmap(active ? pixmaps->active : pixmaps->normal);
|
||||
if (active && write_active)
|
||||
label->setPixmap(pixmaps->read_write_active);
|
||||
else
|
||||
label->setPixmap(write_active ? pixmaps->write_active : (active ? pixmaps->active : pixmaps->normal));
|
||||
}
|
||||
};
|
||||
struct StateEmpty {
|
||||
@@ -145,9 +164,10 @@ struct StateEmpty {
|
||||
};
|
||||
struct StateEmptyActive {
|
||||
std::unique_ptr<QLabel> label;
|
||||
PixmapSetEmptyActive *pixmaps = nullptr;
|
||||
bool empty = false;
|
||||
bool active = false;
|
||||
PixmapSetEmptyActive *pixmaps = nullptr;
|
||||
bool empty = false;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
|
||||
void setActive(bool b)
|
||||
{
|
||||
@@ -157,6 +177,14 @@ struct StateEmptyActive {
|
||||
active = b;
|
||||
refresh();
|
||||
}
|
||||
void setWriteActive(bool b)
|
||||
{
|
||||
if (!label || b == write_active)
|
||||
return;
|
||||
|
||||
write_active = b;
|
||||
refresh();
|
||||
}
|
||||
void setEmpty(bool b)
|
||||
{
|
||||
if (!label || b == empty)
|
||||
@@ -170,9 +198,15 @@ struct StateEmptyActive {
|
||||
if (!label)
|
||||
return;
|
||||
if (empty) {
|
||||
label->setPixmap(active ? pixmaps->empty_active : pixmaps->empty);
|
||||
if (active && write_active)
|
||||
label->setPixmap(pixmaps->empty_read_write_active);
|
||||
else
|
||||
label->setPixmap(write_active ? pixmaps->empty_write_active : (active ? pixmaps->empty_active : pixmaps->empty));
|
||||
} else {
|
||||
label->setPixmap(active ? pixmaps->active : pixmaps->normal);
|
||||
if (active && write_active)
|
||||
label->setPixmap(pixmaps->read_write_active);
|
||||
else
|
||||
label->setPixmap(write_active ? pixmaps->write_active : (active ? pixmaps->active : pixmaps->normal));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -191,6 +225,9 @@ PixmapSetActive::load(const QIcon &icon)
|
||||
{
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, ReadWriteActive);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -203,10 +240,14 @@ PixmapSetDisabled::load(const QIcon &icon)
|
||||
void
|
||||
PixmapSetEmptyActive::load(const QIcon &icon)
|
||||
{
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
empty = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, None);
|
||||
empty_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, Active);
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
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);
|
||||
empty_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, WriteActive);
|
||||
empty_read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, ReadWriteActive);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,10 +258,13 @@ struct MachineStatus::States {
|
||||
{
|
||||
pixmaps.cartridge.load(QIcon(":/settings/qt/icons/cartridge.ico"));
|
||||
pixmaps.cassette.load(QIcon(":/settings/qt/icons/cassette.ico"));
|
||||
pixmaps.floppy_disabled.normal = QIcon(":/settings/qt/icons/floppy_disabled.ico").pixmap(pixmap_size);
|
||||
pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.normal = QIcon(":/settings/qt/icons/floppy_disabled.ico").pixmap(pixmap_size);
|
||||
pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.read_write_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_write_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_read_write_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_525.load(QIcon(":/settings/qt/icons/floppy_525.ico"));
|
||||
pixmaps.floppy_35.load(QIcon(":/settings/qt/icons/floppy_35.ico"));
|
||||
pixmaps.cdrom.load(QIcon(":/settings/qt/icons/cdrom.ico"));
|
||||
@@ -435,49 +479,79 @@ 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].setWriteActive(machine_status.fdd[i].write_active);
|
||||
}
|
||||
for (size_t i = 0; i < CDROM_NUM; ++i) {
|
||||
d->cdrom[i].setActive(machine_status.cdrom[i].active);
|
||||
if (machine_status.cdrom[i].active)
|
||||
d->cdrom[i].setWriteActive(machine_status.cdrom[i].write_active);
|
||||
if (machine_status.cdrom[i].active) {
|
||||
ui_sb_update_icon(SB_CDROM | i, 0);
|
||||
}
|
||||
if (machine_status.cdrom[i].write_active) {
|
||||
ui_sb_update_icon_write(SB_CDROM | i, 0);
|
||||
}
|
||||
}
|
||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
||||
d->zip[i].setActive(machine_status.zip[i].active);
|
||||
d->zip[i].setWriteActive(machine_status.zip[i].write_active);
|
||||
if (machine_status.zip[i].active)
|
||||
ui_sb_update_icon(SB_ZIP | i, 0);
|
||||
if (machine_status.zip[i].write_active)
|
||||
ui_sb_update_icon_write(SB_ZIP | i, 0);
|
||||
}
|
||||
for (size_t i = 0; i < MO_NUM; i++) {
|
||||
d->mo[i].setActive(machine_status.mo[i].active);
|
||||
d->mo[i].setWriteActive(machine_status.mo[i].write_active);
|
||||
if (machine_status.mo[i].active)
|
||||
ui_sb_update_icon(SB_MO | i, 0);
|
||||
if (machine_status.mo[i].write_active)
|
||||
ui_sb_update_icon_write(SB_MO | i, 0);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < HDD_BUS_USB; i++) {
|
||||
d->hdds[i].setActive(machine_status.hdd[i].active);
|
||||
d->hdds[i].setWriteActive(machine_status.hdd[i].write_active);
|
||||
if (machine_status.hdd[i].active)
|
||||
ui_sb_update_icon(SB_HDD | i, 0);
|
||||
if (machine_status.hdd[i].write_active)
|
||||
ui_sb_update_icon_write(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].setWriteActive(machine_status.net[i].write_active);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MachineStatus::clearActivity()
|
||||
{
|
||||
for (auto &fdd : d->fdd)
|
||||
for (auto &fdd : d->fdd) {
|
||||
fdd.setActive(false);
|
||||
for (auto &cdrom : d->cdrom)
|
||||
fdd.setWriteActive(false);
|
||||
}
|
||||
for (auto &cdrom : d->cdrom) {
|
||||
cdrom.setActive(false);
|
||||
for (auto &zip : d->zip)
|
||||
cdrom.setWriteActive(false);
|
||||
}
|
||||
for (auto &zip : d->zip) {
|
||||
zip.setActive(false);
|
||||
for (auto &mo : d->mo)
|
||||
zip.setWriteActive(false);
|
||||
}
|
||||
for (auto &mo : d->mo) {
|
||||
mo.setActive(false);
|
||||
for (auto &hdd : d->hdds)
|
||||
mo.setWriteActive(false);
|
||||
}
|
||||
for (auto &hdd : d->hdds) {
|
||||
hdd.setActive(false);
|
||||
for (auto &net : d->net)
|
||||
hdd.setWriteActive(false);
|
||||
}
|
||||
for (auto &net : d->net) {
|
||||
net.setActive(false);
|
||||
net.setWriteActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -562,6 +636,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->fdd[i].label = std::make_unique<ClickableLabel>();
|
||||
d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty());
|
||||
d->fdd[i].setActive(false);
|
||||
d->fdd[i].setWriteActive(false);
|
||||
d->fdd[i].refresh();
|
||||
connect((ClickableLabel *) d->fdd[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->floppyMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->floppyMenus[i]->sizeHint().height()));
|
||||
@@ -578,6 +653,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->cdrom[i].label = std::make_unique<ClickableLabel>();
|
||||
d->cdrom[i].setEmpty(QString(cdrom[i].image_path).isEmpty());
|
||||
d->cdrom[i].setActive(false);
|
||||
d->cdrom[i].setWriteActive(false);
|
||||
d->cdrom[i].refresh();
|
||||
connect((ClickableLabel *) d->cdrom[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->cdromMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->cdromMenus[i]->sizeHint().height()));
|
||||
@@ -594,6 +670,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->zip[i].label = std::make_unique<ClickableLabel>();
|
||||
d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty());
|
||||
d->zip[i].setActive(false);
|
||||
d->zip[i].setWriteActive(false);
|
||||
d->zip[i].refresh();
|
||||
connect((ClickableLabel *) d->zip[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->zipMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->zipMenus[i]->sizeHint().height()));
|
||||
@@ -610,6 +687,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->mo[i].label = std::make_unique<ClickableLabel>();
|
||||
d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty());
|
||||
d->mo[i].setActive(false);
|
||||
d->mo[i].setWriteActive(false);
|
||||
d->mo[i].refresh();
|
||||
connect((ClickableLabel *) d->mo[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->moMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->moMenus[i]->sizeHint().height()));
|
||||
@@ -626,6 +704,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->net[i].label = std::make_unique<ClickableLabel>();
|
||||
d->net[i].setEmpty(!network_is_connected(i));
|
||||
d->net[i].setActive(false);
|
||||
d->net[i].setWriteActive(false);
|
||||
d->net[i].refresh();
|
||||
d->net[i].label->setToolTip(MediaMenu::ptr->netMenus[i]->title());
|
||||
connect((ClickableLabel *) d->net[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
@@ -638,6 +717,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if ((has_mfm || (hdc_name.left(5) == QStringLiteral("st506"))) && (c_mfm > 0)) {
|
||||
d->hdds[HDD_BUS_MFM].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_MFM].setActive(false);
|
||||
d->hdds[HDD_BUS_MFM].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_MFM].refresh();
|
||||
d->hdds[HDD_BUS_MFM].label->setToolTip(tr("Hard disk (%1)").arg("MFM/RLL"));
|
||||
auto tooltip = d->hdds[HDD_BUS_MFM].label->toolTip();
|
||||
@@ -653,6 +733,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if ((has_esdi || (hdc_name.left(4) == QStringLiteral("esdi"))) && (c_esdi > 0)) {
|
||||
d->hdds[HDD_BUS_ESDI].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_ESDI].setActive(false);
|
||||
d->hdds[HDD_BUS_ESDI].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_ESDI].refresh();
|
||||
d->hdds[HDD_BUS_ESDI].label->setToolTip(tr("Hard disk (%1)").arg("ESDI"));
|
||||
auto tooltip = d->hdds[HDD_BUS_ESDI].label->toolTip();
|
||||
@@ -668,6 +749,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if ((has_xta || (hdc_name.left(3) == QStringLiteral("xta"))) && (c_xta > 0)) {
|
||||
d->hdds[HDD_BUS_XTA].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_XTA].setActive(false);
|
||||
d->hdds[HDD_BUS_XTA].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_XTA].refresh();
|
||||
d->hdds[HDD_BUS_XTA].label->setToolTip(tr("Hard disk (%1)").arg("XTA"));
|
||||
auto tooltip = d->hdds[HDD_BUS_XTA].label->toolTip();
|
||||
@@ -686,6 +768,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if (c_ide > 0) {
|
||||
d->hdds[HDD_BUS_IDE].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_IDE].setActive(false);
|
||||
d->hdds[HDD_BUS_IDE].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_IDE].refresh();
|
||||
d->hdds[HDD_BUS_IDE].label->setToolTip(tr("Hard disk (%1)").arg("IDE"));
|
||||
auto tooltip = d->hdds[HDD_BUS_IDE].label->toolTip();
|
||||
@@ -701,6 +784,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if (c_atapi > 0) {
|
||||
d->hdds[HDD_BUS_ATAPI].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_ATAPI].setActive(false);
|
||||
d->hdds[HDD_BUS_ATAPI].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_ATAPI].refresh();
|
||||
d->hdds[HDD_BUS_ATAPI].label->setToolTip(tr("Hard disk (%1)").arg("ATAPI"));
|
||||
auto tooltip = d->hdds[HDD_BUS_ATAPI].label->toolTip();
|
||||
@@ -720,6 +804,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
(c_scsi > 0)) {
|
||||
d->hdds[HDD_BUS_SCSI].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_SCSI].setActive(false);
|
||||
d->hdds[HDD_BUS_SCSI].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_SCSI].refresh();
|
||||
d->hdds[HDD_BUS_SCSI].label->setToolTip(tr("Hard disk (%1)").arg("SCSI"));
|
||||
auto tooltip = d->hdds[HDD_BUS_SCSI].label->toolTip();
|
||||
|
||||
@@ -314,4 +314,41 @@ ui_sb_update_icon(int tag, int active)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ui_sb_update_icon_write(int tag, int write)
|
||||
{
|
||||
const auto temp = static_cast<unsigned int>(tag);
|
||||
const int category = static_cast<int>(temp & 0xfffffff0);
|
||||
const int item = tag & 0xf;
|
||||
|
||||
switch (category) {
|
||||
default:
|
||||
case SB_CASSETTE:
|
||||
case SB_CARTRIDGE:
|
||||
break;
|
||||
case SB_FLOPPY:
|
||||
machine_status.fdd[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_CDROM:
|
||||
machine_status.cdrom[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_ZIP:
|
||||
machine_status.zip[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_MO:
|
||||
machine_status.mo[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_HDD:
|
||||
machine_status.hdd[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_NETWORK:
|
||||
machine_status.net[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_SOUND:
|
||||
case SB_TEXT:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user