Subversion Repositories Kolibri OS

Rev

Rev 4036 | Rev 4084 | 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
  .DrawUB:
3853 GerdtR 162
        push    ecx
163
164
 
4082 GerdtR 165
        sub     eax,ecx
3853 GerdtR 166
        mov     edx,eax      ;button ID = от 0 до NumMenuButt
4082 GerdtR 167
        or      edx,60000000h
4036 GerdtR 168
        shl     eax,4+16          ;*16*10000h
3853 GerdtR 169
        mov     ecx,eax
170
        mov     cx,16
171
172
 
173
        mov     bx,[RMenuW]
174
        mov     esi,[sc.work]
4036 GerdtR 175
        mcall   8                       ;определили
176
3853 GerdtR 177
 
4082 GerdtR 178
        shr     ecx,16
3853 GerdtR 179
        mov     bx,cx
180
        add     bx,7
4082 GerdtR 181
3853 GerdtR 182
 
183
184
 
4082 GerdtR 185
        sub     eax,[esp]
3853 GerdtR 186
        mov     edx,[RBMenuCP+eax*8]
4082 GerdtR 187
        mcall   4                      ;подписали
4036 GerdtR 188
3853 GerdtR 189
 
190
        loop    .DrawUB
191
  ;---------------
4082 GerdtR 192
3853 GerdtR 193
 
4082 GerdtR 194
        xor     ebx,ebx            ;верх
195
        mov     bx,[RMenuW]
3853 GerdtR 196
        xor     ecx,ecx
4082 GerdtR 197
        mcall   38,,,[sc.workL]
198
3853 GerdtR 199
 
4082 GerdtR 200
        shl     ebx,16
201
        mov     bx,[RMenuW]
202
        xor     ecx,ecx
203
        mov     cx,[RMenuH]
204
        mcall
205
206
 
207
        mov     bx,[RMenuW]
208
        mov     cx,[RMenuH]
209
        shl     ecx,16
3853 GerdtR 210
        mov     cx,[RMenuH]
4082 GerdtR 211
        mcall
212
3853 GerdtR 213
 
4082 GerdtR 214
        xor     ecx,ecx
215
        mov     cx,[RMenuH]
216
        mcall
217
3853 GerdtR 218
 
4036 GerdtR 219
 
4082 GerdtR 220
        xor     ebx,ebx
221
        mov     bx,[RMenuW]
222
        add     ebx,1*10000h-1
223
        mov     ecx,00010001h
224
        mcall    ,,,[sc.workH]
225
4036 GerdtR 226
 
4082 GerdtR 227
        xor     ecx,ecx
228
        mov     cx,[RMenuH]
229
        add     ecx,1*10000h-1
230
        mcall
3853 GerdtR 231
232
 
233
 
4082 GerdtR 234
        mcall   12,2    ;RedrawWinEnd
3921 mario79 235
;-------------------------------------------------------------------
4082 GerdtR 236
3853 GerdtR 237
 
3921 mario79 238
        mcall   18,21,dword[RBProcInfo+30]
3853 GerdtR 239
        m2m     dword[RBSlot],eax
240
241
 
242
        mcall   10              ;WaitMessage
3921 mario79 243
        dec     eax
3853 GerdtR 244
        jz      RBWRedraw
245
        sub     eax,2
246
        jz      RBWButton
247
        sub     eax,3
248
        jz      RBWMouse
249
        jmp     RBWMessages
250
251
 
252
        mcall   17              ;GetButtonPressed
3921 mario79 253
        shr     eax,8
3853 GerdtR 254
4082 GerdtR 255
 
256
        mov     eax,[RBMenuCP+ebx*8+4] ;если сдесь 0, то клик по стандартной кнопке(которая не в ini)
257
        test    eax,eax
258
        jnz     .RBWB
259
        mov     eax,[RBMenuCP+ebx*8]  ;смотрим, указатель на какую надпись в подписи
260
        cmp     eax,RMenuRedrawFon                  ; и по ней выбираем действие
261
        jz      RBRedrawFon
3853 GerdtR 262
        cmp     eax,RMenuAlign
4082 GerdtR 263
        jz      RBAlign
3853 GerdtR 264
        cmp     eax,RMenuOffMoving
4082 GerdtR 265
        jz      RBFixIcons
3853 GerdtR 266
        cmp     eax,RMenuOnMoving
4082 GerdtR 267
        jz      RBFixIcons
268
        cmp     eax,RMenuAdd
269
        jz      RBAdd
3853 GerdtR 270
        cmp     eax,RMenuDel
4082 GerdtR 271
        jz      RBDelete
3853 GerdtR 272
        cmp     eax,RMenuProp
4082 GerdtR 273
        jz      RBPropeties
3853 GerdtR 274
275
 
4082 GerdtR 276
   .RBWB:
277
        mov     dword[fiRunProg+8],0
3853 GerdtR 278
        mov     dword[fiRunProg+21],eax
279
        mcall   70,fiRunProg
280
4082 GerdtR 281
 
3853 GerdtR 282
283
 
284
        call    MouseInWin
4082 GerdtR 285
        jnc     .RBWMnoInWin          ;если вне окна, то просто восстанавливаем предыдущую кнопку
286
287
 
288
        and     eax,0FFF0h      ;нужен только Y, причём округлённый до верхней точки кратной 16(высота кнопки)
289
        cmp     [PredItem],eax
290
        je      .RBWMendLightBut
291
292
 
293
        cmp     eax,[NumMenuButt]
294
        jae     .RBWMnoInWin
295
296
 
297
        je      @f
4036 GerdtR 298
4082 GerdtR 299
 
300
301
 
4036 GerdtR 302
4082 GerdtR 303
 
304
        jnc     @f
4036 GerdtR 305
        mcall   37,1          ;положение мыши относительно окна
306
        and     eax,0FFF0h      ;нужен только Y, причём округлённый до верхней точки кратной 16(высота кнопки)
4082 GerdtR 307
        mov     [PredItem],eax
4036 GerdtR 308
        stdcall DrawRBLine,eax,1
4082 GerdtR 309
310
 
4036 GerdtR 311
        jmp     .RBWMendLightBut
4082 GerdtR 312
4036 GerdtR 313
 
314
 
4082 GerdtR 315
        cmp     [PredItem],-1      ;восстановление предыдущей кнопки
316
        je      .RBWMendLightBut
317
318
 
319
        mov     [PredItem],-1
320
321
 
322
        mcall   37,2            ;GetMouseKey
3921 mario79 323
        test    eax,111b
3853 GerdtR 324
        jz      RBWMessages
325
326
 
4082 GerdtR 327
        jc      RBWMessages
4036 GerdtR 328
3853 GerdtR 329
 
330
        cmp     [SelIcon],-1
4082 GerdtR 331
        jne     @f
332
        mcall   68,13,[RBMenuCP]                        ;освобождаем память с подписями и путями к прогам
333
      @@:
334
        mov     [RButtonActiv],0
3853 GerdtR 335
        mcall   -1      ;ExitProcess
3921 mario79 336
3853 GerdtR 337
 
338
 
339
        mcall   15,3
340
        jmp     RBWExit
341
342
 
343
        call    AlignIcons
344
345
 
346
        stdcall [ini_enum_sections],IconIni,Ini_SavePos
347
348
 
349
        mov     dword[fiRunProg+21],pthNotify
350
        mcall   70,fiRunProg
351
        mov     [bNotSave],0
352
353
 
354
355
 
356
        xor     dword[bFixIcons],1
357
358
 
359
        je      @f
360
361
 
362
        mov     dword[fiRunProg+21],pthNotify
363
        mcall   70,fiRunProg
364
        mov     [bNotSave],0
365
366
 
367
        jmp     RBWExit
368
369
 
370
        cmp     [DlgAddActiv],1
3921 mario79 371
        je      RBWSetActivWin
372
        mov     [DlgAddActiv],1
373
374
 
375
        jmp     RBWExit
3853 GerdtR 376
377
 
378
        mov     eax,[SelIcon]
379
        mov     eax,[IconsOffs+eax*4]
380
        stdcall [ini_del_section],IconIni,eax
381
382
 
383
384
 
385
        mov     dword[fiRunProg+21],pthNotify
386
        mcall   70,fiRunProg
387
        mov     [bNotSave],0
388
389
 
390
391
 
392
        cmp     [DlgAddActiv],1
3921 mario79 393
        je      RBWSetActivWin
394
        mov     [DlgAddActiv],1
395
396
 
397
        jmp     RBWExit
3853 GerdtR 398
399
 
3921 mario79 400
        mcall   18,3,[slotDlgAdd]
401
        jmp     RBWExit
402
3853 GerdtR 403
 
4082 GerdtR 404
405
 
406
        mov     bx,[RMenuW]
407
        add     ebx,2*10000h-3
408
        mov     ecx,[y]
409
        add     ecx,2
410
        shl     ecx,16
411
        mov     cx,16;-1-2
412
        cmp     [active],1
413
        jne     @f
414
        mov     edx,[sc.work_button]
415
        jmp     .L1
416
       @@:
417
        mov     edx,[sc.work]
418
      .L1:
419
        mcall   13
420
421
 
422
        xor     ebx,ebx            ;верх
423
        mov     bx,[RMenuW]
424
        add     ebx,2*10000h-3
425
        mov     cx,word[y]
426
        shl     ecx,16
427
        mov     cx,word[y]
428
        add     ecx,00020002h
429
430
 
431
        jne     @f
432
        mov     edx,[sc.workL]
433
        jmp     .L3
434
       @@:
435
        mov     edx,[sc.work]
436
      .L3:
437
438
 
439
440
 
441
        mov     cx,word[y]
442
        shl     ecx,16
443
        mov     cx,word[y]
444
        add     ecx,00020002h+16
445
446
 
447
        jne     @f
448
        mov     edx,[sc.workL]
449
450
 
451
452
 
453
454
 
455
        mov     bx,[RMenuW]
456
        add     ebx,2*10000h-3
457
        mov     cx,word[y]
458
        shl     ecx,16
459
        mov     cx,word[y]
460
        add     ecx,16*10000h+16+00020002h
461
462
 
463
        jne     @f
464
        mov     edx,[sc.workH]
465
       @@:
466
467
 
468
469
 
470
 
471
        shl     ebx,16
472
        mov     bx,[RMenuW]
473
        add     ebx,-2*10000h-2
474
        mov     cx,word[y]
475
        shl     ecx,16
476
        mov     cx,word[y]
477
        add     ecx,00020002h+16
478
479
 
480
        jne     @f
481
        mov     edx,[sc.workH]
482
       @@:
483
484
 
485
486
 
487
 
488
 
489
 
490
 
491
        shr     eax,4
492
        mov     edx,[RBMenuCP+eax*8]
493
494
 
495
        mov     ebx,[y]
496
        add     ebx,7*10000h+7
497
498
 
499
        jne     @f
500
        mov     ecx,[sc.work_button_text]
501
        jmp     .L2
502
       @@:
503
        mov     ecx,[sc.work_text]
504
      .L2:
505
506
 
507
 
508
 
509
510
 
511
512
 
513
endp
514
515
 
516
 
517
        mcall   37,0            ;GetMousePos
4036 GerdtR 518
        xor     ebx,ebx
519
        mov     bx,ax           ;y
520
        shr     eax,16          ;x
521
3853 GerdtR 522
 
4036 GerdtR 523
        mov     cx,bx
524
        mov     bx,ax
525
526
 
527
        cmp     eax,[RBSlot]
528
        jne     @f
529
        stc
530
        ret
531
      @@:
532
        clc
533
        ret
534
endp
535
536
 
537
 
3853 GerdtR 538
local posX:WORD,\
539
      posY:WORD,\
540
      negatX:WORD,\
541
      negatY:WORD
542
543
 
544
545
 
546
        test    ecx,ecx
547
        jnz     .AlignIco
548
        ret
549
 .AlignIco:
550
        push    ecx
551
        or      ecx,-1
552
        mov     edi,dword[IconsOffs+ebx]
553
        xor     eax,eax
554
        repne   scasb
555
        repne   scasb
556
        repne   scasb
557
        repne   scasb
558
559
 
560
561
 
562
        mov     ax,[edi+2]
563
        test    ax,8000h
564
        jz      @f
565
        neg     ax
566
        mov     word[negatX],1
567
      @@:
568
        mov     [posX],ax
569
570
 
571
        test    ax,8000h
572
        jz      @f
573
        neg     ax
574
        mov     word[negatY],1
575
      @@:
576
        mov     [posY],ax
577
578
 
579
        mov     ax,[posY]
580
        mov     dx,ALIGN_SIZE
581
582
 
583
        jb      .AI0
584
    @@: sub     ax,dx
585
        cmp     ax,dx
586
        jae     @b
587
    .AI0:
588
589
 
590
        cmp     dx,ALIGN_SIZE/2
591
        jb      .AI1
592
593
 
594
        sub     ax,dx
595
        add     [posY],ax
596
597
 
598
     .AI1:
599
        sub     [posY],dx
600
     .AI2:
601
     ;-----
602
        mov     ax,[posX]
603
        mov     dx,ALIGN_SIZE
604
605
 
606
        jb      .AI3
607
    @@: sub     ax,dx
608
        cmp     ax,dx
609
        jae     @b
610
    .AI3:
611
612
 
613
        cmp     dx,ALIGN_SIZE/2
614
        jb      .AI4
615
616
 
617
        sub     ax,dx
618
        add     [posX],ax
619
620
 
621
     .AI4:
622
        sub     [posX],dx
623
     .AI5:
624
625
 
626
        mov     ax,[posX]
627
628
 
629
        jne     @f
630
        neg     ax
631
        inc     ax
632
        jmp     .AI6
633
      @@:
634
635
 
636
        shr     dx,1
637
        cmp     ax,dx
638
        jbe     .AI6
639
        sub     ax,[ScreenX]
640
      .AI6:
641
        mov     word[edi+2],ax
642
643
 
644
 
645
        cmp     [negatY],1
646
        jne     @f
647
        neg     ax
648
        inc     ax
649
        jmp     .AI7
650
      @@:
651
652
 
653
        shr     dx,1
654
        cmp     ax,dx
655
        jbe     .AI7
656
        sub     ax,[ScreenY]
657
      .AI7:
658
         mov     word[edi],ax
659
660
 
661
662
 
663
 
664
 
665
        add     ebx,4
666
        dec     ecx
667
        jnz     .AlignIco
668
;        loop    .AlignIco
669
670
 
671
 
672
;        mcall   70,fInfo
673
        ret
674
endp
675
676
 
677
proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
678
        cmp     [NumMenuButt],MAX_USER_BUTTONS
4082 GerdtR 679
        jne     @f
3853 GerdtR 680
        ret
681
     @@:
682
683
 
684
685
 
686
        xor     eax,eax
687
        or      ecx,-1
688
        repne   scasb
689
        sub     edi,[key_name]
690
        mov     eax,edi
691
        shl     eax,1
692
        lea     eax,[eax*2+eax+5*2]
693
        cmp     ax,[RMenuW]
694
        jbe     @f
695
        mov     [RMenuW],ax
696
     @@:
697
698
 
4082 GerdtR 699
3853 GerdtR 700
 
701
        mov     edi,[RBMenuCP+ebx*8]
4082 GerdtR 702
    @@: lodsb
3853 GerdtR 703
        stosb
704
        test    al,al
705
        jnz     @b
706
707
 
708
 
4082 GerdtR 709
        mov     esi,[key_value]
3853 GerdtR 710
    @@: lodsb
711
        stosb
712
        test    al,al
713
        jnz     @b
714
715
 
4082 GerdtR 716
3853 GerdtR 717
 
4082 GerdtR 718
3853 GerdtR 719
 
720
        mov     eax,1
721
        ret
722
endp
723
724
 
725
        push    ebx edi esi
726
3921 mario79 727
 
3853 GerdtR 728
  .SearchSect:
729
        mov     edi,[IconsOffs+ebx*4]
730
        mov     esi,[sec_name]
731
      @@:
732
        lodsb
733
        scasb
734
        jne     @f
735
        test    al,al
736
        jnz     @b
737
738
 
739
      @@:
740
741
 
742
        cmp     ebx,[MaxNumIcon]
743
        jb      .SearchSect
744
745
 
746
        pop     esi edi ebx
747
        ret
748
749
 
750
        or      ecx,-1
751
        repne   scasb
752
        repne   scasb
753
        repne   scasb
754
755
 
3921 mario79 756
        movzx   eax,word[edi+2]
3853 GerdtR 757
        test    eax,8000h
758
        jz      @f
759
        or      eax,0FFFF0000h
760
     @@:
761
762
 
763
764
 
765
        test    eax,8000h
766
        jz      @f
767
        or      eax,0FFFF0000h
768
     @@:
769
770
 
771
772
 
773
        pop     esi edi ebx
774
        ret
775
endp
776