Subversion Repositories Kolibri OS

Rev

Rev 3899 | Rev 3953 | Go to most recent revision | Details | Compare with Previous | 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:
3921 mario79 16
        mcall   40,100101b      ;SetMaskMessage 100101b
3853 GerdtR 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:
3921 mario79 40
        mcall   12,1    ;RedrawWinBeg
3853 GerdtR 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]
3921 mario79 66
        mov     esi,[RBMenuColor];0888888h
3853 GerdtR 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
                                   ;первая разделительная линия
3921 mario79 96
        mcall   38,,,[RBMenuColor];0888888h
3853 GerdtR 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
 
3921 mario79 106
        mcall   8,,,idbRRedrawFon,[RBMenuColor];0888888h  ;3 кнопки второго блока
3853 GerdtR 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
3921 mario79 137
        mcall   38,,,[RBMenuColor];0888888h
3853 GerdtR 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
 
3921 mario79 149
        mcall   8,,,idbRDel,[RBMenuColor];0888888h
3853 GerdtR 150
        add     ecx,00100000h
3921 mario79 151
        mcall    ,,,idbRProp,[RBMenuColor];0888888h
3853 GerdtR 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
 
3921 mario79 163
        mcall   8,,,idbRAdd,[RBMenuColor];0888888h
3853 GerdtR 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
3921 mario79 172
        mcall   12,2    ;RedrawWinEnd
3853 GerdtR 173
 
3921 mario79 174
        mcall   9,RBProcInfo,-1         ;GetThreadInfo RBProcInfo,-1
3853 GerdtR 175
        mcall   18,21,dword[RBProcInfo+30]
176
        m2m     dword[RBSlot],eax
177
 
178
RBWMessages:
3921 mario79 179
        mcall   10              ;WaitMessage
3853 GerdtR 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:
3921 mario79 189
        mcall   17              ;GetButtonPressed
3853 GerdtR 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:
3921 mario79 215
        mcall   37,2            ;GetMouseKey
3853 GerdtR 216
        test    eax,111b
217
        jz      RBWMessages
3921 mario79 218
        mcall   37,0            ;GetMousePos
3853 GerdtR 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
3921 mario79 234
        mcall   -1      ;ExitProcess
3853 GerdtR 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:
3921 mario79 269
        cmp     [DlgAddActiv],1
270
        je      RBWSetActivWin
271
        mov     [DlgAddActiv],1
272
 
273
        mcall   51,1,DlgAdd,stack_dlg           ;CreateThread DlgAdd,stack_dlg
3853 GerdtR 274
        jmp     RBWExit
275
 
276
RBDelete:
277
 
278
        mov     eax,[SelIcon]
279
        mov     eax,[IconsOffs+eax*4]
280
        stdcall [ini_del_section],IconIni,eax
281
 
282
        stdcall DelIcon,[SelIcon]
283
    ;    mov     dword[fiStdIco],2
284
    ;    m2m     dword[fInfo+12],dword[SizeData]
285
    ;    mcall   70,fInfo
286
 
287
        mov     dword[fiRunProg+8],WarningSave
288
        mov     dword[fiRunProg+21],pthNotify
289
        mcall   70,fiRunProg
290
        mov     [bNotSave],0
291
 
292
        jmp     RBRedrawFon
293
 
294
RBPropeties:
3921 mario79 295
        cmp     [DlgAddActiv],1
296
        je      RBWSetActivWin
297
        mov     [DlgAddActiv],1
298
 
299
        mcall   51,1,DlgProp,stack_dlg          ;CreateThread DlgProp,stack_dlg
3853 GerdtR 300
        jmp     RBWExit
301
 
3921 mario79 302
RBWSetActivWin:
303
        mcall   18,3,[slotDlgAdd]
304
        jmp     RBWExit
3853 GerdtR 305
 
306
 
307
proc AlignIcons
308
local posX:WORD,\
309
      posY:WORD,\
310
      negatX:WORD,\
311
      negatY:WORD
312
 
313
        xor     ebx,ebx
314
 
315
        mov     ecx,[MaxNumIcon]
316
        test    ecx,ecx
317
        jnz     .AlignIco
318
        ret
319
 .AlignIco:
320
        push    ecx
321
        or      ecx,-1
322
        mov     edi,dword[IconsOffs+ebx]
323
        xor     eax,eax
324
        repne   scasb
325
        repne   scasb
326
        repne   scasb
327
        repne   scasb
328
 
329
        mov     dword[negatX],0
330
 
331
     ;-------- преобразуем координаты в положительные
332
        mov     ax,[edi+2]
333
        test    ax,8000h
334
        jz      @f
335
        neg     ax
336
        mov     word[negatX],1
337
      @@:
338
        mov     [posX],ax
339
 
340
        mov     ax,[edi]
341
        test    ax,8000h
342
        jz      @f
343
        neg     ax
344
        mov     word[negatY],1
345
      @@:
346
        mov     [posY],ax
347
 
348
      ;-----
349
        mov     ax,[posY]
350
        mov     dx,ALIGN_SIZE
351
 
352
        cmp     ax,dx
353
        jb      .AI0
354
    @@: sub     ax,dx
355
        cmp     ax,dx
356
        jae     @b
357
    .AI0:
358
 
359
        mov     dx,ax
360
        cmp     dx,ALIGN_SIZE/2
361
        jb      .AI1
362
 
363
        mov     ax,ALIGN_SIZE
364
        sub     ax,dx
365
        add     [posY],ax
366
 
367
        jmp     .AI2
368
     .AI1:
369
        sub     [posY],dx
370
     .AI2:
371
     ;-----
372
        mov     ax,[posX]
373
        mov     dx,ALIGN_SIZE
374
 
375
        cmp     ax,dx
376
        jb      .AI3
377
    @@: sub     ax,dx
378
        cmp     ax,dx
379
        jae     @b
380
    .AI3:
381
 
382
        mov     dx,ax
383
        cmp     dx,ALIGN_SIZE/2
384
        jb      .AI4
385
 
386
        mov     ax,ALIGN_SIZE
387
        sub     ax,dx
388
        add     [posX],ax
389
 
390
        jmp     .AI5
391
     .AI4:
392
        sub     [posX],dx
393
     .AI5:
394
 
395
      ;----- преобразование назад и поправка в отрицательных координат
396
        mov     ax,[posX]
397
 
398
        cmp     [negatX],1
399
        jne     @f
400
        neg     ax
401
        inc     ax
402
        jmp     .AI6
403
      @@:
404
 
405
        mov     dx,[ScreenX]
406
        shr     dx,1
407
        cmp     ax,dx
408
        jbe     .AI6
409
        sub     ax,[ScreenX]
410
      .AI6:
411
        mov     word[edi+2],ax
412
 
413
 
414
        mov     ax,[posY]
415
        cmp     [negatY],1
416
        jne     @f
417
        neg     ax
418
        inc     ax
419
        jmp     .AI7
420
      @@:
421
 
422
        mov     dx,[ScreenY]
423
        shr     dx,1
424
        cmp     ax,dx
425
        jbe     .AI7
426
        sub     ax,[ScreenY]
427
      .AI7:
428
         mov     word[edi],ax
429
 
430
       ;--------
431
 
432
 
433
 
434
        pop     ecx
435
        add     ebx,4
436
        dec     ecx
437
        jnz     .AlignIco
438
;        loop    .AlignIco
439
 
440
 
441
;        mov     dword[fInfo],2
442
;        mcall   70,fInfo
443
        ret
444
endp
445
 
446
;-------------------------------------------------------------------------------
447
proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
448
        cmp     [NumUserButt],16
449
        jne     @f
450
        ret
451
     @@:
452
 
453
        push    ebx esi edi
454
 
3921 mario79 455
        mov     edi,[key_name]
456
        mov     esi,keyMenuColor
457
    @@: lodsb
458
        scasb
459
        jne     @f
460
        test    al,al
461
        jnz     @b
462
 
463
        stdcall [ini_get_color],[f_name],[sec_name],[key_name],0888888h
464
        mov     [RBMenuColor],eax
465
        ret
466
   @@:
467
 
3853 GerdtR 468
        mov     edi,[key_name]           ;определяем ширину меню
469
        xor     eax,eax
470
        or      ecx,-1
471
        repne   scasb
472
        sub     edi,[key_name]
473
        mov     eax,edi
474
        shl     eax,1
475
        lea     eax,[eax*2+eax+5*2]
476
        cmp     ax,[RMenuW]
477
        jbe     @f
478
        mov     [RMenuW],ax
479
     @@:
480
        cmp     [RMenuW],MinRMenuW
481
        jae     @f
482
        mov     [RMenuW],MinRMenuW
483
     @@:
484
 
485
        mov     ebx,[NumUserButt]
486
 
487
        mov     esi,[key_name]
488
        mov     edi,[RBUser+ebx*8]
489
    @@: lodsb
490
        stosb
491
        test    al,al
492
        jnz     @b
493
 
494
;debug_newline
495
 
496
 
497
        mov     [RBUser+ebx*8+4],edi
498
        mov     esi,[key_value]
499
    @@: lodsb
500
        stosb
501
        test    al,al
502
        jnz     @b
503
 
504
        mov     [RBUser+ebx*8+8],edi
505
 
506
        inc     [NumUserButt]
507
        add     [RMenuH],16
508
 
509
        pop     edi esi ebx
510
        mov     eax,1
511
        ret
512
endp
513
 
514
proc Ini_SavePos stdcall,f_name,sec_name
515
        push    ebx edi esi
3921 mario79 516
 
3853 GerdtR 517
        xor     ebx,ebx
518
  .SearchSect:
519
        mov     edi,[IconsOffs+ebx*4]
520
        mov     esi,[sec_name]
521
      @@:
522
        lodsb
523
        scasb
524
        jne     @f
525
        test    al,al
526
        jnz     @b
527
 
528
        jmp     .IcoDataFound
529
      @@:
530
 
531
        inc     ebx
532
        cmp     ebx,[MaxNumIcon]
533
        jb      .SearchSect
534
 
535
        mov     eax,1
536
        pop     esi edi ebx
537
        ret
538
 
539
.IcoDataFound:
540
        or      ecx,-1
541
        repne   scasb
542
        repne   scasb
543
        repne   scasb
544
 
3921 mario79 545
;int3
3853 GerdtR 546
        movzx   eax,word[edi+2]
547
        test    eax,8000h
548
        jz      @f
549
        or      eax,0FFFF0000h
550
     @@:
551
 
552
        stdcall [ini_set_int],[f_name],[sec_name],keyX,eax
553
 
554
        movzx   eax,word[edi]
555
        test    eax,8000h
556
        jz      @f
557
        or      eax,0FFFF0000h
558
     @@:
559
 
560
        stdcall [ini_set_int],[f_name],[sec_name],keyY,eax
561
 
562
        mov     eax,1
563
        pop     esi edi ebx
564
        ret
565
endp
566