Subversion Repositories Kolibri OS

Rev

Rev 267 | Rev 297 | 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.         shr     ebx,16
  182.         add     ebx,-11
  183.         add     ecx,2
  184.         mov     edx,[sc.work_text]
  185.         call    draw_check
  186.   .lp8: popad
  187.  
  188.         mov     ecx,[sc.work_text];0x00000000
  189.         test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  190.         jnz     .lp5
  191.         add     ebx,0x00010001
  192.         mov     ecx,[cl_3d_outset]
  193.         mcall
  194.         sub     ebx,0x00010001
  195.         mov     ecx,[cl_3d_inset]
  196.         ;mov     ecx,[sc.grab_text];0x007F7F7F
  197.   .lp5: mcall
  198.         push    ebx
  199.         add     edx,esi
  200.         inc     edx
  201.         movzx   esi,byte[edx-1]
  202.         add     ebx,[ebp+POPUP.acc_ofs] ; ((popup_text.max_title+2)*6-1)*65536
  203.         cmp     edi,[pi_cur]
  204.         je      .lp4
  205.         mov     ecx,[cl_3d_inset];0x006382BF
  206.   .lp4: test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  207.         jnz     .lp6
  208.         add     ebx,0x00010001
  209.         mov     ecx,[cl_3d_outset]
  210.         mcall
  211.         sub     ebx,0x00010001
  212.         mov     ecx,[cl_3d_inset]
  213.         ;mov     ecx,[sc.grab_text];0x007F7F7F
  214.   .lp6: mcall
  215.         pop     ebx
  216.         add     ebx,POP_IHEIGHT-(POP_IHEIGHT-7)/2
  217.   .lp2: add     edx,esi
  218.         cmp     byte[edx],0
  219.         jne     @b
  220.   .exit:
  221.         mcall   12,2
  222.         ret
  223. endf
  224.  
  225. func setup_main_menu_popup
  226.         mov     ebx,[p_info.box.left]
  227.         add     ebx,[p_info.client_box.left]
  228.     @@: dec     ecx
  229.         jz      @f
  230.         add     edx,8+1
  231.         movzx   esi,byte[edx-1]
  232.         add     edx,esi
  233.         jmp     @b
  234.     @@: movzx   ecx,word[edx+2]
  235.         add     ebx,ecx
  236.  
  237.         mov     [eax+POPUP.x],bx
  238.         mov     ebx,[p_info.box.top]
  239.         add     ebx,[p_info.client_box.top]
  240.         add     ebx,ATOPH-1
  241.         mov     [eax+POPUP.y],bx
  242.         mov     [POPUP_STACK],eax
  243.         ret
  244. endf
  245.  
  246. onshow:
  247.  
  248.   .file:
  249.         or      byte[mm.File+3],0x01
  250.         cmp     [f_info.length],0
  251.         jne     @f
  252.         and     byte[mm.File+3],0xFE
  253.     @@: ret
  254.  
  255.   .edit:
  256.         or      byte[mm.Edit+2],0x01
  257.         cmp     [copy_size],0
  258.         jne     @f
  259.         and     byte[mm.Edit+2],0xFE
  260.     @@: or      dword[mm.Edit+0],0x01000101
  261.         cmp     [sel.selected],0
  262.         jne     @f
  263.         and     dword[mm.Edit+0],0xFEFFFEFE
  264.     @@: ret
  265.  
  266.   .search:
  267.         mov     byte[mm.Search+0],0
  268.         ret
  269.   .run:
  270.         ret
  271.   .recode:
  272.         ret
  273.   .options:
  274.         mov     word[mm.Options+0],0
  275.         mov     byte[mm.Options+5],0
  276.         or      byte[mm.Options+2],0x02
  277.         test    [options],OPTS_SECURESEL
  278.         jnz     @f
  279.         and     byte[mm.Options+2],0xFD
  280.     @@: or      byte[mm.Options+3],0x02
  281.         test    [options],OPTS_AUTOBRACES
  282.         jnz     @f
  283.         and     byte[mm.Options+3],0xFD
  284.     @@: or      byte[mm.Options+4],0x02
  285.         test    [options],OPTS_AUTOINDENT
  286.         jnz     @f
  287.         and     byte[mm.Options+4],0xFD
  288.     @@: or      byte[mm.Options+6],0x02
  289.         test    [options],OPTS_OPTIMSAVE
  290.         jnz     @f
  291.         and     byte[mm.Options+6],0xFD
  292.     @@: or      byte[mm.Options+8],0x02
  293.         test    [options],OPTS_LINENUMS
  294.         jnz     @f
  295.         and     byte[mm.Options+8],0xFD
  296.     @@: ret
  297.  
  298. pi_sel   dd ?
  299. pi_cur   dd ?
  300. p_pos    dd ?
  301. popup_active db 0