Subversion Repositories Kolibri OS

Rev

Rev 4082 | Rev 4088 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3853 GerdtR 1
 
4082 GerdtR 2
;idbRAlign    equ 101
3
;idbRFixIcons equ 102
4
;idbRAdd      equ 103
5
;idbRDel      equ 104
6
;idbRProp     equ 105
7
3853 GerdtR 8
 
4036 GerdtR 9
COLOR_SEL_BUT equ 00F7092Dh
4082 GerdtR 10
MAX_USER_BUTTONS equ 30
11
4036 GerdtR 12
 
3853 GerdtR 13
RButtonWin:
14
       if lang eq ru
4082 GerdtR 15
        mov     [MinRMenuW],18*6+10
16
       else
17
        mov     [MinRMenuW],15*6+10
18
       end if
19
20
 
21
 
22
 
3921 mario79 23
        mcall   48,3,sc,40
4036 GerdtR 24
25
 
26
        rol     eax,16
27
        add     al,DELTA_COLOR
28
        jnc     @f
29
        mov     al,0FFh
30
      @@:
31
        rol     eax,16
32
        add     al,DELTA_COLOR
33
        jnc     @f
34
        mov     al,0FFh
35
      @@:
36
        add     ah,DELTA_COLOR
37
        jnc     @f
38
        mov     ah,0FFh
39
      @@:
40
        mov     [sc.workH],eax
41
42
 
43
        rol     eax,16
44
        sub     al,DELTA_COLOR
45
        jnc     @f
46
        mov     al,0FFh
47
      @@:
48
        rol     eax,16
49
        sub     al,DELTA_COLOR
50
        jnc     @f
51
        mov     al,0FFh
52
      @@:
53
        sub     ah,DELTA_COLOR
54
        jnc     @f
55
        mov     ah,0FFh
56
      @@:
57
        mov     [sc.workL],eax
58
59
 
60
 
61
 
3853 GerdtR 62
        mov     [SelIcon],eax
63
64
 
4082 GerdtR 65
        m2m     [RMenuW],[MinRMenuW]
66
67
 
68
        jne     .RBW1
69
;----------- если клик не по иконке ------------------------------------------------
70
        mov     [NumMenuButt],0
71
72
 
3853 GerdtR 73
        mcall   68,12,dword[bufIni+32]  ;выделяем память для подписей и путей запуска
4082 GerdtR 74
        mov     [RBMenuCP],eax          ;GetUserBut берёт отсюда первоначальный указатель на память
75
        stdcall [ini_enum_keys],IconIni,secRButt,GetUserBut
3853 GerdtR 76
77
 
4082 GerdtR 78
        add     [NumMenuButt],4
79
80
 
81
        mov     [RBMenuCP+ebx*8+8],RMenuAlign
82
        cmp     [bFixIcons],1
83
        je      @f
84
        mov     [RBMenuCP+ebx*8+16],RMenuOffMoving
85
        jmp     .RBW11
86
    @@:
87
        mov     [RBMenuCP+ebx*8+16],RMenuOnMoving
88
    .RBW11:
89
90
 
91
92
 
93
        mov     [RBMenuCP+ebx*8+8+4],0
94
        mov     [RBMenuCP+ebx*8+16+4],0
95
        mov     [RBMenuCP+ebx*8+24+4],0
96
97
 
98
 
99
;----------- если клик по иконке ------------------------------------------------
100
.RBW1:
101
        xor     ebx,ebx
102
        mov     [NumMenuButt],5
103
104
 
105
        mov     [RBMenuCP+ebx*8+8],RMenuAlign
106
        cmp     [bFixIcons],1
107
        je      @f
108
        mov     [RBMenuCP+ebx*8+16],RMenuOffMoving
109
        jmp     .RBW21
110
    @@:
111
        mov     [RBMenuCP+ebx*8+16],RMenuOnMoving
112
    .RBW21:
113
        mov     [RBMenuCP+ebx*8+24],RMenuDel
114
        mov     [RBMenuCP+ebx*8+32],RMenuProp
115
116
 
117
        mov     [RBMenuCP+ebx*8+8+4],0
118
        mov     [RBMenuCP+ebx*8+16+4],0
119
        mov     [RBMenuCP+ebx*8+24+4],0
120
        mov     [RBMenuCP+ebx*8+32+4],0
121
122
 
123
.RBW2:
124
125
 
4036 GerdtR 126
        jne     @f
127
        mov     eax,[NumMenuButt]
4082 GerdtR 128
        shl     eax,4
4036 GerdtR 129
        mov     [RMenuH],ax
4082 GerdtR 130
        jmp     .rbw1
4036 GerdtR 131
      @@:
132
        mov     [RMenuH],16*5
133
    .rbw1:
134
3853 GerdtR 135
 
4082 GerdtR 136
        add     [RMenuH],3              ;на рамку
137
138
 
3853 GerdtR 139
        mcall   12,1    ;RedrawWinBeg
3921 mario79 140
        mov     ebx,[MouseX]
3853 GerdtR 141
        shl     ebx,16
142
        mov     bx,[RMenuW]
143
4082 GerdtR 144
 
3853 GerdtR 145
        shl     ecx,16
146
        mov     cx,[RMenuH]
147
4082 GerdtR 148
 
4036 GerdtR 149
        mov     esi,01000000h
3853 GerdtR 150
        xor     eax,eax
151
        int     40h
152
153
 
4036 GerdtR 154
        inc     bx
155
        and     ecx,0FFFFh
156
        inc     cx
157
        mcall   13,,,[sc.work]
158
159
 
4082 GerdtR 160
        mov     ecx,[NumMenuButt]
161
        xor     eax,eax
4084 GerdtR 162
  .DrawUB:
3853 GerdtR 163
        push    ecx
164
165
 
4084 GerdtR 166
        stdcall DrawRBLine,eax,0
167
        pop     eax
168
        add     eax,16
169
3853 GerdtR 170
 
171
        loop    .DrawUB
172
  ;---------------
4082 GerdtR 173
3853 GerdtR 174
 
4082 GerdtR 175
        xor     ebx,ebx            ;верх
176
        mov     bx,[RMenuW]
3853 GerdtR 177
        xor     ecx,ecx
4082 GerdtR 178
        mcall   38,,,[sc.workL]
179
3853 GerdtR 180
 
4082 GerdtR 181
        shl     ebx,16
182
        mov     bx,[RMenuW]
183
        xor     ecx,ecx
184
        mov     cx,[RMenuH]
185
        mcall
186
187
 
188
        mov     bx,[RMenuW]
189
        mov     cx,[RMenuH]
190
        shl     ecx,16
3853 GerdtR 191
        mov     cx,[RMenuH]
4082 GerdtR 192
        mcall
193
3853 GerdtR 194
 
4082 GerdtR 195
        xor     ecx,ecx
196
        mov     cx,[RMenuH]
197
        mcall
198
3853 GerdtR 199
 
4036 GerdtR 200
 
4082 GerdtR 201
        xor     ebx,ebx
202
        mov     bx,[RMenuW]
203
        add     ebx,1*10000h-1
204
        mov     ecx,00010001h
205
        mcall    ,,,[sc.workH]
206
4036 GerdtR 207
 
4082 GerdtR 208
        xor     ecx,ecx
209
        mov     cx,[RMenuH]
210
        add     ecx,1*10000h-1
211
        mcall
3853 GerdtR 212
213
 
214
 
4082 GerdtR 215
        mcall   12,2    ;RedrawWinEnd
3921 mario79 216
;-------------------------------------------------------------------
4082 GerdtR 217
3853 GerdtR 218
 
3921 mario79 219
        mcall   18,21,dword[RBProcInfo+30]
3853 GerdtR 220
        m2m     dword[RBSlot],eax
221
222
 
223
        mcall   10              ;WaitMessage
3921 mario79 224
        dec     eax
3853 GerdtR 225
        jz      RBWRedraw
226
        sub     eax,2
227
        jz      RBWButton
228
        sub     eax,3
229
        jz      RBWMouse
230
        jmp     RBWMessages
231
232
 
233
        mcall   17              ;GetButtonPressed
3921 mario79 234
        shr     eax,8
3853 GerdtR 235
4082 GerdtR 236
 
237
        mov     eax,[RBMenuCP+ebx*8+4] ;если сдесь 0, то клик по стандартной кнопке(которая не в ini)
238
        test    eax,eax
239
        jnz     .RBWB
240
        mov     eax,[RBMenuCP+ebx*8]  ;смотрим, указатель на какую надпись в подписи
241
        cmp     eax,RMenuRedrawFon                  ; и по ней выбираем действие
242
        jz      RBRedrawFon
3853 GerdtR 243
        cmp     eax,RMenuAlign
4082 GerdtR 244
        jz      RBAlign
3853 GerdtR 245
        cmp     eax,RMenuOffMoving
4082 GerdtR 246
        jz      RBFixIcons
3853 GerdtR 247
        cmp     eax,RMenuOnMoving
4082 GerdtR 248
        jz      RBFixIcons
249
        cmp     eax,RMenuAdd
250
        jz      RBAdd
3853 GerdtR 251
        cmp     eax,RMenuDel
4082 GerdtR 252
        jz      RBDelete
3853 GerdtR 253
        cmp     eax,RMenuProp
4082 GerdtR 254
        jz      RBPropeties
3853 GerdtR 255
256
 
4082 GerdtR 257
   .RBWB:
258
        mov     dword[fiRunProg+8],0
3853 GerdtR 259
        mov     dword[fiRunProg+21],eax
260
        mcall   70,fiRunProg
261
4082 GerdtR 262
 
3853 GerdtR 263
264
 
265
        call    MouseInWin
4082 GerdtR 266
        jnc     .RBWMnoInWin          ;если вне окна, то просто восстанавливаем предыдущую кнопку
267
268
 
269
        and     eax,0FFF0h      ;нужен только Y, причём округлённый до верхней точки кратной 16(высота кнопки)
270
        cmp     [PredItem],eax
271
        je      .RBWMendLightBut
272
273
 
274
        cmp     eax,[NumMenuButt]
275
        jae     .RBWMnoInWin
276
277
 
278
        je      @f
4036 GerdtR 279
4082 GerdtR 280
 
281
282
 
4036 GerdtR 283
4082 GerdtR 284
 
285
        jnc     @f
4036 GerdtR 286
        mcall   37,1          ;положение мыши относительно окна
287
        and     eax,0FFF0h      ;нужен только Y, причём округлённый до верхней точки кратной 16(высота кнопки)
4082 GerdtR 288
        mov     [PredItem],eax
4036 GerdtR 289
        stdcall DrawRBLine,eax,1
4082 GerdtR 290
291
 
4036 GerdtR 292
        jmp     .RBWMendLightBut
4082 GerdtR 293
4036 GerdtR 294
 
295
 
4082 GerdtR 296
        cmp     [PredItem],-1      ;восстановление предыдущей кнопки
297
        je      .RBWMendLightBut
298
299
 
300
        mov     [PredItem],-1
301
302
 
303
        mcall   37,2            ;GetMouseKey
3921 mario79 304
        test    eax,111b
3853 GerdtR 305
        jz      RBWMessages
306
307
 
4082 GerdtR 308
        jc      RBWMessages
4036 GerdtR 309
3853 GerdtR 310
 
311
        cmp     [SelIcon],-1
4082 GerdtR 312
        jne     @f
313
        mcall   68,13,[RBMenuCP]                        ;освобождаем память с подписями и путями к прогам
314
      @@:
315
        mov     [RButtonActiv],0
3853 GerdtR 316
        mcall   -1      ;ExitProcess
3921 mario79 317
3853 GerdtR 318
 
319
 
320
        mcall   15,3
321
        jmp     RBWExit
322
323
 
324
        call    AlignIcons
325
326
 
327
        stdcall [ini_enum_sections],IconIni,Ini_SavePos
328
329
 
330
        mov     dword[fiRunProg+21],pthNotify
331
        mcall   70,fiRunProg
332
        mov     [bNotSave],0
333
334
 
335
336
 
337
        xor     dword[bFixIcons],1
338
339
 
340
        je      @f
341
342
 
343
        mov     dword[fiRunProg+21],pthNotify
344
        mcall   70,fiRunProg
345
        mov     [bNotSave],0
346
347
 
348
        jmp     RBWExit
349
350
 
351
        cmp     [DlgAddActiv],1
3921 mario79 352
        je      RBWSetActivWin
353
        mov     [DlgAddActiv],1
354
355
 
356
        jmp     RBWExit
3853 GerdtR 357
358
 
359
        mov     eax,[SelIcon]
360
        mov     eax,[IconsOffs+eax*4]
361
        stdcall [ini_del_section],IconIni,eax
362
363
 
364
365
 
366
        mov     dword[fiRunProg+21],pthNotify
367
        mcall   70,fiRunProg
368
        mov     [bNotSave],0
369
370
 
371
372
 
373
        cmp     [DlgAddActiv],1
3921 mario79 374
        je      RBWSetActivWin
375
        mov     [DlgAddActiv],1
376
377
 
378
        jmp     RBWExit
3853 GerdtR 379
380
 
3921 mario79 381
        mcall   18,3,[slotDlgAdd]
382
        jmp     RBWExit
383
3853 GerdtR 384
 
4082 GerdtR 385
386
 
387
        mov     bx,[RMenuW]
388
        add     ebx,2*10000h-3
389
        mov     ecx,[y]
390
        add     ecx,2
391
        shl     ecx,16
392
        mov     cx,16;-1-2
393
        cmp     [active],1
394
        jne     @f
395
        mov     edx,[sc.work_button]
396
        jmp     .L1
397
       @@:
398
        mov     edx,[sc.work]
399
      .L1:
400
        mcall   13
401
402
 
403
        xor     ebx,ebx            ;верх
404
        mov     bx,[RMenuW]
405
        add     ebx,2*10000h-3
406
        mov     cx,word[y]
407
        shl     ecx,16
408
        mov     cx,word[y]
409
        add     ecx,00020002h
410
411
 
412
        jne     @f
413
        mov     edx,[sc.workL]
414
        jmp     .L3
415
       @@:
416
        mov     edx,[sc.work]
417
      .L3:
418
419
 
420
421
 
422
        mov     cx,word[y]
423
        shl     ecx,16
424
        mov     cx,word[y]
425
        add     ecx,00020002h+16
426
427
 
428
        jne     @f
429
        mov     edx,[sc.workL]
430
431
 
432
433
 
434
435
 
436
        mov     bx,[RMenuW]
437
        add     ebx,2*10000h-3
438
        mov     cx,word[y]
439
        shl     ecx,16
440
        mov     cx,word[y]
441
        add     ecx,16*10000h+16+00020002h
442
443
 
444
        jne     @f
445
        mov     edx,[sc.workH]
446
       @@:
447
448
 
449
450
 
451
        shl     ebx,16
452
        mov     bx,[RMenuW]
453
        add     ebx,-2*10000h-2
454
        mov     cx,word[y]
455
        shl     ecx,16
456
        mov     cx,word[y]
457
        add     ecx,00020002h+16
458
459
 
460
        jne     @f
461
        mov     edx,[sc.workH]
462
       @@:
463
464
 
465
466
 
467
        shr     eax,4
468
        mov     edx,[RBMenuCP+eax*8]
469
470
 
471
        mov     ebx,[y]
472
        add     ebx,7*10000h+7
473
474
 
475
        jne     @f
476
        mov     ecx,[sc.work_button_text]
477
        jmp     .L2
478
       @@:
479
        mov     ecx,[sc.work_text]
480
      .L2:
481
482
 
483
484
 
485
486
 
487
endp
488
489
 
490
 
491
        mcall   37,0            ;GetMousePos
4036 GerdtR 492
        xor     ebx,ebx
493
        mov     bx,ax           ;y
494
        shr     eax,16          ;x
495
3853 GerdtR 496
 
4036 GerdtR 497
        mov     cx,bx
498
        mov     bx,ax
499
500
 
501
        cmp     eax,[RBSlot]
502
        jne     @f
503
        stc
504
        ret
505
      @@:
506
        clc
507
        ret
508
endp
509
510
 
511
 
3853 GerdtR 512
local posX:WORD,\
513
      posY:WORD,\
514
      negatX:WORD,\
515
      negatY:WORD
516
517
 
518
519
 
520
        test    ecx,ecx
521
        jnz     .AlignIco
522
        ret
523
 .AlignIco:
524
        push    ecx
525
        or      ecx,-1
526
        mov     edi,dword[IconsOffs+ebx]
527
        xor     eax,eax
528
        repne   scasb
529
        repne   scasb
530
        repne   scasb
531
        repne   scasb
532
533
 
534
535
 
536
        mov     ax,[edi+2]
537
        test    ax,8000h
538
        jz      @f
539
        neg     ax
540
        mov     word[negatX],1
541
      @@:
542
        mov     [posX],ax
543
544
 
545
        test    ax,8000h
546
        jz      @f
547
        neg     ax
548
        mov     word[negatY],1
549
      @@:
550
        mov     [posY],ax
551
552
 
553
        mov     ax,[posY]
554
        mov     dx,ALIGN_SIZE
555
556
 
557
        jb      .AI0
558
    @@: sub     ax,dx
559
        cmp     ax,dx
560
        jae     @b
561
    .AI0:
562
563
 
564
        cmp     dx,ALIGN_SIZE/2
565
        jb      .AI1
566
567
 
568
        sub     ax,dx
569
        add     [posY],ax
570
571
 
572
     .AI1:
573
        sub     [posY],dx
574
     .AI2:
575
     ;-----
576
        mov     ax,[posX]
577
        mov     dx,ALIGN_SIZE
578
579
 
580
        jb      .AI3
581
    @@: sub     ax,dx
582
        cmp     ax,dx
583
        jae     @b
584
    .AI3:
585
586
 
587
        cmp     dx,ALIGN_SIZE/2
588
        jb      .AI4
589
590
 
591
        sub     ax,dx
592
        add     [posX],ax
593
594
 
595
     .AI4:
596
        sub     [posX],dx
597
     .AI5:
598
599
 
600
        mov     ax,[posX]
601
602
 
603
        jne     @f
604
        neg     ax
605
        inc     ax
606
        jmp     .AI6
607
      @@:
608
609
 
610
        shr     dx,1
611
        cmp     ax,dx
612
        jbe     .AI6
613
        sub     ax,[ScreenX]
614
      .AI6:
615
        mov     word[edi+2],ax
616
617
 
618
 
619
        cmp     [negatY],1
620
        jne     @f
621
        neg     ax
622
        inc     ax
623
        jmp     .AI7
624
      @@:
625
626
 
627
        shr     dx,1
628
        cmp     ax,dx
629
        jbe     .AI7
630
        sub     ax,[ScreenY]
631
      .AI7:
632
         mov     word[edi],ax
633
634
 
635
636
 
637
 
638
 
639
        add     ebx,4
640
        dec     ecx
641
        jnz     .AlignIco
642
;        loop    .AlignIco
643
644
 
645
 
646
;        mcall   70,fInfo
647
        ret
648
endp
649
650
 
651
proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
652
        cmp     [NumMenuButt],MAX_USER_BUTTONS
4082 GerdtR 653
        jne     @f
3853 GerdtR 654
        ret
655
     @@:
656
657
 
658
659
 
660
        xor     eax,eax
661
        or      ecx,-1
662
        repne   scasb
663
        sub     edi,[key_name]
664
        mov     eax,edi
665
        shl     eax,1
666
        lea     eax,[eax*2+eax+5*2]
667
        cmp     ax,[RMenuW]
668
        jbe     @f
669
        mov     [RMenuW],ax
670
     @@:
671
672
 
4082 GerdtR 673
3853 GerdtR 674
 
675
        mov     edi,[RBMenuCP+ebx*8]
4082 GerdtR 676
    @@: lodsb
3853 GerdtR 677
        stosb
678
        test    al,al
679
        jnz     @b
680
681
 
682
 
4082 GerdtR 683
        mov     esi,[key_value]
3853 GerdtR 684
    @@: lodsb
685
        stosb
686
        test    al,al
687
        jnz     @b
688
689
 
4082 GerdtR 690
3853 GerdtR 691
 
4082 GerdtR 692
3853 GerdtR 693
 
694
        mov     eax,1
695
        ret
696
endp
697
698
 
699
        push    ebx edi esi
700
3921 mario79 701
 
3853 GerdtR 702
  .SearchSect:
703
        mov     edi,[IconsOffs+ebx*4]
704
        mov     esi,[sec_name]
705
      @@:
706
        lodsb
707
        scasb
708
        jne     @f
709
        test    al,al
710
        jnz     @b
711
712
 
713
      @@:
714
715
 
716
        cmp     ebx,[MaxNumIcon]
717
        jb      .SearchSect
718
719
 
720
        pop     esi edi ebx
721
        ret
722
723
 
724
        or      ecx,-1
725
        repne   scasb
726
        repne   scasb
727
        repne   scasb
728
729
 
3921 mario79 730
        movzx   eax,word[edi+2]
3853 GerdtR 731
        test    eax,8000h
732
        jz      @f
733
        or      eax,0FFFF0000h
734
     @@:
735
736
 
737
738
 
739
        test    eax,8000h
740
        jz      @f
741
        or      eax,0FFFF0000h
742
     @@:
743
744
 
745
746
 
747
        pop     esi edi ebx
748
        ret
749
endp
750