Subversion Repositories Kolibri OS

Rev

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