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.x |
||
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 | } |