|
|
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.