Subversion Repositories Kolibri OS

Rev

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

  1. ;*****************************************************************************
  2. ; Example for Box_lib: scrollbar, menubar, dinamic_button
  3. ; Copyright (c) 2009, Marat Zakiyanov aka Mario79, aka Mario
  4. ; All rights reserved.
  5. ;
  6. ; Redistribution and use in source and binary forms, with or without
  7. ; modification, are permitted provided that the following conditions are met:
  8. ;        * Redistributions of source code must retain the above copyright
  9. ;          notice, this list of conditions and the following disclaimer.
  10. ;        * Redistributions in binary form must reproduce the above copyright
  11. ;          notice, this list of conditions and the following disclaimer in the
  12. ;          documentation and/or other materials provided with the distribution.
  13. ;        * Neither the name of the <organization> nor the
  14. ;          names of its contributors may be used to endorse or promote products
  15. ;          derived from this software without specific prior written permission.
  16. ;
  17. ; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
  18. ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  19. ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  20. ; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
  21. ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  22. ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  23. ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  24. ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  26. ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. ;******************************************************************************
  28. ; import_boxlib procedure written by <Lrz>
  29. ;---------------------------------------------------------------------
  30.  
  31.         use32
  32.         org 0x0
  33.  
  34.         db 'MENUET01'
  35.         dd 0x01
  36.         dd START
  37.         dd IM_END
  38.         dd I_END
  39.         dd stacktop
  40.         dd 0x0
  41.         dd path
  42.  
  43. include '../../../../../macros.inc'
  44. include '../../load_lib.mac'
  45. ;include 'macros.inc'
  46. ;include 'load_lib.mac'
  47. @use_library
  48.  
  49. ;---------------------------------------------------------------------
  50. ;--- Start of program ----------------------------------------------
  51. ;---------------------------------------------------------------------
  52. START:
  53.         mcall   68,11
  54.         mcall   66,1,1
  55.         mcall   40,0x27
  56. ;--------------------------------------------------------------------- 
  57.  
  58. load_libraries  l_libs_start,end_l_libs
  59.  
  60.         test    eax,eax
  61.         jnz     button.exit
  62.  
  63. ; unpack deflate
  64.         mov     eax,[unpack_DeflateUnpack2]
  65.         mov     [deflate_unpack],eax
  66.  
  67. ; OpenDialog initialisation
  68.         push    dword OpenDialog_data
  69.         call    [OpenDialog_Init]
  70.  
  71.         mov     edi,filename_area
  72.         mov     esi,start_temp_file_name
  73.         xor     eax,eax
  74.         cld
  75. @@:
  76.         lodsb
  77.         stosb
  78.         test    eax,eax
  79.         jnz     @b
  80.        
  81.        
  82. ;       mov     ebx,icons_file_name
  83. ;       mov     esi,path
  84. ;       mov     edi,file_name
  85.  
  86.         copy_path       icons_file_name,path,library_path,0
  87.        
  88.         mcall   70,fileinfo
  89.  
  90.         mov     [fileinfo+0],dword 0
  91.  
  92.         mov     ecx,[file_info+32]
  93.         mov     [fileinfo+12],ecx
  94.         mov     [img_size],ecx
  95.        
  96.  
  97.         mcall   68,12
  98.  
  99.  
  100.         mov     [fileinfo+16],eax
  101.         mov     [image_file],eax
  102.  
  103.  
  104.         mcall   70,fileinfo
  105.        
  106.         xor     eax,eax
  107.         mov     [return_code],eax
  108. ;       mov     eax,image_file
  109.         push    image_file
  110.         call    [cnv_png_import.Start]
  111.        
  112.         mov     ecx,[image_file]
  113.         mcall   68,13,
  114.        
  115.         cmp     [return_code],dword 0
  116.         jne     button.exit
  117.        
  118.         mov     ebx,[raw_pointer]
  119.         mov     eax,[ebx+4]
  120. ; set of button size
  121.         mov     [dinamic_button_data_1.size_x],ax
  122.         mov     [dinamic_button_data_1.size_y],ax
  123.         mov     [dinamic_button_data_2.size_x],ax
  124.         mov     [dinamic_button_data_2.size_y],ax
  125.         mov     eax,[ebx+12]
  126. ; set of RAW resolution to pixel
  127.         mov     [dinamic_button_data_1.resolution_raw],eax
  128.         mov     [dinamic_button_data_2.resolution_raw],eax
  129.         mov     eax,[ebx+20]
  130.         add     eax,ebx
  131. ; set RAW palette, use else resolution 8bit or less
  132.         mov     [dinamic_button_data_1.palette_raw],eax
  133.         mov     [dinamic_button_data_2.palette_raw],eax
  134.         mov     eax,[ebx+28]
  135.         add     eax,ebx
  136. ; set RAW area for passive button
  137.         mov     [dinamic_button_data_1.passive_raw],eax
  138.         mov     [dinamic_button_data_2.passive_raw],eax
  139.         mov     ecx,[ebx+4]
  140.         imul    ecx,[ebx+4]
  141.         imul    ecx,[ebx+12]
  142.         shr     ecx,3
  143.         add     eax,ecx
  144. ; set RAW area for active button
  145.         mov     [dinamic_button_data_1.active_raw],eax
  146.         mov     [dinamic_button_data_2.active_raw],eax
  147.         add     eax,ecx
  148. ; RAW area for click button
  149.         mov     [dinamic_button_data_1.click_raw],eax
  150.         mov     [dinamic_button_data_2.click_raw],eax
  151. ;---------------------------------------------------------------------
  152. red:
  153.         call    draw_window
  154. still:
  155.         mcall   10
  156.  
  157.         cmp     eax,1
  158.         je      red
  159.         cmp     eax,2
  160.         je      key
  161.         cmp     eax,3
  162.         je      button
  163.         cmp     eax,6
  164.         je      mouse
  165.         jmp     still
  166. ;---------------------------------------------------------------------
  167.         key:
  168.         mcall   2
  169.         jmp     still
  170. ;---------------------------------------------------------------------
  171.         button:
  172.         mcall   17
  173.         cmp     ah,1
  174.         jne     still
  175.         .exit:
  176.         mcall   -1
  177. ;---------------------------------------------------------------------
  178. mouse:
  179. ;-----------------------------------------------
  180.         cmp     [scroll_bar_data_horizontal.delta2],0
  181.         jne     .horizontal
  182. .vertical:
  183.         mov     eax,[scroll_bar_data_vertical.max_area]
  184.         cmp     eax,[scroll_bar_data_vertical.cur_area]
  185.         jbe     .horizontal
  186. ; mouse event for Vertical ScrollBar
  187.         push    dword scroll_bar_data_vertical
  188.         call    [scrollbar_ver_mouse]
  189.         mov     eax,scroll_bar_data_vertical.redraw
  190.         xor     ebx,ebx
  191.         cmp     [eax],ebx
  192.         je      @f
  193.         mov     [eax],ebx
  194.         jmp     .draw_cube
  195. @@:
  196.         cmp     [scroll_bar_data_vertical.delta2],0
  197.         jne     still
  198. .horizontal:
  199.         mov     eax,[scroll_bar_data_horizontal.max_area]
  200.         cmp     eax,[scroll_bar_data_horizontal.cur_area]
  201.         jbe     .other
  202. ; mouse event for Horizontal ScrollBar
  203.         push    dword scroll_bar_data_horizontal
  204.         call    [scrollbar_hor_mouse]
  205.         mov     eax,scroll_bar_data_horizontal.redraw
  206.         xor     ebx,ebx
  207.         cmp     [eax],ebx      
  208.         je      .other
  209.         mov     [eax],ebx
  210. .draw_cube:
  211.         call    draw_cube
  212.         jmp     still
  213. .other:
  214.         cmp     [scroll_bar_data_vertical.delta2],0
  215.         jne     still
  216.         cmp     [scroll_bar_data_horizontal.delta2],0
  217.         jne     still
  218. ;-----------------------------------------------
  219. .menu_bar_1:
  220.         call    .set_mouse_flag
  221. @@:
  222. ; mouse event for Menu 1
  223.         push    dword menu_data_1
  224.         call    [menu_bar_mouse]
  225.         cmp     [menu_data_1.click],dword 1
  226.         jne     .menu_bar_2
  227.         cmp     [menu_data_1.cursor_out],dword 0
  228.         jne     analyse_out_menu_1
  229.         jmp     .menu_bar_1
  230. ;--------------------------------------------
  231. .menu_bar_2:
  232. ; mouse event for Menu 2
  233.         push    dword menu_data_2
  234.         call    [menu_bar_mouse]
  235.         cmp     [menu_data_2.click],dword 1
  236.         jne     .mouse_dinamic_button
  237.         cmp     [menu_data_2.cursor_out],dword 0
  238.         jne     analyse_out_menu_2
  239.         jmp     .menu_bar_1
  240. ;--------------------------------------------
  241. .mouse_dinamic_button:
  242. ; mouse event for Dinamic Button 1
  243.         push    dword dinamic_button_data_1
  244.         call    [dinamic_button_mouse]
  245.         mov     eax,dinamic_button_data_1.click
  246.         cmp     [eax],dword 1
  247.         jne     @f
  248.         mov     [eax],dword 0
  249.         jmp     about
  250. @@:
  251. ; mouse event for Dinamic Button 2
  252.         push    dword dinamic_button_data_2
  253.         call    [dinamic_button_mouse]
  254.         mov     eax,dinamic_button_data_2.click
  255.         cmp     [eax],dword 1
  256.         jne     still   ;@f
  257.         mov     [eax],dword 0
  258.         jmp     button.exit
  259. ;---------------------------------------------------------------------
  260. .set_mouse_flag:       
  261.         xor     eax,eax
  262.         inc     eax
  263.         mov     [menu_data_1.get_mouse_flag],eax
  264.         mov     [menu_data_2.get_mouse_flag],eax
  265.         ret
  266. ;---------------------------------------------------------------------
  267. analyse_out_menu_1:
  268. ; analyse result of Menu 1
  269.         mov     eax,[menu_data_1.cursor_out]
  270.         cmp     eax,dword 1
  271.         je      OpenDialog_start_0
  272.         cmp     eax,dword 2
  273.         je      OpenDialog_start_1
  274.         cmp     eax,dword 3
  275.         je      OpenDialog_start_2
  276.         cmp     eax,dword 4
  277.         je      button.exit    
  278.         jmp     still
  279. ;---------------------------------------------------------------------
  280. analyse_out_menu_2:
  281. ; analyse result of Menu 2
  282.         cmp     [menu_data_2.cursor_out],dword 2
  283.         je      about
  284.         jmp     still
  285. ;---------------------------------------------------------------------
  286.         about:
  287.         mcall   51,1,thread3,thread
  288.         jmp     still
  289. ;---------------------------------------------------------------------
  290. OpenDialog_start_0:
  291.         mov     [OpenDialog_data.type],0
  292.         jmp     OpenDialog_start
  293. OpenDialog_start_1:
  294.         mov     [OpenDialog_data.type],1
  295.         jmp     OpenDialog_start
  296. OpenDialog_start_2:
  297.         mov     [OpenDialog_data.type],2
  298. OpenDialog_start:
  299. ;       mov     ebx,open_dialog_name
  300. ;       mov     esi,path
  301. ;       mov     edi,library_path
  302. ;       call    copy_file_path
  303.  
  304. ;       copy_path       open_dialog_name,path,library_path,0
  305.  
  306.         push    dword OpenDialog_data
  307.         call    [OpenDialog_Start]
  308.  
  309.         cmp     [OpenDialog_data.status],2      ; OpenDialog does not start
  310.         je      still   ; some kind of alternative, instead OpenDialog
  311.         cmp     [OpenDialog_data.status],1
  312.         jne     still   ; OpenDialog user say cancel
  313. ; copy path
  314. ; prepare path - PathShow
  315.         push    dword PathShow_data_1
  316.         call    [PathShow_prepare]
  317.        
  318.         call    draw_window
  319.         jmp     still   ; OpenDialog user selected the target file
  320. ;       [OpenDialog_data.openfile_pach] pointer of area the target file
  321. ;---------------------------------------------------------------------
  322. ;---------------------------------------------------------------------
  323. draw_window:
  324.         mcall   12,1
  325.         mcall   0,<0,400>,<0,400>,0x03AABBCC,0x805080D0,0x005080D0
  326.         mcall   71,1,header_1
  327. ;---------------------------------------------
  328. ; draw for Menu 1
  329.         push    dword menu_data_1
  330.         call    [menu_bar_draw]
  331. ; draw for Menu 2
  332.         push    dword menu_data_2
  333.         call    [menu_bar_draw]
  334. ;---------------------------------------------
  335. ; draw for Dinamic Button       1
  336.         push    dword dinamic_button_data_1
  337.         call    [dinamic_button_draw]
  338. ; draw for Dinamic Button 2
  339.         push    dword dinamic_button_data_2
  340.         call    [dinamic_button_draw]
  341. ;---------------------------------------------
  342.         mcall   13,<170,200>,<25,15>,0xffffb0
  343. ;       mov     bx,28
  344. ;       add     ebx,2 shl 16
  345. ;       mcall   4,,0xC0000000,text_work_area,,0xffffb0
  346. ; draw for PathShow
  347.         push    dword PathShow_data_1
  348.         call    [PathShow_draw]
  349. ;---------------------------------------------
  350. ; set all_redraw flag for draw all ScrollBar
  351. ; In some cases it is necessity to draw only the area
  352. ; of moving of a "runner", for acceleration of output -
  353. ; in this case the flag needs to be reset to 0 (zero).
  354.         xor     eax,eax
  355.         inc     eax
  356.         mov     [scroll_bar_data_vertical.all_redraw],eax
  357.         mov     [scroll_bar_data_horizontal.all_redraw],eax
  358.        
  359. ; draw for Vertical ScrollBar
  360.         push    dword scroll_bar_data_vertical
  361.         call    [scrollbar_ver_draw]
  362. ; draw for Horizontal ScrollBar
  363.         push    dword scroll_bar_data_horizontal
  364.         call    [scrollbar_hor_draw]
  365. ; reset all_redraw flag
  366.         xor     eax,eax
  367.         mov     [scroll_bar_data_vertical.all_redraw],eax
  368.         mov     [scroll_bar_data_horizontal.all_redraw],eax
  369. ;---------------------------------------------
  370.         call    draw_cube
  371.         mcall   12,2
  372.         ret
  373. ;---------------------------------------------------------------------
  374. draw_cube:
  375.         mcall   13,<30,301>,<50,301>,0xafafaf
  376.         mov     ecx,[scroll_bar_data_vertical.position]
  377.         add     ecx,50
  378.         shl     ecx,16
  379.         mov     cx,30
  380.         mov     ebx,[scroll_bar_data_horizontal.position]
  381.         add     ebx,30
  382.         shl     ebx,16
  383.         mov     bx,30
  384.         mcall   13,,,0x0
  385.         ret
  386. ;---------------------------------------------------------------------
  387. include 'data.inc'
  388. include 'w_about.inc'
  389. ;---------------------------------------------------------------------
  390. IM_END:
  391.         rb 1024
  392. thread:
  393. ;---------------------------------------------------------------------
  394.         rb 1024
  395. stacktop:
  396. ;---------------------------------------------------------------------
  397. path:
  398.         rb 4096
  399. ;---------------------------------------------------------------------
  400. openfile_pach:
  401.         rb 4096
  402. ;---------------------------------------------------------------------
  403. file_name:
  404. library_path:
  405.         rb 4096
  406. ;---------------------------------------------------------------------
  407. plugin_pach:
  408.         rb 4096
  409. ;---------------------------------------------------------------------
  410. text_work_area:
  411.         rb 4096
  412. ;---------------------------------------------------------------------
  413. filename_area:
  414.         rb 256
  415. ;---------------------------------------------------------------------
  416. file_info:
  417.         rb 40
  418. ;---------------------------------------------------------------------
  419. procinfo:
  420.         rb 1024
  421. ;---------------------------------------------------------------------
  422. I_END:
  423.  
  424.