Rev 5516 | Rev 5903 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5394 | eAndrew | 1 | DEBUG equ 0 |
2 | |||
3 | LIST_WIDTH equ 256 |
||
4 | WIN_WIDTH equ (LIST_WIDTH + 16 + 12) |
||
5 | LIST_SIZE equ 12 |
||
6 | LINE_SIZE equ 40 |
||
7 | LIST_HEIGHT equ (LIST_SIZE * LINE_SIZE / 2) |
||
8 | WIN_HEIGHT equ (LIST_HEIGHT + 80) |
||
9 | |||
10 | use32 |
||
11 | org 0 |
||
12 | db 'MENUET01' |
||
13 | dd 1, main, dataend, memory, memory, params, 0 |
||
14 | |||
15 | include "../../proc32.inc" |
||
16 | include "../../macros.inc" |
||
17 | include "../../dll.inc" |
||
18 | include "../../string.inc" |
||
19 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
||
20 | |||
21 | include "lang.inc" |
||
22 | |||
23 | if DEBUG eq 1 |
||
24 | include "../../debug.inc" |
||
25 | end if |
||
26 | |||
27 | include "macros.inc" |
||
28 | |||
29 | ;=============================== |
||
30 | |||
31 | if lang eq ru |
||
32 | title db "Открыть с помощью", 0 |
||
33 | browse_txt db "Обзор...", 0 |
||
34 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
35 | checkbox_txt db "Использовать всегда", 0 |
||
36 | else if lang eq et |
||
37 | title db "Open with", 0 |
||
38 | browse_txt db "Browse...", 0 |
||
39 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
40 | checkbox_txt db "Always use selected program", 0 |
||
41 | else if lang eq it |
||
42 | title db "Open with", 0 |
||
43 | browse_txt db "Browse...", 0 |
||
44 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
45 | checkbox_txt db "Always use selected program", 0 |
||
46 | else |
||
47 | title db "Open with", 0 |
||
48 | browse_txt db "Browse...", 0 |
||
49 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
50 | checkbox_txt db "Always use selected program", 0 |
||
51 | end if |
||
52 | |||
53 | sys_dir db "/sys", 0 |
||
54 | slash db "/", 0 |
||
55 | open_dialog_path db "/sys/file managers/opendial", 0 |
||
56 | app_link db "$", 0 |
||
5426 | yogev_ezra | 57 | icons db "/sys/icons32.png", 0 |
5394 | eAndrew | 58 | communication_area_name db "FFFFFF_open_dialog", 0 |
59 | assoc_ini db "/sys/settings/assoc.ini", 0 |
||
60 | .sec db "Assoc", 0 |
||
61 | .exec db "exec", 0 |
||
62 | .icon db "icon", 0 |
||
63 | |||
64 | sb_apps scrollbar \ |
||
65 | 13, WIN_WIDTH - 25, LIST_HEIGHT, 10 + 12, \ ;; w, x, h, y |
||
66 | 0, 0, LIST_SIZE / 2, 0, \ ;; b.h, max, area, pos |
||
67 | 0, 0, 0, 2 |
||
68 | |||
69 | cb_always check_box2 \ |
||
5488 | leency | 70 | 5 shl 16 + 16, (LIST_HEIGHT + 33) shl 16 + 16, 6, 0, 0, 0, checkbox_txt, ch_flag_middle |
5394 | eAndrew | 71 | |
72 | opendialog: |
||
73 | .type dd 0 |
||
74 | .procinfo dd buffer3 |
||
75 | .com_area_name dd communication_area_name |
||
76 | .com_area dd 0 |
||
77 | .opendir_path dd buffer4 |
||
78 | .dir_default_path dd sys_dir |
||
79 | .start_path dd open_dialog_path |
||
80 | .draw_window dd draw_window |
||
81 | .status dd 0 |
||
82 | .openfile_pach dd buffer |
||
83 | .filename_area dd buffer5 |
||
84 | .filter_area dd .filter |
||
85 | .x: |
||
86 | .x_size dw 420 |
||
87 | .x_start dw 200 |
||
88 | .y: |
||
89 | .y_size dw 320 |
||
90 | .y_start dw 120 |
||
91 | |||
92 | .filter dd 0 |
||
93 | |||
94 | ps_addres: |
||
95 | dd 0 ;; type |
||
96 | dw 7 ;; y |
||
97 | dw 4 ;; x |
||
98 | dw 6 ;; font.w |
||
99 | dw LIST_WIDTH ;; w |
||
100 | dd 0 ;; mono |
||
101 | dd 0 ;; without bg |
||
102 | .color dd 0 ;; text color |
||
103 | dd 0 ;; bg color |
||
104 | .txt dd 0 ;; text |
||
105 | dd buffer2 |
||
106 | dd 0 |
||
107 | |||
108 | is_execute: |
||
109 | dd 7, 0, 0, 0, 0 |
||
110 | db 0 |
||
111 | dd buffer |
||
112 | |||
113 | is_openas: |
||
114 | dd 7, 0, 0, 0, 0 |
||
115 | db 0 |
||
116 | dd buffer |
||
117 | |||
118 | is_open: |
||
119 | dd 7, 0, 0, 0, 0 |
||
120 | db 0 |
||
121 | dd buffer |
||
122 | |||
123 | is_undefined: |
||
124 | dd 7, 0, notify_txt, 0, 0 |
||
125 | db "/sys/@notify", 0 |
||
126 | |||
127 | is_openimg_info: |
||
128 | dd 5, 0, 0, 0, img.buf |
||
129 | db 0 |
||
130 | dd icons |
||
131 | |||
132 | is_openimg: |
||
133 | dd 0, 0, 0, 0, 0 |
||
134 | db 0 |
||
135 | dd icons |
||
136 | |||
137 | last_x dd -1 |
||
138 | last_y dd -1 |
||
139 | |||
140 | if DEBUG eq 1 |
||
141 | std_param db "~/sys/settings/assoc.ini", 0 |
||
142 | end if |
||
143 | |||
144 | imports: |
||
145 | library libini, "libini.obj" |
||
146 | import libini, libini.get_str, "ini_get_str", \ |
||
147 | libini.set_str, "ini_set_str", \ |
||
148 | libini.get_num, "ini_get_int", \ |
||
149 | libini.for_each_section, "ini_enum_sections" |
||
150 | |||
151 | imports_add: |
||
152 | library libimg, "libimg.obj", \ |
||
153 | boxlib, "box_lib.obj", \ |
||
154 | prclib, "proc_lib.obj" |
||
155 | import libimg, libimg.init, "lib_init", \ |
||
156 | libimg.toRGB, "img_to_rgb2", \ |
||
157 | libimg.decode, "img_decode", \ |
||
158 | libimg.destroy, "img_destroy" |
||
159 | import boxlib, scrollbar.draw, "scrollbar_v_draw", \ |
||
160 | scrollbar.mouse, "scrollbar_v_mouse", \ |
||
161 | pathshow.init, "PathShow_prepare", \ |
||
162 | pathshow.draw, "PathShow_draw", \ |
||
163 | checkbox.init, "init_checkbox2", \ |
||
164 | checkbox.draw, "check_box_draw2", \ |
||
165 | checkbox.mouse, "check_box_mouse2" |
||
166 | import prclib, opendialog.lib_init, "lib_init", \ |
||
167 | opendialog.init, "OpenDialog_init", \ |
||
168 | opendialog.start, "OpenDialog_start" |
||
169 | |||
170 | ;=============================== |
||
171 | |||
172 | main: |
||
173 | mcall 68, 11 |
||
174 | stdcall dll.Load, imports |
||
175 | |||
176 | if DEBUG eq 1 |
||
177 | stdcall string.copy, std_param, params |
||
178 | end if |
||
179 | |||
180 | ;; trim params |
||
5516 | leency | 181 | stdcall string.to_lower_case, params |
5394 | eAndrew | 182 | stdcall string.trim_last, params |
183 | stdcall string.trim_first, params |
||
184 | mov [param_s], eax |
||
185 | |||
186 | ;; if empty - exit |
||
187 | cmpe [eax], byte 0, exit |
||
188 | |||
189 | ;; if folder |
||
190 | stdcall string.length, [param_s] |
||
191 | add eax, [param_s] |
||
192 | cmpe [eax - 1], byte '/', open |
||
193 | |||
194 | ;; if dialog |
||
195 | mov eax, [param_s] |
||
196 | mov [is_openas + 8], eax |
||
197 | cmpne [eax], byte '~', @f |
||
198 | inc [param_s] |
||
199 | mov eax, [param_s] |
||
200 | mov [is_openas + 8], eax |
||
201 | jmp start_dialog |
||
202 | @@: |
||
203 | |||
204 | ;; if without '.' - execute |
||
205 | stdcall string.last_index_of, [param_s], '.', 1 |
||
206 | cmpe eax, -1, execute |
||
207 | |||
208 | ;; if '.' is part of path - execute |
||
209 | mov esi, eax |
||
210 | stdcall string.last_index_of, [param_s], '/', 1 |
||
211 | cmpg eax, esi, execute |
||
212 | |||
213 | ;; if ext == "kex" - execute |
||
214 | add esi, [param_s] |
||
215 | mov [param_e], esi |
||
216 | cmpe [esi], dword "kex", execute |
||
217 | |||
218 | open_as: |
||
219 | invoke libini.get_str, assoc_ini, assoc_ini.sec, esi, buffer, 2048, undefined |
||
220 | cmpe [buffer], byte 0, start_dialog_pre |
||
221 | cmpne [buffer], byte "$", @f |
||
222 | invoke libini.get_str, assoc_ini, buffer + 1, assoc_ini.exec, buffer, 2048, undefined |
||
223 | cmpe [buffer], byte 0, ini_error |
||
224 | @@: |
||
225 | mcall 70, is_openas |
||
226 | jmp exit |
||
227 | |||
228 | execute: |
||
229 | mov eax, [param_s] |
||
230 | mov [is_execute + 21], eax |
||
231 | mcall 70, is_execute |
||
232 | jmp exit |
||
233 | |||
234 | open: |
||
235 | invoke libini.get_str, assoc_ini, assoc_ini.sec, slash, buffer, 2048, undefined |
||
236 | cmpe [buffer], byte 0, ini_error |
||
237 | mov eax, [param_s] |
||
238 | mov [is_open + 8], eax |
||
239 | mcall 70, is_open |
||
240 | jmp exit |
||
241 | |||
242 | ini_error: |
||
243 | mcall 70, is_undefined |
||
244 | jmp exit |
||
245 | |||
246 | ;---------------------- |
||
247 | |||
248 | start_dialog_pre: |
||
249 | or [cb_always.flags], ch_flag_en |
||
250 | |||
251 | start_dialog: |
||
252 | stdcall dll.Load, imports_add |
||
253 | invoke opendialog.lib_init |
||
254 | |||
255 | mcall 40, 100111b |
||
256 | |||
257 | ;; get title |
||
258 | stdcall string.copy, title, win.title |
||
259 | |||
260 | ;; get positions |
||
261 | mcall 14 |
||
262 | movzx ebx, ax |
||
263 | shr ebx, 1 |
||
264 | shr eax, 16 + 1 |
||
265 | sub eax, WIN_WIDTH / 2 - 1 |
||
266 | sub ebx, WIN_HEIGHT / 2 - 1 |
||
267 | mov [win.x], eax |
||
268 | mov [win.y], ebx |
||
269 | |||
270 | ;; get colors |
||
5721 | leency | 271 | mcall 48, 3, skin, sizeof.system_colors |
5394 | eAndrew | 272 | |
273 | ;; get opendialog |
||
274 | invoke opendialog.init, opendialog |
||
275 | |||
276 | ;; get pathshow |
||
277 | mov eax, [param_s] |
||
5721 | leency | 278 | mov ebx, [skin.work_text] |
5394 | eAndrew | 279 | mov [ps_addres.txt], eax |
280 | mov [ps_addres], ebx |
||
281 | invoke pathshow.init, ps_addres |
||
282 | |||
283 | ;; get checkbox |
||
5721 | leency | 284 | mov eax, 0xFFFfff |
285 | mov ebx, [skin.work_graph] |
||
286 | mov ecx, [skin.work_text] |
||
5394 | eAndrew | 287 | mov [cb_always.color], eax |
288 | mov [cb_always.border_color], ebx |
||
289 | mov [cb_always.text_color], ecx |
||
290 | invoke checkbox.init, cb_always |
||
291 | |||
292 | ;; get list |
||
293 | invoke libini.for_each_section, assoc_ini, section_cb |
||
294 | mov eax, [sb_apps.max_area] |
||
295 | and eax, 1b |
||
296 | shr [sb_apps.max_area], 1 |
||
297 | add [sb_apps.max_area], eax |
||
298 | |||
5721 | leency | 299 | mov eax, 0xFFFfff |
300 | mov ebx, 0xCCCccc ;[skin.3d] |
||
5394 | eAndrew | 301 | mov [sb_apps.bg_color], eax |
302 | mov [sb_apps.front_color], ebx |
||
303 | mov [sb_apps.line_color], ebx |
||
304 | |||
305 | ;; get icons |
||
306 | mcall 70, is_openimg_info |
||
307 | mov edx, dword [img.buf + 32] |
||
308 | shl edx, 4 |
||
309 | stdcall mem.Alloc, edx |
||
310 | mov [img.rgb], eax |
||
311 | |||
312 | mov [is_openimg + 12], edx |
||
313 | m2m dword[is_openimg + 16], dword[img.rgb] |
||
314 | mcall 70, is_openimg |
||
315 | |||
316 | invoke libimg.decode, dword[img.rgb], ebx, 0 |
||
317 | mov [img], eax |
||
318 | |||
319 | ;; alpha |
||
320 | mov edi, [eax + 8] |
||
321 | shl edi, 7 |
||
322 | sub edi, 4 |
||
323 | mov eax, [eax + 24] |
||
324 | .setalpha: |
||
325 | mov ebx, [eax + edi] |
||
326 | shr ebx, 24 |
||
327 | cmpne ebx, 0, @f |
||
5721 | leency | 328 | mov ecx, 0xFFFfff |
5394 | eAndrew | 329 | mov [eax + edi], ecx |
330 | @@: |
||
331 | cmpe edi, 0, @f |
||
332 | sub edi, 4 |
||
333 | jmp .setalpha |
||
334 | @@: |
||
335 | |||
336 | invoke libimg.toRGB, [img], [img.rgb] |
||
337 | invoke libimg.destroy, [img] |
||
338 | |||
339 | ;---------------------- |
||
340 | |||
341 | update: |
||
342 | mcall 10 |
||
343 | cmpe eax, EV_REDRAW, event_redraw |
||
344 | cmpe eax, EV_KEY, event_key |
||
345 | cmpe eax, EV_BUTTON, event_button |
||
346 | cmpe eax, EV_MOUSE, event_mouse |
||
347 | jmp update |
||
348 | |||
349 | ;---------------------- |
||
350 | |||
351 | event_redraw: |
||
352 | call draw_window |
||
353 | jmp update |
||
354 | |||
355 | ;---------------------- |
||
356 | |||
357 | event_key: |
||
358 | mcall 2 |
||
359 | cmpe ah, 27, exit |
||
360 | |||
361 | ; cmpe ah, 179, .go_right |
||
362 | ; cmpe ah, 176, .go_left |
||
363 | ; cmpe ah, 178, .go_up |
||
364 | ; cmpe ah, 177, .go_down |
||
365 | ; jmp update |
||
366 | ; |
||
367 | ; .go_right: |
||
368 | ; jmp update |
||
369 | ; |
||
370 | ; .go_left: |
||
371 | ; jmp update |
||
372 | ; |
||
373 | ; .go_up: |
||
374 | ; jmp update |
||
375 | ; |
||
376 | ; .go_down: |
||
377 | ; stdcall draw_item, [last_x], [last_y], 0 |
||
378 | ; |
||
379 | ; cmpne [last_x], -1, @f |
||
380 | ; mov [last_x], 0 |
||
381 | ; @@: |
||
382 | ; |
||
383 | ; cmpne [last_y], LIST_SIZE / 2 - 1, @f |
||
384 | ; mov eax, [sb_apps.position] |
||
385 | ; add eax, LIST_SIZE / 2 |
||
386 | ; shl eax, 1 |
||
387 | ; cmpge eax, [list.size], .pre |
||
388 | ; inc [sb_apps.position] |
||
389 | ; stdcall draw_list |
||
390 | ; invoke scrollbar.draw, sb_apps |
||
391 | ; jmp update |
||
392 | ; .pre: |
||
393 | ; dec [last_y] |
||
394 | ; @@: |
||
395 | ; |
||
396 | ; inc [last_y] |
||
397 | ; stdcall draw_item, [last_x], [last_y], 1 |
||
398 | jmp update |
||
399 | |||
400 | ;---------------------- |
||
401 | |||
402 | event_button: |
||
403 | mcall 17 |
||
404 | cmpe ah, 1, exit |
||
405 | cmpe ah, 2, .opendialog |
||
406 | |||
407 | .fromlist: |
||
408 | movzx ebx, ah |
||
409 | sub ebx, 10 |
||
410 | mov ecx, [sb_apps.position] |
||
411 | shl ecx, 1 |
||
412 | add ebx, ecx |
||
413 | shl ebx, 5 |
||
414 | add ebx, list |
||
415 | cmpe [ebx], byte 0, update |
||
416 | mov [param_a], ebx |
||
417 | invoke libini.get_str, assoc_ini, ebx, assoc_ini.exec, buffer, 256, undefined |
||
418 | cmpe [buffer], byte 0, ini_error |
||
419 | mcall 70, is_openas |
||
420 | mov edi, 1 |
||
421 | |||
422 | .save_assoc: |
||
423 | mov eax, [cb_always.flags] |
||
424 | and eax, ch_flag_en |
||
425 | cmpe eax, 0, exit |
||
426 | |||
427 | cmpe edi, 0, @f |
||
428 | stdcall string.copy, app_link, buffer |
||
429 | stdcall string.concatenate, [param_a], buffer |
||
430 | @@: |
||
431 | |||
432 | invoke libini.set_str, assoc_ini, assoc_ini.sec, [param_e], buffer, 33 |
||
433 | jmp exit |
||
434 | |||
435 | .opendialog: |
||
436 | invoke opendialog.start, opendialog |
||
437 | cmpne [opendialog.status], 1, update |
||
438 | mcall 70, is_openas |
||
439 | mov edi, 0 |
||
440 | jmp .save_assoc |
||
441 | |||
442 | ;---------------------- |
||
443 | |||
444 | event_mouse: |
||
445 | invoke checkbox.mouse, cb_always |
||
446 | mov edi, [sb_apps.position] |
||
447 | invoke scrollbar.mouse, sb_apps |
||
448 | sub edi, [sb_apps.position] |
||
449 | jz @f |
||
450 | call draw_list |
||
451 | @@: |
||
452 | |||
453 | mcall 37, 1 |
||
454 | movzx edi, ax |
||
455 | shr eax, 16 |
||
456 | mov esi, eax |
||
457 | sub esi, 4 |
||
458 | sub edi, 10 + 12 |
||
459 | cmpl esi, 0, .out |
||
460 | cmpge esi, LIST_WIDTH, .out |
||
461 | cmpl edi, 0, .out |
||
462 | cmpge edi, LIST_HEIGHT, .out |
||
463 | |||
464 | mcall 37, 7 |
||
465 | and eax, 0xFFFF |
||
466 | cmpe eax, 65535, .scroll_up |
||
467 | cmpe eax, 0, @f |
||
468 | |||
469 | .scroll_down: |
||
470 | mov eax, [sb_apps.position] |
||
471 | add eax, LIST_SIZE / 2 |
||
472 | shl eax, 1 |
||
473 | cmpge eax, [list.size], @f |
||
474 | inc [sb_apps.position] |
||
475 | stdcall draw_list |
||
476 | invoke scrollbar.draw, sb_apps |
||
477 | jmp update |
||
478 | |||
479 | .scroll_up: |
||
480 | cmpe [sb_apps.position], 0, @f |
||
481 | dec [sb_apps.position] |
||
482 | stdcall draw_list |
||
483 | invoke scrollbar.draw, sb_apps |
||
484 | jmp update |
||
485 | |||
486 | @@: |
||
487 | |||
488 | mov eax, esi |
||
489 | mov ebx, LIST_WIDTH / 2 |
||
490 | mov edx, 0 |
||
491 | div ebx |
||
492 | mov esi, eax |
||
493 | |||
494 | mov eax, edi |
||
495 | mov ebx, LINE_SIZE |
||
496 | mov edx, 0 |
||
497 | div ebx |
||
498 | mov edi, eax |
||
499 | |||
500 | cmpne esi, [last_x], .redraw |
||
501 | cmpne edi, [last_y], .redraw |
||
502 | jmp @f |
||
503 | |||
504 | .redraw: |
||
505 | stdcall draw_item, [last_x], [last_y], 0 |
||
506 | mov [last_x], esi |
||
507 | mov [last_y], edi |
||
508 | stdcall draw_item, esi, edi, 1 |
||
509 | jmp @f |
||
510 | |||
511 | .out: |
||
512 | cmpe [last_x], -1, @f |
||
513 | stdcall draw_item, [last_x], [last_y], 0 |
||
514 | mov [last_x], -1 |
||
515 | mov [last_y], -1 |
||
516 | @@: |
||
517 | |||
518 | jmp update |
||
519 | |||
520 | ;---------------------- |
||
521 | |||
522 | exit: |
||
523 | mcall -1 |
||
524 | |||
525 | ;---------------------- |
||
526 | |||
527 | proc draw_window |
||
528 | mcall 12, 1 |
||
529 | |||
5721 | leency | 530 | mov edx, [skin.work] |
5394 | eAndrew | 531 | or edx, 0x34 shl 24 |
532 | mcall 0, <[win.x], WIN_WIDTH>, <[win.y], WIN_HEIGHT>, , , win.title |
||
533 | stdcall draw_list |
||
534 | invoke scrollbar.draw, sb_apps |
||
535 | invoke pathshow.draw, ps_addres |
||
536 | invoke checkbox.draw, cb_always |
||
537 | |||
5721 | leency | 538 | mcall 13, <207, 66>, |
539 | mcall 8, <208, 63>, |
||
5394 | eAndrew | 540 | ; |
5721 | leency | 541 | mov ecx, [skin.work_button_text] |
5394 | eAndrew | 542 | add ecx, 0x80 shl 24 |
543 | mcall 4, <214, LIST_HEIGHT + 37>, , browse_txt |
||
544 | |||
545 | ;; buttons |
||
546 | mov eax, 8 |
||
547 | mov ebx, 4 shl 16 + LIST_WIDTH / 2 |
||
548 | mov ecx, (10 + 12) shl 16 + LINE_SIZE - 1 |
||
549 | mov edx, 0x60 shl 24 + 10 |
||
550 | mov edi, LIST_SIZE |
||
551 | mov esi, 0 |
||
552 | @@: |
||
553 | cmpe edi, 0, @f |
||
554 | mcall |
||
555 | |||
556 | cmpe esi, 0, .doA |
||
557 | .doB: |
||
558 | sub ebx, LIST_WIDTH shl 16 |
||
559 | add ecx, LINE_SIZE shl 16 |
||
560 | .doA: |
||
561 | add ebx, (LIST_WIDTH / 2) shl 16 |
||
562 | sub ecx, LINE_SIZE shl 16 |
||
563 | |||
564 | not esi |
||
565 | add ecx, LINE_SIZE shl 16 |
||
566 | inc edx |
||
567 | dec edi |
||
568 | jmp @b |
||
569 | @@: |
||
570 | |||
571 | mcall 12, 2 |
||
572 | ret |
||
573 | endp |
||
574 | |||
575 | ;---------------------- |
||
576 | |||
577 | proc draw_list |
||
5721 | leency | 578 | mcall 13, <3, LIST_WIDTH + 2 + 12>, <9 + 12, 1>, [skin.work_graph] |
5394 | eAndrew | 579 | mcall , , |
580 | mcall , <3, 1>, <9 + 12, LIST_HEIGHT + 1> |
||
581 | mcall , <3 + LIST_WIDTH + 12 + 1, 1> |
||
5721 | leency | 582 | mcall , <4, LIST_WIDTH>, <10 + 12, LIST_HEIGHT>, 0xFFFfff |
5394 | eAndrew | 583 | |
584 | mov esi, 1 |
||
585 | mov edi, LIST_SIZE / 2 - 1 |
||
586 | .draw_loop: |
||
587 | mov edx, 0 |
||
588 | cmpne [last_x], esi, @f |
||
589 | cmpne [last_y], edi, @f |
||
590 | mov edx, 1 |
||
591 | @@: |
||
592 | stdcall draw_item, esi, edi, edx |
||
593 | dec esi |
||
594 | cmpne esi, -1, @f |
||
595 | mov esi, 1 |
||
596 | dec edi |
||
597 | @@: |
||
598 | cmpne edi, -1, .draw_loop |
||
599 | |||
600 | ret |
||
601 | endp |
||
602 | |||
603 | ;---------------------- |
||
604 | |||
605 | proc draw_item uses edx edi esi, _x, _y, _sel |
||
606 | ;; get index |
||
607 | mov edi, [_y] |
||
608 | shl edi, 1 |
||
609 | add edi, [_x] |
||
610 | mov esi, [sb_apps.position] |
||
611 | shl esi, 1 |
||
612 | add edi, esi |
||
613 | |||
614 | cmpge edi, [list.size], .break |
||
615 | |||
616 | ;; background |
||
617 | mov ebx, [_x] |
||
618 | shl ebx, 7 + 16 |
||
619 | add ebx, 4 shl 16 + LIST_WIDTH / 2 |
||
620 | |||
621 | imul ecx, [_y], LINE_SIZE |
||
622 | shl ecx, 16 |
||
623 | add ecx, (10 + 12) shl 16 + LINE_SIZE |
||
624 | |||
5721 | leency | 625 | mov edx, 0xFFFfff |
5394 | eAndrew | 626 | cmpe [_sel], 0, @f |
5721 | leency | 627 | mov edx, 0x94AECE |
5394 | eAndrew | 628 | @@: |
629 | mcall 13 |
||
630 | |||
631 | ;; shadows |
||
632 | push ecx |
||
633 | cmpe [_sel], 1, .after_shadows |
||
5721 | leency | 634 | mov edx, 0xCCCccc ;[skin.3d] |
5394 | eAndrew | 635 | |
636 | cmpne [_x], 0, @f |
||
637 | imul ecx, [_y], LINE_SIZE |
||
638 | shl ecx, 16 |
||
639 | add ecx, (10 + 12) shl 16 + LINE_SIZE |
||
640 | mcall , <4, 1> |
||
641 | @@: |
||
642 | |||
643 | cmpne [_y], 0, @f |
||
644 | imul ebx, [_x], LIST_WIDTH / 2 |
||
645 | shl ebx, 16 |
||
646 | add ebx, 4 shl 16 + LIST_WIDTH / 2 |
||
647 | mcall , , <10 + 12, 1> |
||
648 | @@: |
||
649 | |||
650 | .after_shadows: |
||
651 | pop ecx |
||
652 | |||
653 | ;; icon |
||
654 | and ebx, 0xFFFF shl 16 |
||
655 | shr ecx, 16 |
||
656 | add ecx, ebx |
||
657 | mov edx, ecx |
||
658 | add edx, 6 shl 16 + (LINE_SIZE - 32) / 2 |
||
659 | |||
660 | mov ebx, edi |
||
661 | shl ebx, 2 |
||
662 | mov ebx, [ebx + list.icon] |
||
663 | imul ebx, 32 * 32 * 3 |
||
664 | add ebx, [img.rgb] |
||
665 | cmpe [_sel], 0, .draw_icon |
||
666 | .selected: |
||
667 | mov eax, img.sel |
||
668 | mov ecx, 32 * 32 |
||
669 | push edx |
||
670 | @@: |
||
671 | mov edx, [ebx] |
||
672 | and edx, 0xFFFFFF |
||
5721 | leency | 673 | cmpne edx, 0xFFFFFF, .not |
674 | mov edx, 0x94AECE |
||
5394 | eAndrew | 675 | .not: |
676 | mov [eax], edx |
||
677 | add eax, 3 |
||
678 | add ebx, 3 |
||
679 | dec ecx |
||
680 | jnz @b |
||
681 | pop edx |
||
682 | mov ebx, img.sel |
||
683 | |||
684 | .draw_icon: |
||
685 | mcall 7, , <32, 32> |
||
686 | |||
687 | ;; text |
||
688 | mov ebx, edx |
||
689 | add ebx, (32 + 6) shl 16 + 32 / 2 - 9 / 2 |
||
690 | |||
5721 | leency | 691 | mov ecx, 0x000000 ; inactive item text |
5394 | eAndrew | 692 | cmpe [_sel], 0, @f |
5721 | leency | 693 | mov ecx, 0x000000 ; active item text |
5394 | eAndrew | 694 | @@: |
695 | add ecx, 0x80 shl 24 |
||
696 | |||
697 | mov edx, edi |
||
698 | shl edx, 5 |
||
699 | add edx, list |
||
700 | |||
701 | mcall 4 |
||
702 | |||
703 | .break: |
||
704 | ret |
||
705 | endp |
||
706 | |||
707 | ;---------------------- |
||
708 | |||
709 | proc section_cb, _file, _sec |
||
710 | mov ebx, [list.size] |
||
711 | shl ebx, 5 |
||
712 | add ebx, list |
||
713 | stdcall string.compare, [_sec], assoc_ini.sec |
||
714 | cmpe eax, 1, @f |
||
715 | stdcall string.copy, [_sec], ebx |
||
716 | invoke libini.get_num, [_file], [_sec], assoc_ini.icon, 0 |
||
717 | mov ecx, [list.size] |
||
718 | shl ecx, 2 |
||
719 | mov [ecx + list.icon], eax |
||
720 | inc [list.size] |
||
721 | inc [sb_apps.max_area] |
||
722 | @@: |
||
723 | mov eax, 1 |
||
724 | ret |
||
725 | endp |
||
726 | |||
727 | ;---------------------- |
||
728 | |||
729 | dataend: |
||
730 | |||
731 | ;=============================== |
||
732 | |||
5721 | leency | 733 | skin system_colors |
5394 | eAndrew | 734 | list rb 32 * 256 |
735 | .icon rd 256 |
||
736 | .size rd 1 |
||
737 | img rd 1 |
||
738 | .rgb rd 1 |
||
739 | .size rd 1 |
||
740 | .buf rb 40 |
||
741 | .sel rb 32 * 32 * 3 |
||
742 | win: |
||
743 | .x rd 1 |
||
744 | .y rd 1 |
||
745 | win.title rb 256 |
||
746 | param_s rd 1 |
||
747 | param_e rd 1 |
||
748 | param_a rd 1 |
||
749 | undefined rb 1 |
||
750 | buffer rb 2048 |
||
751 | buffer2 rb 2048 |
||
752 | buffer3 rb 2048 |
||
753 | buffer4 rb 4096 |
||
754 | buffer5 rb 4096 |
||
755 | params rb 2048 |
||
756 | _stack rb 2048 |
||
757 | memory:32,>10>4,>10>4,>3>9>3,>9>3,>214,>208,>207,>[win.y],>[win.x],> |