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 | }=5)> |