Subversion Repositories Kolibri OS

Rev

Rev 3899 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3853 GerdtR 1
if lang eq ru
2
MinRMenuW equ 18*6+10
3
else
4
MinRMenuW equ 15*6+10
5
end if
6
 
7
idbRRedrawFon equ 100
8
idbRAlign    equ 101
9
idbRFixIcons equ 102
10
idbRAdd      equ 103
11
idbRDel      equ 104
12
idbRProp     equ 105
13
 
14
;---- thread for rbutton -----------------------------------------------------------------------
15
RButtonWin:
16
        mcall	40,100101b	;SetMaskMessage 100101b
17
 
18
        stdcall GetNumIcon,[MouseX],[MouseY],-1
19
        mov     [SelIcon],eax
20
 
21
        cmp     eax,-1
22
        jne     @f
23
        mov     [RMenuH],16*4+3+3
24
        mov     [RMenuHsb],16*4+3+3
25
        jmp     .rbw1
26
      @@:
27
        mov     [RMenuH],16*5+3+3
28
        mov     [RMenuHsb],16*5+3+3
29
    .rbw1:
30
 
31
        mov     [NumUserButt],0
32
        mov     [RMenuW],0
33
        mcall   70,fiIni
34
        mcall   68,12,dword[bufIni+32]
35
        mov     [RBUser],eax
36
        stdcall [ini_enum_keys],IconIni,secRButt,GetUserBut
37
 
38
 
39
RBWRedraw:
40
        mcall	12,1	;RedrawWinBeg
41
        mov     ebx,[MouseX]
42
        shl     ebx,16
43
        mov     bx,[RMenuW]
44
        mov     ecx,[MouseY]
45
        shl     ecx,16
46
        mov     cx,[RMenuH]
47
        mov     edx,0177CCFFh
48
        mov     esi,01000000h
49
        xor     eax,eax
50
        int     40h
51
 
52
       ;-----------
53
        mov     ecx,[NumUserButt]
54
  .DrawUB:
55
        push    ecx
56
 
57
        mov     eax,[NumUserButt]
58
        sub     eax,ecx
59
        mov     edx,eax      ;button ID
60
        shl     eax,4+16          ;*16*10000h
61
        mov     ecx,eax
62
        mov     cx,16
63
 
64
        xor     ebx,ebx
65
        mov     bx,[RMenuW]
66
        mov     esi,0888888h
67
        mcall   8
68
 
69
        mov     ebx,50000h
70
        shr     ecx,16
71
        mov     bx,cx
72
        add     bx,5
73
 
74
        mov     ecx,80000000h
75
 
76
        mov     eax,[NumUserButt]
77
        sub     eax,[esp]
78
        mov     edx,[RBUser+eax*8]
79
 
80
        mcall   4
81
 
82
        pop     ecx
83
        loop    .DrawUB
84
 
85
       ;-----------
86
        xor     ebx,ebx
87
        mov     bx,[RMenuW]
88
        mov     cx,[RMenuH]
89
        sub     cx,[RMenuHsb]
90
        push    ecx
91
        mov     dx,cx
92
        shl     ecx,16
93
        mov     cx,dx
94
 
95
                                   ;первая разделительная линия
96
        mcall   38,,,0888888h
97
        add     ecx,00010001h
98
        mcall     ,,,
99
 
100
       ;------------
101
        mov     ecx,[esp]
102
        add     ecx,2
103
        shl     ecx,16
104
        mov     cx,16
105
 
106
        mcall   8,,,idbRRedrawFon,0888888h  ;3 кнопки второго блока
107
        add     ecx,00100000h
108
        mcall    ,,,idbRAlign
109
        add     ecx,00100000h
110
        mcall    ,,,idbRFixIcons
111
 
112
        mov     ebx,50000h
113
        mov     bx,word[esp]
114
        add     bx,2+5
115
        mcall   4,,80000000h,RMenuRedrawFon
116
        add     ebx,16
117
        mcall    ,,,RMenuAlign
118
 
119
        add     ebx,16
120
        cmp     [bFixIcons],0
121
        jne     @f
122
        mov     edx,RMenuOffMoving
123
        jmp     .RBWR1
124
     @@:
125
        mov     edx,RMenuOnMoving
126
     .RBWR1:
127
        mcall
128
 
129
       ;------------
130
        xor     ebx,ebx               ;вторая разделительная линия
131
        mov     bx,[RMenuW]
132
        mov     ecx,[esp]
133
        add     ecx,16*3+2
134
        mov     dx,cx
135
        shl     ecx,16
136
        mov     cx,dx
137
        mcall   38,,,0888888h
138
        add     ecx,00010001h
139
        mcall     ,,,
140
       ;------------
141
                                     ;1 или 2 кнопки третьего блока
142
        mov     ecx,[esp]
143
        add     ecx,16*3+4
144
        shl     ecx,16
145
        mov     cx,16
146
        cmp     dword[SelIcon],-1
147
        je      @f
148
 
149
        mcall   8,,,idbRDel,0888888h
150
        add     ecx,00100000h
151
        mcall    ,,,idbRProp,0888888h
152
 
153
        mov     ebx,50000h
154
        mov     bx,word[esp]
155
        add     bx,16*3+4+5
156
        mcall   4,,80000000h,RMenuDel
157
        add     bx,16
158
        mcall    ,,         ,RMenuProp
159
 
160
        jmp     .endRM
161
      @@:
162
 
163
        mcall   8,,,idbRAdd,0888888h
164
        mov     ebx,50000h
165
        mov     bx,word[esp]
166
        add     bx,16*3+4+5
167
        mcall   4,,80000000h,RMenuAdd
168
 
169
      .endRM:
170
 
171
        pop     ecx
172
        mcall	12,2	;RedrawWinEnd
173
 
174
        mcall	9,RBProcInfo,-1		;GetThreadInfo RBProcInfo,-1
175
        mcall   18,21,dword[RBProcInfo+30]
176
        m2m     dword[RBSlot],eax
177
 
178
RBWMessages:
179
        mcall	10		;WaitMessage
180
        dec     eax
181
        jz      RBWRedraw
182
        sub     eax,2
183
        jz      RBWButton
184
        sub     eax,3
185
        jz      RBWMouse
186
        jmp     RBWMessages
187
 
188
RBWButton:
189
        mcall	17		;GetButtonPressed
190
        shr     eax,8
191
        cmp     eax,idbRRedrawFon
192
        jz      RBRedrawFon
193
        cmp     eax,idbRAlign
194
        jz      RBAlign
195
        cmp     eax,idbRFixIcons
196
        jz      RBFixIcons
197
        cmp     eax,idbRAdd
198
        jz      RBAdd
199
        cmp     eax,idbRDel
200
        jz      RBDelete
201
        cmp     eax,idbRProp
202
        jz      RBPropeties
203
 
204
        cmp     eax,[NumUserButt]
205
        ja      @f
206
 
207
        mov     eax,[RBUser+eax*8+4]
208
        mov     dword[fiRunProg+8],0
209
        mov     dword[fiRunProg+21],eax
210
        mcall   70,fiRunProg
211
    @@:
212
        jmp     RBWExit
213
 
214
RBWMouse:
215
        mcall	37,2		;GetMouseKey
216
        test    eax,111b
217
        jz      RBWMessages
218
        mcall	37,0		;GetMousePos
219
        xor     ebx,ebx
220
        mov     bx,ax           ;y
221
        shr     eax,16          ;x
222
 
223
        xor     ecx,ecx
224
        mov     cx,bx
225
        mov     bx,ax
226
 
227
        mcall   34
228
        cmp     eax,[RBSlot]
229
        je      RBWMessages
230
 
231
RBWExit:
232
        mcall   68,13,[RBUser]
233
        mov     [RButtonActiv],0
234
        mcall	-1	;ExitProcess
235
 
236
 
237
RBRedrawFon:
238
        mcall   15,3
239
        jmp     RBWExit
240
 
241
RBAlign:
242
        call    AlignIcons
243
 
244
        m2m     [PIcoDB],[BegData]
245
        stdcall [ini_enum_sections],IconIni,Ini_SavePos
246
 
247
        mov     dword[fiRunProg+8],WarningSave
248
        mov     dword[fiRunProg+21],pthNotify
249
        mcall   70,fiRunProg
250
        mov     [bNotSave],0
251
 
252
        jmp     RBRedrawFon
253
 
254
RBFixIcons:
255
        xor     dword[bFixIcons],1
256
 
257
        cmp     [bNotSave],0
258
        je      @f
259
 
260
        mov     dword[fiRunProg+8],WarningSave
261
        mov     dword[fiRunProg+21],pthNotify
262
        mcall   70,fiRunProg
263
        mov     [bNotSave],0
264
 
265
      @@:
266
        jmp     RBWExit
267
 
268
RBAdd:
269
      ;  mov     [DlgAddActiv],1
270
        mcall	51,1,DlgAdd,stack_dlg		;CreateThread DlgAdd,stack_dlg
271
        jmp     RBWExit
272
 
273
RBDelete:
274
 
275
        mov     eax,[SelIcon]
276
        mov     eax,[IconsOffs+eax*4]
277
        stdcall [ini_del_section],IconIni,eax
278
 
279
        stdcall DelIcon,[SelIcon]
280
    ;    mov     dword[fiStdIco],2
281
    ;    m2m     dword[fInfo+12],dword[SizeData]
282
    ;    mcall   70,fInfo
283
 
284
        mov     dword[fiRunProg+8],WarningSave
285
        mov     dword[fiRunProg+21],pthNotify
286
        mcall   70,fiRunProg
287
        mov     [bNotSave],0
288
 
289
        jmp     RBRedrawFon
290
 
291
RBPropeties:
292
    ;    mov     [DlgAddActiv],1
293
        mcall	51,1,DlgProp,stack_dlg		;CreateThread DlgProp,stack_dlg
294
        jmp     RBWExit
295
 
296
 
297
 
298
proc AlignIcons
299
local posX:WORD,\
300
      posY:WORD,\
301
      negatX:WORD,\
302
      negatY:WORD
303
 
304
        xor     ebx,ebx
305
 
306
        mov     ecx,[MaxNumIcon]
307
        test    ecx,ecx
308
        jnz     .AlignIco
309
        ret
310
 .AlignIco:
311
        push    ecx
312
        or      ecx,-1
313
        mov     edi,dword[IconsOffs+ebx]
314
        xor     eax,eax
315
        repne   scasb
316
        repne   scasb
317
        repne   scasb
318
        repne   scasb
319
 
320
        mov     dword[negatX],0
321
 
322
     ;-------- преобразуем координаты в положительные
323
        mov     ax,[edi+2]
324
        test    ax,8000h
325
        jz      @f
326
        neg     ax
327
        mov     word[negatX],1
328
      @@:
329
        mov     [posX],ax
330
 
331
        mov     ax,[edi]
332
        test    ax,8000h
333
        jz      @f
334
        neg     ax
335
        mov     word[negatY],1
336
      @@:
337
        mov     [posY],ax
338
 
339
      ;-----
340
        mov     ax,[posY]
341
        mov     dx,ALIGN_SIZE
342
 
343
        cmp     ax,dx
344
        jb      .AI0
345
    @@: sub     ax,dx
346
        cmp     ax,dx
347
        jae     @b
348
    .AI0:
349
 
350
        mov     dx,ax
351
        cmp     dx,ALIGN_SIZE/2
352
        jb      .AI1
353
 
354
        mov     ax,ALIGN_SIZE
355
        sub     ax,dx
356
        add     [posY],ax
357
 
358
        jmp     .AI2
359
     .AI1:
360
        sub     [posY],dx
361
     .AI2:
362
     ;-----
363
        mov     ax,[posX]
364
        mov     dx,ALIGN_SIZE
365
 
366
        cmp     ax,dx
367
        jb      .AI3
368
    @@: sub     ax,dx
369
        cmp     ax,dx
370
        jae     @b
371
    .AI3:
372
 
373
        mov     dx,ax
374
        cmp     dx,ALIGN_SIZE/2
375
        jb      .AI4
376
 
377
        mov     ax,ALIGN_SIZE
378
        sub     ax,dx
379
        add     [posX],ax
380
 
381
        jmp     .AI5
382
     .AI4:
383
        sub     [posX],dx
384
     .AI5:
385
 
386
      ;----- преобразование назад и поправка в отрицательных координат
387
        mov     ax,[posX]
388
 
389
        cmp     [negatX],1
390
        jne     @f
391
        neg     ax
392
        inc     ax
393
        jmp     .AI6
394
      @@:
395
 
396
        mov     dx,[ScreenX]
397
        shr     dx,1
398
        cmp     ax,dx
399
        jbe     .AI6
400
        sub     ax,[ScreenX]
401
      .AI6:
402
        mov     word[edi+2],ax
403
 
404
 
405
        mov     ax,[posY]
406
        cmp     [negatY],1
407
        jne     @f
408
        neg     ax
409
        inc     ax
410
        jmp     .AI7
411
      @@:
412
 
413
        mov     dx,[ScreenY]
414
        shr     dx,1
415
        cmp     ax,dx
416
        jbe     .AI7
417
        sub     ax,[ScreenY]
418
      .AI7:
419
         mov     word[edi],ax
420
 
421
       ;--------
422
 
423
 
424
 
425
        pop     ecx
426
        add     ebx,4
427
        dec     ecx
428
        jnz     .AlignIco
429
;        loop    .AlignIco
430
 
431
 
432
;        mov     dword[fInfo],2
433
;        mcall   70,fInfo
434
        ret
435
endp
436
 
437
;-------------------------------------------------------------------------------
438
proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
439
        cmp     [NumUserButt],16
440
        jne     @f
441
        ret
442
     @@:
443
 
444
        push    ebx esi edi
445
 
446
        mov     edi,[key_name]           ;определяем ширину меню
447
        xor     eax,eax
448
        or      ecx,-1
449
        repne   scasb
450
        sub     edi,[key_name]
451
        mov     eax,edi
452
        shl     eax,1
453
        lea     eax,[eax*2+eax+5*2]
454
        cmp     ax,[RMenuW]
455
        jbe     @f
456
        mov     [RMenuW],ax
457
     @@:
458
        cmp     [RMenuW],MinRMenuW
459
        jae     @f
460
        mov     [RMenuW],MinRMenuW
461
     @@:
462
 
463
        mov     ebx,[NumUserButt]
464
 
465
        mov     esi,[key_name]
466
        mov     edi,[RBUser+ebx*8]
467
    @@: lodsb
468
        stosb
469
        test    al,al
470
        jnz     @b
471
 
472
;debug_newline
473
 
474
 
475
        mov     [RBUser+ebx*8+4],edi
476
        mov     esi,[key_value]
477
    @@: lodsb
478
        stosb
479
        test    al,al
480
        jnz     @b
481
 
482
        mov     [RBUser+ebx*8+8],edi
483
 
484
        inc     [NumUserButt]
485
        add     [RMenuH],16
486
 
487
        pop     edi esi ebx
488
        mov     eax,1
489
        ret
490
endp
491
 
492
proc Ini_SavePos stdcall,f_name,sec_name
493
        push    ebx edi esi
494
;int3
495
        xor     ebx,ebx
496
  .SearchSect:
497
        mov     edi,[IconsOffs+ebx*4]
498
        mov     esi,[sec_name]
499
      @@:
500
        lodsb
501
        scasb
502
        jne     @f
503
        test    al,al
504
        jnz     @b
505
 
506
        jmp     .IcoDataFound
507
      @@:
508
 
509
        inc     ebx
510
        cmp     ebx,[MaxNumIcon]
511
        jb      .SearchSect
512
 
513
        mov     eax,1
514
        pop     esi edi ebx
515
        ret
516
 
517
.IcoDataFound:
518
        or      ecx,-1
519
        repne   scasb
520
        repne   scasb
521
        repne   scasb
522
 
523
        movzx   eax,word[edi+2]
524
        test    eax,8000h
525
        jz      @f
526
        or      eax,0FFFF0000h
527
     @@:
528
 
529
        stdcall [ini_set_int],[f_name],[sec_name],keyX,eax
530
 
531
        movzx   eax,word[edi]
532
        test    eax,8000h
533
        jz      @f
534
        or      eax,0FFFF0000h
535
     @@:
536
 
537
        stdcall [ini_set_int],[f_name],[sec_name],keyY,eax
538
 
539
        mov     eax,1
540
        pop     esi edi ebx
541
        ret
542
endp
543