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

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2021 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: #include "wxuimessage.h"
                      8: 
                      9: // イベントタイプの定義
                     10: wxDEFINE_EVENT(NONO_EVT_UIMESSAGE, wxCommandEvent);
                     11: 
                     12: /*static*/
                     13: std::array<wxEvtHandler *, UIMessage::ID_MAX> WXUIMessage::dest_table;
                     14: 
                     15: // UIMessage を wxWidgets のイベントハンドラに接続する
                     16: /*static*/ void
                     17: WXUIMessage::Connect(UIMessage::ID id, wxEvtHandler *dest,
                     18:                wxObjectEventFunction function)
                     19: {
                     20:        dest->Connect(id, NONO_EVT_UIMESSAGE, function);
                     21:        dest_table[id] = dest;
                     22: }
                     23: 
                     24: // イベントハンドラの接続を解除する
                     25: /*static*/ void
                     26: WXUIMessage::Disconnect(UIMessage::ID id, wxObjectEventFunction function)
                     27: {
                     28:        wxEvtHandler *dest = dest_table[id];
                     29:        if (dest) {
                     30:                dest->Disconnect(NONO_EVT_UIMESSAGE, function);
                     31:                dest_table[id] = NULL;
                     32:        }
                     33: }
                     34: 
                     35: // UIMessage を処理する
                     36: /*static*/ void
                     37: WXUIMessage::Process(UIMessage::Queue& queue)
                     38: {
                     39:        UIMessage m;
                     40: 
                     41:        while (queue.Dequeue(&m)) {
                     42:                UIMessage::ID id = m.GetID();
                     43:                if (id < 0 || id >= UIMessage::ID_MAX) {
                     44:                        PANIC("Invalid UIMessage %d", id);
                     45:                }
                     46:                auto dest = dest_table[id];
                     47:                if (dest) {
                     48:                        wxCommandEvent ev(NONO_EVT_UIMESSAGE, id);
                     49:                        ev.SetInt(m.GetArg());
                     50:                        wxPostEvent(dest, ev);
                     51:                }
                     52:        }
                     53: }

unix.superglobalmegacorp.com

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