--- nono/wx/wxstatuspanel.h 2026/04/29 17:05:16 1.1.1.6 +++ nono/wx/wxstatuspanel.h 2026/04/29 17:05:23 1.1.1.8 @@ -12,14 +12,12 @@ #include "wxtextpanel.h" #include "fdd.h" -#include "scsibus.h" #include -class HostNetDevice; class Indicator; -class NewsCtlrDevice; class PowerDevice; class Syncer; +class Status; class WXStatusPanel; // インジケータ情報 (ほぼ構造体) @@ -39,7 +37,16 @@ class Indicator SCSI5, SCSI6, SCSI7, - LAN, + VBLK0, + VBLK1, + VBLK2, + VBLK3, + VBLK4, + VBLK5, + VBLK6, + VBLK7, + LAN0, + LAN1, FDD0, FDD1, FDD2, @@ -52,13 +59,17 @@ class Indicator using eventfunc_t = void (WXStatusPanel::*)(const Indicator *); public: Indicator() { } - Indicator(int id_, int minlen_, dispfunc_t draw_) { + // 文字列の長さだけ指定する場合 + Indicator(int id_, dispfunc_t draw_, int minlen_, Status *stat_) { id = id_; - minlen = minlen_; draw = draw_; + stat = stat_; + minlen = minlen_; } - Indicator(int id_, int minlen_, dispfunc_t draw_, const std::string& text_) - : Indicator(id_, minlen_, draw_) + // 文字列で指定する場合 + Indicator(int id_, dispfunc_t draw_, const std::string& text_, + Status *stat_) + : Indicator(id_, draw_, text_.length(), stat_) { text = text_; } @@ -67,6 +78,9 @@ class Indicator // インジケータ識別子 int id {}; + // 対応する状態 + Status *stat {}; + // 枠内の最小文字列長。 // 枠の大きさはこの文字列長と text.length() の長いほうで描画される。 int minlen {}; @@ -105,11 +119,6 @@ class WXStatusPanel : public WXTextPanel { using inherited = WXTextPanel; - struct FDstat { - bool loaded {}; - FDDDevice::LED access_led {}; - bool eject_led {}; - }; public: WXStatusPanel(wxWindow *parent); virtual ~WXStatusPanel() override; @@ -133,6 +142,7 @@ class WXStatusPanel : public WXTextPanel void LayoutIndicators(); void DrawPerf(const Indicator *); void DrawSCSI(const Indicator *); + void DrawVBlk(const Indicator *); void DrawNet(const Indicator *); void DrawFD(const Indicator *); void DrawNewsLED1(const Indicator *); @@ -143,34 +153,19 @@ class WXStatusPanel : public WXTextPanel void ContextMenuCD(const Indicator *); void ContextMenuFD(const Indicator *); + // 状態 + std::vector stats {}; + // インジケータ情報 std::vector indicators {}; // インジケータ表示用 - PowerDevice *power {}; bool ispower {}; bool powerled {}; - Syncer *syncer {}; int perf_mode {}; int perf_rate {}; - std::shared_ptr scsibus {}; - uint8 scsi_bsy {}; - bool scsi_out {}; - uint8 scsi_loaded {}; - enum { - NOT_AVAILABLE = -1, // 存在しない (Nereid なし X68k とか) - DISABLE = 0, // 存在してホスト側が無効 (driver = none) - ENABLE = 1, // 存在してホスト側が有効 - } net_ok {}; - HostNetDevice *hostnet {}; - uint64 net_tx_pkts {}; - uint64 net_rx_pkts {}; - bool net_tx_active {}; - bool net_rx_active {}; - std::vector fdd_vector {}; // 存在するドライブのリスト - std::array fdstat {}; // こっちは穴空き配列 - NewsCtlrDevice *newsctlr {}; - int newsled {}; + std::array scsi_loaded {}; + std::array fd_loaded {}; // 丸いアクセスマーク (X68k FD 用) std::unique_ptr accmark /*{}*/; @@ -178,6 +173,9 @@ class WXStatusPanel : public WXTextPanel // 背景再描画 bool refresh_background {}; + PowerDevice *power {}; + Syncer *syncer {}; + // タイマー wxTimer timer {};