Subversion Repositories Kolibri OS

Rev

Rev 6782 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6782 Rev 7252
1
struct _menu
-
 
-
 
1
dword menu_process_id;
2
{
2
 
3
	dword appear_x, appear_y, text, identifier, selected;	
3
struct _menu
4
	llist list;
4
{
5
	void show();
5
	dword appear_x, appear_y, text, identifier, selected;	
6
	char stak[4096];
6
	llist list;
7
}menu;
7
	void show();
8
 
8
	char stak[4096];
9
void _menu::show(dword _appear_x, _appear_y, _menu_width, _text, _identifier)
9
}menu;
10
{
10
 
11
	appear_x = _appear_x;
11
void _menu::show(dword _appear_x, _appear_y, _menu_width, _text, _identifier)
12
	appear_y = _appear_y;
12
{
13
	text = _text;
13
	appear_x = _appear_x;
14
	identifier = _identifier;
14
	appear_y = _appear_y;
15
 
15
	text = _text;
16
	list.cur_y = -1;
16
	identifier = _identifier;
17
	list.ClearList();
17
 
18
	list.count = chrnum(text, '\n')+1;
18
	list.cur_y = -1;
19
	list.SetSizes(2,2,_menu_width,list.count*24,24);
19
	list.ClearList();
20
 
20
	list.count = chrnum(text, '\n')+1;
21
	CreateThread(#_menu_thread,#stak+4092);
21
	list.SetSizes(2,2,_menu_width,list.count*24,24);
22
}
22
 
23
 
23
	menu_process_id = CreateThread(#_menu_thread,#stak+4092);
24
void _menu_thread()
24
}
25
{
25
 
26
	proc_info MenuForm;
26
void _menu_thread()
27
	SetEventMask(100111b);
27
{
28
	loop() switch(WaitEvent())
28
	proc_info MenuForm;
29
	{
29
	SetEventMask(100111b);
30
		case evMouse:
30
	loop() switch(WaitEvent())
31
			GetProcessInfo(#MenuForm, SelfInfo);
31
	{
32
			if (!CheckActiveProcess(MenuForm.ID)) _menu_no_item_click();
32
		case evMouse:
33
			mouse.get();
33
			GetProcessInfo(#MenuForm, SelfInfo);
34
			if (menu.list.ProcessMouse(mouse.x, mouse.y)) _menu_draw_list();
34
			if (!CheckActiveProcess(MenuForm.ID)) _menu_no_item_click();
35
			if (mouse.lkm)&&(mouse.up) _menu_item_click();
35
			mouse.get();
36
			break;		
36
			if (menu.list.ProcessMouse(mouse.x, mouse.y)) _menu_draw_list();
37
		case evKey:
37
			if (mouse.lkm)&&(mouse.up) _menu_item_click();
38
			GetKeys();
38
			break;		
39
			if (key_scancode==SCAN_CODE_ESC) _menu_no_item_click();
39
		case evKey:
40
			if (key_scancode==SCAN_CODE_ENTER) _menu_item_click();
40
			GetKeys();
41
			if (menu.list.ProcessKey(key_scancode)) _menu_draw_list();
41
			if (key_scancode==SCAN_CODE_ESC) _menu_no_item_click();
42
			break;
42
			if (key_scancode==SCAN_CODE_ENTER) _menu_item_click();
43
		case evReDraw:
43
			if (menu.list.ProcessKey(key_scancode)) _menu_draw_list();
44
			DefineAndDrawWindow(menu.appear_x,menu.appear_y,menu.list.w+2,menu.list.h+4,0x01, 0, 0, 0x01fffFFF);
44
			break;
45
			DrawPopup(0,0,menu.list.w,menu.list.h+3,0, 0xE4DFE1,0x9098B0);
45
		case evReDraw:
46
			_menu_draw_list();				
46
			DefineAndDrawWindow(menu.appear_x,menu.appear_y,menu.list.w+2,menu.list.h+4,0x01, 0, 0, 0x01fffFFF);
47
	}
47
			DrawPopup(0,0,menu.list.w,menu.list.h+3,0, 0xE4DFE1,0x9098B0);
48
}
48
			_menu_draw_list();				
49
 
49
	}
50
void _menu_draw_list()
50
}
51
{
51
 
52
	int N, bgcol;
52
void _menu_draw_list()
53
	for (N=0; N
53
{
54
	{
54
	int N, bgcol;
55
		if (N==menu.list.cur_y) bgcol=0xFFFfff; else bgcol=0xE4DFE1;
55
	for (N=0; N
56
		DrawBar(menu.list.x, N*menu.list.item_h+menu.list.y, menu.list.w-3, menu.list.item_h, bgcol);
56
	{
57
	}
57
		if (N==menu.list.cur_y) bgcol=0xFFFfff; else bgcol=0xE4DFE1;
58
	WriteTextLines(13, menu.list.item_h-12/2+menu.list.y, 0x90, 0, menu.text, menu.list.item_h);
58
		DrawBar(menu.list.x, N*menu.list.item_h+menu.list.y, menu.list.w-3, menu.list.item_h, bgcol);
59
	if (menu.selected) WriteText(5, menu.selected-1*menu.list.item_h+11, 0x80, 0xEE0000, "\x10");
59
	}
60
}
60
	WriteTextLines(13, menu.list.item_h-12/2+menu.list.y, 0x90, 0, menu.text, menu.list.item_h);
61
 
61
	if (menu.selected) WriteText(5, menu.selected-1*menu.list.item_h+11, 0x80, 0xEE0000, "\x10");
62
void _menu_item_click()
62
}
63
{
63
 
64
	menu.list.cur_y = menu.identifier + menu.list.cur_y;
64
void _menu_item_click()
65
	ExitProcess();
65
{
66
}
66
	menu.list.cur_y = menu.identifier + menu.list.cur_y;
67
 
67
	KillProcess(menu_process_id);
68
void _menu_no_item_click()
68
}
69
{
69
 
70
	menu.list.cur_y = 0;
70
void _menu_no_item_click()
71
	ExitProcess();
71
{
72
}
72
	menu.list.cur_y = 0;
73
73
	KillProcess(menu_process_id);
74
74
}
75
75