From 6c81074f0a87f215a00f22dfad8122ccfc3aad32 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 28 Nov 2021 20:49:05 +0100 Subject: [PATCH] added status icons --- src/qt/CMakeLists.txt | 5 +- src/qt/qt_machinestatus.cpp | 408 ++++++++++++++++++++++++++++++++++++ src/qt/qt_machinestatus.hpp | 32 +++ src/qt/qt_machinestatus.ui | 44 ++++ src/qt/qt_mainwindow.cpp | 57 ++--- src/qt/qt_mainwindow.hpp | 36 +--- src/qt/qt_mainwindow.ui | 13 +- src/qt/qt_ui.cpp | 63 +++--- src/qt_resources.qrc | 51 +++-- 9 files changed, 593 insertions(+), 116 deletions(-) create mode 100644 src/qt/qt_machinestatus.cpp create mode 100644 src/qt/qt_machinestatus.hpp create mode 100644 src/qt/qt_machinestatus.ui diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index ab923e042..a9a80d042 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -1,5 +1,3 @@ -find_package(Qt5 COMPONENTS Core Widgets REQUIRED) - # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) @@ -15,6 +13,9 @@ add_library(ui STATIC qt_mainwindow.cpp qt_mainwindow.hpp qt_mainwindow.ui + qt_machinestatus.cpp + qt_machinestatus.hpp + qt_machinestatus.ui qt_settings.cpp qt_settings.hpp diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp new file mode 100644 index 000000000..d876343d7 --- /dev/null +++ b/src/qt/qt_machinestatus.cpp @@ -0,0 +1,408 @@ +#include "qt_machinestatus.hpp" +#include "ui_qt_machinestatus.h" + +extern "C" { +#define EMU_CPU_H // superhack - don't want timer.h to include cpu.h here, and some combo is preventing a compile +extern uint64_t tsc; + +#include <86box/hdd.h> +#include <86box/timer.h> +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/cartridge.h> +#include <86box/cassette.h> +#include <86box/cdrom.h> +#include <86box/fdd.h> +#include <86box/hdc.h> +#include <86box/scsi.h> +#include <86box/scsi_device.h> +#include <86box/zip.h> +#include <86box/mo.h> +#include <86box/plat.h> +#include <86box/machine.h> +#include <86box/network.h> +#include <86box/ui.h> +}; + +#include +#include +#include +#include + +namespace { + struct PixmapSetActive { + QPixmap normal; + QPixmap active; + void load(const QString& basePath); + }; + struct PixmapSetEmpty { + QPixmap normal; + QPixmap empty; + void load(const QString& basePath); + }; + struct PixmapSetEmptyActive { + QPixmap normal; + QPixmap active; + QPixmap empty; + QPixmap empty_active; + void load(const QString& basePath); + }; + struct Pixmaps { + PixmapSetEmpty cartridge; + PixmapSetEmptyActive cassette; + PixmapSetEmptyActive floppy_disabled; + PixmapSetEmptyActive floppy_525; + PixmapSetEmptyActive floppy_35; + PixmapSetEmptyActive cdrom; + PixmapSetEmptyActive zip; + PixmapSetEmptyActive mo; + PixmapSetActive hd; + PixmapSetActive net; + QPixmap sound; + }; + + struct StateActive { + QLabel label; + QTimer timer; + PixmapSetActive* pixmaps = nullptr; + bool active = false; + + void setActive(bool b) { + active = b; + label.setPixmap(active ? pixmaps->active : pixmaps->normal); + timer.start(75); + } + }; + struct StateEmpty { + QLabel label; + PixmapSetEmpty* pixmaps = nullptr; + bool empty = false; + + void setEmpty(bool e) { + empty = e; + label.setPixmap(empty ? pixmaps->empty : pixmaps->normal); + } + }; + struct StateEmptyActive { + QLabel label; + QTimer timer; + PixmapSetEmptyActive* pixmaps = nullptr; + bool empty = false; + bool active = false; + + void setActive(bool b) { + active = b; + refresh(); + timer.start(75); + } + void setEmpty(bool b) { + empty = b; + refresh(); + } + void refresh() { + if (empty) { + label.setPixmap(active ? pixmaps->empty_active : pixmaps->empty); + } else { + label.setPixmap(active ? pixmaps->active : pixmaps->normal); + } + } + }; + + static const QSize pixmap_size(32, 32); + static const QString pixmap_empty = QStringLiteral("_empty"); + static const QString pixmap_active = QStringLiteral("_active"); + static const QString pixmap_empty_active = QStringLiteral("_empty_active"); + void PixmapSetEmpty::load(const QString &basePath) { + normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); + } + + void PixmapSetActive::load(const QString &basePath) { + normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); + } + + void PixmapSetEmptyActive::load(const QString &basePath) { + normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); + empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); + empty_active = QIcon(basePath.arg(pixmap_empty_active)).pixmap(pixmap_size); + } +} + +struct MachineStatus::States { + Pixmaps pixmaps; + + States(QObject* parent) { + pixmaps.cartridge.load(":/settings/win/icons/cartridge%1.ico"); + pixmaps.cassette.load(":/settings/win/icons/cassette%1.ico"); + pixmaps.floppy_disabled.normal = QIcon(QStringLiteral(":/settings/win/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_525.load(":/settings/win/icons/floppy_525%1.ico"); + pixmaps.floppy_35.load(":/settings/win/icons/floppy_35%1.ico"); + pixmaps.cdrom.load(":/settings/win/icons/cdrom%1.ico"); + pixmaps.zip.load(":/settings/win/icons/zip%1.ico"); + pixmaps.mo.load(":/settings/win/icons/mo%1.ico"); + pixmaps.hd.load(":/settings/win/icons/hard_disk%1.ico"); + pixmaps.net.load(":/settings/win/icons/network%1.ico"); + pixmaps.sound = QIcon(":/settings/win/icons/sound.ico").pixmap(pixmap_size); + + cartridge[0].pixmaps = &pixmaps.cartridge; + cartridge[1].pixmaps = &pixmaps.cartridge; + cassette.pixmaps = &pixmaps.cassette; + QObject::connect(&cassette.timer, &QTimer::timeout, parent, [&]{ cassette.setActive(false); }); + for (auto& f : fdd) { + f.pixmaps = &pixmaps.floppy_disabled; + QObject::connect(&f.timer, &QTimer::timeout, parent, [&]{ f.setActive(false); }); + } + for (auto& c : cdrom) { + c.pixmaps = &pixmaps.cdrom; + QObject::connect(&c.timer, &QTimer::timeout, parent, [&]{ c.setActive(false); }); + } + for (auto& z : zip) { + z.pixmaps = &pixmaps.zip; + QObject::connect(&z.timer, &QTimer::timeout, parent, [&]{ z.setActive(false); }); + } + for (auto& m : mo) { + m.pixmaps = &pixmaps.mo; + QObject::connect(&m.timer, &QTimer::timeout, parent, [&]{ m.setActive(false); }); + } + for (auto& h : hdds) { + h.pixmaps = &pixmaps.hd; + QObject::connect(&h.timer, &QTimer::timeout, parent, [&]{ h.setActive(false); }); + } + net.pixmaps = &pixmaps.net; + sound.setPixmap(pixmaps.sound); + } + + std::array cartridge; + StateEmptyActive cassette; + std::array fdd; + std::array cdrom; + std::array zip; + std::array mo; + std::array hdds; + StateActive net; + QLabel sound; +}; + +MachineStatus::MachineStatus(QWidget *parent) : + QWidget(parent), + ui(new Ui::MachineStatus) +{ + ui->setupUi(this); + d = std::make_unique(this); +} + +MachineStatus::~MachineStatus() +{ + delete ui; +} + +static int hdd_count(int bus) { + int c = 0; + int i; + + for (i = 0; i < HDD_NUM; i++) { + if (hdd[i].bus == bus) { + c++; + } + } + + return(c); +} + +void MachineStatus::refresh() { + bool has_cart = machines[machine].flags & MACHINE_CARTRIDGE; + bool has_mfm = machines[machine].flags & MACHINE_MFM; + bool has_xta = machines[machine].flags & MACHINE_XTA; + bool has_esdi = machines[machine].flags & MACHINE_ESDI; + bool has_ide = machines[machine].flags & MACHINE_IDE_QUAD; + bool has_scsi = machines[machine].flags & MACHINE_SCSI_DUAL; + + int c_mfm = hdd_count(HDD_BUS_MFM); + int c_esdi = hdd_count(HDD_BUS_ESDI); + int c_xta = hdd_count(HDD_BUS_XTA); + int c_ide = hdd_count(HDD_BUS_IDE); + int c_scsi = hdd_count(HDD_BUS_SCSI); + int do_net = (network_type == NET_TYPE_NONE) || (network_card == 0); + + while (ui->statusIcons->count() > 0) { + auto item = ui->statusIcons->itemAt(0); + ui->statusIcons->removeItem(item); + delete item; + } + + if (cassette_enable) { + d->cassette.setEmpty(QString(cassette_fname).isEmpty()); + ui->statusIcons->addWidget(&d->cassette.label); + } + + if (has_cart) { + for (int i = 0; i < 2; ++i) { + d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); + ui->statusIcons->addWidget(&d->cartridge[i].label); + } + } + + for (size_t i = 0; i < FDD_NUM; ++i) { + if (fdd_get_type(i) != 0) { + int t = fdd_get_type(i); + if (t == 0) { + d->fdd[i].pixmaps = &d->pixmaps.floppy_disabled; + } else if (t >= 1 && t <= 6) { + d->fdd[i].pixmaps = &d->pixmaps.floppy_525; + } else { + d->fdd[i].pixmaps = &d->pixmaps.floppy_35; + } + d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); + d->fdd[i].setActive(false); + ui->statusIcons->addWidget(&d->fdd[i].label); + } + } + + auto hdc_name = QString(hdc_get_internal_name(hdc_current)); + for (size_t i = 0; i < CDROM_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && + !has_ide && hdc_name != QStringLiteral("ide")) + continue; + if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !has_scsi && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (cdrom[i].bus_type != 0) { + d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); + d->cdrom[i].setActive(false); + ui->statusIcons->addWidget(&d->cdrom[i].label); + } + } + for (size_t i = 0; i < ZIP_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && + !has_ide && hdc_name != QStringLiteral("ide")) + continue; + if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !has_scsi && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (zip_drives[i].bus_type != 0) { + d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); + d->zip[i].setActive(false); + ui->statusIcons->addWidget(&d->zip[i].label); + } + } + for (size_t i = 0; i < MO_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && + !has_ide && hdc_name != QStringLiteral("ide")) + continue; + if ((mo_drives[i].bus_type == MO_BUS_SCSI) && !has_scsi && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (mo_drives[i].bus_type != 0) { + d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); + d->mo[i].setActive(false); + ui->statusIcons->addWidget(&d->mo[i].label); + } + } + + if ((has_mfm || hdc_name == QStringLiteral("st506")) && c_mfm > 0) { + d->hdds[HDD_BUS_MFM].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_MFM].label); + } + if ((has_esdi || hdc_name == QStringLiteral("esdi")) && c_esdi > 0) { + d->hdds[HDD_BUS_ESDI].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_ESDI].label); + } + if ((has_xta || hdc_name == QStringLiteral("xta")) && c_xta > 0) { + d->hdds[HDD_BUS_XTA].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_XTA].label); + } + if ((has_ide || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { + d->hdds[HDD_BUS_IDE].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_IDE].label); + } + if ((has_scsi || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || + (scsi_card_current[2] != 0) || (scsi_card_current[3] != 0)) && c_scsi > 0) { + d->hdds[HDD_BUS_SCSI].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_SCSI].label); + } + + if (do_net) { + d->net.setActive(false); + ui->statusIcons->addWidget(&d->net.label); + } + ui->statusIcons->addWidget(&d->sound); + ui->statusIcons->addItem(new QSpacerItem(20, 40, QSizePolicy::Expanding, QSizePolicy::Minimum)); +} + +void MachineStatus::setActivity(int tag, bool active) { + int category = tag & 0xfffffff0; + int item = tag & 0xf; + switch (category) { + case SB_CASSETTE: + break; + case SB_CARTRIDGE: + break; + case SB_FLOPPY: + d->fdd[item].setActive(active); + break; + case SB_CDROM: + d->cdrom[item].setActive(active); + break; + case SB_ZIP: + d->zip[item].setActive(active); + break; + case SB_MO: + d->mo[item].setActive(active); + break; + case SB_HDD: + d->hdds[item].setActive(active); + break; + case SB_NETWORK: + d->net.setActive(active); + break; + case SB_SOUND: + break; + case SB_TEXT: + break; + } +} + +void MachineStatus::setEmpty(int tag, bool empty) { + int category = tag & 0xfffffff0; + int item = tag & 0xf; + switch (category) { + case SB_CASSETTE: + d->cassette.setEmpty(empty); + break; + case SB_CARTRIDGE: + d->cartridge[item].setEmpty(empty); + break; + case SB_FLOPPY: + d->fdd[item].setEmpty(empty); + break; + case SB_CDROM: + d->cdrom[item].setEmpty(empty); + break; + case SB_ZIP: + d->zip[item].setEmpty(empty); + break; + case SB_MO: + d->mo[item].setEmpty(empty); + break; + case SB_HDD: + break; + case SB_NETWORK: + break; + case SB_SOUND: + break; + case SB_TEXT: + break; + } +} + diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp new file mode 100644 index 000000000..e3f0a6409 --- /dev/null +++ b/src/qt/qt_machinestatus.hpp @@ -0,0 +1,32 @@ +#ifndef QT_MACHINESTATUS_HPP +#define QT_MACHINESTATUS_HPP + +#include + +class QLabel; + +namespace Ui { +class MachineStatus; +} + +class MachineStatus : public QWidget +{ + Q_OBJECT + +public: + explicit MachineStatus(QWidget *parent = nullptr); + ~MachineStatus(); + +public slots: + void refresh(); + void setActivity(int tag, bool active); + void setEmpty(int tag, bool active); + +private: + Ui::MachineStatus *ui; + + struct States; + std::unique_ptr d; +}; + +#endif // QT_MACHINESTATUS_HPP diff --git a/src/qt/qt_machinestatus.ui b/src/qt/qt_machinestatus.ui new file mode 100644 index 000000000..b05f1f8c3 --- /dev/null +++ b/src/qt/qt_machinestatus.ui @@ -0,0 +1,44 @@ + + + MachineStatus + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + + + diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d9ae9500d..8c179bb2c 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -3,8 +3,8 @@ extern "C" { #include <86box/86box.h> -#include <86box/keyboard.h> -#include <86box/mouse.h> +//#include <86box/keyboard.h> +//#include <86box/mouse.h> #include <86box/config.h> #include <86box/plat.h> @@ -18,23 +18,6 @@ extern "C" { #include "qt_settings.hpp" -CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent) {} -CentralWidget::~CentralWidget() = default; - -MainWindowLabel::MainWindowLabel(QWidget *parent) : QLabel(parent) { - setMouseTracking(true); -} -MainWindowLabel::~MainWindowLabel() = default; -void MainWindowLabel::mouseMoveEvent(QMouseEvent *event) { - pos_ = event->pos(); -} -void MainWindowLabel::mousePressEvent(QMouseEvent *event) { - buttons_ = event->buttons(); -} -void MainWindowLabel::mouseReleaseEvent(QMouseEvent *event) { - buttons_ = event->buttons(); -} - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -65,6 +48,10 @@ MainWindow::MainWindow(QWidget *parent) : config_save(); }); + connect(this, &MainWindow::updateStatusBarPanes, ui->machineStatus, &MachineStatus::refresh); + connect(this, &MainWindow::updateStatusBarActivity, ui->machineStatus, &MachineStatus::setActivity); + connect(this, &MainWindow::updateStatusBarEmpty, ui->machineStatus, &MachineStatus::setEmpty); + ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); @@ -275,24 +262,24 @@ static const uint16_t xfree86_keycode_table[keycode_entries] = { /* 135 */ 0x15d, // Application }; -static void handle_keypress_event(int state, quint32 native_scancode) { - if (native_scancode > keycode_entries) { - return; - } - uint16_t translated_code = xfree86_keycode_table[native_scancode]; - if (translated_code == 0) { - return; - } - keyboard_input(state, translated_code); +//static void handle_keypress_event(int state, quint32 native_scancode) { +// if (native_scancode > keycode_entries) { +// return; +// } +// uint16_t translated_code = xfree86_keycode_table[native_scancode]; +// if (translated_code == 0) { +// return; +// } +// keyboard_input(state, translated_code); - if (keyboard_isfsexit() > 0) { - plat_setfullscreen(0); - } +// if (keyboard_isfsexit() > 0) { +// plat_setfullscreen(0); +// } - if (keyboard_ismsexit() > 0) { - plat_mouse_capture(0); - } -} +// if (keyboard_ismsexit() > 0) { +// plat_mouse_capture(0); +// } +//} void MainWindow::on_actionFullscreen_triggered() { setFullscreen(true); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 25227d04b..3428ca098 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -8,37 +8,6 @@ namespace Ui { class MainWindow; } -class MainWindowLabel : public QLabel -{ - Q_OBJECT -public: - explicit MainWindowLabel(QWidget *parent = nullptr); - ~MainWindowLabel(); - - const QPoint& pos() { return pos_; } - Qt::MouseButtons buttons() { return buttons_; } -protected: - void mouseMoveEvent(QMouseEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; -private: - QPoint pos_; - Qt::MouseButtons buttons_; -}; - -class CentralWidget : public QWidget -{ - Q_OBJECT -public: - explicit CentralWidget(QWidget *parent = nullptr); - ~CentralWidget(); - - void setSizeHint(QSize size) { size_ = size; } - QSize sizeHint() const override { return size_; } -private: - QSize size_; -}; - class MainWindow : public QMainWindow { Q_OBJECT @@ -50,14 +19,15 @@ signals: void paint(const QImage& image); void resizeContents(int w, int h); void pollMouse(); + void updateStatusBarPanes(); + void updateStatusBarActivity(int tag, bool active); + void updateStatusBarEmpty(int tag, bool empty); void setFullscreen(bool state); void setMouseCapture(bool state); private slots: void on_actionFullscreen_triggered(); - -private slots: void on_actionSettings_triggered(); void on_actionExit_triggered(); void on_actionPause_triggered(); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 9e77eee55..0e854a8f2 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -7,7 +7,7 @@ 0 0 724 - 274 + 427 @@ -36,6 +36,9 @@ 0 + + + @@ -138,6 +141,14 @@ + + + MachineStatus + QWidget +
qt_machinestatus.hpp
+ 1 +
+
diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 05e14332e..08614a48e 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -1,5 +1,6 @@ #include +#include #include #include @@ -17,43 +18,12 @@ extern "C" { #include <86box/plat.h> -void -ui_sb_update_icon_state(int tag, int state) -{ - -} - -void -ui_sb_update_icon(int tag, int active) -{ - -} - void plat_delay_ms(uint32_t count) { QThread::msleep(count); } -void -ui_sb_update_tip(int arg) -{ - -} - -void -ui_sb_update_panes() -{ - -} - -void ui_sb_bugui(char *str) -{ - -} - -void ui_sb_set_ready(int ready) {} - wchar_t* ui_window_title(wchar_t* str) { if (str == nullptr) { @@ -108,4 +78,35 @@ void ui_sb_set_text_w(wchar_t *wstr) { main_window->statusBar()->showMessage(QString::fromWCharArray(wstr)); } +void +ui_sb_update_tip(int arg) { + qDebug() << Q_FUNC_INFO << arg; +} + +void +ui_sb_update_panes() { + main_window->updateStatusBarPanes(); +} + +void ui_sb_bugui(char *str) { + main_window->statusBar()->showMessage(str); +} + +void ui_sb_set_ready(int ready) { + qDebug() << Q_FUNC_INFO << ready; +} + +void +ui_sb_update_icon_state(int tag, int state) { + if (main_window == nullptr) { + return; + } + main_window->updateStatusBarEmpty(tag, state > 0 ? true : false); +} + +void +ui_sb_update_icon(int tag, int active) { + main_window->updateStatusBarActivity(tag, active > 0 ? true : false); +} + } diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index b542fb305..8c66e5ca2 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -1,24 +1,47 @@ - win/icons/machine.ico + win/icons/cartridge.ico + win/icons/cartridge_empty.ico + win/icons/cassette.ico + win/icons/cassette_active.ico + win/icons/cassette_empty.ico + win/icons/cassette_empty_active.ico + win/icons/cdrom.ico + win/icons/cdrom_active.ico + win/icons/cdrom_disabled.ico + win/icons/cdrom_empty.ico + win/icons/cdrom_empty_active.ico win/icons/display.ico - win/icons/input_devices.ico - win/icons/sound.ico - win/icons/network.ico - win/icons/ports.ico - win/icons/storage_controllers.ico - win/icons/hard_disk.ico + win/icons/floppy_35.ico + win/icons/floppy_35_active.ico + win/icons/floppy_35_empty.ico + win/icons/floppy_35_empty_active.ico + win/icons/floppy_525.ico + win/icons/floppy_525_active.ico + win/icons/floppy_525_empty.ico + win/icons/floppy_525_empty_active.ico win/icons/floppy_and_cdrom_drives.ico + win/icons/floppy_disabled.ico + win/icons/hard_disk.ico + win/icons/hard_disk_active.ico + win/icons/input_devices.ico + win/icons/machine.ico + win/icons/mo.ico + win/icons/mo_active.ico + win/icons/mo_disabled.ico + win/icons/mo_empty.ico + win/icons/mo_empty_active.ico + win/icons/network.ico + win/icons/network_active.ico win/icons/other_peripherals.ico win/icons/other_removable_devices.ico - win/icons/floppy_35.ico - win/icons/floppy_525.ico - win/icons/floppy_disabled.ico - win/icons/cdrom_disabled.ico - win/icons/cdrom.ico - win/icons/mo.ico - win/icons/mo_disabled.ico + win/icons/ports.ico + win/icons/sound.ico + win/icons/storage_controllers.ico win/icons/zip.ico + win/icons/zip_active.ico win/icons/zip_disabled.ico + win/icons/zip_empty.ico + win/icons/zip_empty_active.ico