Subversion Repositories Kolibri OS

Rev

Rev 4043 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4042 leency 1
//Leency 2013
2
 
4049 leency 3
llist app_list;
4
struct app_list_string { char item[1024]; char icon; };
5
app_list_string app_paths[100];
6
 
7
int GetListOfPrograms()
8
{
9
	byte section[32], parametr[32], option[256], InfType=0;
10
	char bukva[2];
11
	int tj, ti;
12
	static dword buff, fsize;
13
 
14
	debug("GetListOfPrograms()");
15
 
16
	free(buff);
17
	if (!GetFile(#buff, #fsize, abspath("Eolite.ini")))
18
	{
19
		notify("Eolite.ini not found. Don't know any programm.");
20
		return -1;
21
	}
22
 
23
	for (tj=0; tj
24
	{
25
		bukva = ESBYTE[buff+tj];
26
		switch (bukva)
27
		{
28
			case ';': InfType=COMMENT; break;
29
			case '[': InfType=SECTION; section=NULL; break;
30
			case ']': InfType=PARAM; break;
31
			case '=': InfType=OPTION; break;
32
			case 0x0a:
33
			case 0x0d:
34
				InfType=PARAM;
35
				if (!strcmp(#section,"Associations")) && (option)
36
				{
37
					for (ti=0; ti
38
					{
39
						if (strcmp(#app_paths[ti].item, #option)==0) GOTO _OUT;
40
					}
41
					// for (i=0; ext[i]!=0; i+=2;) if (!strcmp(extension, ext[i])) { icon_n = ext[i+1]; break;	}
42
					strcpy(#app_paths[app_list.count].item, #option);
43
					app_list.count++;
44
				}
45
				_OUT:
46
				parametr=option=NULL;
47
				break;
48
			default:
49
				IF (InfType==SECTION) chrcat(#section, bukva);
50
				IF (InfType==PARAM) chrcat(#parametr, bukva);
51
				IF (InfType==OPTION) chrcat(#option, bukva);
52
		}
53
	}
54
}
55
 
56
 
57
 
4042 leency 58
void OpenWith()
59
{
4049 leency 60
	#define WIN_W 290
61
	#define OPEN_LIST_VISIBLE_N 12
62
	#define OPEN_LIST_LINE_H 20
63
	#define PANEL_H 40
64
	#define PADDING 8;
65
	int WIN_H;
4042 leency 66
	mouse mm;
4049 leency 67
	word key, slot;
4042 leency 68
	proc_info MenuForm;
69
 
70
	app_list.ClearList();
4049 leency 71
	app_list.SetSizes(PADDING,PANEL_H+1,WIN_W-PADDING-PADDING,OPEN_LIST_VISIBLE_N*OPEN_LIST_LINE_H,150,OPEN_LIST_LINE_H);
72
	if (!app_list.count) if (GetListOfPrograms()==-1) return;
4042 leency 73
	SetEventMask(100111b);
74
	goto _APP_LIST_DRAW;
75
 
76
	loop() switch(WaitEvent())
77
	{
78
		case evMouse:
79
				slot = GetProcessSlot(MenuForm.ID);
80
				if (slot != GetActiveProcess()) ExitProcess();
81
				mm.get();
4049 leency 82
				//if (mm.lkm) ExitProcess();
83
				if (mm.vert)
84
				{
85
					app_list.MouseScroll(mm.vert);
86
					DrawAppList();
87
				}
88
				if (mm.x>app_list.x) && (mm.xapp_list.y) && (mm.y
89
				{
90
					app_list.current_temp = mm.y - app_list.y / app_list.line_h + app_list.first;
91
					if (app_list.current_temp != app_list.current)
92
					{
93
						app_list.current = app_list.current_temp;
94
						DrawAppList();
95
					}
96
				}
97
 
4042 leency 98
				break;
99
 
100
		case evKey:
101
				key = GetKey();
102
				if (key==27) ExitProcess();
103
				break;
4049 leency 104
 
105
		case evButton:
106
				RunProgram(#app_paths[GetButtonID()-10].item, #file_path);
107
				ExitProcess();
108
				break;
4042 leency 109
 
110
		case evReDraw: _APP_LIST_DRAW:
4049 leency 111
				WIN_H = app_list.h+PANEL_H+PADDING+2;
112
				DefineAndDrawWindow(files.w-WIN_W/2+files.x+Form.left+6,
113
				files.h-WIN_H/2+files.y+Form.top+GetSkinHeight(),WIN_W+1,WIN_H,0x01, 0, 0, 0x01fffFFF);
4042 leency 114
				GetProcessInfo(#MenuForm, SelfInfo);
4049 leency 115
				DrawPopup(0,0,MenuForm.width-2,MenuForm.height-2,0, col_work, col_border);
116
				DrawRectangle(app_list.x-1, app_list.y-2, app_list.w+1, app_list.h+2, col_border);
4042 leency 117
 
4049 leency 118
				Put_icon(#file_name+_strrchr(#file_name,'.'), 10, 13, col_work);
119
				WriteText(35,10, 0x80, 0, T_SELECT_APP_TO_OPEN_WITH);
120
				WriteText(35,23, 0x80, 0, #file_name);
121
 
122
				DrawAppList();
4042 leency 123
	}
4049 leency 124
}
125
 
126
void DrawAppList()
127
{
128
	dword index, col_bg;
129
	for (index = 0; (index
130
	{
131
		DefineButton(app_list.x, index*app_list.line_h+app_list.y, app_list.w, app_list.line_h-1, index+app_list.first+10+BT_HIDE+BT_NOFRAME, 0);
132
		if (index+app_list.first==app_list.current) col_bg = col_selec; else col_bg = 0xFFFfff;
133
		DrawBar(app_list.x, index*app_list.line_h+app_list.y, app_list.w, app_list.line_h, col_bg);
134
		Put_icon("kex", app_list.x+4, index*app_list.line_h+app_list.y+2, col_bg);
135
		WriteText(app_list.x+23, index*app_list.line_h+app_list.y+7, 0x80, 0, #app_paths[index+app_list.first].item);
136
	}
4042 leency 137
}