Rev 7781 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7781 | Rev 7782 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #ifndef INCLUDE_MENU_H |
1 | #ifndef INCLUDE_MENU_H |
2 | #define INCLUDE_MENU_H |
2 | #define INCLUDE_MENU_H |
Line 3... | Line -... | ||
3 | - | ||
4 | #ifndef INCLUDE_LIST_BOX |
- | |
5 | #include "../lib/list_box.h" |
- | |
6 | #endif |
- | |
7 | 3 | ||
Line 8... | Line -... | ||
8 | :dword menu_process_id; |
- | |
9 | - | ||
10 | :struct _menu : llist |
- | |
11 | { |
- | |
12 | dword appear_x, appear_y, text, identifier, selected; |
- | |
13 | void show(); |
- | |
14 | char stak[4096]; |
- | |
15 | } menu; |
- | |
16 | - | ||
17 | :void _menu::show(dword _appear_x, _appear_y, _menu_width, _menu_text, _identifier) |
- | |
18 | { |
- | |
19 | #define ITEM_H 21 |
- | |
20 | appear_x = _appear_x; |
- | |
21 | appear_y = _appear_y; |
- | |
22 | text = _menu_text; |
- | |
23 | identifier = _identifier; |
- | |
24 | - | ||
25 | cur_y = -1; |
- | |
26 | ClearList(); |
- | |
27 | count = chrnum(text, '\n')+1; |
- | |
28 | SetSizes(2,2,_menu_width,count*ITEM_H,ITEM_H); |
- | |
29 | - | ||
30 | menu_process_id = CreateThread(#_menu_thread,#stak+4092); |
- | |
31 | } |
- | |
32 | - | ||
33 | :void _menu_thread() |
- | |
34 | { |
- | |
35 | MOUSE m; |
- | |
36 | DefineAndDrawWindow(menu.appear_x,menu.appear_y,menu.w+2,menu.h+4,0x01, 0, 0, 0x01fffFFF); |
- | |
37 | DrawPopup(0,0,menu.w,menu.h+3,0, 0xE4DFE1,0x9098B0); |
- | |
38 | _menu_draw_list(); |
- | |
39 | SetEventMask(EVM_REDRAW + EVM_KEY + EVM_MOUSE + EVM_MOUSE_FILTER); |
- | |
40 | loop() switch(WaitEvent()) |
- | |
41 | { |
- | |
42 | case evMouse: |
- | |
43 | m.get(); |
- | |
44 | if (menu.ProcessMouse(m.x, m.y)) _menu_draw_list(); |
- | |
45 | if (m.lkm)&&(m.up) _menu_item_click(); |
- | |
46 | break; |
- | |
47 | case evKey: |
- | |
48 | GetKeys(); |
- | |
49 | if (key_scancode==SCAN_CODE_ESC) _menu_exit(); |
- | |
50 | if (key_scancode==SCAN_CODE_ENTER) _menu_item_click(); |
- | |
51 | if (menu.ProcessKey(key_scancode)) _menu_draw_list(); |
- | |
52 | break; |
- | |
53 | case evReDraw: |
- | |
54 | _menu_exit(); |
- | |
55 | } |
- | |
56 | } |
- | |
57 | - | ||
58 | :void _menu_draw_list() |
- | |
59 | { |
- | |
60 | int N, bgcol; |
- | |
61 | for (N=0; N |
- | |
62 | { |
- | |
63 | if (N==menu.cur_y) bgcol=0xFFFfff; else bgcol=0xE4DFE1; |
- | |
64 | DrawBar(menu.x, N*menu.item_h+menu.y, menu.w-3, menu.item_h, bgcol); |
- | |
65 | } |
- | |
66 | WriteTextLines(13, menu.item_h-8/2+menu.y, 0x80, 0, menu.text, menu.item_h); |
- | |
67 | if (menu.selected) WriteText(5, menu.selected-1*menu.item_h+8, 0x80, 0xEE0000, "\x10"); |
- | |
68 | } |
- | |
69 | - | ||
70 | :void _menu_item_click() |
- | |
71 | { |
- | |
72 | menu.cur_y = menu.identifier + menu.cur_y; |
- | |
73 | KillProcess(menu_process_id); |
- | |
74 | } |
- | |
75 | - | ||
76 | :void _menu_exit() |
- | |
77 | { |
- | |
78 | menu.cur_y = 0; |
- | |
79 | KillProcess(menu_process_id); |
- | |
80 | } |
4 | :dword menu_process_id; |
81 | 5 | ||
82 | #define MENU_ALIGN_TOP_LEFT 0 |
6 | #define MENU_ALIGN_TOP_LEFT 0 |
83 | #define MENU_ALIGN_TOP_RIGHT 1 |
7 | #define MENU_ALIGN_TOP_RIGHT 1 |
Line 84... | Line 8... | ||
84 | #define MENU_ALIGN_BOT_LEFT 2 |
8 | #define MENU_ALIGN_BOT_LEFT 2 |
85 | #define MENU_ALIGN_BOT_RIGHT 3 |
9 | #define MENU_ALIGN_BOT_RIGHT 3 |
86 | 10 | ||
87 | :dword shared_mem = NULL; |
11 | :dword shared_mem = NULL; |
88 | :char shared_name[] = "LMENU"; |
12 | :char shared_name[] = "LMENU"; |
89 | :void open_lmenu(dword _x, _y, _position, _selected, _text) |
13 | :void open_lmenu(dword _x, _y, _position, _selected, _text1) |
90 | { |
14 | { |
91 | if (!shared_mem) { |
15 | if (!shared_mem) { |
92 | shared_mem = memopen(#shared_name, 16, SHM_CREATE + SHM_WRITE); |
16 | shared_mem = memopen(#shared_name, 16, SHM_CREATE + SHM_WRITE); |
93 | if (EDX) shared_mem = memopen(#shared_name, 16, SHM_WRITE); |
17 | if (EDX) shared_mem = memopen(#shared_name, 16, SHM_WRITE); |
94 | } |
18 | } |
95 | ESDWORD[shared_mem ] = _selected; |
19 | ESDWORD[shared_mem ] = _selected; |
96 | ESDWORD[shared_mem + 4] = _x; |
20 | ESDWORD[shared_mem + 4] = _x; |
97 | ESDWORD[shared_mem + 8] = _y; |
21 | ESDWORD[shared_mem + 8] = _y; |
Line 98... | Line 22... | ||
98 | ESDWORD[shared_mem + 12] = _position; |
22 | ESDWORD[shared_mem + 12] = _position; |
99 | menu_process_id = RunProgram("/sys/develop/menu", _text); |
23 | menu_process_id = RunProgram("/sys/develop/menu", _text1); |
100 | } |
24 | } |