Subversion Repositories Kolibri OS

Rev

Rev 178 | Rev 280 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;POP_WIDTH   = (popup_text.max_title+popup_text.max_accel+6)*6
  2. POP_IHEIGHT = 16
  3. ;POP_HEIGHT  = popup_text.cnt_item*POP_IHEIGHT+popup_text.cnt_sep*4+4
  4.  
  5. popup_thread_start:
  6.         mov     [popup_active],1
  7.         mov     [pi_cur],0
  8.         mov     ebp,[esp]
  9.         mcall   14
  10.         movzx   ebx,ax
  11.         shr     eax,16
  12.         movzx   ecx,[ebp+POPUP.x]
  13.         add     cx,[ebp+POPUP.width]
  14.         cmp     ecx,eax
  15.         jle     @f
  16.         mov     cx,[ebp+POPUP.width]
  17.         sub     [ebp+POPUP.x],cx
  18.     @@: movzx   ecx,[ebp+POPUP.y]
  19.         add     cx,[ebp+POPUP.height]
  20.         cmp     ecx,ebx
  21.         jle     @f
  22.         mov     cx,[ebp+POPUP.height]
  23.         sub     [ebp+POPUP.y],cx
  24.     @@: mcall   40,01100111b            ; ipc mouse button key redraw
  25.         cmp     [mi_cur],0
  26.         jl      .2
  27.         sub     esp,32-16
  28.         push    0 0 8 0
  29.         mcall   60,1,esp,32
  30.   .2:   call    draw_popup_wnd
  31.  
  32.   still_popup:
  33.         cmp     [main_closed],1
  34.         je      close_popup
  35.         mcall   10
  36.         cmp     eax,1
  37.         je      popup_thread_start.2
  38.         cmp     eax,2
  39.         je      key_popup
  40.         cmp     eax,3
  41.         je      button_popup
  42.         cmp     eax,6
  43.         je      mouse_popup
  44.         cmp     eax,7
  45.         jne     still_popup
  46.  
  47.         mov     ebp,[POPUP_STACK];-32+12+4]
  48.         mov     dword[POPUP_STACK-32+4],8
  49.         movzx   ebx,[ebp+POPUP.x]
  50.         movzx   ecx,[ebp+POPUP.y]
  51.         movzx   edx,[ebp+POPUP.width]
  52.         movzx   esi,[ebp+POPUP.height]
  53.         mcall   67
  54. ;       call    draw_popup_wnd
  55.         jmp     still_popup
  56.  
  57.   mouse_popup:
  58.         mov     ecx,mst2
  59.         call    get_mouse_event
  60.         cmp     al,MEV_LDOWN
  61.         je      check_popup_click
  62.         cmp     al,MEV_MOVE
  63.         je      check_popup_move
  64.  
  65.         mcall   9,p_info2,-1
  66.         cmp     ax,[p_info2.window_stack_position]
  67.         jne     close_popup
  68.  
  69.         jmp     still_popup
  70.  
  71.   check_popup_click:
  72.         mov     eax,[pi_cur]
  73.         or      al,al
  74.         js      close_popup
  75.         jz      still_popup
  76.         mov     ebx,[ebp+POPUP.actions]
  77.         mov     [just_from_popup],1
  78.         call    dword[ebx+eax*4-4];dword[popup_text.actions+eax*4-4]
  79.         inc     [just_from_popup]
  80.         jmp     close_popup
  81.  
  82.   check_popup_move:
  83.         mov     eax,[pi_cur]
  84.         call    get_active_popup_item
  85.         cmp     eax,[pi_cur]
  86.         je      still_popup
  87.         call    draw_popup_wnd
  88.         jmp     still_popup
  89.  
  90.   key_popup:
  91.         mcall   ;2
  92.         cmp     ah,27
  93.         jne     still_popup
  94.  
  95.   button_popup:
  96.         mcall   17
  97.  
  98.   close_popup:
  99.         mcall   18,3,[p_info.PID]
  100.         mov     [popup_active],0
  101.         mcall   -1
  102.  
  103. func draw_popup_wnd
  104.         mcall   12,1
  105.  
  106. ;       mcall   48,3,sc,sizeof.system_colors
  107. ;       call    calc_3d_colors
  108.  
  109. ;        mov     ebx,[p_pos]
  110. ;        mov     ecx,[p_pos-2]
  111. ;        mov     bx,POP_WIDTH
  112. ;        mov     cx,POP_HEIGHT
  113.         mov     ebx,dword[ebp+POPUP.x-2]
  114.         mov     bx,[ebp+POPUP.width]
  115.         mov     ecx,dword[ebp+POPUP.y-2]
  116.         mov     cx,[ebp+POPUP.height]
  117.         mcall   0,,,0x01000000,0x01000000
  118.  
  119.         movzx   ebx,bx
  120.         movzx   ecx,cx
  121.         pushd   0 0 ebx ecx ;POP_WIDTH POP_HEIGHT
  122.         call    draw_3d_panel
  123.  
  124.         mov     [pi_sel],0
  125. ;        mcall   37,1
  126. ;        movsx   ebx,ax
  127. ;        sar     eax,16
  128. ;        mov     [c_pos.x],eax
  129. ;        mov     [c_pos.y],ebx
  130.  
  131.         mov     eax,4
  132.         mpack   ebx,3*6,3
  133.         mov     ecx,[sc.work_text]
  134.         mov     edx,[ebp+POPUP.data];popup_text.data
  135.     @@: inc     [pi_sel]
  136.         inc     edx
  137.         movzx   esi,byte[edx-1]
  138.         cmp     byte[edx],'-'
  139.         jne     .lp1
  140.         pushad
  141.         mov     ecx,ebx
  142.         shl     ecx,16
  143.         mov     cx,bx
  144.         movzx   ebx,[ebp+POPUP.width]
  145.         add     ebx,0x00010000-1
  146. ;       mpack   ebx,1,POP_WIDTH-1
  147.         add     ecx,0x00010001
  148.         mcall   38,,,[cl_3d_inset];0x006382BF;[sc.work_text]
  149.         add     ecx,0x00010001
  150.         mcall   ,,,[cl_3d_outset];0x00FFFFFF
  151.         popad
  152.         add     ebx,4
  153.         jmp     .lp2
  154.   .lp1: mov     edi,[pi_sel]
  155.         cmp     edi,[pi_cur]
  156.         jne     .lp3
  157.         test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  158.         jz      .lp3
  159.         pushad
  160.         movzx   ecx,bx
  161.         shl     ecx,16
  162.         mov     cl,POP_IHEIGHT-1
  163.         movzx   ebx,[ebp+POPUP.width]
  164.         add     ebx,0x00010000-1
  165. ;       mpack   ebx,1,POP_WIDTH-1
  166.         mcall   13,,,[cl_3d_pushed];0x00A3B8CC
  167.         rol     ecx,16
  168.         mov     ax,cx
  169.         rol     ecx,16
  170.         mov     cx,ax
  171.         mcall   38,,,[cl_3d_inset];0x006382BF
  172.         add     ecx,(POP_IHEIGHT-1)*65536+POP_IHEIGHT-1
  173.         mcall   ,,,[cl_3d_outset];0x00FFFFFF
  174.         popad
  175.   .lp3: add     ebx,(POP_IHEIGHT-7)/2
  176.  
  177.         pushad
  178.         test    byte[ebp+edi-1],0x02
  179.         jz      .lp8
  180.         movzx   ecx,bx
  181.         shl     ecx,16
  182.         mov     cx,bx
  183.         shr     ebx,16
  184.         push    bx
  185.         shl     ebx,16
  186.         pop     bx
  187.         add     ecx,0x00040003
  188.         sub     ebx,0x000A000B
  189.         mcall   38,,,[sc.work_text]
  190.         add     ecx,0x00010001
  191.         mcall
  192.         add     ebx,4
  193.         sub     ecx,2
  194.         mcall
  195.         sub     ecx,0x00010001
  196.         mcall
  197.   .lp8: popad
  198.  
  199.         mov     ecx,[sc.work_text];0x00000000
  200.         test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  201.         jnz     .lp5
  202.         add     ebx,0x00010001
  203.         mov     ecx,[cl_3d_outset]
  204.         mcall
  205.         sub     ebx,0x00010001
  206.         mov     ecx,[cl_3d_inset]
  207.         ;mov     ecx,[sc.grab_text];0x007F7F7F
  208.   .lp5: mcall
  209.         push    ebx
  210.         add     edx,esi
  211.         inc     edx
  212.         movzx   esi,byte[edx-1]
  213.         add     ebx,[ebp+POPUP.acc_ofs] ; ((popup_text.max_title+2)*6-1)*65536
  214.         cmp     edi,[pi_cur]
  215.         je      .lp4
  216.         mov     ecx,[cl_3d_inset];0x006382BF
  217.   .lp4: test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  218.         jnz     .lp6
  219.         add     ebx,0x00010001
  220.         mov     ecx,[cl_3d_outset]
  221.         mcall
  222.         sub     ebx,0x00010001
  223.         mov     ecx,[cl_3d_inset]
  224.         ;mov     ecx,[sc.grab_text];0x007F7F7F
  225.   .lp6: mcall
  226.         pop     ebx
  227.         add     ebx,POP_IHEIGHT-(POP_IHEIGHT-7)/2
  228.   .lp2: add     edx,esi
  229.         cmp     byte[edx],0
  230.         jne     @b
  231.   .exit:
  232.         mcall   12,2
  233.         ret
  234. endf
  235.  
  236. func setup_main_menu_popup
  237.         mov     ebx,[p_info.box.left]
  238.         add     ebx,[p_info.client_box.left]
  239.     @@: dec     ecx
  240.         jz      @f
  241.         add     edx,8+1
  242.         movzx   esi,byte[edx-1]
  243.         add     edx,esi
  244.         jmp     @b
  245.     @@: movzx   ecx,word[edx+2]
  246.         add     ebx,ecx
  247.  
  248.         mov     [eax+POPUP.x],bx
  249.         mov     ebx,[p_info.box.top]
  250.         add     ebx,[p_info.client_box.top]
  251.         add     ebx,ATOPH-1
  252.         mov     [eax+POPUP.y],bx
  253.         mov     [POPUP_STACK],eax
  254.         ret
  255. endf
  256.  
  257. onshow:
  258.  
  259.   .file:
  260.         or      byte[mm.File+3],0x01
  261.         cmp     [f_info.length],0
  262.         jne     @f
  263.         and     byte[mm.File+3],0xFE
  264.     @@: ret
  265.  
  266.   .edit:
  267.         or      byte[mm.Edit+2],0x01
  268.         cmp     [copy_size],0
  269.         jne     @f
  270.         and     byte[mm.Edit+2],0xFE
  271.     @@: or      dword[mm.Edit+0],0x01000101
  272.         cmp     [sel.selected],0
  273.         jne     @f
  274.         and     dword[mm.Edit+0],0xFEFFFEFE
  275.     @@: ret
  276.  
  277.   .search:
  278.         mov     byte[mm.Search+0],0
  279.         ret
  280.   .run:
  281.         ret
  282.   .recode:
  283.         ret
  284.   .options:
  285.         mov     word[mm.Options+0],0
  286.         mov     byte[mm.Options+5],0
  287.         or      byte[mm.Options+2],0x02
  288.         test    [options],OPTS_SECURESEL
  289.         jnz     @f
  290.         and     byte[mm.Options+2],0xFD
  291.     @@: or      byte[mm.Options+3],0x02
  292.         test    [options],OPTS_AUTOBRACES
  293.         jnz     @f
  294.         and     byte[mm.Options+3],0xFD
  295.     @@: or      byte[mm.Options+4],0x02
  296.         test    [options],OPTS_AUTOINDENT
  297.         jnz     @f
  298.         and     byte[mm.Options+4],0xFD
  299.     @@: or      byte[mm.Options+6],0x02
  300.         test    [options],OPTS_OPTIMSAVE
  301.         jnz     @f
  302.         and     byte[mm.Options+6],0xFD
  303.     @@: or      byte[mm.Options+8],0x02
  304.         test    [options],OPTS_LINENUMS
  305.         jnz     @f
  306.         and     byte[mm.Options+8],0xFD
  307.     @@: ret
  308.  
  309. pi_sel   dd ?
  310. pi_cur   dd ?
  311. p_pos    dd ?
  312. popup_active db 0