Annotation of nono/wx/wxmpumonitor.cpp, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: #include "wxmpumonitor.h"
                      8: #include "wxtextscreen.h"
                      9: #include "m88200.h"
                     10: 
                     11: //
                     12: // CMMU キャッシュウィンドウ用のパネル
                     13: // (マウスイベントを受け取るため)
                     14: //
                     15: 
                     16: // イベントテーブル
                     17: wxBEGIN_EVENT_TABLE(WXCacheTextScreen, inherited)
                     18:        EVT_LEFT_DOWN(WXCacheTextScreen::OnLeftDown)
                     19: wxEND_EVENT_TABLE()
                     20: 
                     21: // コンストラクタ
                     22: WXCacheTextScreen::WXCacheTextScreen(wxWindow *parent, int col_, int row_,
                     23:        const uint16 *textbuf_)
                     24:        : inherited(parent, col_, row_, textbuf_)
                     25: {
                     26:        parentwindow = dynamic_cast<WXCacheWindow*>(parent);
                     27: }
                     28: 
                     29: // デストラクタ
                     30: WXCacheTextScreen::~WXCacheTextScreen()
                     31: {
                     32: }
                     33: 
                     34: // マウス左クリックイベント
                     35: void
                     36: WXCacheTextScreen::OnLeftDown(wxMouseEvent& event)
                     37: {
                     38:        wxPoint pos = event.GetPosition();
                     39: 
                     40:        // テキストの桁数、行数
                     41:        int tx = pos.x / font_width;
                     42:        int ty = pos.y / font_height;
                     43: 
                     44:        // 親で処理
                     45:        parentwindow->DoLeftDown(tx, ty);
                     46: 
                     47:        event.Skip();
                     48: }
                     49: 
                     50: 
                     51: //
                     52: // CMMU キャッシュウィンドウ
                     53: //
                     54: 
                     55: // イベントテーブル
                     56: wxBEGIN_EVENT_TABLE(WXCacheWindow, inherited)
                     57:        EVT_TIMER(wxID_ANY, WXCacheWindow::OnTimer)
                     58: wxEND_EVENT_TABLE()
                     59: 
                     60: // コンストラクタ
                     61: WXCacheWindow::WXCacheWindow(wxWindow *parent, wxWindowID id,
                     62:        const wxString& name, m88200 *cmmu_)
                     63:        : inherited(parent, id, name)
                     64: {
                     65:        cmmu = cmmu_;
                     66: 
                     67:        wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
                     68: 
                     69:        col = 82;
                     70:        row = 23;
                     71:        monitor.Init(col, row);
                     72:        screen = new WXCacheTextScreen(this, col, row, monitor.GetBuf());
                     73:        topsizer->Add(screen, BorderFlags);
                     74: 
                     75:        SetSizer(topsizer);
                     76: 
                     77:        // 大きさを固定
                     78:        Layout();
                     79:        Fit();
                     80: 
                     81:        // 更新タイマーは適当
                     82:        timer.SetOwner(this);
                     83:        timer.Start(33);
                     84: }
                     85: 
                     86: // デストラクタ
                     87: WXCacheWindow::~WXCacheWindow()
                     88: {
                     89: }
                     90: 
                     91: // タイマーイベント
                     92: void
                     93: WXCacheWindow::OnTimer(wxTimerEvent& event)
                     94: {
                     95:        // 上半分(セット詳細)
                     96:        cmmu->MonitorCacheSet(monitor, 0, setidx);
                     97:        // 下半分(概要)
                     98:        cmmu->MonitorCacheOverview(monitor, 6, setidx, true);
                     99: 
                    100:        // 再描画
                    101:        screen->Refresh();
                    102: }
                    103: 
                    104: // フォントサイズ変更
                    105: void
                    106: WXCacheWindow::SetFontSize(fontsize_t fontsize)
                    107: {
                    108:        screen->SetFontSize(fontsize);
                    109:        // 大きさを変更
                    110:        Layout();
                    111:        Fit();
                    112: }
                    113: 
                    114: // 右クリック処理 (WXCacheTextScreen::OnLeftDown から呼ばれる)
                    115: void
                    116: WXCacheWindow::DoLeftDown(int x, int y)
                    117: {
                    118:        // クリックされた場所のセット番号に更新
                    119:        // (再描画は次のタイマーイベントで行われる)
                    120:        x -= 3;
                    121:        y -= 7;
                    122:        if (x >= 0 && y >= 0) {
                    123:                // セットとセットの間の空白には反応しないようにしたい
                    124:                if (x % 5 < 4) {
                    125:                        setidx = y * 16 + (x / 5);
                    126:                }
                    127:        }
                    128: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.