Subversion Repositories Kolibri OS

Rev

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