Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ;    UNIFORM WINDOW COLOURS & SKIN
  3. ;
  4. ;    Compile with FASM for Menuet
  5. ;
  6. ;    < russian edition by Ivan Poddubny >
  7. ;    < skin selection by Mike Semenyako >
  8. ;******************************************************************************
  9. ; last update:  01/04/2013
  10. ; written by:   Marat Zakiyanov aka Mario79, aka Mario
  11. ; changes:      select colors with ColorDialog
  12. ;               some redesign of the look of the program
  13. ;******************************************************************************
  14. ; last update:  10/09/2010
  15. ; written by:   Marat Zakiyanov aka Mario79, aka Mario
  16. ; changes:      select path with OpenDialog
  17. ;******************************************************************************
  18.         use32
  19.         org 0
  20.         db 'MENUET01'   ; identifier
  21.         dd 1            ; header version
  22.         dd START        ; start address
  23.         dd IM_END       ; file size
  24.         dd I_END        ; memory
  25.         dd stacktop     ; stack pointer
  26.         dd app_param    ; parameters
  27.         dd cur_dir_path ; path to file
  28.  
  29. include 'lang.inc'
  30. include '../../../proc32.inc'
  31. include '../../../config.inc'           ;for nightbuild
  32. include '../../../macros.inc'
  33. include '../../../string.inc'
  34. include '../../../dll.inc'
  35. include 'kglobals.inc'
  36. include 'unpacker.inc'
  37. include '../../../KOSfuncs.inc'
  38. include '../../../load_lib.mac'
  39.         @use_library
  40. ;******************************************************************************
  41. ;--------------------------------------
  42. struct SKIN_HEADER
  43.   ident   dd ?
  44.   version dd ?
  45.   params  dd ?
  46.   buttons dd ?
  47.   bitmaps dd ?
  48. ends
  49. ;--------------------------------------
  50. struct SKIN_PARAMS
  51.   skin_height    dd ?
  52.   margin.right   dw ?
  53.   margin.left    dw ?
  54.   margin.bottom  dw ?
  55.   margin.top     dw ?
  56.   colors.inner   dd ?
  57.   colors.outer   dd ?
  58.   colors.frame   dd ?
  59.   colors_1.inner dd ?
  60.   colors_1.outer dd ?
  61.   colors_1.frame dd ?
  62.   dtp.size       dd ?
  63.   dtp.data       db 40 dup (?)
  64. ends
  65. ;--------------------------------------
  66. struct SKIN_BUTTONS
  67.   type     dd ?
  68.   pos:
  69.     left   dw ?
  70.     top    dw ?
  71.   size:
  72.     w  dw ?
  73.     height dw ?
  74. ends
  75. ;--------------------------------------
  76. struct SKIN_BITMAPS
  77.   kind  dw ?
  78.   type  dw ?
  79.   _data  dd ?
  80. ends
  81. ;--------------------------------------
  82. frame_1:
  83.   .x      = 5
  84.   .y      = area.y + area.height + 20
  85.   .w  = area.w + 217
  86.   .height = 65
  87. ;--------------------------------------  
  88. frame_2:
  89.   .x      = frame_1.x
  90.   .y      = frame_1.y + frame_1.height + 20
  91.   .w  = frame_1.w
  92.   .height = frame_1.height
  93. ;---------------------------------------------------------------------
  94. win:
  95.   .w = frame_2.w + frame_2.x + frame_2.x + 9
  96.   .h = frame_2.y + frame_2.height + 10
  97. ;---------------------------------------------------------------------
  98. START:          ; start of execution
  99. ;---------------------------------------------------------------------
  100.         mcall   68,11
  101.        
  102.         test    eax,eax
  103.         jz      close  
  104.  
  105. stdcall dll.Load,LibIniImportTable
  106. load_libraries l_libs_start,end_l_libs
  107.  
  108. ;if return code =-1 then exit, else nornary work
  109.         inc     eax
  110.         test    eax,eax
  111.         jz      close
  112. ;---------------------------------------------------------------------
  113. ; set default pathes
  114.         stdcall string.copy, default_skin, skin_info
  115.         stdcall string.copy, default_dtp, dtp_name
  116. ;---------------------------------------------------------------------
  117. ; check app param
  118.         stdcall string.length, app_param
  119.         add eax, app_param
  120.         mov ecx, [eax-4]
  121.         cmp ecx, '.skn'
  122.         je  load_skin_from_param
  123.         cmp ecx, '.SKN'
  124.         je  load_skin_from_param
  125.         cmp ecx, '.dtp'
  126.         je load_dtp_from_param
  127.         cmp ecx, '.DTP'
  128.         je load_dtp_from_param
  129.         jmp no_param
  130.        
  131. load_dtp_from_param:
  132.         stdcall string.copy, app_param, dtp_name
  133.         call   load_dtp_file.1
  134.         jmp    skin_path_ready
  135.  
  136. load_skin_from_param:
  137.         stdcall string.copy, app_param, skin_info
  138.         call    load_skin_file.2
  139.         jmp     skin_path_ready
  140.  
  141. no_param:
  142.         mcall   48,3,color_table,4*10   ; get current colors
  143.         call    load_skin_file.2
  144.        
  145. skin_path_ready:       
  146. ;---------------------------------------------------------------------
  147. ;OpenDialog     initialisation
  148.         push    dword OpenDialog_data
  149.         call    [OpenDialog_Init]
  150.  
  151.         push    dword OpenDialog_data2
  152.         call    [OpenDialog_Init]
  153. ;--------------------------------------------------------------------
  154. ;init_ColorDialog       ColorDialog_data
  155.         push    dword ColorDialog_data
  156.         call    [ColorDialog_Init]
  157. ;--------------------------------------------------------------------
  158. ; prepare for PathShow
  159.         push    dword PathShow_data_1
  160.         call    [PathShow_prepare]
  161.        
  162.         push    dword PathShow_data_2
  163.         call    [PathShow_prepare]
  164. ;--------------------------------------------------------------------- 
  165. red:
  166.         call    draw_window             ; at first, draw the window
  167. ;--------------------------------------------------------------------- 
  168. still:
  169.         mcall   10      ; wait here for event
  170.  
  171.         dec     eax     ; redraw request ?
  172.         jz      red
  173.  
  174.         dec     eax     ; key in buffer ?
  175.         jz      key
  176.  
  177.         dec     eax     ; button in buffer ?
  178.         jz      button
  179.  
  180.         jmp     still
  181. ;---------------------------------------------------------------------
  182. key:            ; key
  183.         mcall   2       ; just read it and ignore
  184.         jmp     still
  185. ;---------------------------------------------------------------------
  186. button:         ; button
  187.         mcall   17      ; get id
  188.  
  189.         cmp     ah,12   ; load file
  190.         jne     no_load
  191.  
  192.         call    load_dtp_file
  193.         call    draw_window
  194.         jmp     still
  195. ;--------------------------------------
  196. no_load:
  197.         cmp     ah,13   ; save file
  198.         jne     no_save
  199.  
  200.         call    save_file
  201.         jmp     still
  202. ;--------------------------------------
  203. no_save:
  204.         cmp     ah,14   ; set 3d buttons
  205.         jne     no_3d
  206.  
  207.         mcall   48,1,1
  208.         invoke  ini_set_int, aIni, aSectionSkn, aButtonStyle, 1
  209.         jmp     doapply
  210. ;--------------------------------------
  211. no_3d:
  212.         cmp     ah,15   ; set flat buttons
  213.         jne     no_flat
  214.  
  215.         invoke  ini_set_int, aIni, aSectionSkn, aButtonStyle, 0
  216.         mcall   48, 1, 0
  217. ;--------------------------------------
  218. doapply:
  219.         mcall   48, 0, 0
  220.         jmp     still
  221. ;--------------------------------------
  222. no_flat:
  223.         cmp     ah,16   ; apply
  224.         jne     no_apply
  225. ;--------------------------------------
  226. apply_direct:
  227.         mcall   48,2,color_table,10*4
  228.         jmp     doapply
  229. ;--------------------------------------
  230.  no_apply:
  231.         cmp     ah,17   ; load skin file
  232.         jne     no_load_skin
  233.  
  234.         call    load_skin_file
  235.         call    draw_window
  236.         jmp     still
  237. ;--------------------------------------
  238. no_load_skin:
  239.         cmp     ah,18   ; apply skin
  240.         jne     no_apply_skin
  241.  
  242.         cmp     [skin_info],0
  243.         je      no_apply_skin
  244.  
  245.         mcall   48,8,skin_info
  246.         call    draw_window
  247.         jmp     still
  248. ;--------------------------------------
  249. no_apply_skin:
  250.         cmp     ah,31
  251.         jb      no_new_colour
  252.  
  253.         cmp     ah,41
  254.         jg      no_new_colour
  255.        
  256. ;--------------------------------------------------------------------- 
  257. .start_ColorDialog:
  258.         push    dword ColorDialog_data
  259.         call    [ColorDialog_Start]
  260. ; 2 - use another method/not found program
  261.         cmp     [ColorDialog_data.status],2
  262.         je      still
  263. ; 1 - OK, color selected       
  264.         cmp     [ColorDialog_data.status],1
  265.         jne     still
  266. ;--------------------------------------------------------------------- 
  267.        
  268.         shr     eax,8
  269.         sub     eax,31
  270.         shl     eax,2
  271.         mov     ebx,[ColorDialog_data.color]
  272.         and     ebx,0xffffff    ; temporary for ColorDialog!!!!!!!!!!
  273.         mov     [eax+color_table],ebx
  274.         cmp     dword[not_packed_area+SKIN_HEADER.ident],'SKIN'
  275.         jne     @f
  276.  
  277.         mov     edi,[not_packed_area+SKIN_HEADER.params]
  278.         mov     dword[edi+not_packed_area+SKIN_PARAMS.dtp.data+eax],ebx
  279.         call    draw_skin
  280. ;--------------------------------------
  281. @@:
  282.         call    draw_colours
  283.         jmp     still
  284. ;--------------------------------------
  285. no_new_colour:
  286.         cmp     ah,1    ; terminate
  287.         jnz     noid1
  288. ;--------------------------------------
  289. close:
  290.         or      eax,-1
  291.         mcall
  292. ;--------------------------------------
  293. noid1:
  294.         jmp     still
  295. ;---------------------------------------------------------------------
  296. load_dtp_file:
  297. ;---------------------------------------------------------------------
  298. ; invoke OpenDialog
  299.         mov     [OpenDialog_data.type],dword 0
  300.         push    dword OpenDialog_data
  301.         call    [OpenDialog_Start]
  302.         cmp     [OpenDialog_data.status],1
  303.         je      .1
  304.         ret
  305. .1:
  306. ; prepare for PathShow
  307.         push    dword PathShow_data_1
  308.         call    [PathShow_prepare]
  309.  
  310.         call    draw_PathShow
  311. ;---------------------------------------------------------------------
  312. .2:
  313.         xor     eax, eax
  314.         mov     ebx, read_info
  315.         mov     dword [ebx], eax        ; subfunction: read
  316.         mov     dword [ebx+4], eax      ; offset (low dword)
  317.         mov     dword [ebx+8], eax      ; offset (high dword)
  318.         mov     dword [ebx+12], 40     ; read colors file: 4*10 bytes
  319.         mov     dword [ebx+16], color_table ; address
  320.         mcall   70
  321.         ret
  322. ;---------------------------------------------------------------------
  323. load_skin_file:
  324. ;---------------------------------------------------------------------
  325. ; invoke OpenDialog
  326.         push    dword OpenDialog_data2
  327.         call    [OpenDialog_Start]
  328.         cmp     [OpenDialog_data2.status],1
  329.         je      .1
  330.         ret
  331. .1:
  332. ; prepare for PathShow
  333.         push    dword PathShow_data_2
  334.         call    [PathShow_prepare]
  335.  
  336.         call    draw_PathShow
  337. ;---------------------------------------------------------------------
  338. .2:
  339.         xor     eax,eax
  340.         mov     ebx,read_info2
  341.         mov     dword [ebx], eax        ; subfunction: read
  342.         mov     dword [ebx+4], eax      ; offset (low dword)
  343.         mov     dword [ebx+8], eax      ; offset (high dword)
  344.         mov     dword [ebx+12], 32*1024 ; read: max 32 KBytes
  345.         mov     dword [ebx+16], file_load_area ; address
  346.         mcall   70
  347.  
  348.         mov     esi, file_load_area
  349.  
  350.         cmp     dword [esi], 'KPCK'
  351.         jnz     notpacked
  352.  
  353.         cmp     dword [esi+4], 32*1024 ; max 32 KBytes
  354.         ja      doret
  355.  
  356.         push    unpack_area
  357.         push    esi
  358.         call    unpack
  359.         mov     esi,unpack_area
  360. ;--------------------------------------
  361. notpacked:
  362.         cmp     [esi+SKIN_HEADER.ident],dword 'SKIN'
  363.         jne     doret
  364.  
  365.         mov     edi,not_packed_area
  366.         mov     ecx,0x8000/4
  367.         rep     movsd
  368.  
  369.         mov     ebp,not_packed_area
  370.         mov     esi,[ebp+SKIN_HEADER.params]
  371.         add     esi,ebp
  372.         lea     esi,[esi+SKIN_PARAMS.dtp.data]
  373.         mov     edi,color_table
  374.         mov     ecx,10
  375.         rep     movsd
  376. ;--------------------------------------
  377. doret:
  378.         ret
  379. ;---------------------------------------------------------------------
  380. save_file:
  381. ;---------------------------------------------------------------------
  382. ; invoke OpenDialog
  383.         mov     [OpenDialog_data.type],dword 1
  384.         push    dword OpenDialog_data
  385.         call    [OpenDialog_Start]
  386.         cmp     [OpenDialog_data.status],1
  387.         je      .1
  388.         ret
  389. .1:
  390. ; prepare for PathShow
  391.         push    dword PathShow_data_1
  392.         call    [PathShow_prepare]
  393.  
  394.         call    draw_PathShow
  395. ;---------------------------------------------------------------------
  396.         xor     eax,eax
  397.         mov     ebx,write_info
  398.         mov     [ebx],dword 2                   ; subfunction: write
  399.         and     [ebx+4],eax                     ; (reserved)
  400.         and     [ebx+8],eax                     ; (reserved)
  401.         mov     [ebx+12],dword 10*4             ; bytes to write
  402.         mov     [ebx+16],dword color_table      ; address
  403.         mcall   70
  404.         ret
  405. ;---------------------------------------------------------------------
  406. draw_button_row:
  407.         mov     edx,0x40000000 + 31             ; BUTTON ROW
  408.         mov     ebx,(area.w+18)*65536+29
  409.         mov     ecx,9*65536+15
  410.         mov     eax,8
  411. ;-----------------------------------
  412. .newb:
  413.         mcall
  414.         add     ecx,22*65536
  415.         inc     edx
  416.         cmp     edx,0x40000000 + 40
  417.         jbe     .newb
  418.         ret
  419. ;---------------------------------------------------------------------
  420. draw_button_row_of_texts:
  421.         mov     ebx,(area.w+49)*65536+9 ; ROW OF TEXTS
  422.         mov     ecx,[w_work_text]
  423.         add ecx,0x10000000
  424.         mov     edx,text
  425.         mov     esi,32
  426.         mov     eax,4
  427. ;-----------------------------------
  428. .newline:
  429.         mcall
  430.         add     ebx,22
  431.         add     edx,32
  432.         cmp     [edx],byte 'x'
  433.         jne     .newline
  434.         ret
  435. ;---------------------------------------------------------------------
  436. draw_colours:
  437.         pusha
  438.         mov     esi,color_table
  439.         mov     ebx,(area.w+19)*65536+28
  440.         mov     ecx,10*65536+14
  441.         mov     eax,13
  442.         mov     [frame_data.draw_text_flag],dword 0
  443. ;--------------------------------------
  444. newcol:
  445.         mov     edx,[esi]
  446.         mcall
  447.  
  448.         push    ebx ecx
  449.  
  450.         sub     ebx,2 shl 16
  451.         add     bx,4
  452.         sub     ecx,2 shl 16
  453.         add     cx,4
  454.        
  455.         mov     [frame_data.x],ebx
  456.         mov     [frame_data.y],ecx     
  457.  
  458.         push    dword frame_data
  459.         call    [Frame_draw]
  460.  
  461.         pop     ecx ebx
  462.  
  463.         add     ecx,22*65536
  464.         add     esi,4
  465.         cmp     esi,color_table+4*9
  466.         jbe     newcol
  467.  
  468.         popa
  469.         ret
  470. ;----------------------------------------------------------------------
  471. draw_PathShow:
  472.         pusha
  473.         mcall   13,<frame_1.x+10,frame_1.w-25>,<frame_1.y+16,15>,0xffffff
  474.         mcall   13,<frame_2.x+10,frame_2.w-25>,<frame_2.y+16,15>,0xffffff
  475. ; draw for PathShow
  476.         push    dword PathShow_data_1
  477.         call    [PathShow_draw]
  478.        
  479.         push    dword PathShow_data_2
  480.         call    [PathShow_draw]
  481.         popa
  482.         ret
  483. ;---------------------------------------------------------------------
  484. ;   *********************************************
  485. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  486. ;   *********************************************
  487. draw_window:
  488.         mcall   12,1
  489.         mcall   48,3,app_colours,10*4
  490.         mcall   14
  491.         mcall   48,4
  492.         mov     [current_skin_high],eax
  493. ; DRAW WINDOW
  494.         xor     eax,eax         ; function 0 : define and draw window
  495.         xor     esi,esi
  496.         mov     edx,[w_work]    ; color of work area RRGGBB,8->color
  497.         or      edx,0x34000000
  498.         mov     ecx,50 shl 16 + win.h
  499.         add     ecx,[current_skin_high]
  500.         mcall   ,<110, win.w>,,,,title
  501.  
  502.         mcall   9,procinfo,-1
  503.        
  504.         mov     eax,[procinfo+70] ;status of window
  505.         test    eax,100b
  506.         jne     .end
  507.  
  508. ;if lang eq ru
  509.   load_w  = (5*2+6*9)
  510.   save_w  = (5*2+6*9)
  511.   flat_w  = (5*2+6*7)
  512.   apply_w = (5*2+6*9)
  513. ;else
  514. ;  load_w  = (5*2+6*6)
  515. ;  save_w  = (5*2+6*8)
  516. ;  flat_w  = (5*2+6*4)
  517. ;  apply_w = (5*2+6*7)
  518. ;end if
  519. ;-----------------------------------
  520. ; select color DTP frame
  521. ; LOAD BUTTON   ; button 12
  522.         mcall   8,<frame_1.x+10,load_w>,<frame_1.y+38,18>,12,[w_work_button]
  523. ; SAVE BUTTON
  524.         add     ebx,(load_w+2)*65536-load_w+save_w
  525.         inc     edx
  526.         mcall           ; button 13
  527. ; APPLY BUTTON
  528.         mov     ebx,(frame_1.x + frame_1.w - apply_w - 15)*65536+apply_w
  529.         mcall   8,,,16  ; button 17
  530. ; select color DTP button text
  531.         mcall   4,<frame_1.x+16,frame_1.y+44>,[w_work_button_text],t1,t1.size
  532. ;-----------------------------------   
  533. ; select skin frame    
  534. ; LOAD SKIN BUTTON      ; button 17
  535.         mcall   8,<frame_2.x+10,load_w>,<frame_2.y+38,18>,17,[w_work_button]
  536. ; 3D
  537.         mov     ebx,(frame_2.x+155)*65536+34
  538.         mcall   ,,,14   ; button 14
  539. ; FLAT
  540.         add     ebx,36*65536-34+flat_w
  541.         inc     edx
  542.         mcall           ; button 15
  543. ; APPLY SKIN BUTTON
  544.         mov     ebx,(frame_2.x + frame_2.w - apply_w -15)*65536+apply_w
  545.         mcall   ,,,18           ; button 18
  546. ; select skin button text
  547.         mcall   4,<frame_2.x+16,frame_2.y+44>,[w_work_button_text],t2,t2.size
  548. ;-----------------------------------           
  549.         call    draw_button_row
  550.         call    draw_button_row_of_texts
  551.         call    draw_colours
  552. ;-----------------------------------
  553.         mov     [frame_data.x],dword frame_1.x shl 16+frame_1.w
  554.         mov     [frame_data.y],dword frame_1.y shl 16+frame_1.height
  555.         mov     [frame_data.text_pointer],dword select_dtp_text
  556.         mov     eax,[w_work]
  557.         mov     [frame_data.font_backgr_color],eax
  558.         mov     eax,[w_work_text]
  559.         mov     [frame_data.font_color],eax
  560.         mov     [frame_data.draw_text_flag],dword 1
  561.        
  562.         push    dword frame_data
  563.         call    [Frame_draw]
  564. ;-----------------------------------
  565.         mov     [frame_data.x],dword frame_2.x shl 16+frame_2.w
  566.         mov     [frame_data.y],dword frame_2.y shl 16+frame_2.height
  567.         mov     [frame_data.text_pointer],dword select_skin_text
  568.  
  569.         push    dword frame_data
  570.         call    [Frame_draw]
  571. ;-----------------------------------
  572.         call    draw_PathShow
  573. ;-----------------------------------
  574.         cmp     dword[not_packed_area+SKIN_HEADER.ident],'SKIN'
  575.         jne     @f
  576.         call    draw_skin
  577. @@:
  578. .end:
  579.         mcall   12,2
  580.         ret
  581. ;-----------------------------------------------------------------------------
  582. include 'drawskin.inc'
  583. ;-----------------------------------------------------------------------------
  584. ; DATA AREA
  585. ;-----------------------------------------------------------------------------
  586. include 'idata.inc'
  587. ;-----------------------------------------------------------------------------
  588. IM_END:
  589. ;-----------------------------------------------------------------------------
  590. include 'udata.inc'
  591. ;-----------------------------------------------------------------------------
  592. I_END:
  593. ;-----------------------------------------------------------------------------