/* ----------------------------------------------------------------------------- This source file is part of OpenSpace3D For the latest info, see http://www.openspace3d.com Copyright (c) 2012 I-maginer This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/copyleft/lesser.txt ----------------------------------------------------------------------------- */ struct ThemeWinCtrls = [ TWC_themewinstr : EdWindow, // Tree TWC_ctrltree : EdControl, TWC_treerootitem : EdTreeItem, TWC_treecustomitem : EdTreeItem, TWC_neweltnamectrl : EdControl, TWC_ctrladdbtn : EdControl, TWC_ctrldupbtn : EdControl, TWC_ctrldelbtn : EdControl, // Preview TWC_previewwinstr : EdWindow, TWC_Normalcont : ObjContainer, TWC_Widecont : ObjContainer, TWC_Tallcont : ObjContainer, TWC_Bigcont : ObjContainer, TWC_Normalcompbmp : CompBitmap, TWC_Widecompbmp : CompBitmap, TWC_Tallcompbmp : CompBitmap, TWC_Bigcompbmp : CompBitmap, TWC_Changestatebtn : EdControl, TWC_Changecolbtn : EdControl, // Element description TWC_Descwinstr : EdWindow, TWC_Desctext : EdControl, TWC_Desceditwinstr : EdWindow, TWC_Descedittext : EdControl, // UIResource TWC_Pathlabel : EdControl, TWC_Pathctrl : EdControl, TWC_Pathpickfilebtn : EdControl, TWC_Pathrefreshbtn : EdControl, TWC_Bgcolorlabel : EdControl, TWC_Bgcolorctrl : EdControl, TWC_Borderlabel : EdControl, TWC_Borderctrl : EdControl, TWC_Bdcolorlabel : EdControl, TWC_Bdcolorctrl : EdControl, TWC_Resizeflaglabel : EdControl, TWC_Resizeflagctrl : EdControl, TWC_Nbstateslabel : EdControl, TWC_Nbstatesctrl : EdControl, TWC_Nbcolslabel : EdControl, TWC_Nbcolsctrl : EdControl, TWC_Nbframeslabel : EdControl, TWC_Nbframesctrl : EdControl, TWC_Nbfpslabel : EdControl, TWC_Nbfpsctrl : EdControl, // UIFont TWC_Fontnamelabel : EdControl, TWC_Fontnamectrl : EdControl, TWC_Fontsizelabel : EdControl, TWC_Fontsizectrl : EdControl, TWC_Fontboldctrl : EdControl, TWC_Fontitalicctrl : EdControl, TWC_Fonthollowctrl : EdControl, TWC_Fontcolorlabel : EdControl, TWC_Fontcolorctrl : EdControl ]mkThemeWinCtrls;; struct ThemeElement = [ TE_xmlmark : XMLmark, TE_ctrlItem : EdTreeItem, TE_sName : S, TE_sDescLoc : S, // UIResource TE_sPath : S, TE_iBgColor : I, TE_iBorder : I, TE_iBdColor : I, TE_iResizeFlag : I, TE_iNbStates : I, TE_iNbCols : I, TE_iNbFrames : I, TE_iNbFps : I, // UIFont TE_sFontName : S, TE_iFontSize : I, TE_bFontBold : I, TE_bFontItalic : I, TE_bFontHollow : I, TE_iFontColor : I ]mkThemeElement;; struct ThemeEditor = [ //TME_ctrls : ThemeWinCtrls, TME_lItems : [ThemeElement r1], TME_selected : ThemeElement, TME_xmlfilepath : S, TME_xmlfile : XMLfile, TME_xmlcustommark : XMLmark, TME_sThemeDir : S, TME_bgBmp : AlphaBitmap, TME_abmp : AlphaBitmap, TME_iBmpUnitWidth : I, TME_iBmpUnitHeight : I, TME_normalabmp : AlphaBitmap, TME_wideabmp : AlphaBitmap, TME_tallabmp : AlphaBitmap, TME_bigabmp : AlphaBitmap, TME_iCurStates : I, TME_iCurCol : I, TME_iCurFrame : I, TME_animationTimer : Timer, TME_font : VUIfont, TME_bUpdateEnabled : I ]mkThemeEditor;; var STHEME_EDITOR_HELP_URL = "http://www.openspace3d.com/documentation/en/themeeditor.html";; var STHEME_DEFAULT_RES_PATH = "hud/";; var STHEME_STARTED = 0;; typeof ThemeEditorStr = ThemeEditor;; typeof ThemeEditorCtrls = ThemeWinCtrls;; /* ********************************************************************************************* / Utility functions / ********************************************************************************************* */ fun getThemeList()= let _listofsubdir VUI_USER_THEME_FOLDER -> lthemedirs in let nil -> lthemes in let sizelist lthemedirs -> size in ( while (size > 0) do ( set size = size - 1; let nth_list lthemedirs size -> themedir in let getlastPathDir themedir -> dirname in let XMLload (strcatn themedir::"/"::dirname::".uith"::nil) -> xmlstr in if (xmlstr == nil) then nil else ( let XMLgetMarkByValue xmlstr "UITheme" -> thmarkstr in let XMLgetParam thmarkstr "name" -> themename in set lthemes = themename::lthemes; XMLclose xmlstr; ); ); lthemes; );; fun generateNewNumberedName(name, prefix, parentxmlmark)= let name -> newname in let 1 -> i in let if prefix == nil then "" else prefix -> prefix in ( while ((XMLgetMarkByParamValueFromMarkSons parentxmlmark "name" (strcat prefix newname)) != nil) do ( set newname = strcatn name::" ("::(itoa i)::")"::nil; set i = i + 1; ); newname; );; fun createabmp(channel, w, h)= let _FILLbitmap (_CRbitmap channel w h) 0xffffff -> newbmp in let _FILLbitmap8 (_CRbitmap8 channel w h) 0xffffff -> bmp8 in let _CRalphaBitmap channel newbmp bmp8 nil nil -> abmp in ( _DSbitmap newbmp; _DSbitmap8 bmp8; abmp; );; fun getSelectedStr(litems, ctrltree, selected)= //addLogMessage "getSelectedStr"; let getEdCtrlTreeValueByItem ctrltree selected -> [_ type] in let nil -> selectedstr in if (type <= 1 || litems == nil) then nil else ( let (hd litems) -> item in let sizelist litems -> size in let 0 -> i in while i < size && selectedstr == nil do ( let nth_list litems i -> testr in if testr.TE_ctrlItem != selected then nil else set selectedstr = testr; set i = i + 1; ); selectedstr; );; fun duplicateElement(testr, parentitem, parentxml, name)= let if (name == nil || (strcmpi name "") == 0) then testr.TE_sName else name -> name in let if (parentitem == nil || parentxml == nil) then [ThemeEditorCtrls.TWC_treecustomitem ThemeEditorStr.TME_xmlcustommark] else [parentitem parentxml] -> [parentitem parentxml] in let if (parentitem == ThemeEditorCtrls.TWC_treecustomitem) then 3 else 2 -> type in let addEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree parentitem name name type (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> newitem in let XMLcopyMark ThemeEditorStr.TME_xmlfile testr.TE_xmlmark parentxml -> newxmlmark in let mkThemeElement[newxmlmark newitem name testr.TE_sDescLoc testr.TE_sPath testr.TE_iBgColor testr.TE_iBorder testr.TE_iBdColor testr.TE_iResizeFlag testr.TE_iNbStates testr.TE_iNbCols testr.TE_iNbFrames testr.TE_iNbFps testr.TE_sFontName testr.TE_iFontSize testr.TE_bFontBold testr.TE_bFontItalic testr.TE_bFontHollow testr.TE_iFontColor] -> newtestr in ( XMLsetParam newxmlmark "name" name; if (type == 2) then nil else ( XMLsetData newxmlmark "Custom element."; //XMLsetData newxmlmark (loc (XMLgetParam newxmlmark "descLoc")); XMLsetParam newxmlmark "descLoc" nil; set newtestr.TE_sDescLoc = "Custom element." ); set ThemeEditorStr.TME_lItems = lcat ThemeEditorStr.TME_lItems newtestr::nil; newtestr; );; fun duplicateDefinition(defmarkstr, name)= let XMLgetMarkByValue ThemeEditorStr.TME_xmlfile "UITheme" -> thmarkstr in let addEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree ThemeEditorCtrls.TWC_treerootitem name name 1 (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> newitem in let XMLaddMark ThemeEditorStr.TME_xmlfile "UIDefinition" thmarkstr ["name" name]::nil nil -> newdefmarkstr in let sizelist ThemeEditorStr.TME_lItems -> size in ( while (size > 0) do ( set size = size - 1; let nth_list ThemeEditorStr.TME_lItems size -> element in if (element.TE_xmlmark.XMLfather != defmarkstr) then nil else duplicateElement element newitem newdefmarkstr nil; ); [newitem newdefmarkstr]; );; fun enableResourceSettings(state)= setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Pathlabel state; setEdCtrlButtonEnable ThemeEditorCtrls.TWC_Pathpickfilebtn state; setEdCtrlButtonEnable ThemeEditorCtrls.TWC_Pathrefreshbtn state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Bgcolorlabel state; setEdCtrlColorButtonEnable ThemeEditorCtrls.TWC_Bgcolorctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Borderlabel state; setEdCtrlFloatEnable ThemeEditorCtrls.TWC_Borderctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Bdcolorlabel state; setEdCtrlColorButtonEnable ThemeEditorCtrls.TWC_Bdcolorctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Resizeflaglabel state; setEdCtrlSelectEnable ThemeEditorCtrls.TWC_Resizeflagctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Nbstateslabel state; setEdCtrlSelectEnable ThemeEditorCtrls.TWC_Nbstatesctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Nbcolslabel state; setEdCtrlFloatEnable ThemeEditorCtrls.TWC_Nbcolsctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Nbframeslabel state; setEdCtrlFloatEnable ThemeEditorCtrls.TWC_Nbframesctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Nbfpslabel state; setEdCtrlFloatEnable ThemeEditorCtrls.TWC_Nbfpsctrl state; 0;; fun enableFontSettings(state)= setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Fontnamelabel state; setEdCtrlTextLineEnable ThemeEditorCtrls.TWC_Fontnamectrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Fontsizelabel state; setEdCtrlFloatEnable ThemeEditorCtrls.TWC_Fontsizectrl state; setEdCtrlCheckEnable ThemeEditorCtrls.TWC_Fontboldctrl state; setEdCtrlCheckEnable ThemeEditorCtrls.TWC_Fontitalicctrl state; setEdCtrlLabelEnable ThemeEditorCtrls.TWC_Fontcolorlabel state; setEdCtrlColorButtonEnable ThemeEditorCtrls.TWC_Fontcolorctrl state; 0;; /* ********************************************************************************************* / Preview / ********************************************************************************************* */ fun updatePreview(selected)= if !ThemeEditorStr.TME_bUpdateEnabled then nil else ( if ThemeEditorStr.TME_bgBmp != nil then let _GETalphaBitmapSize ThemeEditorStr.TME_bgBmp -> [ow oh] in ( G2DstrechAlphaBitmapRectToBackgroundBitmap ThemeEditorStr.TME_bgBmp [0 0 ow oh] ThemeEditorStr.TME_normalabmp 2; G2DstrechAlphaBitmapRectToBackgroundBitmap ThemeEditorStr.TME_bgBmp [0 0 ow oh] ThemeEditorStr.TME_wideabmp 2; G2DstrechAlphaBitmapRectToBackgroundBitmap ThemeEditorStr.TME_bgBmp [0 0 ow oh] ThemeEditorStr.TME_tallabmp 2; G2DstrechAlphaBitmapRectToBackgroundBitmap ThemeEditorStr.TME_bgBmp [0 0 ow oh] ThemeEditorStr.TME_bigabmp 2; ); //addLogMessage "updatePreview"; if ThemeEditorStr.TME_abmp != nil then let [ThemeEditorStr.TME_iBmpUnitWidth ThemeEditorStr.TME_iBmpUnitHeight] -> [ow oh] in let ow * ((selected.TE_iNbFrames * ThemeEditorStr.TME_iCurCol) + ThemeEditorStr.TME_iCurFrame) -> ox in let if (!selected.TE_iNbStates) then 0 else oh * (if (selected.TE_iNbStates < ThemeEditorStr.TME_iCurStates) then if (ThemeEditorStr.TME_iCurStates == 3) then 0 else (min selected.TE_iNbStates ThemeEditorStr.TME_iCurStates) else ThemeEditorStr.TME_iCurStates) -> oy in let if (selected.TE_iResizeFlag & VUI_ResSplited) then 1 else 0 -> mode in ( //addLogMessage "abmp available"; G2DstrechAlphaBitmapRectToBlendBitmap ThemeEditorStr.TME_abmp [ox oy ow oh] ThemeEditorStr.TME_normalabmp 0 1.0; G2DstrechAlphaBitmapRectToBlendBitmap ThemeEditorStr.TME_abmp [ox oy ow oh] ThemeEditorStr.TME_wideabmp mode 1.0; G2DstrechAlphaBitmapRectToBlendBitmap ThemeEditorStr.TME_abmp [ox oy ow oh] ThemeEditorStr.TME_tallabmp mode 1.0; G2DstrechAlphaBitmapRectToBlendBitmap ThemeEditorStr.TME_abmp [ox oy ow oh] ThemeEditorStr.TME_bigabmp mode 1.0; 0; ) else let ftoi (((itof (G2DgetAlphaFromColor selected.TE_iBgColor)) /. 126.0) *. 255.0) -> alpha in let G2Drgba2rgb selected.TE_iBgColor -> rgb in ( let _FILLbitmap (_CRbitmap _channel 32 32) rgb -> nbmp in let _FILLbitmap8 (_CRbitmap8 _channel 32 32) alpha -> nbmp8 in let _CRalphaBitmap _channel nbmp nbmp8 nil nil -> nabmp in ( G2DstrechAlphaBitmapRectToBlendBitmap nabmp [0 0 32 32] ThemeEditorStr.TME_normalabmp 0 1.0; G2DstrechAlphaBitmapRectToBlendBitmap nabmp [0 0 32 32] ThemeEditorStr.TME_wideabmp 0 1.0; G2DstrechAlphaBitmapRectToBlendBitmap nabmp [0 0 32 32] ThemeEditorStr.TME_tallabmp 0 1.0; G2DstrechAlphaBitmapRectToBlendBitmap nabmp [0 0 32 32] ThemeEditorStr.TME_bigabmp 0 1.0; _DSbitmap nbmp; _DSbitmap8 nbmp8; _DSalphaBitmap nabmp; ); 0; ); if (selected.TE_iBorder <= 0) then nil else let _GETalphaBitmaps ThemeEditorStr.TME_normalabmp -> [nbmpRgb nbmp8] in let _GETalphaBitmaps ThemeEditorStr.TME_wideabmp -> [wbmpRgb wbmp8] in let _GETalphaBitmaps ThemeEditorStr.TME_tallabmp -> [tbmpRgb tbmp8] in let _GETalphaBitmaps ThemeEditorStr.TME_bigabmp -> [bbmpRgb bbmp8] in let G2Drgba2rgb selected.TE_iBdColor -> bdrgb in let ftoi (((itof (G2DgetAlphaFromColor selected.TE_iBdColor)) /. 126.0) *. 255.0) -> balpha in let _GETalphaBitmapSize ThemeEditorStr.TME_normalabmp -> [nw nh] in let _GETalphaBitmapSize ThemeEditorStr.TME_wideabmp -> [ww wh] in let _GETalphaBitmapSize ThemeEditorStr.TME_tallabmp -> [tw th] in let _GETalphaBitmapSize ThemeEditorStr.TME_bigabmp -> [bw bh] in ( _BTDRAWrect nbmpRgb [0 0 nw nh] bdrgb selected.TE_iBorder nil nil; _BTDRAWrect8 nbmp8 [0 0 nw nh] (make_rgb balpha balpha balpha) selected.TE_iBorder nil nil; _BTDRAWrect wbmpRgb [0 0 ww wh] bdrgb selected.TE_iBorder nil nil; _BTDRAWrect8 wbmp8 [0 0 ww wh] (make_rgb balpha balpha balpha) selected.TE_iBorder nil nil; _BTDRAWrect tbmpRgb [0 0 tw th] bdrgb selected.TE_iBorder nil nil; _BTDRAWrect8 tbmp8 [0 0 tw th] (make_rgb balpha balpha balpha) selected.TE_iBorder nil nil; _BTDRAWrect bbmpRgb [0 0 bw bh] bdrgb selected.TE_iBorder nil nil; _BTDRAWrect8 bbmp8 [0 0 bw bh] (make_rgb balpha balpha balpha) selected.TE_iBorder nil nil; ); if (selected.TE_sFontName == nil || (strcmp selected.TE_sFontName "") == 0) then nil else let _GETalphaBitmapSize ThemeEditorStr.TME_normalabmp -> [nw nh] in let _GETalphaBitmapSize ThemeEditorStr.TME_wideabmp -> [ww wh] in let _GETalphaBitmapSize ThemeEditorStr.TME_tallabmp -> [tw th] in let _GETalphaBitmapSize ThemeEditorStr.TME_bigabmp -> [bw bh] in ( //VUIdrawTextAlphaBitmap ThemeEditorStr.TME_normalabmp ThemeEditorStr.TME_font [0 0 nw nh] [0 0] selected.TE_iFontColor iVUITEXT_HALIGNCENTER|iVUITEXT_VALIGNCENTER "Lorem Ipsum"; VUIdrawTextAlphaBitmap ThemeEditorStr.TME_wideabmp ThemeEditorStr.TME_font [0 0 ww wh] [0 0] selected.TE_iFontColor iVUITEXT_HALIGNCENTER|iVUITEXT_VALIGNCENTER "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; VUIdrawTextAlphaBitmap ThemeEditorStr.TME_tallabmp ThemeEditorStr.TME_font [0 0 tw th] [0 0] selected.TE_iFontColor iVUITEXT_HALIGNCENTER|iVUITEXT_VALIGNCENTER "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; VUIdrawTextAlphaBitmap ThemeEditorStr.TME_bigabmp ThemeEditorStr.TME_font [0 0 bw bh] [0 0] selected.TE_iFontColor iVUITEXT_HALIGNCENTER|iVUITEXT_VALIGNCENTER "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla metus magna, ultrices quis eros at, mattis pharetra felis. Morbi elementum blandit posuere. Sed mattis leo vitae risus pulvinar, non lobortis ante ullamcorper. Duis porta ultricies consectetur. Pellentesque magna erat, tincidunt vel sapien sit amet, fringilla tempus augue. Phasellus sit amet nibh sit amet risus posuere pellentesque. Vivamus quis mauris felis. Nullam viverra aliquam cursus. Maecenas auctor est nibh, quis vulputate risus imperdiet sed."; ); _PAINTcontainer ThemeEditorCtrls.TWC_Normalcont; _PAINTcontainer ThemeEditorCtrls.TWC_Widecont; _PAINTcontainer ThemeEditorCtrls.TWC_Tallcont; _PAINTcontainer ThemeEditorCtrls.TWC_Bigcont; ); 0;; fun cbCompBmpResizeResource(cmpbmp, index, w, h, bmpcoords)= //addLogMessage "cbCompBmpResizeResource"; let createabmp _channel w h -> abmp in ( if (index == 0) then ( _DSalphaBitmap ThemeEditorStr.TME_normalabmp; set ThemeEditorStr.TME_normalabmp = abmp; ) else if (index == 1) then ( _DSalphaBitmap ThemeEditorStr.TME_wideabmp; set ThemeEditorStr.TME_wideabmp = abmp; ) else if (index == 2) then ( _DSalphaBitmap ThemeEditorStr.TME_tallabmp; set ThemeEditorStr.TME_tallabmp = abmp; ) else if (index == 3) then ( _DSalphaBitmap ThemeEditorStr.TME_bigabmp; set ThemeEditorStr.TME_bigabmp = abmp; ) else nil; [abmp [0 0 w h]] );; fun updatePreviewCompBmpSizes()= if !ThemeEditorStr.TME_bUpdateEnabled then nil else ( //addLogMessage "updatePreviewCompBmpSizes"; let 7 -> margin in let margin * 2 -> doublemargin in let getEdWindowSize ThemeEditorCtrls.TWC_previewwinstr -> [cw ch] in let (min (cw / 3) ((ch - 40) / 3)) - doublemargin -> originalsize in let cw - (originalsize + doublemargin) - doublemargin -> rightw in let ch - ((originalsize + doublemargin) + 20) - 40 - 20 - doublemargin -> bottomh in let if (ThemeEditorStr.TME_iBmpUnitWidth <= 0 || ThemeEditorStr.TME_iBmpUnitHeight <= 0) then // if no resource [originalsize originalsize] else if (ThemeEditorStr.TME_iBmpUnitWidth >= ThemeEditorStr.TME_iBmpUnitHeight) then let min originalsize ThemeEditorStr.TME_iBmpUnitWidth -> nw in let (ThemeEditorStr.TME_iBmpUnitHeight * nw) / ThemeEditorStr.TME_iBmpUnitWidth -> nh in [nw nh] else let min originalsize ThemeEditorStr.TME_iBmpUnitHeight -> nh in let (ThemeEditorStr.TME_iBmpUnitWidth * nh) / ThemeEditorStr.TME_iBmpUnitHeight -> nw in [nw nh] -> [nw nh] in let [(margin + ((originalsize - nw) / 2)) (margin + ((originalsize - nh) / 2))] -> [nx ny] in let [margin ny rightw nh]-> [wx wy ww wh] in let [nx margin nw bottomh] -> [tx ty tw th] in let [margin margin rightw bottomh] -> [bx by bw bh] in ( //addLogMessage "Updating CompBmp Sizes"; //addLogMessage strcatnSep "normal:"::(itoa nx)::(itoa ny)::(itoa nw)::(itoa nh)::"wide:"::(itoa wx)::(itoa wy)::(itoa ww)::(itoa wh)::"tall:"::(itoa tx)::(itoa ty)::(itoa tw)::(itoa th)::"big:"::(itoa bx)::(itoa by)::(itoa bw)::(itoa bh)::nil " "; _SIZEEXcontainer ThemeEditorCtrls.TWC_Normalcont nx ny nw + 1 nh + 1; _SIZEEXcontainer ThemeEditorCtrls.TWC_Widecont wx wy ww + 1 wh + 1; _SIZEEXcontainer ThemeEditorCtrls.TWC_Tallcont tx ty tw + 1 th + 1; _SIZEEXcontainer ThemeEditorCtrls.TWC_Bigcont bx by bw + 1 bh + 1; if (ThemeEditorCtrls.TWC_Normalcompbmp != nil) then nil else ( //addLogMessage "Creating CompBmp"; //addLogMessage strcatnSep "normal:"::(itoa nx)::(itoa ny)::(itoa nw)::(itoa nh)::"wide:"::(itoa wx)::(itoa wy)::(itoa ww)::(itoa wh)::"tall:"::(itoa tx)::(itoa ty)::(itoa tw)::(itoa th)::"big:"::(itoa bx)::(itoa by)::(itoa bw)::(itoa bh)::nil " "; set ThemeEditorStr.TME_normalabmp = createabmp _channel nw nh; set ThemeEditorCtrls.TWC_Normalcompbmp = _CRcompBitmap _channel ThemeEditorCtrls.TWC_Normalcont nil [0 0] OBJ_ENABLE|OBJ_VISIBLE|OBJ_MW_FLEX|OBJ_MH_FLEX nil ThemeEditorStr.TME_normalabmp 0 0 nw nh; _CBcompBitmapResizeResource ThemeEditorCtrls.TWC_Normalcompbmp @cbCompBmpResizeResource 0; set ThemeEditorStr.TME_wideabmp = createabmp _channel ww wh; set ThemeEditorCtrls.TWC_Widecompbmp = _CRcompBitmap _channel ThemeEditorCtrls.TWC_Widecont nil [0 0] OBJ_ENABLE|OBJ_VISIBLE|OBJ_MW_FLEX|OBJ_MH_FLEX nil ThemeEditorStr.TME_wideabmp 0 0 ww wh; _CBcompBitmapResizeResource ThemeEditorCtrls.TWC_Widecompbmp @cbCompBmpResizeResource 1; set ThemeEditorStr.TME_tallabmp = createabmp _channel tw th; set ThemeEditorCtrls.TWC_Tallcompbmp = _CRcompBitmap _channel ThemeEditorCtrls.TWC_Tallcont nil [0 0] OBJ_ENABLE|OBJ_VISIBLE|OBJ_MW_FLEX|OBJ_MH_FLEX nil ThemeEditorStr.TME_tallabmp 0 0 tw th; _CBcompBitmapResizeResource ThemeEditorCtrls.TWC_Tallcompbmp @cbCompBmpResizeResource 2; set ThemeEditorStr.TME_bigabmp = createabmp _channel bw bh; set ThemeEditorCtrls.TWC_Bigcompbmp = _CRcompBitmap _channel ThemeEditorCtrls.TWC_Bigcont nil [0 0] OBJ_ENABLE|OBJ_VISIBLE|OBJ_MW_FLEX|OBJ_MH_FLEX nil ThemeEditorStr.TME_bigabmp 0 0 bw bh; _CBcompBitmapResizeResource ThemeEditorCtrls.TWC_Bigcompbmp @cbCompBmpResizeResource 3; 0; ); ); ); 0;; fun updateResourceSplitting(selected)= let _GETalphaBitmapSize ThemeEditorStr.TME_abmp -> [bw bh] in ( set ThemeEditorStr.TME_iBmpUnitWidth = bw / (max 1 (selected.TE_iNbCols * selected.TE_iNbFrames)); set ThemeEditorStr.TME_iBmpUnitHeight = bh / (selected.TE_iNbStates + 1); ); 0;; fun loadPreview(selected)= //addLogMessage "loadPreview"; if (ThemeEditorStr.TME_abmp != nil) then _DSalphaBitmap ThemeEditorStr.TME_abmp; set ThemeEditorStr.TME_abmp = nil; set ThemeEditorStr.TME_iBmpUnitWidth = 0; set ThemeEditorStr.TME_iBmpUnitHeight = 0; let _checkpack selected.TE_sPath -> pfile in if (pfile == nil) then nil else ( set ThemeEditorStr.TME_abmp = G2DloadAlphaBmpFile _channel pfile; updateResourceSplitting selected; ); updatePreviewCompBmpSizes; updatePreview selected; 0;; fun loadFont(selected)= if (ThemeEditorStr.TME_font == nil) then nil else VUIdelFont ThemeEditorStr.TME_font; let if (selected.TE_bFontBold) then iVUITEXT_BOLD else 0 -> flags in let if (selected.TE_bFontItalic) then flags | iVUITEXT_ITALIC else flags -> flags in //let if (selected.TE_bFontHollow) then flags | iVUITEXT_HOLLOW else flags -> flags in set ThemeEditorStr.TME_font = VUIcreateFont selected.TE_sFontName selected.TE_iFontSize flags selected.TE_iFontColor 1; 0;; fun cbAnimationTimer(timer, param)= set ThemeEditorStr.TME_iCurFrame = mod (ThemeEditorStr.TME_iCurFrame + 1) ThemeEditorStr.TME_selected.TE_iNbFrames; updatePreview ThemeEditorStr.TME_selected; 0;; fun setAnimationTimerPeriod(period)= if (period == nil || period <= 0) then ( _deltimer ThemeEditorStr.TME_animationTimer; set ThemeEditorStr.TME_animationTimer = nil; 0; ) else if (ThemeEditorStr.TME_animationTimer == nil) then ( set ThemeEditorStr.TME_animationTimer = _starttimer _channel period; _rfltimer ThemeEditorStr.TME_animationTimer @cbAnimationTimer nil; 0; ) else ( _settimerperiod ThemeEditorStr.TME_animationTimer period; 0; ); 0;; fun cbPreviewWinSize(winstr, cw, ch, p)= //addLogMessage "cbPreviewWinSize"; let p -> [topwinstr bottomwinstr normalwinfrm widewinfrm tallwinfrm bigwinfrm] in let min (cw / 3) ((ch - 40) / 3) -> originalsize in let [(originalsize + 20) (ch - originalsize - 20 - 40)] -> [toph bottomh] in let [originalsize (cw - originalsize)] -> [leftw rightw] in ( setEdWindowSize topwinstr cw toph; setEdWindowSize bottomwinstr cw bottomh; setEdWindowSize normalwinfrm leftw toph; setEdWindowPosSize widewinfrm (leftw + 1) 0 rightw toph; setEdWindowSize tallwinfrm leftw bottomh; setEdWindowPosSize bigwinfrm (leftw + 1) 0 rightw bottomh; updatePreviewCompBmpSizes; updatePreview ThemeEditorStr.TME_selected; ); 0;; /* ********************************************************************************************* / Theme element loading and save / ********************************************************************************************* */ fun saveElementInXML(tosave) = let getEdCtrlTreeValueByItem ThemeEditorCtrls.TWC_ctrltree tosave.TE_ctrlItem -> [_ type] in if (type == 2) then nil else XMLsetData tosave.TE_xmlmark getEdCtrlEditTextValue ThemeEditorCtrls.TWC_Descedittext; let XMLgetMarkByValueFromMarkSons tosave.TE_xmlmark "UIResource" -> rmarkstr in let XMLgetMarkByValueFromMarkSons tosave.TE_xmlmark "UIFont" -> fmarkstr in ( if (rmarkstr == nil) then nil else ( XMLsetData rmarkstr getEdCtrlTextLineValue ThemeEditorCtrls.TWC_Pathctrl; XMLsetParam rmarkstr "bgcolor" itoh getEdCtrlColorButtonColor ThemeEditorCtrls.TWC_Bgcolorctrl; XMLsetParam rmarkstr "border" itoa ftoi getEdCtrlFloatValue ThemeEditorCtrls.TWC_Borderctrl; XMLsetParam rmarkstr "borderColor" itoh getEdCtrlColorButtonColor ThemeEditorCtrls.TWC_Bdcolorctrl; XMLsetParam rmarkstr "splited" itoa getSelectedEdCtrlSelectPos ThemeEditorCtrls.TWC_Resizeflagctrl; XMLsetParam rmarkstr "ratio" itoa 0; XMLsetParam rmarkstr "states" itoa getSelectedEdCtrlSelectPos ThemeEditorCtrls.TWC_Nbstatesctrl; XMLsetParam rmarkstr "cols" itoa ftoi getEdCtrlFloatValue ThemeEditorCtrls.TWC_Nbcolsctrl; XMLsetParam rmarkstr "frames" itoa ftoi getEdCtrlFloatValue ThemeEditorCtrls.TWC_Nbframesctrl; XMLsetParam rmarkstr "animFPS" itoa ftoi getEdCtrlFloatValue ThemeEditorCtrls.TWC_Nbfpsctrl; ); if (fmarkstr == nil) then nil else ( XMLsetParam fmarkstr "face" getEdCtrlTextLineValue ThemeEditorCtrls.TWC_Fontnamectrl; XMLsetParam fmarkstr "size" itoa ftoi getEdCtrlFloatValue ThemeEditorCtrls.TWC_Fontsizectrl; XMLsetParam fmarkstr "bold" itoa getEdCtrlCheckState ThemeEditorCtrls.TWC_Fontboldctrl; XMLsetParam fmarkstr "italic" itoa getEdCtrlCheckState ThemeEditorCtrls.TWC_Fontitalicctrl; XMLsetParam fmarkstr "hollow" itoa 0; XMLsetParam fmarkstr "color" itoh getEdCtrlColorButtonColor ThemeEditorCtrls.TWC_Fontcolorctrl; ); ); 0;; fun loadThemeElement(selected)= set ThemeEditorStr.TME_bUpdateEnabled = 0; let getEdCtrlTreeValueByItem ThemeEditorCtrls.TWC_ctrltree selected.TE_ctrlItem -> [_ type] in let if (type == 3) then 1 else 0 -> iscustomdesc in ( setEdWindowVisible ThemeEditorCtrls.TWC_Descwinstr !iscustomdesc; setEdCtrlTextValue ThemeEditorCtrls.TWC_Desctext (loc selected.TE_sDescLoc); setEdWindowVisible ThemeEditorCtrls.TWC_Desceditwinstr iscustomdesc; setEdCtrlEditTextValue ThemeEditorCtrls.TWC_Descedittext selected.TE_sDescLoc; ); setEdCtrlTextLineValue ThemeEditorCtrls.TWC_Pathctrl selected.TE_sPath; setEdCtrlColorButtonColor ThemeEditorCtrls.TWC_Bgcolorctrl selected.TE_iBgColor; setEdCtrlFloatValue ThemeEditorCtrls.TWC_Borderctrl (itof selected.TE_iBorder); setEdCtrlColorButtonColor ThemeEditorCtrls.TWC_Bdcolorctrl selected.TE_iBdColor; selectEdCtrlSelectByPos ThemeEditorCtrls.TWC_Resizeflagctrl (if (selected.TE_iResizeFlag & VUI_ResSplited) then 1 else 0); selectEdCtrlSelectByPos ThemeEditorCtrls.TWC_Nbstatesctrl selected.TE_iNbStates; setEdCtrlFloatValue ThemeEditorCtrls.TWC_Nbcolsctrl (itof selected.TE_iNbCols); setEdCtrlFloatValue ThemeEditorCtrls.TWC_Nbframesctrl (itof selected.TE_iNbFrames); setEdCtrlFloatValue ThemeEditorCtrls.TWC_Nbfpsctrl (itof selected.TE_iNbFps); setEdCtrlTextLineValue ThemeEditorCtrls.TWC_Fontnamectrl selected.TE_sFontName; setEdCtrlFloatValue ThemeEditorCtrls.TWC_Fontsizectrl (itof selected.TE_iFontSize); setEdCtrlCheckState ThemeEditorCtrls.TWC_Fontboldctrl selected.TE_bFontBold; setEdCtrlCheckState ThemeEditorCtrls.TWC_Fontitalicctrl selected.TE_bFontItalic; setEdCtrlColorButtonColor ThemeEditorCtrls.TWC_Fontcolorctrl selected.TE_iFontColor; set ThemeEditorStr.TME_iCurFrame = 0; if (selected != nil && selected.TE_iNbFrames > 1 && selected.TE_iNbFps > 0) then setAnimationTimerPeriod (1000 / ThemeEditorStr.TME_selected.TE_iNbFps) else setAnimationTimerPeriod 0; set ThemeEditorStr.TME_iCurStates = 0; setEdCtrlButtonValue ThemeEditorCtrls.TWC_Changestatebtn (loc "OS3D_0718"); setEdCtrlButtonEnable ThemeEditorCtrls.TWC_Changestatebtn (if (selected.TE_iNbStates != nil && selected.TE_iNbStates > 0) then 1 else 0); set ThemeEditorStr.TME_iCurCol = 0; setEdCtrlButtonValue ThemeEditorCtrls.TWC_Changecolbtn strcat (loc "OS3D_0722") " 1"; setEdCtrlButtonEnable ThemeEditorCtrls.TWC_Changecolbtn (if (selected.TE_iNbCols != nil && selected.TE_iNbCols > 1) then 1 else 0); set ThemeEditorStr.TME_bUpdateEnabled = 1; loadFont selected; loadPreview selected; 0;; /* ********************************************************************************************* / Functions to create, open and save theme and related checks / ********************************************************************************************* */ fun isThemeModified()= XMLdiff ThemeEditorStr.TME_xmlfile (XMLload ThemeEditorStr.TME_xmlfilepath);; fun cbUnusedResDestroy(winstr, p)= let p -> [nextfun funparams] in exec nextfun with funparams; 0;; fun cbUnusedResYes(ctrlbtn, p)= let p -> [winstr lunusedres] in ( while (lunusedres != nil) do ( let _checkpack (hd lunusedres) -> resfile in if (resfile == nil) then nil else _deletepack resfile; set lunusedres = tl lunusedres; ); dsEdWindow winstr; ); 0;; fun cbUnusedResNo(ctrlbtn, winstr)= dsEdWindow winstr; 0;; fun unusedResDialog(lunusedres, nextfun, funparams)= let [350 185] -> [iw ih] in let _GETdesktopSize -> [sw sh] in let 40 -> hmargin in let getEdWindowExPosSize ThemeEditorCtrls.TWC_themewinstr -> [px py pw ph] in let [(px + ((pw - iw) / 2)) (py + ((ph - ih) / 2))] -> [x y] in let [(if (x + iw > sw) then sw - iw else x) (if (y + ih + hmargin > sh) then sh - hmargin - ih else y)] -> [x y] in let setEdWindowIcon (crEdModalDialogWindow _channel ThemeEditorCtrls.TWC_themewinstr x y iw ih WN_NOSCOL|WN_MENU nil (loc "OS3D_0691")) sWinDlgIcon -> winstr in let 10 -> ypos in //let crEdCtrlLabel winstr 10 ypos (iw - 20) 20 (loc "OS3D_0740") nil -> labelunused in let crEdCtrlText winstr 10 ypos (iw - 20) 40 (loc "OS3D_0740") ET_ALIGN_LEFT EDWIN_RESIZE_MW -> labelunused in let crEdCtrlList winstr 10 (set ypos = ypos + 45) (iw - 20) 85 LB_BORDER|LB_VSCROLL|LB_NOSELECTION EDWIN_RESIZE_MW|EDWIN_RESIZE_MH -> ctrlthemelist in let crEdCtrlButton winstr (iw - 200) (ih - 30) 90 20 (loc "OS3D_0741") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> yesbtn in let crEdCtrlButton winstr (iw - 100) (ih - 30) 90 20 (loc "OS3D_0742") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> nobtn in ( fillEdCtrlList ctrlthemelist lunusedres; setEdCtrlButtonCb yesbtn mkfun2 @cbUnusedResYes [winstr lunusedres]; setEdCtrlButtonCb nobtn mkfun2 @cbUnusedResNo winstr; setEdwindowCbDestroy winstr mkfun2 @cbUnusedResDestroy [nextfun funparams]; ); 0;; fun saveCurrentTheme(nextfun, funparams)= XMLwrite ThemeEditorStr.TME_xmlfile nil; let XMLgetMarkByValue ThemeEditorStr.TME_xmlfile "UITheme" -> thmarkstr in let XMLgetMarksDataByValueFromMark thmarkstr "UIResource" -> ldata in let remove_string_from_list (_listoffiles ThemeEditorStr.TME_sThemeDir) ThemeEditorStr.TME_xmlfilepath -> lres in let nil -> lunusedres in ( while (lres != nil) do ( let hd lres -> res in if (isStringInListi ldata res) then nil else set lunusedres = res::lunusedres; set lres = tl lres; ); if (lunusedres == nil) then exec nextfun with funparams else unusedResDialog lunusedres nextfun funparams; ); if (strcmpi VUIdefaultTheme.VUITH_sPath ThemeEditorStr.TME_xmlfilepath) != 0 then nil else VUIsetTheme ThemeEditorStr.TME_xmlfilepath; 0;; fun addUIResourceFromBase(xmlthemestr, eltmarkstr, basermarkstr)= let getPathFile xmlthemestr.XMLpath "" -> [dir _] in let XMLgetData basermarkstr -> data in let nil -> newres in ( if (data == nil || (strcmpi data "") == 0) then nil else let getPathFile data "" -> [_ resname] in ( set newres = strcat dir resname; // copy src resource if a resource with the same name doesn't already exists if ((_checkpack newres) != nil) then nil else let _getpack _checkpack data -> filecontent in _storepack filecontent newres; ); XMLaddMark xmlthemestr "UIResource" eltmarkstr (revertlist basermarkstr.XMLparams) newres; );; fun addUIElementFromBase(xmlthemestr, defmarkstr, baseeltmarkstr)= let XMLaddMark xmlthemestr "UIElements" defmarkstr (revertlist baseeltmarkstr.XMLparams) nil -> eltmarkstr in let XMLgetMarkByValueFromMarkSons baseeltmarkstr "UIResource" -> basermarkstr in let XMLgetMarkByValueFromMarkSons baseeltmarkstr "UIFont" -> basefmarkstr in ( if (basermarkstr == nil) then nil else addUIResourceFromBase xmlthemestr eltmarkstr basermarkstr; if (basefmarkstr == nil) then nil else XMLaddMark xmlthemestr "UIFont" eltmarkstr (revertlist basefmarkstr.XMLparams) nil; eltmarkstr; );; fun addUIDefinitionFromBase(xmlthemestr, thmarkstr, basedefmarkstr)= let XMLaddMark xmlthemestr "UIDefinition" thmarkstr (revertlist basedefmarkstr.XMLparams) nil -> defmarkstr in let XMLgetMarksByValueFromMarkSons basedefmarkstr "UIElements" -> lbaseelt in ( while (lbaseelt != nil) do ( let hd lbaseelt -> baseeltmarkstr in addUIElementFromBase xmlthemestr defmarkstr baseeltmarkstr; set lbaseelt = tl lbaseelt; ); defmarkstr; );; fun checkForThemeElementUpdate(xmlthemestr, xmlbasethemestr, eltmarkstr, baseeltmarkstr)= let XMLgetMarkByValueFromMarkSons baseeltmarkstr "UIResource" -> basermarkstr in let XMLgetMarkByValueFromMarkSons eltmarkstr "UIResource" -> rmarkstr in if (basermarkstr == nil && rmarkstr != nil) then XMLdelMark xmlthemestr rmarkstr else if (basermarkstr != nil && rmarkstr == nil) then ( addUIResourceFromBase xmlthemestr eltmarkstr basermarkstr; 0; ) else nil; let XMLgetMarkByValueFromMarkSons baseeltmarkstr "UIFont" -> basefmarkstr in let XMLgetMarkByValueFromMarkSons eltmarkstr "UIFont" -> fmarkstr in if (basefmarkstr == nil && fmarkstr != nil) then XMLdelMark xmlthemestr fmarkstr else if (basefmarkstr != nil && fmarkstr == nil) then ( XMLaddMark xmlthemestr "UIFont" eltmarkstr (revertlist basefmarkstr.XMLparams) nil; 0; ) else nil; 0;; fun checkForThemeDefinitionUpdate(xmlthemestr, xmlbasethemestr, defmarkstr, basedefmarkstr)= let XMLgetMarksByValueFromMarkSons defmarkstr "UIElements" -> lelt in let XMLgetMarksByValueFromMarkSons basedefmarkstr "UIElements" -> lbaseelt in let nil -> lbaseeltfound in ( while (lelt != nil) do ( let hd lelt -> eltmarkstr in let XMLgetParam eltmarkstr "name" -> eltname in let XMLgetMarkByParamValueFromMarkSons basedefmarkstr "name" eltname -> baseeltmarkstr in if (baseeltmarkstr == nil) then XMLdelMark xmlthemestr eltmarkstr else ( set lbaseeltfound = eltname::lbaseeltfound; checkForThemeElementUpdate xmlthemestr xmlbasethemestr eltmarkstr baseeltmarkstr; ); set lelt = tl lelt; ); while (lbaseelt != nil) do ( let hd lbaseelt -> baseeltmarkstr in let XMLgetParam baseeltmarkstr "name" -> baseeltname in if (isStringInListi lbaseeltfound baseeltname) then nil else addUIElementFromBase xmlthemestr defmarkstr baseeltmarkstr; set lbaseelt = tl lbaseelt; ); ); 0;; fun checkForThemeStructureUpdate(xmlthemestr, xmlbasethemestr)= let getPathFile xmlthemestr.XMLpath "" -> [dir _] in let XMLgetMarkByValue xmlbasethemestr "UITheme" -> basethmarkstr in let XMLgetMarkByValue xmlthemestr "UITheme" -> thmarkstr in let XMLgetMarksByValueFromMarkSons basethmarkstr "UIDefinition" -> lbasedefs in let XMLgetMarksByValueFromMarkSons thmarkstr "UIDefinition" -> ldefs in let nil -> lbasedefsfound in ( while (ldefs != nil) do ( let hd ldefs -> defmarkstr in let XMLgetParam defmarkstr "name" -> defname in if ((strcmpi defname "custom") == 0) then nil else ( let strfind "_" defname 0 -> pos in let if (pos == nil) then defname else (substr defname 0 pos) -> basedefname in let XMLgetMarkByParamValueFromMarkSons basethmarkstr "name" basedefname -> basedefmarkstr in if (basedefmarkstr == nil) then XMLdelMark xmlthemestr defmarkstr else ( if ((strcmpi defname basedefname) != 0) then nil else set lbasedefsfound = defname::lbasedefsfound; checkForThemeDefinitionUpdate xmlthemestr xmlbasethemestr defmarkstr basedefmarkstr; ); ); set ldefs = tl ldefs; ); while (lbasedefs != nil) do ( let hd lbasedefs -> basedefmarkstr in let XMLgetParam basedefmarkstr "name" -> basedefname in if (isStringInListi lbasedefsfound basedefname) then nil else addUIDefinitionFromBase xmlthemestr thmarkstr basedefmarkstr; set lbasedefs = tl lbasedefs; ); XMLwrite xmlthemestr nil; ); 0;; fun createNewThemeFrom(basethemepath, newthemepath, newthemename)= let getPathFile basethemepath "" -> [basedir _] in let getPathFile newthemepath "" -> [newdir _] in let XMLload basethemepath -> xmlthemestr in let XMLgetMarkByValue xmlthemestr "UITheme" -> thmarkstr in ( if (thmarkstr != nil) then nil else _DLGMessageBox _channel nil "arg" "bip" 0; XMLsetParam thmarkstr "name" newthemename; if (XMLgetMarkByParamValueFromMarkSons thmarkstr "name" "custom") != nil then nil else XMLaddMark xmlthemestr "UIDefinition" thmarkstr ["name" "custom"]::nil nil; let XMLgetMarksByValueFromMarkSons thmarkstr "UIDefinition" -> ldefs in while (ldefs != nil) do ( let hd ldefs -> defmarkstr in let XMLgetMarksByValueFromMarkSons defmarkstr "UIElements" -> lelt in while (lelt != nil) do ( let XMLgetMarkByValueFromMarkSons (hd lelt) "UIResource" -> rmarkstr in let XMLgetData rmarkstr -> data in if (data == nil || (strcmpi data "") == 0) then nil else ( let getPathFile data "" -> [_ resname] in let _getpack _checkpack data -> filecontent in let strcat newdir resname -> newres in ( _storepack filecontent newres; XMLsetData rmarkstr newres; ); ); set lelt = tl lelt; ); set ldefs = tl ldefs; ); XMLwrite xmlthemestr newthemepath; XMLclose xmlthemestr; ); 0;; /* ********************************************************************************************* / Window Destroy/Close and save functions / ********************************************************************************************* */ fun cbSaveBeforeQuit(dlg, winstr, state)= if (state == 2) then nil else // Cancel if (state == 1) then // OK saveCurrentTheme @dsEdWindow [winstr] else dsEdWindow winstr; 0;; fun cbThemeEditorDestroy(winstr)= XMLclose ThemeEditorStr.TME_xmlfile; _DSalphaBitmap ThemeEditorStr.TME_bgBmp; _DSalphaBitmap ThemeEditorStr.TME_abmp; _DSalphaBitmap ThemeEditorStr.TME_normalabmp; _DSalphaBitmap ThemeEditorStr.TME_wideabmp; _DSalphaBitmap ThemeEditorStr.TME_tallabmp; _DSalphaBitmap ThemeEditorStr.TME_bigabmp; _deltimer ThemeEditorStr.TME_animationTimer; VUIdelFont ThemeEditorStr.TME_font; set ThemeEditorStr = nil; set ThemeEditorCtrls = nil; 0;; fun cbThemeEditorClose(winstr)= saveElementInXML ThemeEditorStr.TME_selected; if (isThemeModified) then ( _DLGrflmessage _DLGMessageBox _channel winstr.EDW_win (loc "OS3D_0452") (loc "OS3D_0739") 3 @cbSaveBeforeQuit winstr; 0; ) else ( dsEdWindow winstr; 0; ); 0;; /* ********************************************************************************************* / Element settings callback / ********************************************************************************************* */ fun cbFontColorChange(ctrlstr, color)= set ThemeEditorStr.TME_selected.TE_iFontColor = color; loadFont ThemeEditorStr.TME_selected; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbFontItalicChange(ctrlstr, state)= set ThemeEditorStr.TME_selected.TE_bFontItalic = state; loadFont ThemeEditorStr.TME_selected; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbFontBoldChange(ctrlstr, state)= set ThemeEditorStr.TME_selected.TE_bFontBold = state; loadFont ThemeEditorStr.TME_selected; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbFontSizeChange(ctrlstr, float)= set ThemeEditorStr.TME_selected.TE_iFontSize = ftoi float; loadFont ThemeEditorStr.TME_selected; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbFontNameChange(ctrlstr, value)= set ThemeEditorStr.TME_selected.TE_sFontName = value; loadFont ThemeEditorStr.TME_selected; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbNbFpsChange(ctrlstr, float)= set ThemeEditorStr.TME_selected.TE_iNbFps = ftoi float; if (ThemeEditorStr.TME_selected.TE_iNbFrames > 1 && ThemeEditorStr.TME_selected.TE_iNbFps > 0) then setAnimationTimerPeriod (1000 / ThemeEditorStr.TME_selected.TE_iNbFps) else setAnimationTimerPeriod 0; 0;; fun cbNbFramesChange(ctrlstr, float)= set ThemeEditorStr.TME_selected.TE_iNbFrames = ftoi float; set ThemeEditorStr.TME_iCurFrame = 0; if (ThemeEditorStr.TME_selected.TE_iNbFrames > 1 && ThemeEditorStr.TME_selected.TE_iNbFps > 0) then setAnimationTimerPeriod (1000 / ThemeEditorStr.TME_selected.TE_iNbFps) else setAnimationTimerPeriod 0; updateResourceSplitting ThemeEditorStr.TME_selected; updatePreviewCompBmpSizes; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbNbColumnChange(ctrlstr, float)= set ThemeEditorStr.TME_selected.TE_iNbCols = ftoi float; set ThemeEditorStr.TME_iCurCol = 0; setEdCtrlButtonEnable ThemeEditorCtrls.TWC_Changecolbtn (if (ThemeEditorStr.TME_selected.TE_iNbCols > 1) then 1 else 0); updateResourceSplitting ThemeEditorStr.TME_selected; updatePreviewCompBmpSizes; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbStatesChange(ctrlstr, pos, value)= set ThemeEditorStr.TME_selected.TE_iNbStates = pos; set ThemeEditorStr.TME_iCurStates = 0; setEdCtrlButtonEnable ThemeEditorCtrls.TWC_Changestatebtn (if (ThemeEditorStr.TME_selected.TE_iNbStates > 0) then 1 else 0); updateResourceSplitting ThemeEditorStr.TME_selected; updatePreviewCompBmpSizes; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbResizeFlagChange(ctrlstr, pos, value)= let if (pos == 0) then VUI_ResStreched else VUI_ResSplited -> flags in let if (ThemeEditorStr.TME_selected.TE_iResizeFlag & VUI_ResKeepRatio) then flags | VUI_ResKeepRatio else flags -> flags in set ThemeEditorStr.TME_selected.TE_iResizeFlag = flags; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbBorderColorChange(ctrlstr, color)= set ThemeEditorStr.TME_selected.TE_iBdColor = color; if (ThemeEditorStr.TME_selected.TE_iBorder <= 0) then nil else updatePreview ThemeEditorStr.TME_selected; 0;; fun cbBorderChange(ctrlstr, float)= set ThemeEditorStr.TME_selected.TE_iBorder = ftoi float; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbBackgroundColorChange(ctrlstr, color)= set ThemeEditorStr.TME_selected.TE_iBgColor = color; //if (ThemeEditorStr.TME_abmp == nil) then nil else updatePreview ThemeEditorStr.TME_selected; 0;; fun changeResourcePath(pfile, newfile, ctrlpath)= let _getpack pfile -> filecontent in _storepack filecontent newfile; setEdCtrlTextLineValue ctrlpath newfile; set ThemeEditorStr.TME_selected.TE_sPath = newfile; loadPreview ThemeEditorStr.TME_selected; 0;; fun cbDlgReplaceResource(dlg, p, state)= let p -> [pfile newfile ctrlpath] in if (!state) then nil else changeResourcePath pfile newfile ctrlpath; 0;; fun cbDlgGetPath(dlg, p, pfile)= //addLogMessage "cbDlgGetPath"; let p -> [ctrlbtn winstr ctrlpath] in if pfile == nil then nil else ( let _PtoScol pfile -> file in let getPathFile file "" -> [filedir filename] in let if file == nil then _GetFileNameFromP pfile else filename -> filename in let strcatn ThemeEditorStr.TME_sThemeDir::(sanitizeFileName filename)::nil -> newfile in if (file != nil && (strcmpi filedir ThemeEditorStr.TME_sThemeDir) != 0 && isStringInListi (_listoffiles ThemeEditorStr.TME_sThemeDir) newfile) then ( _DLGrflmessage _DLGMessageBox _channel winstr.EDW_win (loc "OS3D_0452") (loc "OS3D_0732") 2 @cbDlgReplaceResource [pfile newfile ctrlpath]; 0; ) else ( changeResourcePath pfile newfile ctrlpath; 0; ); setEdCtrlButtonEnable ctrlbtn 1; ); 0;; fun cbBtnPickFile(ctrlbtn, p)= let p -> [winstr ctrlpath] in let getEdCtrlTextLineValue ctrlpath -> path in let getPathFile path "" -> [fpath fname] in ( setEdCtrlButtonEnable ctrlbtn 1; _DLGrflopen _DLGOpenFile _channel winstr.EDW_win fpath fname "Bitmaps\0*.bmp;*.jpg;*.png;*.tga;\0Bitmap\0*.bmp\0Jpeg\0*.jpg\0Png\0*.png\0Targa\0*.tga\0All\0*.*\0\0" @cbDlgGetPath [ctrlbtn winstr ctrlpath]; ); 0;; fun cbRefreshBtn(pickbtn, p)= let p -> [winstr ctrlpath] in ( setEdCtrlTextLineValue ctrlpath ""; set ThemeEditorStr.TME_selected.TE_sPath = ""; loadPreview ThemeEditorStr.TME_selected; ); 0;; fun cbChangeStateBtnClick(ctrlstr)= set ThemeEditorStr.TME_iCurStates = mod (ThemeEditorStr.TME_iCurStates + 1) (ThemeEditorStr.TME_selected.TE_iNbStates + 1); let if (ThemeEditorStr.TME_iCurStates == 1) then (loc "OS3D_0719") else if (ThemeEditorStr.TME_iCurStates == 2) then (loc "OS3D_0720") else if (ThemeEditorStr.TME_iCurStates == 3) then (loc "OS3D_0721") else (loc "OS3D_0718") -> btntext in setEdCtrlButtonValue ctrlstr btntext; updatePreview ThemeEditorStr.TME_selected; 0;; fun cbChangeColBtnClick(ctrlstr)= set ThemeEditorStr.TME_iCurCol = mod (ThemeEditorStr.TME_iCurCol + 1) ThemeEditorStr.TME_selected.TE_iNbCols; setEdCtrlButtonValue ctrlstr strcatn (loc "OS3D_0722")::" "::(itoa (ThemeEditorStr.TME_iCurCol + 1))::nil; updatePreview ThemeEditorStr.TME_selected; 0;; /* ********************************************************************************************* / Tree callbacks and add/duplicate/destroy theme elements and definitions functions / ********************************************************************************************* */ fun cbAddElement(ctrlstr, p)= let p -> [ctrlnew] in let strtrim getEdCtrlTextLineValue ctrlnew -> name in let XMLgetMarkByParamValueFromMarkSons ThemeEditorStr.TME_xmlcustommark "name" name -> xmlmark in if ((name == nil) || ((strcmpi name "") == 0) || xmlmark != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0799") 0; 0; ) else if ((strfind "/" name 0) != nil || (strfind "\\" name 0) != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0798") 0; 0; ) else if (xmlmark != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0717") 0; 0; ) else ( let XMLaddMark ThemeEditorStr.TME_xmlfile "UIElements" ThemeEditorStr.TME_xmlcustommark ["name" name]::nil nil -> newxmlmark in let addEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree ThemeEditorCtrls.TWC_treecustomitem name name 3 (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> newitem in let mkThemeElement[newxmlmark newitem name "" "" 0xffffff00 0 0x000000 1 0 1 1 0 "Sans" 10 0 0 0 0x000000] -> testr in ( //XMLaddMark ThemeEditorStr.TME_xmlfile "UIResource" newxmlmark ["bgcolor" testr.TE_iBgColor]::["border" testr.TE_iBorder]::["borderColor" testr.TE_iBdColor]::["splited" testr.TE_iResizeFlag]::["keepRatio" 0]::["states" testr.TE_iNbStates]::["cols" testr.TE_iNbCols]::["frames" testr.TE_iNbFrames]::["animFPS" testr.TE_iNbFps]::nil nil; //XMLaddMark ThemeEditorStr.TME_xmlfile "UIFont" newxmlmark ["face" testr.TE_sFontName]::["size" testr.TE_iFontSize]::["bold" testr.TE_bFontBold]::["italic" testr.TE_bFontItalic]::["hollow" testr.TE_bFontHollow]::["color" testr.TE_iFontColor]::nil nil; XMLaddMark ThemeEditorStr.TME_xmlfile "UIResource" newxmlmark nil nil; XMLaddMark ThemeEditorStr.TME_xmlfile "UIFont" newxmlmark nil nil; set ThemeEditorStr.TME_lItems = lcat ThemeEditorStr.TME_lItems testr::nil; selEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree newitem; saveElementInXML testr; ); setEdCtrlTextLineValue ctrlnew ""; ); 0;; fun cbValidateElement(ctrlstr, value, p)= cbAddElement nil p; 0;; fun cbCancelDuplicateDlg(ctrlbtn, winstr)= dsEdWindow winstr; 0;; fun cbOkDuplicateDefinitionDlg(ctrlbtn, p)= let p -> [winstr ctrlname prefix defmarkstr] in let strtrim getEdCtrlTextLineValue ctrlname -> newname in let strcat prefix newname -> prefixedname in let XMLgetMarkByValue ThemeEditorStr.TME_xmlfile "UITheme" -> thmarkstr in let XMLgetMarkByParamValueFromMarkSons thmarkstr "name" prefixedname -> xmlmark in if ((newname == nil) || ((strcmpi newname "") == 0)) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0799") 0; 0; ) else if ((strfind "/" newname 0) != nil || (strfind "\\" newname 0) != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0798") 0; 0; ) else if (xmlmark != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0717") 0; 0; ) else ( let duplicateDefinition defmarkstr prefixedname -> [newitem newdefmarkstr] in selEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree newitem; dsEdWindow winstr; ); 0;; fun cbValidateDuplicateDefinitionDlg(ctrlstr, value, p)= cbOkDuplicateDefinitionDlg nil p; 0;; fun cbOkDuplicateElementDlg(ctrlbtn, p)= let p -> [winstr ctrlname] in let strtrim getEdCtrlTextLineValue ctrlname -> newname in let XMLgetMarkByParamValueFromMarkSons ThemeEditorStr.TME_xmlcustommark "name" newname -> xmlmark in if ((newname == nil) || ((strcmpi newname "") == 0)) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0799") 0; 0; ) else if ((strfind "/" newname 0) != nil || (strfind "\\" newname 0) != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0798") 0; 0; ) else if (xmlmark != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0717") 0; 0; ) else ( let duplicateElement ThemeEditorStr.TME_selected ThemeEditorCtrls.TWC_treecustomitem ThemeEditorStr.TME_xmlcustommark newname -> testr in let XMLgetMarkByValueFromMarkSons testr.TE_xmlmark "UIResource" -> rmarkstr in let XMLgetMarkByValueFromMarkSons testr.TE_xmlmark "UIFont" -> fmarkstr in ( // since its a custom mark, we make sure it has both resource and font if (rmarkstr != nil) then nil else XMLaddMark ThemeEditorStr.TME_xmlfile "UIResource" testr.TE_xmlmark ["bgcolor" (itoh testr.TE_iBgColor)]:: ["border" (itoa testr.TE_iBorder)]:: ["borderColor" (itoh testr.TE_iBdColor)]:: ["splited" (itoa testr.TE_iResizeFlag)]:: ["states" (itoa testr.TE_iNbStates)]:: ["cols" (itoa testr.TE_iNbCols)]:: ["frames" (itoa testr.TE_iNbFrames)]:: ["animFPS" (itoa testr.TE_iNbFps)]:: nil nil; if (fmarkstr != nil) then nil else XMLaddMark ThemeEditorStr.TME_xmlfile "UIFont" testr.TE_xmlmark ["face" testr.TE_sFontName]:: ["size" (itoa testr.TE_iFontSize)]:: ["bold" (itoa testr.TE_bFontBold)]:: ["italic" (itoa testr.TE_bFontItalic)]:: ["hollow" (itoa testr.TE_bFontHollow)]:: ["color" (itoh testr.TE_iFontColor)]:: nil nil; selEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree testr.TE_ctrlItem; ); dsEdWindow winstr; ); 0;; fun cbValidateDuplicateElementDlg(ctrlstr, value, p)= cbOkDuplicateElementDlg nil p; 0;; fun duplicateDefinitionDialog(ewinstr, nametocp)= let [350 100] -> [iw ih] in let _GETdesktopSize -> [sw sh] in let 40 -> hmargin in let getEdWindowExPosSize ewinstr -> [px py pw ph] in let [(px + ((pw - iw) / 2)) (py + ((ph - ih) / 2))] -> [x y] in let [(if (x + iw > sw) then sw - iw else x) (if (y + ih + hmargin > sh) then sh - hmargin - ih else y)] -> [x y] in let setEdWindowIcon (crEdModalDialogWindow _channel ewinstr x y iw ih WN_NOSCOL|WN_MENU nil (loc "OS3D_0743")) sWinDlgIcon -> winstr in let XMLgetMarkByValue ThemeEditorStr.TME_xmlfile "UITheme" -> thmarkstr in let XMLgetMarkByParamValueFromMarkSons thmarkstr "name" nametocp -> defmarkstr in let strfind "_" nametocp 0 -> pos in let if (pos == nil) then strcat nametocp "_" else substr nametocp 0 (pos + 1) -> prefix in let if (pos == nil) then "copy" else substr nametocp (pos + 1) nil -> name in let generateNewNumberedName name prefix thmarkstr -> name in let 10 -> ypos in let crEdCtrlLabel winstr 10 ypos (iw - 20) 20 (loc "OS3D_0744") nil -> labelname in let crEdCtrlLabelEx winstr 10 ((set ypos = ypos + 25) + 2) 100 20 prefix ET_ALIGN_RIGHT nil -> labelprefix in let crEdCtrlTextLine winstr 110 ypos (iw - 110 - 10) 20 name nil EDWIN_RESIZE_MW -> ctrlname in let crEdCtrlButton winstr (iw - 200) (ih - 30) 90 20 (loc "OS3D_0282") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> okbtn in let crEdCtrlButton winstr (iw - 100) (ih - 30) 90 20 (loc "OS3D_0084") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> cancelbtn in ( setEdCtrlTextLineCbValidate ctrlname mkfun3 @cbValidateDuplicateDefinitionDlg [winstr ctrlname prefix defmarkstr]; setEdCtrlButtonCb okbtn mkfun2 @cbOkDuplicateDefinitionDlg [winstr ctrlname prefix defmarkstr]; setEdCtrlButtonCb cancelbtn mkfun2 @cbCancelDuplicateDlg winstr; ); 0;; fun duplicateElementDialog(ewinstr, nametocp)= let [350 100] -> [iw ih] in let _GETdesktopSize -> [sw sh] in let 40 -> hmargin in let getEdWindowExPosSize ewinstr -> [px py pw ph] in let [(px + ((pw - iw) / 2)) (py + ((ph - ih) / 2))] -> [x y] in let [(if (x + iw > sw) then sw - iw else x) (if (y + ih + hmargin > sh) then sh - hmargin - ih else y)] -> [x y] in let setEdWindowIcon (crEdModalDialogWindow _channel ewinstr x y iw ih WN_NOSCOL|WN_MENU nil (loc "OS3D_0745")) sWinDlgIcon -> winstr in let generateNewNumberedName nametocp "" ThemeEditorStr.TME_xmlcustommark -> name in let 10 -> ypos in let crEdCtrlLabel winstr 10 ypos (iw - 20) 20 (loc "OS3D_0746") nil -> labelname in let crEdCtrlTextLine winstr 10 (set ypos = ypos + 25) (iw - 20) 20 name nil EDWIN_RESIZE_MW -> ctrlname in let crEdCtrlButton winstr (iw - 200) (ih - 30) 90 20 (loc "OS3D_0282") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> okbtn in let crEdCtrlButton winstr (iw - 100) (ih - 30) 90 20 (loc "OS3D_0084") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> cancelbtn in ( setEdCtrlTextLineCbValidate ctrlname mkfun3 @cbValidateDuplicateElementDlg [winstr ctrlname]; setEdCtrlButtonCb okbtn mkfun2 @cbOkDuplicateElementDlg [winstr ctrlname]; setEdCtrlButtonCb cancelbtn mkfun2 @cbCancelDuplicateDlg winstr; ); 0;; fun cbDuplicateElement(ctrlstr)= let getEdCtrlTreeSelectedItem ThemeEditorCtrls.TWC_ctrltree -> selecteditem in let getEdCtrlTreeValueByItem ThemeEditorCtrls.TWC_ctrltree selecteditem -> [name type] in if (type == 0 || type == 1) then // UIdefinition duplicateDefinitionDialog ThemeEditorCtrls.TWC_themewinstr name else if (type > 1) then // UIelement duplicateElementDialog ThemeEditorCtrls.TWC_themewinstr name else nil; 0;; fun cbDelElement(ctrlstr)= let getEdCtrlTreeSelectedItem ThemeEditorCtrls.TWC_ctrltree -> selecteditem in let getEdCtrlTreeValueByItem ThemeEditorCtrls.TWC_ctrltree selecteditem -> [name type] in if (type == 1) then ( let XMLgetMarkByValue ThemeEditorStr.TME_xmlfile "UITheme" -> thmarkstr in let XMLgetMarkByParamValueFromMarkSons thmarkstr "name" name -> defmarkstr in let ThemeEditorStr.TME_lItems -> litems in ( while (litems != nil) do ( let hd litems -> element in if (element.TE_xmlmark.XMLfather != defmarkstr) then nil else set ThemeEditorStr.TME_lItems = remove_from_list ThemeEditorStr.TME_lItems element; set litems = tl litems; ); delEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree selecteditem; XMLdelMark ThemeEditorStr.TME_xmlfile defmarkstr; ); 0; ) else if (type == 3) then ( let ThemeEditorStr.TME_selected -> selected in ( delEdCtrlTreeItem ThemeEditorCtrls.TWC_ctrltree selected.TE_ctrlItem; XMLdelMark ThemeEditorStr.TME_xmlfile selected.TE_xmlmark; set ThemeEditorStr.TME_lItems = remove_from_list ThemeEditorStr.TME_lItems selected; ); 0; ) else nil; 0;; fun cbTreeSelect(ctrltree, itemfather, selecteditem, value, type)= //addLogMessage "cbTreeSelect"; saveElementInXML ThemeEditorStr.TME_selected; set ThemeEditorStr.TME_selected = getSelectedStr ThemeEditorStr.TME_lItems ctrltree selecteditem; loadThemeElement ThemeEditorStr.TME_selected; let XMLgetMarkByValueFromMarkSons ThemeEditorStr.TME_selected.TE_xmlmark "UIResource" -> rmarkstr in let XMLgetMarkByValueFromMarkSons ThemeEditorStr.TME_selected.TE_xmlmark "UIFont" -> fmarkstr in ( enableResourceSettings (if (ThemeEditorStr.TME_selected == nil || rmarkstr == nil) then 0 else 1); enableFontSettings (if (ThemeEditorStr.TME_selected == nil || fmarkstr == nil) then 0 else 1); setEdCtrlButtonEnable ThemeEditorCtrls.TWC_ctrldupbtn (if (type >= 0) then 1 else 0); setEdCtrlButtonEnable ThemeEditorCtrls.TWC_ctrldelbtn (if (type == 1 || type == 3) then 1 else 0); ); 0;; fun cbTreeKeyDown(ctrltree, itemfather, item, value, type, key, scode)= //addLogMessage strcatnSep "From tree; key:"::(itoa key)::"scancode:"::(itoa scode)::nil " "; if (scode == 65535) then cbDelElement nil else nil; 0;; /* ********************************************************************************************* / Theme tree loading and related functions / ********************************************************************************************* */ fun loadThemeTreeElements(ctrltree, defitem, lres, iscustom)= if (lres == nil) then nil else ( let hd lres -> emarkstr in let XMLgetParam emarkstr "name" -> name in let XMLgetParam emarkstr "descLoc" -> descloc in let if (descloc == nil || (strcmpi descloc "") == 0) then XMLgetData emarkstr else descloc -> descloc in let XMLgetMarkByValueFromMarkSons emarkstr "UIResource" -> rmarkstr in let XMLgetMarkByValueFromMarkSons emarkstr "UIFont" -> fmarkstr in let if (iscustom) then 3 else 2 -> type in let addEdCtrlTreeItem ctrltree defitem name name type (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> eltitem in let mkThemeElement[emarkstr eltitem name descloc "" 0xffffff00 0 0x00000ff VUI_ResStreched 0 1 1 0 "" 10 0 0 0 0x00000] -> testr in ( if (rmarkstr == nil) then nil else let atoi XMLgetParam rmarkstr "border" -> border in let if (border == nil) then 0 else border -> border in let htoi XMLgetParam rmarkstr "borderColor" -> bdcolor in let if (bdcolor == nil) then 0x000000ff else bdcolor -> bdcolor in let XMLgetBoolParam rmarkstr "keepRatio" -> ratio in let XMLgetBoolParam rmarkstr "splited" -> split in let if (split) then VUI_ResSplited else VUI_ResStreched -> flags in let if (ratio) then flags | VUI_ResKeepRatio else flags -> flags in ( set testr.TE_sPath = XMLgetData rmarkstr; set testr.TE_iBgColor = htoi XMLgetParam rmarkstr "bgcolor"; set testr.TE_iBorder = border; set testr.TE_iBdColor = bdcolor; set testr.TE_iResizeFlag = flags; set testr.TE_iNbStates = atoi XMLgetParam rmarkstr "states"; set testr.TE_iNbCols = atoi XMLgetParam rmarkstr "cols"; set testr.TE_iNbFrames = atoi XMLgetParam rmarkstr "frames"; set testr.TE_iNbFps = atoi XMLgetParam rmarkstr "animFPS"; ); if (fmarkstr == nil) then nil else ( set testr.TE_sFontName = XMLgetParam fmarkstr "face"; set testr.TE_iFontSize = atoi XMLgetParam fmarkstr "size"; set testr.TE_bFontBold = XMLgetBoolParam fmarkstr "bold"; set testr.TE_bFontItalic = XMLgetBoolParam fmarkstr "italic"; set testr.TE_bFontHollow = XMLgetBoolParam fmarkstr "hollow"; set testr.TE_iFontColor = htoi XMLgetParam fmarkstr "color"; ); set ThemeEditorStr.TME_lItems = testr::ThemeEditorStr.TME_lItems; ); loadThemeTreeElements ctrltree defitem (tl lres) iscustom; ); 0;; fun loadThemeTreeDefinitions(ctrltree, rootitem, ldef, basethmarkstr)= if (ldef == nil) then nil else ( let hd ldef -> defmarkstr in let XMLgetParam defmarkstr "name" -> name in let if ((strcmpi name "custom") != 0) then 0 else 1 -> iscustom in let if ((strcmpi name "common") != 0) then 0 else 1 -> iscommon in let XMLgetMarkByParamValueFromMarkSons basethmarkstr "name" name -> basedefxmlmark in let if (iscustom || iscommon) then (-1) else if (basedefxmlmark != nil) then 0 else 1 -> type in let addEdCtrlTreeItem ctrltree rootitem name name type (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> defitem in let XMLgetMarksByValueFromMarkSons defmarkstr "UIElements" -> lelt in ( if (!iscustom) then nil else ( set ThemeEditorStr.TME_xmlcustommark = defmarkstr; set ThemeEditorCtrls.TWC_treecustomitem = defitem; ); loadThemeTreeElements ctrltree defitem lelt iscustom; ); loadThemeTreeDefinitions ctrltree rootitem (tl ldef) basethmarkstr; ); 0;; fun loadThemeTree(ctrltree, file)= resetEdCtrlTree ctrltree; if (ThemeEditorStr.TME_xmlfile == nil) then nil else ( XMLclose ThemeEditorStr.TME_xmlfile; set ThemeEditorStr.TME_xmlfilepath = nil; set ThemeEditorStr.TME_xmlfile = nil; ); let XMLload file -> xmlstr in if (xmlstr == nil) then nil else let XMLload VUI_defTheme -> xmlbasethemestr in ( checkForThemeStructureUpdate xmlstr xmlbasethemestr; set ThemeEditorStr.TME_xmlfilepath = file; set ThemeEditorStr.TME_xmlfile = xmlstr; let XMLgetMarkByValue xmlstr "UITheme" -> thmarkstr in let XMLgetParam thmarkstr "name" -> name in let addEdCtrlTreeItem ctrltree nil name name (-1) (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> rootitem in let XMLgetMarksByValueFromMarkSons thmarkstr "UIDefinition" -> ldef in let XMLgetMarkByValue xmlbasethemestr "UITheme" -> basethmarkstr in //let XMLgetMarksByValueFromMarkSons basethmarkstr "UIDefinition" -> lbadedef in ( set ThemeEditorStr.TME_sThemeDir = getFileDirectory file; set ThemeEditorCtrls.TWC_treerootitem = rootitem; loadThemeTreeDefinitions ctrltree rootitem ldef basethmarkstr; setEdCtrlTextLineEnable ThemeEditorCtrls.TWC_neweltnamectrl 1; setEdCtrlButtonEnable ThemeEditorCtrls.TWC_ctrladdbtn 1; XMLclose xmlbasethemestr; rootitem; ); );; /* ********************************************************************************************* / Toolbar buttons and callbacks / ********************************************************************************************* */ // New Theme fun cbNewThemeOk(ctrlbtn, p)= let p -> [winstr ctrlname defthemeradio ctrlthemelist] in let strtrim (getEdCtrlTextLineValue ctrlname) -> name in let strreplace name " " "_" -> nospacename in let strcatn VUI_USER_THEME_FOLDER::"/"::nospacename::nil -> path in let getEdCtrlRadioState defthemeradio -> usedeftheme in let getSelectedEdCtrlList ctrlthemelist -> [basename _ _] in if (name == nil || (strcmp name "") == 0) then ( _DLGMessageBox _channel winstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0728") 0; 0; ) else if ((strfind "/" name 0) != nil || (strfind "\\" name 0) != nil) then ( _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0798") 0; 0; ) else if ((strcmpi name "default") == 0 || isStringInListi (_listofsubdir VUI_USER_THEME_FOLDER) path) then ( _DLGMessageBox _channel winstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0717") 0; 0; ) else if (!usedeftheme && (basename == nil || (strcmp basename "") == 0)) then ( _DLGMessageBox _channel winstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0736") 0; 0; ) else ( let strcatn path::"/"::nospacename::".uith"::nil -> newthemepath in let strreplace basename " " "_" -> basename in let if (usedeftheme) then VUI_defTheme else strcatn VUI_USER_THEME_FOLDER::"/"::basename::"/"::basename::".uith"::nil -> basethemepath in ( createNewThemeFrom basethemepath newthemepath name; loadThemeTree ThemeEditorCtrls.TWC_ctrltree newthemepath; setEdCtrlTreeExpandAll ThemeEditorCtrls.TWC_ctrltree 1; ); dsEdWindow winstr; 0; ); 0;; fun cbValidateNewTheme(ctrlstr, value, p)= cbNewThemeOk nil p; 0;; fun cbNewThemeListDbClick(ctrlstr, pos, value, params, type, p)= cbNewThemeOk nil p; 0;; fun cbBaseThemeRadio(ctrlradio, state, p)= if (!state) then nil else let p -> [id ctrlradio2 ctrlthemelist] in ( setEdCtrlRadioState ctrlradio2 0; setEdCtrlListEnable ctrlthemelist id; ); 0;; fun newTheme()= let [450 205] -> [iw ih] in let _GETdesktopSize -> [sw sh] in let 40 -> hmargin in let getEdWindowExPosSize ThemeEditorCtrls.TWC_themewinstr -> [px py pw ph] in let [(px + ((pw - iw) / 2)) (py + ((ph - ih) / 2))] -> [x y] in let [(if (x + iw > sw) then sw - iw else x) (if (y + ih + hmargin > sh) then sh - hmargin - ih else y)] -> [x y] in let setEdWindowIcon (crEdModalDialogWindow _channel ThemeEditorCtrls.TWC_themewinstr x y iw ih WN_NOSCOL|WN_MENU nil (loc "OS3D_0688")) sWinDlgIcon -> winstr in let 10 -> ypos in let crEdCtrlLabel winstr 10 ypos 120 20 (loc "OS3D_0727") nil -> labelname in let crEdCtrlTextLine winstr 140 ypos (iw - 140 - 10) 20 "" nil EDWIN_RESIZE_MW -> ctrlname in let crEdCtrlRadio winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0734") EDWIN_RESIZE_MW -> defthemeradio in let crEdCtrlRadio winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0735") EDWIN_RESIZE_MW -> customthemeradio in let crEdCtrlList winstr 10 (set ypos = ypos + 25) (iw - 20) 80 LB_BORDER|LB_VSCROLL|ET_TABFOCUS EDWIN_RESIZE_MW|EDWIN_RESIZE_MH -> ctrlthemelist in let crEdCtrlButton winstr (iw / 2 - 45) (ih - 30) 90 20 (loc "OS3D_0282") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> okbtn in ( setEdCtrlTextLineCbValidate ctrlname mkfun3 @cbValidateNewTheme [winstr ctrlname defthemeradio ctrlthemelist]; setEdCtrlRadioCbState defthemeradio mkfun3 @cbBaseThemeRadio [0 customthemeradio ctrlthemelist]; setEdCtrlRadioCbState customthemeradio mkfun3 @cbBaseThemeRadio [1 defthemeradio ctrlthemelist]; setEdCtrlRadioState defthemeradio 1; setEdCtrlRadioState customthemeradio 0; let getThemeList -> lthemes in fillEdCtrlList ctrlthemelist lthemes; setEdCtrlListCbDbClick ctrlthemelist mkfun6 @cbNewThemeListDbClick [winstr ctrlname defthemeradio ctrlthemelist]; setEdCtrlListEnable ctrlthemelist 0; setEdCtrlButtonCb okbtn mkfun2 @cbNewThemeOk [winstr ctrlname defthemeradio ctrlthemelist]; ); 0;; fun cbSaveThemeBeforeNew(dlg, p, state)= if (state == 2) then nil else // Cancel if (state == 1) then // OK ( saveCurrentTheme @newTheme nil; ) else newTheme; 0;; fun cbTbBtnNewTheme(tbstr, check, btn, mask)= saveElementInXML ThemeEditorStr.TME_selected; if (isThemeModified) then ( _DLGrflmessage _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0452") (loc "OS3D_0737") 3 @cbSaveThemeBeforeNew nil; 0; ) else newTheme; 0;; // Open theme fun cbOpenThemeCreateTheme(ctrlbtn, winstr)= dsEdWindow winstr; cbTbBtnNewTheme nil nil nil nil; 0;; fun cbOpenThemeOk(ctrlbtn, p)= let p -> [winstr ctrlthemelist] in let getSelectedEdCtrlList ctrlthemelist -> [name _ _] in if (name == nil || (strcmp name "") == 0) then ( _DLGMessageBox _channel winstr.EDW_win (loc "OS3D_0519") (loc "OS3D_0731") 0; 0; ) else ( let strreplace name " " "_" -> name in let strcatn VUI_USER_THEME_FOLDER::"/"::name::"/"::name::".uith"::nil -> themepath in loadThemeTree ThemeEditorCtrls.TWC_ctrltree themepath; setEdCtrlTreeExpandAll ThemeEditorCtrls.TWC_ctrltree 1; dsEdWindow winstr; 0; ); 0;; fun cbOpenThemeListDbClick(ctrlstr, pos, value, params, type, p)= cbOpenThemeOk nil p; 0;; fun openTheme()= let [450 185] -> [iw ih] in let _GETdesktopSize -> [sw sh] in let 40 -> hmargin in let getEdWindowExPosSize ThemeEditorCtrls.TWC_themewinstr -> [px py pw ph] in let [(px + ((pw - iw) / 2)) (py + ((ph - ih) / 2))] -> [x y] in let [(if (x + iw > sw) then sw - iw else x) (if (y + ih + hmargin > sh) then sh - hmargin - ih else y)] -> [x y] in let setEdWindowIcon (crEdModalDialogWindow _channel ThemeEditorCtrls.TWC_themewinstr x y iw ih WN_NOSCOL|WN_MENU nil (loc "OS3D_0689")) sWinDlgIcon -> winstr in let 10 -> ypos in let crEdCtrlLabel winstr 10 ypos (iw - 20) 20 (loc "OS3D_0729") nil -> labeltheme in let crEdCtrlList winstr 10 (set ypos = ypos + 25) (iw - 20) 80 LB_BORDER|LB_VSCROLL|ET_TABFOCUS EDWIN_RESIZE_MW|EDWIN_RESIZE_MH -> ctrlthemelist in let crEdCtrlButton winstr 10 (set ypos = ypos + 85) (iw - 20) 20 (loc "OS3D_0730") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> newthemebtn in let crEdCtrlButton winstr (iw / 2 - 45) (ih - 30) 90 20 (loc "OS3D_0282") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> okbtn in ( let getThemeList -> lthemes in fillEdCtrlList ctrlthemelist lthemes; setEdCtrlListCbDbClick ctrlthemelist mkfun6 @cbOpenThemeListDbClick [winstr ctrlthemelist]; setEdCtrlButtonCb newthemebtn mkfun2 @cbOpenThemeCreateTheme winstr; setEdCtrlButtonCb okbtn mkfun2 @cbOpenThemeOk [winstr ctrlthemelist]; ); 0;; fun cbSaveThemeBeforeOpen(dlg, p, state)= if (state == 2) then nil else // Cancel ( if (state == 1) then // OK ( saveCurrentTheme @openTheme nil; ) else openTheme; ); 0;; fun cbTbBtnOpenTheme(tbstr, check, btn, mask)= saveElementInXML ThemeEditorStr.TME_selected; if (isThemeModified) then ( _DLGrflmessage _DLGMessageBox _channel ThemeEditorCtrls.TWC_themewinstr.EDW_win (loc "OS3D_0452") (loc "OS3D_0738") 3 @cbSaveThemeBeforeOpen nil; 0; ) else openTheme; 0;; // Save theme fun cbTbBtnSaveTheme(tbstr, check, btn, mask)= saveElementInXML ThemeEditorStr.TME_selected; saveCurrentTheme nil nil; 0;; // Help fun cbTbBtnThemeEditorHelp(tbstr, check, btn, mask)= _openbrowserhttp STHEME_EDITOR_HELP_URL; 0;; /* ********************************************************************************************* / Theme editor initialization / ********************************************************************************************* */ fun openThemeEditor()= if (ThemeEditorStr != nil) then nil else let 10 -> ypos in ( if (STHEME_STARTED) then nil else ( set STHEME_DEFAULT_RES_PATH = strcat sV3DDEFAULTRESOURCESPATH STHEME_DEFAULT_RES_PATH; set STHEME_STARTED = 1; ); let _GETdesktopSize -> [sw sh] in let _GETscreenPos -> [mx my] in let [mx + 10 my - 10] -> [mx my] in let 40 -> hmargin in let [1120 650] -> [iw ih] in let [(if ((mx + iw) > sw) then (sw - iw) else mx) (if ((my + hmargin) < ih) then hmargin else (my + hmargin - ih))] -> [x y] in let 250 -> treewidth in let 370 -> paramwidth in let iw - treewidth - paramwidth - 3 -> previewwidth in let previewwidth / 3 -> originalsize in let ih - 34 -> mwh in // window & toolbar let setEdWindowIcon (crEdWindow _channel mainInterf.MINT_winMain x y iw ih WN_MENU|WN_SIZEBOX|WN_MAXBOX|WN_HIDDEN nil nil (loc "OS3D_0684")) sWinDlgIcon -> themewinstr in let crEdWindowToolBar themewinstr 0 0 iw 34 5 4 EdDefaultTheme.EDT_iToolBarColor ETB_HORIZONTAL -> tbstr in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/btnopnew.png" -> apng in let crEdToolBarButton tbstr apng ETB_ALIGN_LEFT (loc "OS3D_0688") @cbTbBtnNewTheme -> tbnew in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/btnopopen.png" -> apng in let crEdToolBarButton tbstr apng ETB_ALIGN_LEFT (loc "OS3D_0689") @cbTbBtnOpenTheme -> tbopen in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/btnopsave.png" -> apng in let crEdToolBarButton tbstr apng ETB_ALIGN_LEFT (loc "OS3D_0690") @cbTbBtnSaveTheme -> tbsave in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/tb_help.png" -> apng in let crEdToolBarButton tbstr apng ETB_ALIGN_RIGHT (loc "OS3D_0186") @cbTbBtnThemeEditorHelp -> tbhelp in // theme tree let crEdWindow _channel themewinstr 0 34 treewidth mwh WN_CHILDINSIDE EDWIN_RESIZE_RW|EDWIN_RESIZE_MH nil nil -> treewinstr in let crEdCtrlTree treewinstr 10 (set ypos = 10) (treewidth - 20) (mwh - 10 - 80) EDWIN_RESIZE_MW|EDWIN_RESIZE_MH -> ctrltree in let crEdCtrlLabel treewinstr 10 ((set ypos = ypos + mwh - 10 - 80) + 7) (treewidth - 20) 20 (loc "OS3D_0733") EDWIN_RESIZE_LH|EDWIN_RESIZE_MW -> labelnewelt in let crEdCtrlTextLine treewinstr 10 (set ypos = ypos + 25) (treewidth - 20) 20 "" nil EDWIN_RESIZE_LH|EDWIN_RESIZE_MW -> ctrlnewelt in let crEdCtrlButton treewinstr 10 (set ypos = ypos + 25) 70 20 (loc "OS3D_0685") EDWIN_RESIZE_LH|EDWIN_RESIZE_RW -> addbtn in let crEdCtrlButton treewinstr 85 ypos 80 20 (loc "OS3D_0686") EDWIN_RESIZE_LH|EDWIN_RESIZE_MW -> dupbtn in let crEdCtrlButton treewinstr 170 ypos 70 20 (loc "OS3D_0687") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> delbtn in // element previews let [(originalsize + 20) (mwh - originalsize - 20 - 40)] -> [toph bottomh] in let [originalsize (previewwidth - originalsize)] -> [leftw rightw] in let crEdWindow _channel themewinstr (treewidth + 1) 34 previewwidth mwh WN_CHILDINSIDE EDWIN_RESIZE_MW|EDWIN_RESIZE_MH EDWIN_GROUP nil -> prewiewswinstr in let crEdWindow _channel prewiewswinstr 0 0 previewwidth toph WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW|EDWIN_RESIZE_MH|EDWIN_RESIZE_RH nil nil -> topwinstr in let crEdWindow _channel prewiewswinstr 0 0/*(toph + 1)*/ previewwidth bottomh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW|EDWIN_RESIZE_LH|EDWIN_RESIZE_MH nil nil -> bottomwinstr in let crEdFrameWindow _channel topwinstr 0 0 leftw toph EDWIN_RESIZE_MW|EDWIN_RESIZE_RW|EDWIN_RESIZE_MH nil (loc "OS3D_0723") nil -> normalwinfrm in let crEdWindow _channel normalwinfrm (-1) 18 originalsize + 1 originalsize + 1 WN_CHILDINSIDE EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> normalwinstr in let if normalwinstr.EDW_virtualWin == nil then normalwinstr.EDW_win else normalwinstr.EDW_virtualWin -> father in let _CRcontainerFromObjWin _channel father 5 5 (originalsize - 10) (originalsize - 10) CO_CHILDINSIDE|CO_NOBORDER 0xffffff /*0x0f0f0f0*/ "" -> normalcont in let crEdFrameWindow _channel topwinstr (leftw + 1) 0 rightw toph EDWIN_RESIZE_LW|EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil (loc "OS3D_0724") nil -> widewinfrm in let crEdWindow _channel widewinfrm 0 18 rightw originalsize + 1 WN_CHILDINSIDE EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> widewinstr in let if widewinstr.EDW_virtualWin == nil then widewinstr.EDW_win else widewinstr.EDW_virtualWin -> father in let _CRcontainerFromObjWin _channel father 5 5 (rightw - 10) (originalsize - 10) CO_CHILDINSIDE|CO_NOBORDER 0xffffff /*0x0f0f0f0*/ "" -> widecont in let crEdFrameWindow _channel bottomwinstr 0 0 leftw bottomh EDWIN_RESIZE_MW|EDWIN_RESIZE_RW|EDWIN_RESIZE_MH nil (loc "OS3D_0725") nil -> tallwinfrm in let crEdWindow _channel tallwinfrm (-1) 18 leftw + 1 (bottomh - 20) WN_CHILDINSIDE EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> tallwinstr in let if tallwinstr.EDW_virtualWin == nil then tallwinstr.EDW_win else tallwinstr.EDW_virtualWin -> father in let _CRcontainerFromObjWin _channel father 5 5 (leftw - 10) (bottomh - 20 - 10) CO_CHILDINSIDE|CO_NOBORDER 0xffffff /*0x0f0f0f0*/ "" -> tallcont in let crEdFrameWindow _channel bottomwinstr (leftw + 1) 0 rightw bottomh EDWIN_RESIZE_LW|EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil (loc "OS3D_0726") nil -> bigwinfrm in let crEdWindow _channel bigwinfrm 0 18 rightw (bottomh - 20) WN_CHILDINSIDE EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> bigwinstr in let if bigwinstr.EDW_virtualWin == nil then bigwinstr.EDW_win else bigwinstr.EDW_virtualWin -> father in let _CRcontainerFromObjWin _channel father 5 5 (rightw - 10) (bottomh - 20 - 10) CO_CHILDINSIDE|CO_NOBORDER 0xffffff /*0x0f0f0f0*/ "" -> bigcont in let crEdCtrlButton prewiewswinstr (previewwidth - 300)/*10*/ (mwh - 30) 140 20 (loc "OS3D_0718") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> changestatebtn in let crEdCtrlButton prewiewswinstr (previewwidth - 150)/*160*/ (mwh - 30) 140 20 (strcat (loc "OS3D_0722") " 1") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> changecolbtn in // element parameters let crEdWindow _channel themewinstr (iw - 1 - paramwidth) 34 paramwidth mwh WN_CHILDINSIDE EDWIN_RESIZE_LW|EDWIN_RESIZE_MH EDWIN_GROUP nil -> settingswinstr in let crEdFrameWindow _channel settingswinstr 0 0 paramwidth 95 EDWIN_RESIZE_MW|EDWIN_RESIZE_RW nil (loc "OS3D_0747") nil -> winfrm in let crEdWindow _channel winfrm 0 18 paramwidth 75 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> descwinstr in let crEdCtrlText descwinstr 10 (set ypos = 10) (paramwidth - 20) 60 "" ET_ALIGN_LEFT EDWIN_RESIZE_MW -> desctext in let crEdWindow _channel winfrm 0 18 paramwidth 75 WN_CHILDINSIDE|WN_NOBORDER|WN_HIDDEN EDWIN_RESIZE_MW nil nil -> desceditwinstr in let crEdCtrlEditText desceditwinstr 10 (set ypos = 10) (paramwidth - 20) 60 "" ET_AVSCROLL|ET_VSCROLL|ET_ALIGN_LEFT|ET_BORDER EDWIN_RESIZE_MW -> descedittext in let crEdFrameWindow _channel settingswinstr 0 0 paramwidth 260 EDWIN_RESIZE_MW|EDWIN_RESIZE_RW nil (loc "OS3D_0692") nil -> winfrm in let crEdWindow _channel winfrm 0 18 paramwidth 240 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) 160 20 (loc "OS3D_0693") nil -> labelpath in let crEdCtrlTextLine winstr 180 ypos (paramwidth - 180 - 70) 20 "" nil EDWIN_RESIZE_MW -> ctrlpath in let crEdCtrlButton winstr (paramwidth - 65) ypos 25 20 "..." EDWIN_RESIZE_LW -> pickfilebtn in let crEdCtrlButton winstr (paramwidth - 35) ypos 25 20 "X" EDWIN_RESIZE_LW -> refreshpath in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0694") nil -> labelbcolor in let crEdCtrlColorButton winstr 180 ypos 100 20 0xffffff00 1 nil nil -> ctrlbcolor in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0695") nil -> labelborder in let crEdCtrlFloat winstr 180 ypos 60 20 0.0 0.0 10000.0 1.0 0 nil nil -> ctrlborder in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0696") nil -> labelbdcolor in let crEdCtrlColorButton winstr 180 ypos 100 20 0x000000 1 nil nil -> ctrlbdcolor in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0697") nil -> labelresizeflag in let crEdCtrlSelect winstr 180 ypos (paramwidth - 180 - 10) 120 EDWIN_RESIZE_MW -> ctrlresizeflag in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0702") nil -> labelstates in let crEdCtrlSelect winstr 180 ypos (paramwidth - 180 - 10) 120 EDWIN_RESIZE_MW -> ctrlstates in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0707") nil -> labelnbcol in let crEdCtrlFloat winstr 180 ypos 60 20 1.0 1.0 10000.0 1.0 0 nil nil -> ctrlnbcol in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0708") nil -> labelnbframes in let crEdCtrlFloat winstr 180 ypos 60 20 1.0 1.0 10000.0 1.0 0 nil nil -> ctrlnbframes in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0709") nil -> labelnbfps in let crEdCtrlFloat winstr 180 ypos 60 20 0.0 0.0 60.0 1.0 0 nil nil -> ctrlnbfps in let crEdFrameWindow _channel settingswinstr 0 0 paramwidth 165 EDWIN_RESIZE_LW|EDWIN_RESIZE_MW nil (loc "OS3D_0710") nil -> winfrm in let crEdWindow _channel winfrm 0 18 paramwidth 145 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) 160 20 (loc "OS3D_0711") nil -> labelfname in let crEdCtrlTextLine winstr 180 ypos (paramwidth - 180 - 10) 20 "Sans" nil EDWIN_RESIZE_MW -> ctrlfname in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0712") nil -> labelfsize in let crEdCtrlFloat winstr 180 ypos 60 20 10.0 1.0 1024.0 1.0 0 nil nil -> ctrlfsize in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0713") EDWIN_RESIZE_MW -> ctrlbold in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0714") EDWIN_RESIZE_MW -> ctrlitalic in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0716") nil -> labelfcolor in let crEdCtrlColorButton winstr 180 ypos 100 20 0x000000 0 nil nil -> ctrlfcolor in let mkThemeEditor[nil nil nil nil nil nil nil nil 0 0 nil nil nil nil 0 0 0 nil nil 1] -> tmestr in let mkThemeWinCtrls[themewinstr ctrltree nil nil ctrlnewelt addbtn dupbtn delbtn prewiewswinstr normalcont widecont tallcont bigcont nil nil nil nil changestatebtn changecolbtn descwinstr desctext desceditwinstr descedittext labelpath ctrlpath pickfilebtn refreshpath labelbcolor ctrlbcolor labelborder ctrlborder labelbdcolor ctrlbdcolor labelresizeflag ctrlresizeflag labelstates ctrlstates labelnbcol ctrlnbcol labelnbframes ctrlnbframes labelnbfps ctrlnbfps labelfname ctrlfname labelfsize ctrlfsize ctrlbold ctrlitalic nil labelfcolor ctrlfcolor] -> twcstr in ( set ThemeEditorStr = tmestr; set ThemeEditorCtrls = twcstr; setEdWindowMinimumSize themewinstr 900 600; // Tree section setEdCtrlTreeCbSelect ctrltree @cbTreeSelect; setEdCtrlTreeCbKeyDown ctrltree @cbTreeKeyDown; setEdCtrlTreeExpandAll ctrltree 1; setEdCtrlTextLineCbValidate ctrlnewelt mkfun3 @cbValidateElement [ctrlnewelt]; setEdCtrlButtonCb addbtn mkfun2 @cbAddElement [ctrlnewelt]; setEdCtrlButtonCb dupbtn @cbDuplicateElement; setEdCtrlButtonCb delbtn @cbDelElement; setEdCtrlTextLineEnable ctrlnewelt 0; setEdCtrlButtonEnable addbtn 0; setEdCtrlButtonEnable dupbtn 0; setEdCtrlButtonEnable delbtn 0; // Preview section setEdwindowCbSize prewiewswinstr mkfun4 @cbPreviewWinSize [topwinstr bottomwinstr normalwinfrm widewinfrm tallwinfrm bigwinfrm]; _PAINTcontainer normalcont; _PAINTcontainer widecont; _PAINTcontainer tallcont; _PAINTcontainer bigcont; setEdCtrlButtonCb changestatebtn @cbChangeStateBtnClick; setEdCtrlButtonCb changecolbtn @cbChangeColBtnClick; setEdCtrlButtonEnable changestatebtn 0; setEdCtrlButtonEnable changecolbtn 0; // Settings section setEdCtrlTextLineEnable ctrlpath 0; setEdCtrlButtonCb pickfilebtn mkfun2 @cbBtnPickFile [settingswinstr ctrlpath]; setEdCtrlButtonCb refreshpath mkfun2 @cbRefreshBtn [settingswinstr ctrlpath]; fillEdCtrlSelect ctrlresizeflag (loc "OS3D_0698")::(loc "OS3D_0699")/*::(loc "OS3D_0700")::(loc "OS3D_0701")*/::nil; fillEdCtrlSelect ctrlstates (loc "OS3D_0703")::(loc "OS3D_0704")::(loc "OS3D_0705")::(loc "OS3D_0706")::nil; setEdCtrlColorButtonCb ctrlbcolor @cbBackgroundColorChange; setEdCtrlFloatCbChange ctrlborder @cbBorderChange; setEdCtrlColorButtonCb ctrlbdcolor @cbBorderColorChange; setEdCtrlSelectCb ctrlresizeflag @cbResizeFlagChange; setEdCtrlSelectCb ctrlstates @cbStatesChange; setEdCtrlFloatCbChange ctrlnbcol @cbNbColumnChange; setEdCtrlFloatCbChange ctrlnbframes @cbNbFramesChange; setEdCtrlFloatCbChange ctrlnbfps @cbNbFpsChange; setEdCtrlTextLineCbChange ctrlfname @cbFontNameChange; setEdCtrlFloatCbChange ctrlfsize @cbFontSizeChange; setEdCtrlCheckCbState ctrlbold @cbFontBoldChange; setEdCtrlCheckCbState ctrlitalic @cbFontItalicChange; setEdCtrlColorButtonCb ctrlfcolor @cbFontColorChange; enableResourceSettings 0; enableFontSettings 0; //load background bitmap set tmestr.TME_bgBmp = _LDalphaBitmap _channel _checkpack (strcat APPBASEDIR "os3deditor/res/bg_checkboard.png"); // Main window paintEdToolBar tbstr; setEdwindowCbDestroy themewinstr @cbThemeEditorDestroy; setEdwindowCbClose themewinstr @cbThemeEditorClose; setEdWindowVisible themewinstr 1; // Prompt to open a theme //cbTbBtnOpenTheme nil nil nil nil; // Open current project theme let getProjectSetting "themeName" -> themename in if (themename == nil || (strcmpi themename "default") == 0) then nil else ( loadThemeTree ctrltree (VUIgetThemePath themename); setEdCtrlTreeExpandAll ThemeEditorCtrls.TWC_ctrltree 1; ); ); ); 0;;