|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.