Subversion Repositories Kolibri OS

Rev

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
}