/* ----------------------------------------------------------------------------- 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 ConfigWinCtrls = [ // Canvas CWC_marginWinstr : EdWindow, CWC_canvas : ObjContainer, CWC_tlresize : ObjNode, CWC_trresize : ObjNode, CWC_blresize : ObjNode, CWC_brresize : ObjNode, // Tree CWC_ctrltree : EdControl, CWC_treerootitem : EdTreeItem, CWC_ctrldupbtn : EdControl, CWC_ctrldelbtn : EdControl, // Position / Anchor CWC_menuWinstr : EdWindow, CWC_settingsWinstr : EdWindow, CWC_ctrlname : EdControl, CWC_ctrltype : EdControl, CWC_ctrlshow : EdControl, CWC_compcont : ObjContainer, CWC_leftanchor : CompBitmap, CWC_widthanchor : CompBitmap, CWC_rightanchor : CompBitmap, CWC_topanchor : CompBitmap, CWC_heightanchor : CompBitmap, CWC_bottomanchor : CompBitmap, CWC_labelxpos : EdControl, CWC_ctrlxpos : EdControl, CWC_labelwidth : EdControl, CWC_ctrlwidth : EdControl, CWC_labelypos : EdControl, CWC_ctrlypos : EdControl, CWC_labelheight : EdControl, CWC_ctrlheight : EdControl, // Frame settings CWC_frameSettings : EdWindow, CWC_frsParamwinstr : EdWindow, CWC_frsUsethemectrl : EdControl, CWC_frsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_frsScrollctrl : EdControl, // Text settings CWC_textSettings : EdWindow, CWC_tsLookswinstr : EdWindow, CWC_tsParamwinstr : EdWindow, CWC_tsUsethemectrl : EdControl, CWC_tsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_tsTextctrl : EdControl, CWC_tsFontnamectrl : EdControl, CWC_tsFontsizectrl : EdControl, CWC_tsFontcolorctrl : EdControl, CWC_tsFontflagsctrl : EdControl, CWC_tsHalignctrl : EdControl, CWC_tsValignctrl : EdControl, CWC_tsMultilinectrl : EdControl, // Text input settings CWC_textInputSettings : EdWindow, CWC_tisTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_tisMultilinectrl : EdControl, CWC_tisPasswordctrl : EdControl, CWC_tisTextctrl : EdControl, // Button settings CWC_buttonSettings : EdWindow, CWC_btnsLookswinstr : EdWindow, CWC_btnsParamwinstr : EdWindow, CWC_btnsUsethemectrl : EdControl, CWC_btnsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_btnsTextctrl : EdControl, CWC_btnsFontnamectrl : EdControl, CWC_btnsFontsizectrl : EdControl, CWC_btnsFontcolorctrl : EdControl, CWC_btnsFontflagsctrl : EdControl, CWC_btnsPresetctrl : EdControl, CWC_btnsPathctrl : EdControl, CWC_btnsStatesctrl : EdControl, CWC_btnsResizeflagctrl : EdControl, CWC_btnsNbframesctrl : EdControl, CWC_btnsNbfpsctrl : EdControl, // Number settings CWC_numberSettings : EdWindow, CWC_nbsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_nbsValuectrl : EdControl, CWC_nbsMinctrl : EdControl, CWC_nbsMaxctrl : EdControl, CWC_nbsIntervalctrl : EdControl, CWC_nbsNbdecctrl : EdControl, // Select settings CWC_selectSettings : EdWindow, CWC_ssTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_ssValuesctrl : EdControl, CWC_ssDefaultvaluectrl : EdControl, // Checkbox settings CWC_checkboxSettings : EdWindow, CWC_cbsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_cbsTextctrl : EdControl, CWC_cbsDefaultstatectrl : EdControl, // Picture settings CWC_pictureSettings : EdWindow, CWC_psPathctrl : EdControl, CWC_psResizeflagctrl : EdControl, CWC_psNbframesctrl : EdControl, CWC_psNbfpsctrl : EdControl, // Slider settings CWC_sliderSettings : EdWindow, CWC_slsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_slsValuectrl : EdControl, CWC_slsMinctrl : EdControl, CWC_slsMaxctrl : EdControl, CWC_slsIntervalctrl : EdControl, CWC_slsNbdecctrl : EdControl, CWC_slsDirectionctrl : EdControl, CWC_slsCursorwidthctrl : EdControl, CWC_slsTextposctrl : EdControl, CWC_slsIgnoreclickctrl : EdControl, // Table settings CWC_tableSettings : EdWindow, CWC_tbsLookswinstr : EdWindow, CWC_tbsParamwinstr : EdWindow, CWC_tbsUsethemectrl : EdControl, CWC_tbsTheltselector : [[[EdControl EdControl S [S r1]] r1]], CWC_tbsNbrowctrl : EdControl, CWC_tbsNbcolctrl : EdControl, CWC_tbsXmarginctrl : EdControl, CWC_tbsYmarginctrl : EdControl, CWC_tbsCellcolorctrl : EdControl, CWC_tbsBorderctrl : EdControl, CWC_tbsBordercolorctrl : EdControl, CWC_tbsFontnamectrl : EdControl, CWC_tbsFontsizectrl : EdControl, CWC_tbsFontcolorctrl : EdControl, CWC_tbsHalignctrl : EdControl, CWC_tbsValignctrl : EdControl, // Anchor bmp CWC_squarebmp : AlphaBitmap, CWC_hLinebmp : AlphaBitmap, CWC_hArrowbmp : AlphaBitmap, CWC_vLinebmp : AlphaBitmap, CWC_vArrowbmp : AlphaBitmap ]mkConfigWinCtrls;; struct InterfaceUnit = [ IU_compBmp : CompBitmap, IU_bmpRealCoords : [I I I I], // Coords of the bitmap regardless to its parent's limitation IU_bmpDisplayedRect : [I I I I], // Rectangle of the real coords bmp that is displayed IU_abmp : AlphaBitmap, IU_iBmpColor : I, IU_ctrlItem : EdTreeItem, IU_tMoveRefPoint : [I I], IU_bVisible : I, IU_parentstr : InterfaceUnit, IU_sName : S, IU_iDepth : I, //Common parameters IU_iType : I, IU_tPosSize : [F F F F F F], IU_tAnchors : [I I I I I I], IU_bShowOnStart : I, //Theme parameters IU_bUseTheme : I, IU_lThemeValues : [S r1], //Frame parameters IU_iScrollMode : I, //Text parameters IU_sText : S, IU_sFontName : S, IU_iFontSize : I, IU_iFontColor : I, IU_iFontFlags : I, IU_iHAlign : I, IU_iVAlign : I, IU_bMultiline : I, IU_bPassword : I, //Button parameters IU_iPreset : I, IU_iStates : I, //Number parameters IU_fValue : F, IU_fMin : F, IU_fMax : F, IU_fInterval : F, IU_iNbDec : I, //Select parameters IU_lSelectValues : [S r1], IU_iSelectDefPos : I, //Checkbox parameters IU_bCheckInit : I, //Picture parameters IU_sPath : S, IU_iResizeFlag : I, IU_iNbFrames : I, IU_iNbFps : I, //Slider parameters IU_iDirection : I, IU_iCursorSize : I, IU_iTextPos : I, IU_bIgnoreClick : I, //Table parameters IU_iNbRow : I, IU_iNbCol : I, IU_iMarginX : I, IU_iMarginY : I, IU_iCellColor : I, IU_iBorder : I, IU_iBorderColor : I, IU_lData : [[S r1] r1], IU_lColWidths : [S r1], IU_lChildren : [InterfaceUnit r1] ]mkInterfaceUnit;; struct EditCInterface = [ ECI_inst : PInstance, ECI_posstr : InterfacePos, ECI_ctrls : ConfigWinCtrls, ECI_lItems : [InterfaceUnit r1], ECI_lItemsToSave : [InterfaceUnit r1], ECI_selected : InterfaceUnit, ECI_bMove : I ]mkEditCInterface;; var CIEW_MenuWidth = 350;; var CIEW_MenuHeight = 455;; var CIEW_EditAreaXMargin = 50;; var CIEW_EditAreaYMargin = 20;; proto cbPosSizeChange = fun [EdControl F EditCInterface] I;; proto cbIUbmpClick = fun [CompBitmap [EditCInterface InterfaceUnit] I I I I] I;; proto cbIUbmpResizeResource = fun [CompBitmap [EditCInterface InterfaceUnit] I I [I I I I]] [AlphaBitmap [I I I I]];; proto isNameAvailable = fun [[InterfaceUnit r1] S] I;; /* ********************************************************************************************* / Window Destroy/Close and save functions / ********************************************************************************************* */ fun cbDestroyEdit(p)= let p -> [inst edstr] in ( setPluginInstanceEditorCbPreRender inst nil; ); 0;; fun getItemEvents(item, advanced)= let if (item.IU_iType == 0) then // Frame nil else if (item.IU_iType == 1) then // Text ["ACTION" (strcatn "Set "::item.IU_sName::" text"::nil)]:: nil else if (item.IU_iType == 2) then // Text Input ["EVENT" (strcat item.IU_sName " content")]:: ["EVENT" (strcat item.IU_sName " validated")]:: ["ACTION" (strcatn "Set "::item.IU_sName::" content"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" content"::nil)]:: ["ACTION" (strcat "Enable " item.IU_sName)]:: ["ACTION" (strcat "Disable " item.IU_sName)]:: nil else if (item.IU_iType == 3) then // Button ["EVENT" (strcat item.IU_sName " clicked")]:: ["ACTION" (strcatn "Set "::item.IU_sName::" text"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" picture path"::nil)]:: ["ACTION" (strcat "Enable " item.IU_sName)]:: ["ACTION" (strcat "Disable " item.IU_sName)]:: nil else if (item.IU_iType == 4) then // Number ["EVENT" (strcat item.IU_sName " value")]:: ["EVENT" (strcat item.IU_sName " modified")]:: ["ACTION" (strcatn "Set "::item.IU_sName::" value"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" value"::nil)]:: nil else if (item.IU_iType == 5) then // Select ["EVENT" (strcat item.IU_sName " value")]:: ["EVENT" (strcat item.IU_sName " position")]:: ["EVENT" (strcat item.IU_sName " selected")]:: ["ACTION" (strcatn "Get "::item.IU_sName::" value"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" position"::nil)]:: nil else if (item.IU_iType == 6) then // Checkbox ["EVENT" (strcat item.IU_sName " checked")]:: ["EVENT" (strcat item.IU_sName " unchecked")]:: ["EVENT" (strcat item.IU_sName " state")]:: ["ACTION" (strcatn "Set "::item.IU_sName::" text"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" state"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" state"::nil)]:: nil else if (item.IU_iType == 7) then // Picture ["ACTION" (strcatn "Set "::item.IU_sName::" path"::nil)]:: nil else if (item.IU_iType == 8) then // Slider ["EVENT" (strcat item.IU_sName " value")]:: ["EVENT" (strcat item.IU_sName " modified")]:: ["ACTION" (strcatn "Set "::item.IU_sName::" min value"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" max value"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" value"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" value"::nil)]:: nil else if (item.IU_iType == 9) then // Table ["EVENT" (strcat item.IU_sName " cell content")]:: ["EVENT" (strcat item.IU_sName " table")]:: ["EVENT" (strcat item.IU_sName " modified")]:: ["ACTION" (strcatn "Set "::item.IU_sName::" cell content"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" cell content"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" next row"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" row"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" next column"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" column"::nil)]:: ["ACTION" (strcatn "Set "::item.IU_sName::" table"::nil)]:: ["ACTION" (strcatn "Get "::item.IU_sName::" table"::nil)]:: nil else nil -> levents in let ["ACTION" (strcat "Show " item.IU_sName)]:: ["ACTION" (strcat "Hide " item.IU_sName)]:: levents -> levents in let if (!advanced) then levents else ["ACTION" (strcatn "Set "::item.IU_sName::" coordinates"::nil)]:: ["EVENT" (strcat item.IU_sName " click down")]:: ["EVENT" (strcat item.IU_sName " click up")]:: ["EVENT" (strcat item.IU_sName " mouse in")]:: ["EVENT" (strcat item.IU_sName " mouse out")]:: levents -> levents in let ["GROUP" item.IU_sName]::(lcat levents ["GROUP" ""]::nil) -> levents in levents;; fun getInterfaceSave(litems, suffix, advanced)= let nil -> save in if litems == nil then nil else ( let if suffix == nil then "" else suffix -> suffix in let sizelist litems -> size in let 0 -> i in while (litems != nil) do ( let hd litems -> item in let (strcatn suffix::"_"::(itoa i)::nil) -> newsuffix in let getItemEvents item advanced -> levents in let getInterfaceSave item.IU_lChildren newsuffix advanced -> childrensave in let getThemeEltSelectorSaveFromValues item.IU_lThemeValues newsuffix -> themesave in ( if childrensave == nil then nil else set save = lcat childrensave save; if levents == nil then nil else set save = lcat levents save; if themesave == nil then nil else set save = lcat themesave save; let item.IU_tPosSize -> [xpos width xpos2 ypos height ypos2] in let item.IU_tAnchors -> [l w r t h b] in set save = [(strcat "item" newsuffix) item.IU_sName]:: [strcat "type" newsuffix (itoa item.IU_iType)]:: [strcat "xpos" newsuffix (ftoa xpos)]:: [strcat "width" newsuffix (ftoa width)]:: [strcat "xpos2" newsuffix (ftoa xpos2)]:: [strcat "ypos" newsuffix (ftoa ypos)]:: [strcat "height" newsuffix (ftoa height)]:: [strcat "ypos2" newsuffix (ftoa ypos2)]:: [strcat "anchorleft" newsuffix (itoa l)]:: [strcat "anchorwidth" newsuffix (itoa w)]:: [strcat "anchorright" newsuffix (itoa r)]:: [strcat "anchortop" newsuffix (itoa t)]:: [strcat "anchorheight" newsuffix (itoa h)]:: [strcat "anchorbottom" newsuffix (itoa b)]:: [strcat "showonstart" newsuffix (itoa item.IU_bShowOnStart)]:: [strcat "usetheme" newsuffix (itoa item.IU_bUseTheme)]:: [strcat "scroll" newsuffix (itoa item.IU_iScrollMode)]:: [strcat "text" newsuffix item.IU_sText]:: [strcat "fontname" newsuffix item.IU_sFontName]:: [strcat "fontsize" newsuffix (itoa item.IU_iFontSize)]:: [strcat "fontcolor" newsuffix (itoa item.IU_iFontColor)]:: [strcat "fontflags" newsuffix (itoa item.IU_iFontFlags)]:: [strcat "halign" newsuffix (itoa item.IU_iHAlign)]:: [strcat "valign" newsuffix (itoa item.IU_iVAlign)]:: [strcat "multiline" newsuffix (itoa item.IU_bMultiline)]:: [strcat "password" newsuffix (itoa item.IU_bPassword)]:: [strcat "preset" newsuffix (itoa item.IU_iPreset)]:: [strcat "states" newsuffix (itoa item.IU_iStates)]:: [strcat "value" newsuffix (ftoa item.IU_fValue)]:: [strcat "minval" newsuffix (ftoa item.IU_fMin)]:: [strcat "maxval" newsuffix (ftoa item.IU_fMax)]:: [strcat "interval" newsuffix (ftoa item.IU_fInterval)]:: [strcat "nbdec" newsuffix (itoa item.IU_iNbDec)]:: [strcat "selectvalues" newsuffix (strcatnSep item.IU_lSelectValues ";;")]:: [strcat "defpos" newsuffix (itoa item.IU_iSelectDefPos)]:: [strcat "checkinit" newsuffix (itoa item.IU_bCheckInit)]:: [strcat "path" newsuffix item.IU_sPath]:: [strcat "resizeflag" newsuffix (itoa item.IU_iResizeFlag)]:: [strcat "nbframes" newsuffix (itoa item.IU_iNbFrames)]:: [strcat "nbfps" newsuffix (itoa item.IU_iNbFps)]:: [strcat "direction" newsuffix (itoa item.IU_iDirection)]:: [strcat "cursorwidth" newsuffix (itoa item.IU_iCursorSize)]:: [strcat "textpos" newsuffix (itoa item.IU_iTextPos)]:: [strcat "ignoreclick" newsuffix (itoa item.IU_bIgnoreClick)]:: [strcat "nbrow" newsuffix (itoa item.IU_iNbRow)]:: [strcat "nbcol" newsuffix (itoa item.IU_iNbCol)]:: [strcat "xmargin" newsuffix (itoa item.IU_iMarginX)]:: [strcat "ymargin" newsuffix (itoa item.IU_iMarginY)]:: [strcat "cellcolor" newsuffix (itoa item.IU_iCellColor)]:: [strcat "border" newsuffix (itoa item.IU_iBorder)]:: [strcat "bordercolor" newsuffix (itoa item.IU_iBorderColor)]:: [strcat "data" newsuffix (formatCSV nil nil item.IU_lData)]:: [strcat "colwidths" newsuffix (strcatnSep item.IU_lColWidths ";")]:: save; ); set litems = tl litems; set i = i + 1; ); save; );; fun destroyInterfaceUnitResources(todelete)= _DScompBitmap todelete.IU_compBmp; _DSalphaBitmap todelete.IU_abmp; 0;; fun destroyAllInterfaceUnitResources(ltodel)= while (ltodel != nil) do ( let hd ltodel -> iustr in ( destroyInterfaceUnitResources iustr; destroyAllInterfaceUnitResources iustr.IU_lChildren; ); set ltodel = tl ltodel; ); 0;; fun duplicateInterfaceUnit(iu, item, parentstr, name)= let if (name == nil) then iu.IU_sName else name -> name in let if (parentstr == nil) then iu.IU_parentstr else parentstr -> parentstr in let iu.IU_tPosSize -> [xpos width xpos2 ypos height ypos2] in let iu.IU_tAnchors -> [l w r t h b] in mkInterfaceUnit[nil nil nil nil iu.IU_iBmpColor item nil 1 parentstr name iu.IU_iDepth iu.IU_iType [xpos width xpos2 ypos height ypos2] [l w r t h b] iu.IU_bShowOnStart iu.IU_bUseTheme iu.IU_lThemeValues iu.IU_iScrollMode iu.IU_sText iu.IU_sFontName iu.IU_iFontSize iu.IU_iFontColor iu.IU_iFontFlags iu.IU_iHAlign iu.IU_iVAlign iu.IU_bMultiline iu.IU_bPassword iu.IU_iPreset iu.IU_iStates iu.IU_fValue iu.IU_fMin iu.IU_fMax iu.IU_fInterval iu.IU_iNbDec iu.IU_lSelectValues iu.IU_iSelectDefPos iu.IU_bCheckInit iu.IU_sPath iu.IU_iResizeFlag iu.IU_iNbFrames iu.IU_iNbFps iu.IU_iDirection iu.IU_iCursorSize iu.IU_iTextPos iu.IU_bIgnoreClick iu.IU_iNbRow iu.IU_iNbCol iu.IU_iMarginX iu.IU_iMarginY iu.IU_iCellColor iu.IU_iBorder iu.IU_iBorderColor iu.IU_lData iu.IU_lColWidths nil];; fun saveInterfaceUnit(edstr, tosave, ctrls) = let strtrim getEdCtrlTextLineValue ctrls.CWC_ctrlname -> name in if (name == nil) || ((strcmpi name "") == 0) || !(isNameAvailable edstr.ECI_lItems name) then nil else ( setEdCtrlTreeLabel ctrls.CWC_ctrltree tosave.IU_ctrlItem name; set tosave.IU_sName = name; ); set tosave.IU_iType = getSelectedEdCtrlSelectPos ctrls.CWC_ctrltype; set tosave.IU_bShowOnStart = getEdCtrlCheckState ctrls.CWC_ctrlshow; if (tosave.IU_iType == 0) then // Frame ( set tosave.IU_bUseTheme = getEdCtrlCheckState ctrls.CWC_frsUsethemectrl; set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_frsTheltselector; set tosave.IU_iScrollMode = getSelectedEdCtrlSelectPos ctrls.CWC_frsScrollctrl; 0; ) else if (tosave.IU_iType == 1) then // Text ( set tosave.IU_bUseTheme = getEdCtrlCheckState ctrls.CWC_tsUsethemectrl; set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_tsTheltselector; set tosave.IU_sText = getEdCtrlEditTextValue ctrls.CWC_tsTextctrl; set tosave.IU_sFontName = getEdCtrlTextLineValue ctrls.CWC_tsFontnamectrl; set tosave.IU_iFontSize = ftoi getEdCtrlFloatValue ctrls.CWC_tsFontsizectrl; set tosave.IU_iFontColor = getEdCtrlColorButtonColor ctrls.CWC_tsFontcolorctrl; set tosave.IU_iFontFlags = getEdCtrlCheckState ctrls.CWC_tsFontflagsctrl; set tosave.IU_iHAlign = getSelectedEdCtrlSelectPos ctrls.CWC_tsHalignctrl; set tosave.IU_iVAlign = getSelectedEdCtrlSelectPos ctrls.CWC_tsValignctrl; set tosave.IU_bMultiline = getEdCtrlCheckState ctrls.CWC_tsMultilinectrl; 0; ) else if (tosave.IU_iType == 2) then // Text Input ( set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_tisTheltselector; set tosave.IU_sText = getEdCtrlEditTextValue ctrls.CWC_tisTextctrl; set tosave.IU_bMultiline = getEdCtrlCheckState ctrls.CWC_tisMultilinectrl; set tosave.IU_bPassword = getEdCtrlCheckState ctrls.CWC_tisPasswordctrl; 0; ) else if (tosave.IU_iType == 3) then // Button ( set tosave.IU_bUseTheme = getEdCtrlCheckState ctrls.CWC_btnsUsethemectrl; set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_btnsTheltselector; set tosave.IU_sText = getEdCtrlTextLineValue ctrls.CWC_btnsTextctrl; set tosave.IU_sFontName = getEdCtrlTextLineValue ctrls.CWC_btnsFontnamectrl; set tosave.IU_iFontSize = ftoi getEdCtrlFloatValue ctrls.CWC_btnsFontsizectrl; set tosave.IU_iFontColor = getEdCtrlColorButtonColor ctrls.CWC_btnsFontcolorctrl; set tosave.IU_iFontFlags = getEdCtrlCheckState ctrls.CWC_btnsFontflagsctrl; set tosave.IU_iPreset = getSelectedEdCtrlSelectPos ctrls.CWC_btnsPresetctrl; set tosave.IU_sPath = getEdCtrlTextLineValue ctrls.CWC_btnsPathctrl; set tosave.IU_iStates = getSelectedEdCtrlSelectPos ctrls.CWC_btnsStatesctrl; set tosave.IU_iResizeFlag = getSelectedEdCtrlSelectPos ctrls.CWC_btnsResizeflagctrl; set tosave.IU_iNbFrames = ftoi getEdCtrlFloatValue ctrls.CWC_btnsNbframesctrl; set tosave.IU_iNbFps = ftoi getEdCtrlFloatValue ctrls.CWC_btnsNbfpsctrl; 0; ) else if (tosave.IU_iType == 4) then // Number ( set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_nbsTheltselector; set tosave.IU_fValue = getEdCtrlFloatValue ctrls.CWC_nbsValuectrl; set tosave.IU_fMin = getEdCtrlFloatValue ctrls.CWC_nbsMinctrl; set tosave.IU_fMax = getEdCtrlFloatValue ctrls.CWC_nbsMaxctrl; set tosave.IU_fInterval = getEdCtrlFloatValue ctrls.CWC_nbsIntervalctrl; set tosave.IU_iNbDec = ftoi getEdCtrlFloatValue ctrls.CWC_nbsNbdecctrl; 0; ) else if (tosave.IU_iType == 5) then // Select ( set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_ssTheltselector; set tosave.IU_lSelectValues = getEdCtrlListElems ctrls.CWC_ssValuesctrl; set tosave.IU_iSelectDefPos = ftoi getEdCtrlFloatValue ctrls.CWC_ssDefaultvaluectrl; 0; ) else if (tosave.IU_iType == 6) then // Checkbox ( set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_cbsTheltselector; set tosave.IU_sText = getEdCtrlTextLineValue ctrls.CWC_cbsTextctrl; set tosave.IU_bCheckInit = getEdCtrlCheckState ctrls.CWC_cbsDefaultstatectrl; 0; ) else if (tosave.IU_iType == 7) then // Picture ( set tosave.IU_sPath = getEdCtrlTextLineValue ctrls.CWC_psPathctrl; set tosave.IU_iResizeFlag = getSelectedEdCtrlSelectPos ctrls.CWC_psResizeflagctrl; set tosave.IU_iNbFrames = ftoi getEdCtrlFloatValue ctrls.CWC_psNbframesctrl; set tosave.IU_iNbFps = ftoi getEdCtrlFloatValue ctrls.CWC_psNbfpsctrl; 0; ) else if (tosave.IU_iType == 8) then // Slider ( set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_slsTheltselector; set tosave.IU_fValue = getEdCtrlFloatValue ctrls.CWC_slsValuectrl; set tosave.IU_fMin = getEdCtrlFloatValue ctrls.CWC_slsMinctrl; set tosave.IU_fMax = getEdCtrlFloatValue ctrls.CWC_slsMaxctrl; set tosave.IU_fInterval = getEdCtrlFloatValue ctrls.CWC_slsIntervalctrl; set tosave.IU_iNbDec = ftoi getEdCtrlFloatValue ctrls.CWC_slsNbdecctrl; set tosave.IU_iDirection = getSelectedEdCtrlSelectPos ctrls.CWC_slsDirectionctrl; set tosave.IU_iCursorSize = ftoi getEdCtrlFloatValue ctrls.CWC_slsCursorwidthctrl; set tosave.IU_iTextPos = getSelectedEdCtrlSelectPos ctrls.CWC_slsTextposctrl; set tosave.IU_bIgnoreClick = getEdCtrlCheckState ctrls.CWC_slsIgnoreclickctrl; 0; ) else if (tosave.IU_iType == 9) then // Table ( set tosave.IU_bUseTheme = getEdCtrlCheckState ctrls.CWC_tbsUsethemectrl; set tosave.IU_lThemeValues = getThemeEltSelectorThemeValues ctrls.CWC_tbsTheltselector; set tosave.IU_iNbRow = ftoi getEdCtrlFloatValue ctrls.CWC_tbsNbrowctrl; set tosave.IU_iNbCol = ftoi getEdCtrlFloatValue ctrls.CWC_tbsNbcolctrl; set tosave.IU_iMarginX = ftoi getEdCtrlFloatValue ctrls.CWC_tbsXmarginctrl; set tosave.IU_iMarginY = ftoi getEdCtrlFloatValue ctrls.CWC_tbsYmarginctrl; set tosave.IU_iCellColor = getEdCtrlColorButtonColor ctrls.CWC_tbsCellcolorctrl; set tosave.IU_iBorder = ftoi getEdCtrlFloatValue ctrls.CWC_tbsBorderctrl; set tosave.IU_iBorderColor = getEdCtrlColorButtonColor ctrls.CWC_tbsBordercolorctrl; set tosave.IU_sFontName = getEdCtrlTextLineValue ctrls.CWC_tbsFontnamectrl; set tosave.IU_iFontSize = ftoi getEdCtrlFloatValue ctrls.CWC_tbsFontsizectrl; set tosave.IU_iFontColor = getEdCtrlColorButtonColor ctrls.CWC_tbsFontcolorctrl; set tosave.IU_iHAlign = getSelectedEdCtrlSelectPos ctrls.CWC_tbsHalignctrl; set tosave.IU_iVAlign = getSelectedEdCtrlSelectPos ctrls.CWC_tbsValignctrl; 0; ) else nil; 0;; fun cbCloseEdit(p)= let p -> [posstr edstr ctrlisbcolor ctrlbcolor ctrlpath ctrlbgresizeflag ctrladvanced ctrlfadespeed ctrlshow] in let getEdCtrlCheckState ctrlisbcolor -> isbcolor in let getEdCtrlColorButtonColor ctrlbcolor -> bcolor in let getEdCtrlTextLineValue ctrlpath -> bgpath in let getSelectedEdCtrlSelectPos ctrlbgresizeflag -> bgresizeflag in let getEdCtrlCheckState ctrladvanced -> advanced in let getEdCtrlCheckState ctrlshow -> show in let ftoi getEdCtrlFloatValue ctrlfadespeed -> fadespeed in let getInterfaceSave edstr.ECI_lItemsToSave nil advanced -> interfacesave in let getInterfaceSaveData posstr -> possave in ["isbcolor" itoa isbcolor]:: ["bcolor" itoa bcolor]:: ["bgpath" bgpath]:: ["bgresizeflag" itoa bgresizeflag]:: ["advanced" itoa advanced]:: ["show" itoa show]:: ["fadespeed" itoa fadespeed]:: (lcat interfacesave possave);; fun cbConfigWindowDestroy(winstr, p)= let p -> [edstr ctrlbtn] in ( destroyAllInterfaceUnitResources edstr.ECI_lItems; set edstr.ECI_selected = nil; _DSalphaBitmap edstr.ECI_ctrls.CWC_squarebmp; _DSalphaBitmap edstr.ECI_ctrls.CWC_hArrowbmp; _DSalphaBitmap edstr.ECI_ctrls.CWC_hLinebmp; _DSalphaBitmap edstr.ECI_ctrls.CWC_vArrowbmp; _DSalphaBitmap edstr.ECI_ctrls.CWC_vLinebmp; setEdCtrlButtonEnable ctrlbtn 1; ); 0;; fun cbConfigWindowOk(ctrlbtn, p)= let p -> [winstr edstr] in ( saveInterfaceUnit edstr edstr.ECI_selected edstr.ECI_ctrls; set edstr.ECI_lItemsToSave = edstr.ECI_lItems; set edstr.ECI_lItems = nil; dsEdWindow winstr; ); 0;; fun cbConfigWindowApply(ctrlbtn, p)= let p -> [winstr edstr iapplybtn] in ( saveInterfaceUnit edstr edstr.ECI_selected edstr.ECI_ctrls; set edstr.ECI_lItemsToSave = edstr.ECI_lItems; triggerEdCtrlButton iapplybtn; ); 0;; fun cbConfigWindowCancel(ctrlbtn, p)= let p -> [winstr edstr] in ( set edstr.ECI_lItems = nil; dsEdWindow winstr; ); 0;; /* ********************************************************************************************* / Type-dependent interfaces / ********************************************************************************************* */ fun cbCheckUseTheme(ctrlstr, state, p)= let p -> [ctrls winh winstr lookswinstr paramwinstr theltselector theltselectorheight] in let if (lookswinstr == nil) then [0 0 0 0] else _GETwindowPositionSize lookswinstr.EDW_win -> [_ _ lw lh] in ( if state then ( set winh = winh - lh + theltselectorheight; setEdWindowPos paramwinstr 0 (25 + theltselectorheight); ) else setEdWindowPos paramwinstr 0 (25 + lh); setEdWindowSize winstr CIEW_MenuWidth winh; setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setThemeEltSelectorVisible theltselector state; setEdWindowVisible lookswinstr !state; ); 0;; fun cbCloseArray(winstr, p)= let p -> [lwidths letxt iustr] in ( set iustr.IU_lColWidths = nil; while (lwidths != nil) do ( let itoa (ftoi getEdCtrlFloatValue (hd lwidths)) -> width in set iustr.IU_lColWidths = width::iustr.IU_lColWidths; set lwidths = tl lwidths; ); set iustr.IU_lData = nil; while (letxt != nil) do ( let nil -> line in ( let hd letxt -> lvalues in while (lvalues != nil) do ( let getEdCtrlEditTextValue (hd lvalues) -> value in set line = value::line; set lvalues = tl lvalues; ); set iustr.IU_lData = line::iustr.IU_lData; ); set letxt = tl letxt; ); ); dsEdWindow winstr; 0;; fun drawcells(fatherstr, nbcols, nbrows, iustr)= let 120 -> celw in let 60 -> celh in let 10 -> margin in let nbcols * celw + (nbcols * margin) -> lw in let 85 + nbrows * celh + (nbrows * margin) -> lh in let _GETscreenSize -> [sw sh] in let [(if (lw > (sw - 100)) then sw - 100 else lw + 20) (if ((lh + 28) > (sh - 100)) then sh - 100 else lh + 28 + 20)] -> [iw ih] in let [((sw / 2) - (iw / 2)) ((sh / 2) - (ih / 2)) - 40] -> [x y] in let crEdModalDialogWindow _channel fatherstr x y iw ih WN_NOSCOL|WN_MENU|WN_SIZEBOX nil (loc "OS3DCUSTOMINTERFACE_0100") -> popstr in let crEdWindowToolBar popstr 0 0 iw 28 5 1 EdDefaultTheme.EDT_iToolBarColor ETB_HORIZONTAL -> tbstr in let crEdScrollWindow _channel popstr 0 28 iw (ih - 28) WN_CHILDINSIDE|WN_VSCROLL|WN_HSCROLL EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> winscrl in let crEdWindow _channel winscrl 0 0 lw lh WN_CHILDINSIDE|WN_NOBORDER nil nil nil -> winstr in let crEdCtrlLabel winstr 10 12 360 20 (loc "OS3DCUSTOMINTERFACE_0101") nil -> labelcolwidths in let crEdCtrlLabel winstr 10 72 180 20 (loc "OS3DCUSTOMINTERFACE_0102") nil -> labelcellvalues in let nil -> lwidths in let nil -> letxt in ( let 0 -> i in let margin + 85 -> ypos in while (i < nbrows) do ( let 0 -> j in let margin -> xpos in let nil -> lrows in let nth_list iustr.IU_lData i -> lineval in ( while (j < nbcols) do ( if (i != 0) then nil else set lwidths = (crEdCtrlFloat winstr (xpos + 20) 35 80 20 (atof (nth_list iustr.IU_lColWidths j)) 1.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW)::lwidths; set lrows = (crEdCtrlEditText winstr xpos ypos celw celh (webtostr (nth_list lineval j)) nil nil)::lrows; set xpos = xpos + celw + margin; set j = j + 1; ); set letxt = lrows::letxt; ); set ypos = ypos + celh + margin; set i = i + 1; ); setEdwindowCbClose popstr mkfun2 @cbCloseArray [lwidths letxt iustr]; ); 0;; fun cbBtnEditValues(ctrlbtn, p)= let p -> [ewinstr ctrlnbrow ctrlnbcol edstr] in let ftoi getEdCtrlFloatValue ctrlnbrow -> nbrows in let ftoi getEdCtrlFloatValue ctrlnbcol -> nbcols in drawcells ewinstr nbcols nbrows edstr.ECI_selected; 0;; fun showTableSettings(edstr, ctrls, iustr)= let 335 -> winh in ( if (ctrls.CWC_tableSettings != nil) then ( setEdWindowVisible ctrls.CWC_tableSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 0) (CIEW_MenuWidth - 20) 20 (loc "OS3DCUSTOMINTERFACE_0104") EDWIN_RESIZE_MW -> ctrlusetheme in let crThemeEltSelects edstr.ECI_inst winstr "common/tableCell"::nil iustr.IU_lThemeValues (set ypos = ypos + 25) CIEW_MenuWidth 140 -> theltselector in let crEdWindow _channel winstr 0 25 CIEW_MenuWidth 150 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> lookswinstr in let crEdCtrlLabel lookswinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0097") nil -> labelccolor in let crEdCtrlColorButton lookswinstr 140 ypos 100 20 iustr.IU_iCellColor 1 EDWIN_RESIZE_MW nil -> ctrlccolor in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0098") nil -> labelborder in let crEdCtrlFloat lookswinstr 140 ypos 60 20 (itof iustr.IU_iBorder) 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlborder in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0099") nil -> labelbcolor in let crEdCtrlColorButton lookswinstr 140 ypos 100 20 iustr.IU_iBorderColor 1 EDWIN_RESIZE_MW nil -> ctrlbcolor in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0086") nil -> labelfname in let crEdCtrlTextLine lookswinstr 140 ypos 170 20 iustr.IU_sFontName nil EDWIN_RESIZE_MW -> ctrlfname in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0036") nil -> labelfsize in let crEdCtrlFloat lookswinstr 140 ypos 60 20 (itof iustr.IU_iFontSize) 1.0 1024.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlfsize in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0037") nil -> labelfcolor in let crEdCtrlColorButton lookswinstr 140 ypos 100 20 iustr.IU_iFontColor 0 EDWIN_RESIZE_MW nil -> ctrlfcolor in let crEdWindow _channel winstr 0 175 CIEW_MenuWidth 160 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> paramwinstr in let crEdCtrlLabel paramwinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0094") nil -> labelnbrow in let crEdCtrlFloat paramwinstr 140 ypos 60 20 (itof iustr.IU_iNbRow) 1.0 30.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbrow in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0095") nil -> labelnbcol in let crEdCtrlFloat paramwinstr 140 ypos 60 20 (itof iustr.IU_iNbCol) 1.0 30.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbcol in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0096") nil -> labelmargins in let crEdCtrlFloat paramwinstr 140 ypos 60 20 (itof iustr.IU_iMarginX) 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlxmargin in let crEdCtrlFloat paramwinstr 210 ypos 60 20 (itof iustr.IU_iMarginY) 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlymargin in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0038") nil -> labelhalign in let crEdCtrlSelect paramwinstr 140 ypos 100 120 EDWIN_RESIZE_MW -> ctrlhalign in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0039") nil -> labelvalign in let crEdCtrlSelect paramwinstr 140 ypos 100 120 EDWIN_RESIZE_MW -> ctrlvalign in let crEdCtrlButton paramwinstr ((CIEW_MenuWidth / 2) - 80) (set ypos = ypos + 35) 160 20 (loc "OS3DCUSTOMINTERFACE_0100") nil -> editbtn in ( setEdCtrlCheckCbState ctrlusetheme mkfun3 @cbCheckUseTheme [ctrls winh winstr lookswinstr paramwinstr theltselector 25]; fillEdCtrlSelect ctrlhalign (loc "OS3DCUSTOMINTERFACE_0040")::(loc "OS3DCUSTOMINTERFACE_0041")::(loc "OS3DCUSTOMINTERFACE_0042")::nil; fillEdCtrlSelect ctrlvalign (loc "OS3DCUSTOMINTERFACE_0043")::(loc "OS3DCUSTOMINTERFACE_0041")::(loc "OS3DCUSTOMINTERFACE_0044")::nil; setEdCtrlButtonCb editbtn mkfun2 @cbBtnEditValues [ctrls.CWC_menuWinstr ctrlnbrow ctrlnbcol edstr]; set ctrls.CWC_tableSettings = winstr; set ctrls.CWC_tbsLookswinstr = lookswinstr; set ctrls.CWC_tbsParamwinstr = paramwinstr; set ctrls.CWC_tbsUsethemectrl = ctrlusetheme; set ctrls.CWC_tbsTheltselector = theltselector; set ctrls.CWC_tbsNbrowctrl = ctrlnbrow; set ctrls.CWC_tbsNbcolctrl = ctrlnbcol; set ctrls.CWC_tbsXmarginctrl = ctrlxmargin; set ctrls.CWC_tbsYmarginctrl = ctrlymargin; set ctrls.CWC_tbsCellcolorctrl = ctrlccolor; set ctrls.CWC_tbsBorderctrl = ctrlborder; set ctrls.CWC_tbsBordercolorctrl = ctrlbcolor; set ctrls.CWC_tbsFontnamectrl = ctrlfname; set ctrls.CWC_tbsFontsizectrl = ctrlfsize; set ctrls.CWC_tbsFontcolorctrl = ctrlfcolor; set ctrls.CWC_tbsHalignctrl = ctrlhalign; set ctrls.CWC_tbsValignctrl = ctrlvalign; ); 0; ); //setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 190 + winh; //setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; cbCheckUseTheme nil iustr.IU_bUseTheme [ctrls winh ctrls.CWC_tableSettings ctrls.CWC_tbsLookswinstr ctrls.CWC_tbsParamwinstr ctrls.CWC_tbsTheltselector 25]; setEdCtrlCheckState ctrls.CWC_tbsUsethemectrl iustr.IU_bUseTheme; setThemeEltSelectorThemeValues ctrls.CWC_tbsTheltselector iustr.IU_lThemeValues; setEdCtrlFloatValue ctrls.CWC_tbsNbrowctrl (itof iustr.IU_iNbRow); setEdCtrlFloatValue ctrls.CWC_tbsNbcolctrl (itof iustr.IU_iNbCol); setEdCtrlFloatValue ctrls.CWC_tbsXmarginctrl (itof iustr.IU_iMarginX); setEdCtrlFloatValue ctrls.CWC_tbsYmarginctrl (itof iustr.IU_iMarginY); setEdCtrlColorButtonColor ctrls.CWC_tbsCellcolorctrl iustr.IU_iCellColor; setEdCtrlFloatValue ctrls.CWC_tbsBorderctrl (itof iustr.IU_iBorder); setEdCtrlColorButtonColor ctrls.CWC_tbsBordercolorctrl iustr.IU_iBorderColor; setEdCtrlTextLineValue ctrls.CWC_tbsFontnamectrl iustr.IU_sFontName; setEdCtrlFloatValue ctrls.CWC_tbsFontsizectrl (itof iustr.IU_iFontSize); setEdCtrlColorButtonColor ctrls.CWC_tbsFontcolorctrl iustr.IU_iFontColor; selectEdCtrlSelectByPos ctrls.CWC_tbsHalignctrl iustr.IU_iHAlign; selectEdCtrlSelectByPos ctrls.CWC_tbsValignctrl iustr.IU_iVAlign; ); 0;; fun showSliderSettings(edstr, ctrls, iustr)= let 250 -> winh in ( if (ctrls.CWC_sliderSettings != nil) then ( setEdWindowVisible ctrls.CWC_sliderSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crThemeEltSelects edstr.ECI_inst winstr "slider"::nil iustr.IU_lThemeValues (set ypos = 0) CIEW_MenuWidth 140 -> theltselector in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0050") nil -> labelvalue in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fValue (-.10000000.0) 10000000.0 1.0 5 nil EDWIN_RESIZE_MW -> ctrlvalue in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0051") nil -> labelmin in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fMin (-.10000000.0) 10000000.0 1.0 5 nil EDWIN_RESIZE_MW -> ctrlmin in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0052") nil -> labelmax in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fMax (-.10000000.0) 10000000.0 1.0 5 nil EDWIN_RESIZE_MW -> ctrlmax in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0053") nil -> labelinterval in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fInterval 0.000001 10000000.0 0.1 5 nil EDWIN_RESIZE_MW -> ctrlinterval in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0054") nil -> labelnbdec in let crEdCtrlFloat winstr 140 ypos 90 20 (itof iustr.IU_iNbDec) 0.0 5.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbdec in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0106") nil -> labeldirection in let crEdCtrlSelect winstr 140 ypos (CIEW_MenuWidth - 140 - 30) 140 EDWIN_RESIZE_MW -> ctrldirection in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0066") nil -> labelcursorwidth in let crEdCtrlFloat winstr 140 ypos 90 20 (itof iustr.IU_iNbDec) 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlcursorwidth in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0067") nil -> labeltextpos in let crEdCtrlSelect winstr 140 ypos (CIEW_MenuWidth - 140 - 30) 140 EDWIN_RESIZE_MW -> ctrltextpos in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0075") EDWIN_RESIZE_MW -> ctrlignoreclick in ( fillEdCtrlSelect ctrltextpos (loc "OS3DCUSTOMINTERFACE_0068")::(loc "OS3DCUSTOMINTERFACE_0069")::(loc "OS3DCUSTOMINTERFACE_0070")::(loc "OS3DCUSTOMINTERFACE_0071")::(loc "OS3DCUSTOMINTERFACE_0072")::(loc "OS3DCUSTOMINTERFACE_0073")::(loc "OS3DCUSTOMINTERFACE_0074")::nil; fillEdCtrlSelect ctrldirection (loc "OS3DCUSTOMINTERFACE_0091")::(loc "OS3DCUSTOMINTERFACE_0090")::nil; set ctrls.CWC_sliderSettings = winstr; set ctrls.CWC_slsTheltselector = theltselector; set ctrls.CWC_slsValuectrl = ctrlvalue; set ctrls.CWC_slsMinctrl = ctrlmin; set ctrls.CWC_slsMaxctrl = ctrlmax; set ctrls.CWC_slsIntervalctrl = ctrlinterval; set ctrls.CWC_slsNbdecctrl = ctrlnbdec; set ctrls.CWC_slsDirectionctrl = ctrldirection; set ctrls.CWC_slsCursorwidthctrl = ctrlcursorwidth; set ctrls.CWC_slsTextposctrl = ctrltextpos; set ctrls.CWC_slsIgnoreclickctrl = ctrlignoreclick; ); 0; ); setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setThemeEltSelectorThemeValues ctrls.CWC_slsTheltselector iustr.IU_lThemeValues; setEdCtrlFloatValue ctrls.CWC_slsValuectrl iustr.IU_fValue; setEdCtrlFloatValue ctrls.CWC_slsMinctrl iustr.IU_fMin; setEdCtrlFloatValue ctrls.CWC_slsMaxctrl iustr.IU_fMax; setEdCtrlFloatValue ctrls.CWC_slsIntervalctrl iustr.IU_fInterval; setEdCtrlFloatValue ctrls.CWC_slsNbdecctrl (itof iustr.IU_iNbDec); selectEdCtrlSelectByPos ctrls.CWC_slsDirectionctrl iustr.IU_iDirection; setEdCtrlFloatValue ctrls.CWC_slsCursorwidthctrl (itof iustr.IU_iCursorSize); selectEdCtrlSelectByPos ctrls.CWC_slsTextposctrl iustr.IU_iTextPos; setEdCtrlCheckState ctrls.CWC_slsIgnoreclickctrl iustr.IU_bIgnoreClick; ); 0;; fun cbDlgGetPath(pfile, p)= let p -> [ctrlbtn winstr ctrlpath] in ( if pfile == nil then nil else let _PtoScol pfile -> file in if file == nil then ( _DLGMessageBox _channel winstr.EDW_win (loc "OS3DCUSTOMINTERFACE_0061") (loc "OS3DCUSTOMINTERFACE_0062") 0; 0; ) else ( setEdCtrlTextLineValue ctrlpath file; 0; ); setEdCtrlButtonEnable ctrlbtn 1; ); 0;; fun cbBtnPickFile(ctrlbtn, p)= let p -> [winstr ctrlpath] in let getEdCtrlTextLineValue ctrlpath -> path in let _GETdesktopSize -> [sw sh] in let getEdWindowPos mainInterf.MINT_winMain -> [nx ny] in let getEdWindowSize mainInterf.MINT_winMain -> [nmw nmh] in let [750 450] -> [iw ih] in let crEdOpenFileBitmapDialog _channel winstr nx + ((nmw / 2) - (iw / 2)) ny + ((nmh / 2) - (ih / 2)) iw ih "" ["Bitmaps" "bmp"::"jpg"::"png"::"tga"::nil]::["Bitmap" "bmp"::nil]::["Jpeg" "jpg"::nil]::["PNG" "png"::nil]::["Targa" "tga"::nil]::nil EDFILE_DIALOG_LIST_FOLDERS|EDFILE_DIALOG_SHOW_TOOLBAR nil path -> dlgfstr in ( setEdWindowIcon dlgfstr.EDFD_dialog sWinDlgIcon; setEdOpenFileDialogCb dlgfstr mkfun2 @cbDlgGetPath [ctrlbtn winstr ctrlpath]; setEdCtrlButtonEnable ctrlbtn 1; ); 0;; fun cbRefreshBtn(pickbtn, p)= let p -> [winstr ctrlpath] in setEdCtrlTextLineValue ctrlpath ""; 0;; fun showPictureSettings(edstr, ctrls, iustr)= let 100 -> winh in ( if (ctrls.CWC_pictureSettings != nil) then ( setEdWindowVisible ctrls.CWC_pictureSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0058") nil -> labelpath in let crEdCtrlTextLine winstr 140 ypos (CIEW_MenuWidth - 140 - 80) 20 iustr.IU_sPath nil EDWIN_RESIZE_MW -> ctrlpath in let crEdCtrlButton winstr (CIEW_MenuWidth - 75) ypos 35 20 "..." nil -> pickfilebtn in let crEdCtrlButton winstr (CIEW_MenuWidth - 35) ypos 25 20 "X" nil -> refreshpath in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0081") nil -> labelresizeflag in let crEdCtrlSelect winstr 140 ypos (CIEW_MenuWidth - 140 - 30) 120 EDWIN_RESIZE_MW -> ctrlresizeflag in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0059") nil -> labelnbframes in let crEdCtrlFloat winstr 140 ypos 60 20 (itof iustr.IU_iNbFrames) 1.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbframes in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0060") nil -> labelnbfps in let crEdCtrlFloat winstr 140 ypos 60 20 (itof iustr.IU_iNbFps) 0.0 60.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbfps in ( setEdCtrlTextLineEnable ctrlpath 0; setEdCtrlButtonCb pickfilebtn mkfun2 @cbBtnPickFile [winstr ctrlpath]; setEdCtrlButtonCb refreshpath mkfun2 @cbRefreshBtn [winstr ctrlpath]; fillEdCtrlSelect ctrlresizeflag (loc "OS3DCUSTOMINTERFACE_0082")::(loc "OS3DCUSTOMINTERFACE_0083")::(loc "OS3DCUSTOMINTERFACE_0084")::nil; set ctrls.CWC_pictureSettings = winstr; set ctrls.CWC_psPathctrl = ctrlpath; set ctrls.CWC_psResizeflagctrl = ctrlresizeflag; set ctrls.CWC_psNbframesctrl = ctrlnbframes; set ctrls.CWC_psNbfpsctrl = ctrlnbfps; ); 0; ); setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setEdCtrlTextLineValue ctrls.CWC_psPathctrl iustr.IU_sPath; selectEdCtrlSelectByPos ctrls.CWC_psResizeflagctrl iustr.IU_iResizeFlag; setEdCtrlFloatValue ctrls.CWC_psNbframesctrl (itof iustr.IU_iNbFrames); setEdCtrlFloatValue ctrls.CWC_psNbfpsctrl (itof iustr.IU_iNbFps); ); 0;; fun showCheckboxSettings(edstr, ctrls, iustr)= let 75 -> winh in ( if (ctrls.CWC_checkboxSettings != nil) then ( setEdWindowVisible ctrls.CWC_checkboxSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crThemeEltSelects edstr.ECI_inst winstr "common/check"::nil iustr.IU_lThemeValues (set ypos = 0) CIEW_MenuWidth 140 -> theltselector in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0035") nil -> labeltext in let crEdCtrlTextLine winstr 140 ypos (CIEW_MenuWidth - 140 - 30) 20 iustr.IU_sText nil EDWIN_RESIZE_MW -> ctrltext in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0057") EDWIN_RESIZE_MW -> ctrlcheckinit in ( set ctrls.CWC_checkboxSettings = winstr; set ctrls.CWC_cbsTheltselector = theltselector; set ctrls.CWC_cbsTextctrl = ctrltext; set ctrls.CWC_cbsDefaultstatectrl = ctrlcheckinit; ); 0; ); setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setThemeEltSelectorThemeValues ctrls.CWC_cbsTheltselector iustr.IU_lThemeValues; setEdCtrlTextLineValue ctrls.CWC_cbsTextctrl iustr.IU_sText; setEdCtrlCheckState ctrls.CWC_cbsDefaultstatectrl iustr.IU_bCheckInit; ); 0;; fun cbAddList(ctrlstr, p)= let p -> [ctrllist ctrlvalue ctrldefpos] in let getEdCtrlTextLineValue ctrlvalue -> value in if (value == nil) || (!strcmp "" strtrim value) then nil else ( let getEdCtrlListElems ctrllist -> lelem in if (isStringInListi lelem value) then nil else ( addEdCtrlList ctrllist value nil nil; selectEdCtrlList ctrllist value; setEdCtrlTextLineValue ctrlvalue ""; setEdCtrlFloatMaxValue ctrldefpos itof((sizelist lelem) + 1); ); ); 0;; fun cbDelList(ctrlstr, p)= let p -> [ctrllist ctrlvalue ctrldefpos] in ( let getSelectedEdCtrlList ctrllist -> [name _ _] in delEdCtrlList ctrllist name; let sizelist (getEdCtrlListElems ctrllist) -> defvalmax in let if defvalmax < 1 then 1 else defvalmax -> defvalmax in setEdCtrlFloatMaxValue ctrldefpos itof(defvalmax); ); 0;; fun cbValidateList(ctrlstr, val, p)= let p -> [ctrllist ctrlvalue ctrldefpos] in cbAddList ctrllist p; 0;; fun showSelectSettings(edstr, ctrls, iustr)= let 165 -> winh in ( if (ctrls.CWC_selectSettings != nil) then ( setEdWindowVisible ctrls.CWC_selectSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crThemeEltSelects edstr.ECI_inst winstr "select"::nil iustr.IU_lThemeValues (set ypos = 0) CIEW_MenuWidth 140 -> theltselector in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0055") nil -> labelvalue in let crEdCtrlList winstr 10 (set ypos = ypos + 25) (CIEW_MenuWidth - 20) 60 LB_BORDER|LB_VSCROLL|ET_TABFOCUS EDWIN_RESIZE_MW|EDWIN_RESIZE_MH -> ctrllist in let crEdCtrlTextLine winstr 10 (set ypos = ypos + 65) (CIEW_MenuWidth - 10 - 60) 20 "" nil EDWIN_RESIZE_MW -> ctrlvalue in let crEdCtrlButton winstr (CIEW_MenuWidth - 55) ypos 20 20 "+" EDWIN_RESIZE_MW -> ctrlbtnadd in let crEdCtrlButton winstr (CIEW_MenuWidth - 30) ypos 20 20 "-" EDWIN_RESIZE_MW -> ctrlbtndel in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0056") nil -> labelnbdec in let crEdCtrlFloat winstr 140 ypos 60 20 (itof iustr.IU_iSelectDefPos) 1.0 1.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrldefpos in ( setEdCtrlButtonCb ctrlbtnadd mkfun2 @cbAddList [ctrllist ctrlvalue ctrldefpos]; setEdCtrlButtonCb ctrlbtndel mkfun2 @cbDelList [ctrllist ctrlvalue ctrldefpos]; setEdCtrlTextLineCbValidate ctrlvalue mkfun3 @cbValidateList [ctrllist ctrlvalue ctrldefpos]; set ctrls.CWC_selectSettings = winstr; set ctrls.CWC_ssTheltselector = theltselector; set ctrls.CWC_ssValuesctrl = ctrllist; set ctrls.CWC_ssDefaultvaluectrl = ctrldefpos; ); 0; ); setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setThemeEltSelectorThemeValues ctrls.CWC_ssTheltselector iustr.IU_lThemeValues; fillEdCtrlList ctrls.CWC_ssValuesctrl iustr.IU_lSelectValues; let sizelist iustr.IU_lSelectValues -> defvalmax in let if defvalmax < 1 then 1 else defvalmax -> defvalmax in setEdCtrlFloatMaxValue ctrls.CWC_ssDefaultvaluectrl (itof defvalmax); setEdCtrlFloatValue ctrls.CWC_ssDefaultvaluectrl (itof iustr.IU_iSelectDefPos); ); 0;; fun showNumberSettings(edstr, ctrls, iustr)= let 150 -> winh in ( if (ctrls.CWC_numberSettings != nil) then ( setEdWindowVisible ctrls.CWC_numberSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crThemeEltSelects edstr.ECI_inst winstr "float"::nil iustr.IU_lThemeValues (set ypos = 0) CIEW_MenuWidth 140 -> theltselector in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0050") nil -> labelvalue in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fValue (-.10000000.0) 10000000.0 1.0 5 nil EDWIN_RESIZE_MW -> ctrlvalue in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0051") nil -> labelmin in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fMin (-.10000000.0) 10000000.0 1.0 5 nil EDWIN_RESIZE_MW -> ctrlmin in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0052") nil -> labelmax in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fMax (-.10000000.0) 10000000.0 1.0 5 nil EDWIN_RESIZE_MW -> ctrlmax in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0053") nil -> labelinterval in let crEdCtrlFloat winstr 140 ypos 90 20 iustr.IU_fInterval 0.000001 10000000.0 0.1 5 nil EDWIN_RESIZE_MW -> ctrlinterval in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0054") nil -> labelnbdec in let crEdCtrlFloat winstr 140 ypos 90 20 (itof iustr.IU_iNbDec) 0.0 5.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbdec in ( set ctrls.CWC_numberSettings = winstr; set ctrls.CWC_nbsTheltselector = theltselector; set ctrls.CWC_nbsValuectrl = ctrlvalue; set ctrls.CWC_nbsMinctrl = ctrlmin; set ctrls.CWC_nbsMaxctrl = ctrlmax; set ctrls.CWC_nbsIntervalctrl = ctrlinterval; set ctrls.CWC_nbsNbdecctrl = ctrlnbdec; ); 0; ); setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setThemeEltSelectorThemeValues ctrls.CWC_nbsTheltselector iustr.IU_lThemeValues; setEdCtrlFloatValue ctrls.CWC_nbsValuectrl iustr.IU_fValue; setEdCtrlFloatValue ctrls.CWC_nbsMinctrl iustr.IU_fMin; setEdCtrlFloatValue ctrls.CWC_nbsMaxctrl iustr.IU_fMax; setEdCtrlFloatValue ctrls.CWC_nbsIntervalctrl iustr.IU_fInterval; setEdCtrlFloatValue ctrls.CWC_nbsNbdecctrl (itof iustr.IU_iNbDec); ); 0;; fun showButtonSettings(edstr, ctrls, iustr)= let 300 -> winh in ( if (ctrls.CWC_buttonSettings != nil) then ( setEdWindowVisible ctrls.CWC_buttonSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 0) (CIEW_MenuWidth - 20) 20 (loc "OS3DCUSTOMINTERFACE_0104") EDWIN_RESIZE_MW -> ctrlusetheme in let crThemeEltSelects edstr.ECI_inst winstr "common/button"::nil iustr.IU_lThemeValues (set ypos = ypos + 25) CIEW_MenuWidth 140 -> theltselector in let crEdWindow _channel winstr 0 25 CIEW_MenuWidth 225 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> lookswinstr in let crEdCtrlLabel lookswinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0058") nil -> labelpath in let crEdCtrlTextLine lookswinstr 140 ypos (CIEW_MenuWidth - 140 - 80) 20 iustr.IU_sPath nil EDWIN_RESIZE_MW -> ctrlpath in let crEdCtrlButton lookswinstr (CIEW_MenuWidth - 75) ypos 35 20 "..." nil -> pickfilebtn in let crEdCtrlButton lookswinstr (CIEW_MenuWidth - 35) ypos 25 20 "X" nil -> refreshpath in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0081") nil -> labelresizeflag in let crEdCtrlSelect lookswinstr 140 ypos (CIEW_MenuWidth - 140 - 30) 120 EDWIN_RESIZE_MW -> ctrlresizeflag in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0076") nil -> labelstates in let crEdCtrlSelect lookswinstr 140 ypos (CIEW_MenuWidth - 140 - 30) 120 EDWIN_RESIZE_MW -> ctrlstates in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0059") nil -> labelnbframes in let crEdCtrlFloat lookswinstr 140 ypos 60 20 (itof iustr.IU_iNbFrames) 1.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbframes in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0060") nil -> labelnbfps in let crEdCtrlFloat lookswinstr 140 ypos 60 20 (itof iustr.IU_iNbFps) 0.0 60.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlnbfps in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0086") nil -> labelfname in let crEdCtrlTextLine lookswinstr 140 ypos 170 20 iustr.IU_sFontName nil EDWIN_RESIZE_MW -> ctrlfname in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0036") nil -> labelfsize in let crEdCtrlFloat lookswinstr 140 ypos 60 20 (itof iustr.IU_iFontSize) 1.0 1024.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlfsize in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0037") nil -> labelfcolor in let crEdCtrlColorButton lookswinstr 140 ypos 100 20 iustr.IU_iFontColor 0 EDWIN_RESIZE_MW nil -> ctrlfcolor in let crEdCtrlCheck lookswinstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0087") EDWIN_RESIZE_MW -> ctrlfflags in let crEdWindow _channel winstr 0 250 CIEW_MenuWidth 50 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> paramwinstr in let crEdCtrlLabel paramwinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0035") nil -> labeltext in let crEdCtrlTextLine paramwinstr 140 ypos (CIEW_MenuWidth - 140 - 30) 20 iustr.IU_sText nil EDWIN_RESIZE_MW -> ctrltext in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0047") nil -> labelpreset in let crEdCtrlSelect paramwinstr 140 ypos (CIEW_MenuWidth - 140 - 30) 120 EDWIN_RESIZE_MW -> ctrlpreset in ( setEdCtrlCheckCbState ctrlusetheme mkfun3 @cbCheckUseTheme [ctrls winh winstr lookswinstr paramwinstr theltselector 25]; fillEdCtrlSelect ctrlpreset (loc "OS3DCUSTOMINTERFACE_0048")::(loc "OS3DCUSTOMINTERFACE_0049")::nil; setEdCtrlTextLineEnable ctrlpath 0; setEdCtrlButtonCb pickfilebtn mkfun2 @cbBtnPickFile [winstr ctrlpath]; setEdCtrlButtonCb refreshpath mkfun2 @cbRefreshBtn [winstr ctrlpath]; fillEdCtrlSelect ctrlstates (loc "OS3DCUSTOMINTERFACE_0077")::(loc "OS3DCUSTOMINTERFACE_0078")::(loc "OS3DCUSTOMINTERFACE_0079")::(loc "OS3DCUSTOMINTERFACE_0080")::nil; fillEdCtrlSelect ctrlresizeflag (loc "OS3DCUSTOMINTERFACE_0082")::(loc "OS3DCUSTOMINTERFACE_0083")::(loc "OS3DCUSTOMINTERFACE_0084")::nil; set ctrls.CWC_buttonSettings = winstr; set ctrls.CWC_btnsLookswinstr = lookswinstr; set ctrls.CWC_btnsParamwinstr = paramwinstr; set ctrls.CWC_btnsUsethemectrl = ctrlusetheme; set ctrls.CWC_btnsTheltselector = theltselector; set ctrls.CWC_btnsFontnamectrl = ctrlfname; set ctrls.CWC_btnsFontsizectrl = ctrlfsize; set ctrls.CWC_btnsFontcolorctrl = ctrlfcolor; set ctrls.CWC_btnsFontflagsctrl = ctrlfflags; set ctrls.CWC_btnsTextctrl = ctrltext; set ctrls.CWC_btnsPresetctrl = ctrlpreset; set ctrls.CWC_btnsPathctrl = ctrlpath; set ctrls.CWC_btnsStatesctrl = ctrlstates; set ctrls.CWC_btnsResizeflagctrl = ctrlresizeflag; set ctrls.CWC_btnsNbframesctrl = ctrlnbframes; set ctrls.CWC_btnsNbfpsctrl = ctrlnbfps; ); 0; ); //setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 190 + winh; //setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; cbCheckUseTheme nil iustr.IU_bUseTheme [ctrls winh ctrls.CWC_buttonSettings ctrls.CWC_btnsLookswinstr ctrls.CWC_btnsParamwinstr ctrls.CWC_btnsTheltselector 25]; setEdCtrlCheckState ctrls.CWC_btnsUsethemectrl iustr.IU_bUseTheme; setThemeEltSelectorThemeValues ctrls.CWC_btnsTheltselector iustr.IU_lThemeValues; setEdCtrlTextLineValue ctrls.CWC_btnsFontnamectrl iustr.IU_sFontName; setEdCtrlEditTextValue ctrls.CWC_btnsTextctrl iustr.IU_sText; setEdCtrlFloatValue ctrls.CWC_btnsFontsizectrl (itof iustr.IU_iFontSize); setEdCtrlColorButtonColor ctrls.CWC_btnsFontcolorctrl iustr.IU_iFontColor; setEdCtrlCheckState ctrls.CWC_btnsFontflagsctrl iustr.IU_iFontFlags; setEdCtrlTextLineValue ctrls.CWC_btnsTextctrl iustr.IU_sText; selectEdCtrlSelectByPos ctrls.CWC_btnsPresetctrl iustr.IU_iPreset; setEdCtrlTextLineValue ctrls.CWC_btnsPathctrl iustr.IU_sPath; selectEdCtrlSelectByPos ctrls.CWC_btnsStatesctrl iustr.IU_iStates; selectEdCtrlSelectByPos ctrls.CWC_btnsResizeflagctrl iustr.IU_iResizeFlag; setEdCtrlFloatValue ctrls.CWC_btnsNbframesctrl (itof iustr.IU_iNbFrames); setEdCtrlFloatValue ctrls.CWC_btnsNbfpsctrl (itof iustr.IU_iNbFps); ); 0;; fun showTextInputSettings(edstr, ctrls, iustr)= let 205 -> winh in ( if (ctrls.CWC_textInputSettings != nil) then ( setEdWindowVisible ctrls.CWC_textInputSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crThemeEltSelects edstr.ECI_inst winstr "common/editText"::nil iustr.IU_lThemeValues (set ypos = 0) CIEW_MenuWidth 140 -> theltselector in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0045") EDWIN_RESIZE_MW -> ctrlmultiline in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0103") EDWIN_RESIZE_MW -> ctrlpassword in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0046") nil -> labeltext in let crEdCtrlEditText winstr 10 (set ypos = ypos + 25) (CIEW_MenuWidth - 20) 100 iustr.IU_sText nil EDWIN_RESIZE_MW -> ctrltext in ( set ctrls.CWC_textInputSettings = winstr; set ctrls.CWC_tisTheltselector = theltselector; set ctrls.CWC_tisTextctrl = ctrltext; set ctrls.CWC_tisMultilinectrl = ctrlmultiline; set ctrls.CWC_tisPasswordctrl = ctrlpassword; ); 0; ); setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 220 + winh; setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; setThemeEltSelectorThemeValues ctrls.CWC_tisTheltselector iustr.IU_lThemeValues; setEdCtrlEditTextValue ctrls.CWC_tisTextctrl iustr.IU_sText; setEdCtrlCheckState ctrls.CWC_tisMultilinectrl iustr.IU_bMultiline; setEdCtrlCheckState ctrls.CWC_tisPasswordctrl iustr.IU_bPassword; ); 0;; fun showTextSettings(edstr, ctrls, iustr)= let 330 -> winh in ( if (ctrls.CWC_textSettings != nil) then ( setEdWindowVisible ctrls.CWC_textSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 0) (CIEW_MenuWidth - 20) 20 (loc "OS3DCUSTOMINTERFACE_0104") EDWIN_RESIZE_MW -> ctrlusetheme in let crThemeEltSelects edstr.ECI_inst winstr "common/label"::nil iustr.IU_lThemeValues (set ypos = ypos + 25) CIEW_MenuWidth 140 -> theltselector in let crEdWindow _channel winstr 0 25 CIEW_MenuWidth 100 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> lookswinstr in let crEdCtrlLabel lookswinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0086") nil -> labelfname in let crEdCtrlTextLine lookswinstr 140 ypos 170 20 iustr.IU_sFontName nil EDWIN_RESIZE_MW -> ctrlfname in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0036") nil -> labelfsize in let crEdCtrlFloat lookswinstr 140 ypos 60 20 (itof iustr.IU_iFontSize) 1.0 1024.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlfsize in let crEdCtrlLabel lookswinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0037") nil -> labelfcolor in let crEdCtrlColorButton lookswinstr 140 ypos 100 20 iustr.IU_iFontColor 0 EDWIN_RESIZE_MW nil -> ctrlfcolor in let crEdCtrlCheck lookswinstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0087") EDWIN_RESIZE_MW -> ctrlfflags in let crEdWindow _channel winstr 0 125 CIEW_MenuWidth 205 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> paramwinstr in let crEdCtrlLabel paramwinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0038") nil -> labelhalign in let crEdCtrlSelect paramwinstr 140 ypos 100 120 EDWIN_RESIZE_MW -> ctrlhalign in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0039") nil -> labelvalign in let crEdCtrlSelect paramwinstr 140 ypos 100 120 EDWIN_RESIZE_MW -> ctrlvalign in let crEdCtrlCheck paramwinstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3DCUSTOMINTERFACE_0045") EDWIN_RESIZE_MW -> ctrlmultiline in let crEdCtrlLabel paramwinstr 10 ((set ypos = ypos + 25) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0035") nil -> labeltext in let crEdCtrlEditText paramwinstr 10 (set ypos = ypos + 25) (CIEW_MenuWidth - 20) 100 iustr.IU_sText nil EDWIN_RESIZE_MW -> ctrltext in ( setEdCtrlCheckCbState ctrlusetheme mkfun3 @cbCheckUseTheme [ctrls winh winstr lookswinstr paramwinstr theltselector 25]; fillEdCtrlSelect ctrlhalign (loc "OS3DCUSTOMINTERFACE_0040")::(loc "OS3DCUSTOMINTERFACE_0041")::(loc "OS3DCUSTOMINTERFACE_0042")::nil; fillEdCtrlSelect ctrlvalign (loc "OS3DCUSTOMINTERFACE_0043")::(loc "OS3DCUSTOMINTERFACE_0041")::(loc "OS3DCUSTOMINTERFACE_0044")::nil; set ctrls.CWC_textSettings = winstr; set ctrls.CWC_tsLookswinstr = lookswinstr; set ctrls.CWC_tsParamwinstr = paramwinstr; set ctrls.CWC_tsUsethemectrl = ctrlusetheme; set ctrls.CWC_tsTheltselector = theltselector; set ctrls.CWC_tsTextctrl = ctrltext; set ctrls.CWC_tsFontnamectrl = ctrlfname; set ctrls.CWC_tsFontsizectrl = ctrlfsize; set ctrls.CWC_tsFontcolorctrl = ctrlfcolor; set ctrls.CWC_tsFontflagsctrl = ctrlfflags; set ctrls.CWC_tsHalignctrl = ctrlhalign; set ctrls.CWC_tsValignctrl = ctrlvalign; set ctrls.CWC_tsMultilinectrl = ctrlmultiline; ); 0; ); //setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 190 + winh; //setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; cbCheckUseTheme nil iustr.IU_bUseTheme [ctrls winh ctrls.CWC_textSettings ctrls.CWC_tsLookswinstr ctrls.CWC_tsParamwinstr ctrls.CWC_tsTheltselector 25]; setEdCtrlCheckState ctrls.CWC_tsUsethemectrl iustr.IU_bUseTheme; setThemeEltSelectorThemeValues ctrls.CWC_tsTheltselector iustr.IU_lThemeValues; setEdCtrlTextLineValue ctrls.CWC_tsFontnamectrl iustr.IU_sFontName; setEdCtrlEditTextValue ctrls.CWC_tsTextctrl iustr.IU_sText; setEdCtrlFloatValue ctrls.CWC_tsFontsizectrl (itof iustr.IU_iFontSize); setEdCtrlColorButtonColor ctrls.CWC_tsFontcolorctrl iustr.IU_iFontColor; setEdCtrlCheckState ctrls.CWC_tsFontflagsctrl iustr.IU_iFontFlags; selectEdCtrlSelectByPos ctrls.CWC_tsHalignctrl iustr.IU_iHAlign; selectEdCtrlSelectByPos ctrls.CWC_tsValignctrl iustr.IU_iVAlign; setEdCtrlCheckState ctrls.CWC_tsMultilinectrl iustr.IU_bMultiline; ); 0;; fun showFrameSettings(edstr, ctrls, iustr)= let 50 -> winh in ( if (ctrls.CWC_frameSettings != nil) then ( setEdWindowVisible ctrls.CWC_frameSettings 1; 0; ) else ( let 0 -> ypos in let crEdWindow _channel ctrls.CWC_settingsWinstr 0 200 CIEW_MenuWidth winh WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 0) (CIEW_MenuWidth - 20) 20 (loc "OS3DCUSTOMINTERFACE_0104") EDWIN_RESIZE_MW -> ctrlusetheme in let crThemeEltSelects edstr.ECI_inst winstr "common/background"::nil iustr.IU_lThemeValues (set ypos = ypos + 25) CIEW_MenuWidth 140 -> theltselector in let crEdWindow _channel winstr 0 25 CIEW_MenuWidth 25 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> paramwinstr in let crEdCtrlLabel paramwinstr 10 ((set ypos = 0) + 2) 120 20 (loc "OS3DCUSTOMINTERFACE_0088") nil -> labelscroll in let crEdCtrlSelect paramwinstr 140 ypos 170 180 EDWIN_RESIZE_MW -> ctrlscroll in ( setEdCtrlCheckCbState ctrlusetheme mkfun3 @cbCheckUseTheme [ctrls winh winstr nil paramwinstr theltselector 25]; fillEdCtrlSelect ctrlscroll (loc "OS3DCUSTOMINTERFACE_0089")::(loc "OS3DCUSTOMINTERFACE_0090")::(loc "OS3DCUSTOMINTERFACE_0091")::(loc "OS3DCUSTOMINTERFACE_0092")::nil; set ctrls.CWC_frameSettings = winstr; set ctrls.CWC_frsParamwinstr = paramwinstr; set ctrls.CWC_frsUsethemectrl = ctrlusetheme; set ctrls.CWC_frsTheltselector = theltselector; set ctrls.CWC_frsScrollctrl = ctrlscroll; ); 0; ); //setEdWindowSize ctrls.CWC_settingsWinstr.EDW_father CIEW_MenuWidth 190 + winh; //setEdWindowSize ctrls.CWC_menuWinstr CIEW_MenuWidth CIEW_MenuHeight + winh; cbCheckUseTheme nil iustr.IU_bUseTheme [ctrls winh ctrls.CWC_frameSettings nil ctrls.CWC_frsParamwinstr ctrls.CWC_frsTheltselector 25]; setEdCtrlCheckState ctrls.CWC_frsUsethemectrl iustr.IU_bUseTheme; setThemeEltSelectorThemeValues ctrls.CWC_tsTheltselector iustr.IU_lThemeValues; selectEdCtrlSelectByPos ctrls.CWC_frsScrollctrl iustr.IU_iScrollMode; ); 0;; fun changeSettingsWindow(edstr, iustr, type)= if (type == 0) then // Frame ( showFrameSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_frameSettings 0; 0; ); if (type == 1) then // Text ( showTextSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_textSettings 0; 0; ); if (type == 2) then // Text input ( showTextInputSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_textInputSettings 0; 0; ); if (type == 3) then // Button ( showButtonSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_buttonSettings 0; 0; ); if (type == 4) then // Number ( showNumberSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_numberSettings 0; 0; ); if (type == 5) then // Select ( showSelectSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_selectSettings 0; 0; ); if (type == 6) then // Checkbox ( showCheckboxSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_checkboxSettings 0; 0; ); if (type == 7) then // Picture ( showPictureSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_pictureSettings 0; 0; ); if (type == 8) then // Slider ( showSliderSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_sliderSettings 0; 0; ); if (type == 9) then // Table ( showTableSettings edstr edstr.ECI_ctrls iustr; 0; ) else ( setEdWindowVisible edstr.ECI_ctrls.CWC_tableSettings 0; 0; ); 0;; /* ********************************************************************************************* / Interface updates and load functions / ********************************************************************************************* */ fun getRealCoordsInContRef(iustr)= if iustr == nil then [0 0 0 0] else let getRealCoordsInContRef iustr.IU_parentstr -> [px py _ _] in let iustr.IU_bmpRealCoords -> [x y w h] in [(px + x) (py + y) w h];; fun setResizeBmpPosition(edstr)= let edstr.ECI_ctrls -> ctrls in let getRealCoordsInContRef edstr.ECI_selected -> [x y w h] in ( _CHANGEobjNodeCoordinates ctrls.CWC_tlresize [x y] 0; _CHANGEobjNodeCoordinates ctrls.CWC_trresize [(x + w - 12) y] 0; _CHANGEobjNodeCoordinates ctrls.CWC_blresize [x (y + h - 12)] 0; _CHANGEobjNodeCoordinates ctrls.CWC_brresize [(x + w - 12) (y + h - 12)] 0; _TOPobjNode ctrls.CWC_tlresize; _TOPobjNode ctrls.CWC_trresize; _TOPobjNode ctrls.CWC_blresize; _TOPobjNode ctrls.CWC_brresize; ); 0;; fun topBmp(iustr)= if iustr == nil then nil else ( let _CONVERTcompBitmapToObjNode iustr.IU_compBmp -> objnode in _TOPobjNode objnode; topBmp iustr.IU_parentstr; ); 0;; fun showBmpTemp(edstr, iustr, state)= if (iustr == nil) then nil else ( if (iustr.IU_bVisible == 1) then nil else let _CONVERTcompBitmapToObjNode iustr.IU_compBmp -> node in _CHANGEobjNodeFlags node (if (state == 1) then OBJ_ENABLE|OBJ_VISIBLE else OBJ_DISABLE|OBJ_HIDE) 0; showBmpTemp edstr iustr.IU_parentstr state; ); 0;; fun showBmp(edstr, iustr, state)= //addLogMessage "showBmp"; let edstr.ECI_ctrls -> ctrls in let _CONVERTcompBitmapToObjNode iustr.IU_compBmp -> node in if (iustr.IU_bVisible == state) then nil else ( if (state == 1) then ( setEdCtrlTreeItemBitmap ctrls.CWC_ctrltree iustr.IU_ctrlItem (strcat APPBASEDIR "os3deditor/res/tree_menu.png"); _CHANGEobjNodeFlags node OBJ_ENABLE|OBJ_VISIBLE 0; ) else ( setEdCtrlTreeItemBitmap ctrls.CWC_ctrltree iustr.IU_ctrlItem (strcat APPBASEDIR "os3deditor/res/tree_hidden.png"); _CHANGEobjNodeFlags node OBJ_DISABLE|OBJ_HIDE 0; ); set iustr.IU_bVisible = state; _PAINTcontainer ctrls.CWC_canvas; ); 0;; fun getBmpColor(type)= if (type == 0) then // Frame 0xd0d0d0 else if (type == 1) then // Text 0xe2aa26 else if (type == 2) then // Text Input 0xe26716 else if (type == 3) then // Button 0x1ac96e else if (type == 4) then // Number 0x0821e0 else if (type == 5) then // Select 0x30bfe2 else if (type == 6) then // Checkbox 0x5811e0 else if (type == 7) then // Picture 0xce405c else if (type == 8) then // Slider 0x009919 else if (type == 9) then // Table 0xf696bc //0xff97b3 else 0xffffff;; fun getTypeThemeSubsetList(type)= if (type == 0) then // Frame "common/background"::nil else if (type == 1) then // Text "common/label"::nil else if (type == 2) then // Text Input "common/editText"::nil else if (type == 3) then // Button "common/button"::nil else if (type == 4) then // Number "float"::nil else if (type == 5) then // Select "select"::nil else if (type == 6) then // Checkbox "common/check"::nil else if (type == 8) then // Slider "slider"::nil else if (type == 9) then // Table "common/tableCell"::nil else nil;; fun setIUstrDepth(edstr, iustr, depth)= set iustr.IU_iDepth = depth; setEdCtrlTreeType edstr.ECI_ctrls.CWC_ctrltree iustr.IU_ctrlItem depth; let iustr.IU_lChildren -> lchildren in while (lchildren != nil) do ( setIUstrDepth edstr (hd lchildren) (depth + 1); set lchildren = tl lchildren; ); 0;; fun createIUbmp(channel, w, h, color, edgecolor)= let _CRbitmap channel w h -> newbmp in ( _DRAWrectangle newbmp 0 0 w h DRAW_SOLID 1 edgecolor DRAW_SOLID color; let _CRalphaBitmap channel newbmp nil nil nil -> abmp in ( _DSbitmap newbmp; abmp; ); );; fun createIUcompBmp(edstr, iustr, w, h)= set iustr.IU_iBmpColor = getBmpColor iustr.IU_iType; set iustr.IU_abmp = createIUbmp _channel w h iustr.IU_iBmpColor 0x000000; let _CONVERTcompBitmapToObjNode iustr.IU_parentstr.IU_compBmp -> fathernode in set iustr.IU_compBmp = _CRcompBitmap _channel edstr.ECI_ctrls.CWC_canvas fathernode [0 0] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_MOVE|OBJ_CONTAINER_KEYDOWN iustr.IU_abmp 0 0 w h; _CBcompBitmapClick iustr.IU_compBmp @cbIUbmpClick [edstr iustr]; _CBcompBitmapResizeResource iustr.IU_compBmp @cbIUbmpResizeResource [edstr iustr]; iustr.IU_compBmp;; fun createAllIUcompBmp(edstr, l)= while (l != nil) do ( let hd l -> iustr in ( createIUcompBmp edstr iustr 10 10; createAllIUcompBmp edstr iustr.IU_lChildren; ); set l = tl l; ); 0;; fun getIUstrParentSize(edstr, iustr)= if (iustr.IU_parentstr == nil) then let _GETcontainerPositionSize edstr.ECI_ctrls.CWC_canvas -> [_ _ cw ch] in [cw ch] else let _CONVERTcompBitmapToObjNode iustr.IU_parentstr.IU_compBmp -> node in let _GETobjNodePositionSizeInContainerRef node -> [_ _ w h] in [w h];; fun getIUstrParentRealSize(edstr, iustr)= if (iustr.IU_parentstr == nil) then let _GETcontainerPositionSize edstr.ECI_ctrls.CWC_canvas -> [_ _ cw ch] in [cw ch] else let iustr.IU_parentstr.IU_bmpRealCoords -> [_ _ w h] in [w h];; fun clampBmpSizeAxis(pos, length, prpos, prlength)= let (pos - prpos) -> rpos in let if (rpos < 0) then [0 (length + rpos) (- rpos)] else [rpos length 0] -> [pos length rpos] in let if (pos >= prlength) then [prlength 0] else [pos length] -> [pos length] in let if (length < 0) then 0 else length -> length in let if (pos + length >= prlength) then (prlength - pos) else length -> length in [pos length rpos];; fun moveIUcompbmp(edstr, iustr, x, y, w, h)= let _CONVERTcompBitmapToObjNode iustr.IU_compBmp -> node in let if (iustr.IU_parentstr == nil) then [x y w h 0 0] else let iustr.IU_parentstr.IU_bmpDisplayedRect -> [prx pry prw prh] in let clampBmpSizeAxis x w prx prw -> [dx dw rx] in let clampBmpSizeAxis y h pry prh -> [dy dh ry] in [dx dy dw dh rx ry] -> [dx dy dw dh rx ry] in ( _CHANGEobjNodeCoordinates node [dx dy] 0; _SIZEobjNode node dw dh 0; set iustr.IU_bmpDisplayedRect = [rx ry dw dh]; 0; ); 0;; fun placeAxisIUInParent(anchors, coords, parentlength)= let anchors -> [a1 a2 a3] in let coords -> [pos pos2] in if (a1 && a3) then // <-> --- <-> && <-> <-> <-> [pos pos2] else if (!a1 && a2 && !a3) then // --- <-> --- ( if ((ftoi pos +. pos2) < parentlength) then [pos pos2] else [0.0 0.0] ) else // --- --- --- && --- --- <-> && <-> --- --- && --- <-> <-> && <-> <-> --- [0.0 0.0];; fun placeIUInParent(edstr, iustr)= let iustr.IU_tPosSize -> [xpos width xpos2 ypos height ypos2] in let iustr.IU_tAnchors -> [l w r t h b] in let getIUstrParentRealSize edstr iustr -> [cw ch] in let placeAxisIUInParent [l w r] [xpos xpos2] cw -> [nxpos nxpos2] in let placeAxisIUInParent [t h b] [ypos ypos2] ch -> [nypos nypos2] in mutate iustr.IU_tPosSize <- [nxpos _ nxpos2 nypos _ nypos2]; 0;; fun resizeAxisIUBmpCtrl(anchors, coords, parentlength)= let anchors -> [a1 a2 a3] in let coords -> [pos length pos2] in let itof parentlength -> fparentlength in if (!a1 && a2 && !a3) then // --- <-> --- [(ftori pos) (ftori (fparentlength -. pos -. pos2))] else if (a1 && !a2 && !a3) then // <-> --- --- [(ftori (fparentlength -. length -. pos2)) (ftori length)] else if (!a1 && a2 && a3) then // --- <-> <-> [(ftori pos) (ftori (length *. (fparentlength -. pos) /. 100.0))] else if (a1 && a2 && !a3) then // <-> <-> --- [(ftori ((100.0 -. length) *. (fparentlength -. pos2) /. 100.0)) (ftori (length *. (fparentlength -. pos2) /. 100.0))] else if (a1 && !a2 && a3) then // <-> --- <-> [(ftori (pos *. (fparentlength -. length) /. 100.0)) (ftori length)] else if (a1 && a2 && a3) then // <-> <-> <-> [(ftori (pos *. fparentlength /. 100.0)) (ftori (length *. fparentlength /. 100.0))] else // --- --- <-> && --- --- --- [(ftori pos) (ftori length)];; fun resizeIUBmpCtrl(edstr, iustr)= //addLogMessage "resizeIUBmpCtrl"; let iustr.IU_tPosSize -> [xpos width xpos2 ypos height ypos2] in let iustr.IU_tAnchors -> [l w r t h b] in let getIUstrParentRealSize edstr iustr -> [cw ch] in let resizeAxisIUBmpCtrl [l w r] [xpos width xpos2] cw -> [nx nw] in let resizeAxisIUBmpCtrl [t h b] [ypos height ypos2] ch -> [ny nh] in ( set iustr.IU_bmpRealCoords = [nx ny nw nh]; moveIUcompbmp edstr iustr nx ny nw nh; let sizelist iustr.IU_lChildren -> size in let 0 -> i in while (i < size) do ( let nth_list iustr.IU_lChildren i -> childiustr in resizeIUBmpCtrl edstr childiustr; set i = i + 1; ); ); 0;; fun setAnchorState(cmpbmp, ctrls, state)= let if (cmpbmp == ctrls.CWC_leftanchor ||cmpbmp == ctrls.CWC_widthanchor || cmpbmp == ctrls.CWC_rightanchor) then if (state == 0) then ctrls.CWC_hLinebmp else ctrls.CWC_hArrowbmp else if (state == 0) then ctrls.CWC_vLinebmp else ctrls.CWC_vArrowbmp -> bmp in let _CONVERTcompBitmapToObjNode cmpbmp -> node in ( _SETcompBitmapResource cmpbmp bmp nil; //_TOPobjNode node; _PAINTobjNode node; ); 0;; fun computeAxisIUPosSize(anchors, ctrlbmpcoords, parentlength)= let anchors -> [a1 a2 a3] in let ctrlbmpcoords -> [pos length pos2] in ( if (!a1 && a2 && !a3) then // --- <-> --- [(itof pos) nil (itof pos2)] else if (a1 && !a2 && !a3) then // <-> --- --- [nil (itof length) (itof pos2)] else if (!a1 && a2 && a3) then // --- <-> <-> let if (parentlength - pos) <= 0 then 0.0 else (itof (100 * length)) /. (itof (parentlength - pos)) -> nlength in [(itof pos) nlength nil] else if (a1 && a2 && !a3) then // <-> <-> --- let if (parentlength - pos2) <= 0 then 0.0 else (itof (100 * length)) /. (itof (parentlength - pos2)) -> nlength in [nil nlength (itof pos2)] else if (a1 && !a2 && a3) then // <-> --- <-> let if (parentlength - length) <= 0 then 0.0 else (itof (100 * pos)) /. (itof (parentlength - length)) -> npos in [npos (itof length) nil] else if (a1 && a2 && a3) then // <-> <-> <-> if parentlength <= 0 then [0.0 0.0 nil] else [((itof (100 * pos)) /. (itof parentlength)) ((itof (100 * length)) /. (itof parentlength)) nil] else // --- --- <-> && --- --- --- [(itof pos) (itof length) nil]; );; fun computeIUPosSize(edstr, iustr)= //addLogMessage "computeIUPosSize"; let getIUstrParentRealSize edstr iustr -> [cw ch] in let iustr.IU_bmpRealCoords -> [xpos ypos width height] in let [(cw - xpos - width) (ch - ypos - height)] -> [xpos2 ypos2] in let iustr.IU_tAnchors -> [l w r t h b] in let computeAxisIUPosSize [l w r] [xpos width xpos2] cw -> [ix iw ix2] in let computeAxisIUPosSize [t h b] [ypos height ypos2] ch -> [iy ih iy2] in mutate iustr.IU_tPosSize <- [ix iw ix2 iy ih iy2]; 0;; fun setPosSizeCtrlsAxisMax(anchors, coords, parentlength, ctrls)= let anchors -> [a1 a2 a3] in let coords -> [pos length pos2] in let ctrls -> [ctrlpos ctrlength] in if (!a1 && a2 && !a3) then // --- <-> --- ( setEdCtrlFloatMaxValue ctrlpos ((itof parentlength) -. pos2); setEdCtrlFloatMaxValue ctrlength ((itof parentlength) -. pos); ) else if (a1 && !a2 && !a3) then // <-> --- --- ( setEdCtrlFloatMaxValue ctrlpos ((itof parentlength) -. length); setEdCtrlFloatMaxValue ctrlength ((itof parentlength) -. pos2); ) else if (!a1 && a2 && a3) then // --- <-> <-> ( setEdCtrlFloatMaxValue ctrlpos (itof parentlength); setEdCtrlFloatMaxValue ctrlength 100.0; ) else if (a1 && a2 && !a3) then // <-> <-> --- ( setEdCtrlFloatMaxValue ctrlpos (itof parentlength); setEdCtrlFloatMaxValue ctrlength 100.0; ) else if (a1 && !a2 && a3) then // <-> --- <-> ( setEdCtrlFloatMaxValue ctrlpos 100.0; setEdCtrlFloatMaxValue ctrlength (itof parentlength); ) else if (a1 && a2 && a3) then // <-> <-> <-> ( setEdCtrlFloatMaxValue ctrlpos (100.0 -. length); setEdCtrlFloatMaxValue ctrlength (100.0 -. pos); ) else // --- --- <-> && --- --- --- ( setEdCtrlFloatMaxValue ctrlpos ((itof parentlength) -. length); setEdCtrlFloatMaxValue ctrlength ((itof parentlength) -. pos); ); 0;; fun setPosSizeCtrlsMax(edstr, iustr, ctrls)= //addLogMessage "setPosSizeCtrlsMax"; let getIUstrParentRealSize edstr iustr -> [cw ch] in let iustr.IU_tAnchors -> [l w r t h b] in let iustr.IU_tPosSize -> [xpos width xpos2 ypos height ypos2] in ( setPosSizeCtrlsAxisMax [l w r] [xpos width xpos2] cw [ctrls.CWC_ctrlxpos ctrls.CWC_ctrlwidth]; setPosSizeCtrlsAxisMax [t h b] [ypos height ypos2] ch [ctrls.CWC_ctrlypos ctrls.CWC_ctrlheight]; ); 0;; fun setPosSizeCtrlsAxisValues(anchors, coords, parentlength, ctrls)= let anchors -> [a1 a2 a3] in let coords -> [pos length pos2] in let ctrls -> [ctrlpos ctrlength] in if (!a1 && a2 && !a3) then // --- <-> --- ( setEdCtrlFloatValue ctrlpos pos; setEdCtrlFloatValue ctrlength pos2; setEdCtrlFloatMaxValue ctrlpos ((itof parentlength) -. pos2); setEdCtrlFloatMaxValue ctrlength ((itof parentlength) -. pos); ) else if (a1 && !a2 && !a3) then // <-> --- --- ( setEdCtrlFloatValue ctrlpos pos2; setEdCtrlFloatValue ctrlength length; setEdCtrlFloatMaxValue ctrlpos ((itof parentlength) -. length); setEdCtrlFloatMaxValue ctrlength ((itof parentlength) -. pos2); ) else if (!a1 && a2 && a3) then // --- <-> <-> ( setEdCtrlFloatValue ctrlpos pos; setEdCtrlFloatValue ctrlength length; setEdCtrlFloatMaxValue ctrlpos (itof parentlength); setEdCtrlFloatMaxValue ctrlength 100.0; ) else if (a1 && a2 && !a3) then // <-> <-> --- ( setEdCtrlFloatValue ctrlpos pos2; setEdCtrlFloatValue ctrlength length; setEdCtrlFloatMaxValue ctrlpos (itof parentlength); setEdCtrlFloatMaxValue ctrlength 100.0; ) else if (a1 && !a2 && a3) then // <-> --- <-> ( setEdCtrlFloatValue ctrlpos pos; setEdCtrlFloatValue ctrlength length; setEdCtrlFloatMaxValue ctrlpos 100.0; setEdCtrlFloatMaxValue ctrlength (itof parentlength); ) else if (a1 && a2 && a3) then // <-> <-> <-> ( setEdCtrlFloatValue ctrlpos pos; setEdCtrlFloatValue ctrlength length; setEdCtrlFloatMaxValue ctrlpos (100.0 -. length); setEdCtrlFloatMaxValue ctrlength (100.0 -. pos); ) else // --- --- <-> && --- --- --- ( setEdCtrlFloatValue ctrlpos pos; setEdCtrlFloatValue ctrlength length; setEdCtrlFloatMaxValue ctrlpos ((itof parentlength) -. length); setEdCtrlFloatMaxValue ctrlength ((itof parentlength) -. pos); ); 0;; fun setPosSizeCtrlsValues(edstr, selected, ctrls)= //addLogMessage "setPosSizeCtrlsValues"; let getIUstrParentRealSize edstr selected -> [cw ch] in let selected.IU_tAnchors -> [l w r t h b] in let selected.IU_tPosSize -> [xpos width xpos2 ypos height ypos2] in ( //disable callbacks to avoid useless calls setEdCtrlFloatCbChange ctrls.CWC_ctrlxpos nil; setEdCtrlFloatCbChange ctrls.CWC_ctrlwidth nil; setEdCtrlFloatCbChange ctrls.CWC_ctrlypos nil; setEdCtrlFloatCbChange ctrls.CWC_ctrlheight nil; setPosSizeCtrlsAxisValues [l w r] [xpos width xpos2] cw [ctrls.CWC_ctrlxpos ctrls.CWC_ctrlwidth]; setPosSizeCtrlsAxisValues [t h b] [ypos height ypos2] ch [ctrls.CWC_ctrlypos ctrls.CWC_ctrlheight]; //re-enable callbacks setEdCtrlFloatCbChange ctrls.CWC_ctrlxpos mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrls.CWC_ctrlwidth mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrls.CWC_ctrlypos mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrls.CWC_ctrlheight mkfun3 @cbPosSizeChange edstr; ); 0;; fun setPosSizeCtrls(edstr, selected, ctrls)= //addLogMessage "setPosSizeCtrls"; let selected.IU_tAnchors -> [l w r t h b] in ( //disable callbacks to avoid useless calls setEdCtrlFloatCbChange ctrls.CWC_ctrlxpos nil; setEdCtrlFloatCbChange ctrls.CWC_ctrlwidth nil; setEdCtrlFloatCbChange ctrls.CWC_ctrlypos nil; setEdCtrlFloatCbChange ctrls.CWC_ctrlheight nil; //Horizontal if (!l && w && !r) then // --- <-> --- ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0014"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0018"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 0; ) else if (l && !w && !r) then // <-> --- --- ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0018"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0016"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 0; ) else if (!l && w && r) then // --- <-> <-> ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0014"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0022"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 2; ) else if (l && w && !r) then // <-> <-> --- ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0018"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0022"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 2; ) else if (l && !w && r) then // <-> --- <-> ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0020"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0016"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 2; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 0; ) else if (l && w && r) then // <-> <-> <-> ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0020"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0022"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 2; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 2; ) else // --- --- <-> && --- --- --- ( setEdCtrlLabelValue ctrls.CWC_labelxpos (loc "OS3DCUSTOMINTERFACE_0014"); setEdCtrlLabelValue ctrls.CWC_labelwidth (loc "OS3DCUSTOMINTERFACE_0016"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlxpos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlwidth 0; ); //Vertical if (!t && h && !b) then // --- <-> --- ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0015"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0019"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 0; ) else if (t && !h && !b) then // <-> --- --- ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0019"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0017"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 0; ) else if (!t && h && b) then // --- <-> <-> ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0015"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0023"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 2; ) else if (t && h && !b) then // <-> <-> --- ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0019"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0023"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 2; ) else if (t && !h && b) then // <-> --- <-> ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0021"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0017"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 2; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 0; ) else if (t && h && b) then // <-> <-> <-> ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0021"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0023"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 2; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 2; ) else // --- --- <-> && --- --- --- ( setEdCtrlLabelValue ctrls.CWC_labelypos (loc "OS3DCUSTOMINTERFACE_0015"); setEdCtrlLabelValue ctrls.CWC_labelheight (loc "OS3DCUSTOMINTERFACE_0017"); setEdCtrlFloatNbDecimals ctrls.CWC_ctrlypos 0; setEdCtrlFloatNbDecimals ctrls.CWC_ctrlheight 0; ); //re-enable callbacks setEdCtrlFloatCbChange ctrls.CWC_ctrlxpos mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrls.CWC_ctrlwidth mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrls.CWC_ctrlypos mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrls.CWC_ctrlheight mkfun3 @cbPosSizeChange edstr; setPosSizeCtrlsValues edstr selected ctrls; ); 0;; fun getSelectedStr(litems, ctrltree, itemfather, selecteditem)= let getEdCtrlTreeValueByItem ctrltree itemfather -> [_ ftype] in let getEdCtrlTreeValueByItem ctrltree selecteditem -> [_ type] in let (hd litems) -> item in let item.IU_iDepth -> depth in let nil -> selectedstr in let sizelist litems -> size in let 0 -> i in ( if itemfather != nil && depth < ftype then ( while i < size && selectedstr == nil do ( let nth_list litems i -> iustr in set selectedstr = getSelectedStr iustr.IU_lChildren ctrltree itemfather selecteditem; set i = i + 1; ); ) else if itemfather != nil && depth == ftype then ( while i < size && selectedstr == nil do ( let nth_list litems i -> iustr in if iustr.IU_ctrlItem != itemfather then nil else set selectedstr = getSelectedStr iustr.IU_lChildren ctrltree itemfather selecteditem; set i = i + 1; ); ) else ( while i < size && selectedstr == nil do ( let nth_list litems i -> iustr in if iustr.IU_ctrlItem != selecteditem then nil else set selectedstr = iustr; set i = i + 1; ); ); selectedstr; );; fun isNameAvailable(list, name)= if (list == nil) then 1 else let sizelist list -> size in let 0 -> i in let 1 -> available in ( while (i < size && available == 1) do ( let nth_list list i -> interfaceunit in if (strcmpi name interfaceunit.IU_sName) != 0 && (isNameAvailable interfaceunit.IU_lChildren name) == 1 then set i = i + 1 else set available = 0; ); available; );; fun loadInterfaceUnit(edstr, selected, ctrls)= setEdCtrlTextLineValue ctrls.CWC_ctrlname selected.IU_sName; let selected.IU_tAnchors -> [l w r t h b] in ( setAnchorState ctrls.CWC_leftanchor ctrls l ; setAnchorState ctrls.CWC_widthanchor ctrls w; setAnchorState ctrls.CWC_rightanchor ctrls r; setAnchorState ctrls.CWC_topanchor ctrls t; setAnchorState ctrls.CWC_heightanchor ctrls h; setAnchorState ctrls.CWC_bottomanchor ctrls b; setPosSizeCtrls edstr selected ctrls; ); selectEdCtrlSelectByPos ctrls.CWC_ctrltype selected.IU_iType; setEdCtrlCheckState ctrls.CWC_ctrlshow selected.IU_bShowOnStart; changeSettingsWindow edstr edstr.ECI_selected selected.IU_iType; 0;; /* ********************************************************************************************* / Interface callbacks / ********************************************************************************************* */ fun cbTreeSelect(ctrlstr, itemfather, selecteditem, value, type, edstr)= //addLogMessage "cbTreeSelect"; saveInterfaceUnit edstr edstr.ECI_selected edstr.ECI_ctrls; showBmpTemp edstr edstr.ECI_selected 0; set edstr.ECI_selected = getSelectedStr edstr.ECI_lItems ctrlstr itemfather selecteditem; loadInterfaceUnit edstr edstr.ECI_selected edstr.ECI_ctrls; let edstr.ECI_ctrls -> ctrls in if (edstr.ECI_selected == nil) then ( setEdCtrlButtonEnable ctrls.CWC_ctrldupbtn 0; setEdCtrlButtonEnable ctrls.CWC_ctrldelbtn 0; setEdCtrlTextLineEnable ctrls.CWC_ctrlname 0; setEdCtrlFloatEnable ctrls.CWC_ctrlxpos 0; setEdCtrlFloatEnable ctrls.CWC_ctrlwidth 0; setEdCtrlFloatEnable ctrls.CWC_ctrlypos 0; setEdCtrlFloatEnable ctrls.CWC_ctrlheight 0; setEdCtrlSelectEnable ctrls.CWC_ctrltype 0; setEdCtrlCheckEnable ctrls.CWC_ctrlshow 0; _CHANGEobjNodeFlags ctrls.CWC_tlresize OBJ_DISABLE|OBJ_HIDE 0; _CHANGEobjNodeFlags ctrls.CWC_trresize OBJ_DISABLE|OBJ_HIDE 0; _CHANGEobjNodeFlags ctrls.CWC_blresize OBJ_DISABLE|OBJ_HIDE 0; _CHANGEobjNodeFlags ctrls.CWC_brresize OBJ_DISABLE|OBJ_HIDE 0; 0; ) else ( showBmpTemp edstr edstr.ECI_selected 1; setEdCtrlButtonEnable ctrls.CWC_ctrldupbtn 1; setEdCtrlButtonEnable ctrls.CWC_ctrldelbtn 1; setEdCtrlTextLineEnable ctrls.CWC_ctrlname 1; setEdCtrlFloatEnable ctrls.CWC_ctrlxpos 1; setEdCtrlFloatEnable ctrls.CWC_ctrlwidth 1; setEdCtrlFloatEnable ctrls.CWC_ctrlypos 1; setEdCtrlFloatEnable ctrls.CWC_ctrlheight 1; setEdCtrlSelectEnable ctrls.CWC_ctrltype 1; setEdCtrlCheckEnable ctrls.CWC_ctrlshow 1; topBmp edstr.ECI_selected; _CHANGEobjNodeFlags ctrls.CWC_tlresize OBJ_ENABLE|OBJ_VISIBLE 0; _CHANGEobjNodeFlags ctrls.CWC_trresize OBJ_ENABLE|OBJ_VISIBLE 0; _CHANGEobjNodeFlags ctrls.CWC_blresize OBJ_ENABLE|OBJ_VISIBLE 0; _CHANGEobjNodeFlags ctrls.CWC_brresize OBJ_ENABLE|OBJ_VISIBLE 0; setResizeBmpPosition edstr; 0; ); _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; 0;; fun cbDlgElementChangeParent(msg, p, ret)= if !ret then nil else let p -> [ctrlstr telem1 telem2 edstr] in let telem1 -> [e1father e1str e1val e1type] in let telem2 -> [e2father e2str e2val e2type] in let getSelectedStr edstr.ECI_lItems ctrlstr e1str.EDTITEM_father e1str -> unit1str in let getSelectedStr edstr.ECI_lItems ctrlstr e2str.EDTITEM_father e2str -> unit2str in if (unit1str == nil) then nil else ( moveEdCtrlTreeItem ctrlstr e1str e2str; if (unit1str.IU_iDepth == 0) then set edstr.ECI_lItems = remove_from_list edstr.ECI_lItems unit1str else set unit1str.IU_parentstr.IU_lChildren = remove_from_list unit1str.IU_parentstr.IU_lChildren unit1str; if (unit2str == nil) then ( set edstr.ECI_lItems = lcat edstr.ECI_lItems unit1str::nil; setIUstrDepth edstr unit1str 0; ) else ( set unit2str.IU_lChildren = lcat unit2str.IU_lChildren unit1str::nil; setIUstrDepth edstr unit1str (unit2str.IU_iDepth + 1); ); set unit1str.IU_parentstr = unit2str; destroyAllInterfaceUnitResources unit1str::nil; createAllIUcompBmp edstr unit1str::nil; placeIUInParent edstr unit1str; resizeIUBmpCtrl edstr unit1str; selEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree e1str; ); 0;; fun cbDragTree(ctrlstr, telem1, telem2, edstr)= let telem1 -> [e1father e1str e1val e1type] in let telem2 -> [e2father e2str e2val e2type] in if (e1str == e2str || e1father == e2str) then nil else _DLGrflmessage _DLGMessageBox _channel mainInterf.MINT_winMain.EDW_win (loc "OS3D_0452") strcatn (strcat (loc "OS3D_0055") " ")::e1val::" "::(loc "OS3D_0004")::" "::e2val::" ?"::nil 1 @cbDlgElementChangeParent [ctrlstr telem1 telem2 edstr]; 0;; fun cbTreeClick(ctrlstr, itemfather, clickeditem, value, type, coords, btn, edstr)= //addLogMessage "cbTreeClick"; if (btn == 3) || ((_keybdstate == 2) && btn == 1) then ( let getSelectedStr edstr.ECI_lItems ctrlstr itemfather clickeditem -> iustr in showBmp edstr iustr (!iustr.IU_bVisible); ) else nil; 0;; fun cbMarginWinSize(winstr, cw, ch, edstr)= _SIZEcontainer edstr.ECI_ctrls.CWC_canvas CIEW_EditAreaXMargin CIEW_EditAreaYMargin (cw - 2 * CIEW_EditAreaXMargin) (ch - 2 * CIEW_EditAreaYMargin); 0;; fun cbCanvasClick(canvas, edstr, x, y, btn, mask)= //addLogMessage "cbCanvasClick"; set edstr.ECI_bMove = 0; 0;; fun cbCanvasMove(canvas, edstr, x, y, mask)= if !(mask & MK_LBUTTON) || (edstr.ECI_selected == nil) || !(edstr.ECI_bMove) then nil else ( //addLogMessage "cbCanvasMove"; let edstr.ECI_selected.IU_tMoveRefPoint -> [lx ly] in let edstr.ECI_selected.IU_bmpRealCoords -> [bx by bw bh] in let getIUstrParentRealSize edstr edstr.ECI_selected -> [cw ch] in let [(x - lx) (y - ly)] -> [mx my] in let if (edstr.ECI_bMove == 1) then // Move element let [(max 0 (min mx (cw - bw))) (max 0 (min my (ch - bh)))] -> [tx ty] in [tx ty bw bh] else if (edstr.ECI_bMove == 2) then // Top left resize let [(max 0 (min mx (bx + bw))) (max 0 (min my (by + bh)))] -> [tx ty] in let [(bw - (tx - bx)) (bh - (ty - by))] -> [tw th] in [tx ty tw th] else if (edstr.ECI_bMove == 3) then // Top right resize let (max 0 (min mx (cw - bx))) -> tw in let max 0 (min my (by + bh)) -> ty in let bh - (ty - by) -> th in [bx ty tw th] else if (edstr.ECI_bMove == 4) then // Bottom left resize let max 0 (min mx (bx + bw)) -> tx in let bw - (tx - bx) -> tw in let (max 0 (min my (ch - by))) -> th in [tx by tw th] else if (edstr.ECI_bMove == 5) then // Bottom right resize let [(max 0 (min mx (cw - bx))) (max 0 (min my (ch - by)))] -> [tw th] in [bx by tw th] else [bx by bw bh] -> [nx ny nw nh] in ( //addLogMessage strcatnSep "bMove :"::(itoa edstr.ECI_bMove)::"bcoords :"::(itoa bx)::(itoa by)::(itoa bw)::(itoa bh)::"ncoords :"::(itoa nx)::(itoa ny)::(itoa nw)::(itoa nh)::nil " "; //addLogMessage strcatnSep "bMove :"::(itoa edstr.ECI_bMove)::"lastclick :"::(itoa lx)::(itoa ly)::"move :"::(itoa x)::(itoa y)::"ncoords :"::(itoa nx)::(itoa ny)::(itoa nw)::(itoa nh)::nil " "; set edstr.ECI_selected.IU_bmpRealCoords = [nx ny nw nh]; moveIUcompbmp edstr edstr.ECI_selected nx ny nw nh; computeIUPosSize edstr edstr.ECI_selected; //resizeIUBmpCtrl edstr edstr.ECI_selected; setPosSizeCtrlsValues edstr edstr.ECI_selected edstr.ECI_ctrls; let sizelist edstr.ECI_selected.IU_lChildren -> size in let 0 -> i in while (i < size) do ( let nth_list edstr.ECI_selected.IU_lChildren i -> childiustr in resizeIUBmpCtrl edstr childiustr; set i = i + 1; ); ); setResizeBmpPosition edstr; _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; ); 0;; fun cbCanvasSize(canvas, edstr, state, cw, ch)= let sizelist edstr.ECI_lItems -> size in let 0 -> i in while (i < size) do ( let nth_list edstr.ECI_lItems i -> iustr in ( resizeIUBmpCtrl edstr iustr; setPosSizeCtrlsMax edstr iustr edstr.ECI_ctrls; ); set i = i + 1; ); setResizeBmpPosition edstr; _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; 0;; fun cbResizeBmpClick(compbmp, p, x, y, btn, mask)= //addLogMessage "cbResizeBmpClick"; let p -> [edstr moveindex] in if (btn != LBUTTON) then nil else ( let _CONVERTcompBitmapToObjNode edstr.ECI_selected.IU_compBmp -> objnode in let _GETobjNodePositionSizeInFatherRef objnode -> [bx by bw bh] in let if moveindex == 3 || moveindex == 5 then x - bw else x - bx -> lx in let if moveindex == 4 || moveindex == 5 then y - bh else y - by -> ly in set edstr.ECI_selected.IU_tMoveRefPoint = [lx ly]; set edstr.ECI_bMove = moveindex; ); 0;; fun cbIUbmpClick(compbmp, p, x, y, btn, mask)= //addLogMessage "cbIUbmpClick"; let p -> [edstr iustr] in if (btn != LBUTTON) then nil else ( let _CONVERTcompBitmapToObjNode iustr.IU_compBmp -> objnode in let _GETobjNodePositionSizeInFatherRef objnode -> [bx by bw bh] in ( set iustr.IU_tMoveRefPoint = [x - bx y - by]; selEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree iustr.IU_ctrlItem; ); set edstr.ECI_bMove = 1; ); 0;; fun cbIUbmpResizeResource(cmpbmp, p, w, h, bmpcoords)= let p -> [edstr iustr] in let createIUbmp _channel w h iustr.IU_iBmpColor 0x000000 -> newbmp in ( _DSalphaBitmap iustr.IU_abmp; set iustr.IU_abmp = newbmp; [newbmp [0 0 w h]]; );; fun cbAnchorBmpClick(cmpbmp, p, x, y, btn, mask)= //addLogMessage "cbAnchorBmpClick"; let p -> [edstr index] in let edstr.ECI_selected.IU_tAnchors -> [l w r t h b] in let edstr.ECI_ctrls -> ctrls in if (btn != LBUTTON || edstr.ECI_selected == nil) then nil else ( if index == 0 then let if l then 0 else 1 -> state in ( setAnchorState ctrls.CWC_leftanchor ctrls state; mutate edstr.ECI_selected.IU_tAnchors <- [state _ _ _ _ _]; ) else if index == 1 then let if w then 0 else 1 -> state in ( setAnchorState ctrls.CWC_widthanchor ctrls state; mutate edstr.ECI_selected.IU_tAnchors <- [_ state _ _ _ _]; ) else if index == 2 then let if r then 0 else 1 -> state in ( setAnchorState ctrls.CWC_rightanchor ctrls state; mutate edstr.ECI_selected.IU_tAnchors <- [_ _ state _ _ _]; ) else if index == 3 then let if t then 0 else 1 -> state in ( setAnchorState ctrls.CWC_topanchor ctrls state; mutate edstr.ECI_selected.IU_tAnchors <- [_ _ _ state _ _]; ) else if index == 4 then let if h then 0 else 1 -> state in ( setAnchorState ctrls.CWC_heightanchor ctrls state; mutate edstr.ECI_selected.IU_tAnchors <- [_ _ _ _ state _]; ) else if index == 5 then let if b then 0 else 1 -> state in ( setAnchorState ctrls.CWC_bottomanchor ctrls state; mutate edstr.ECI_selected.IU_tAnchors <- [_ _ _ _ _ state]; ) else nil; computeIUPosSize edstr edstr.ECI_selected; setPosSizeCtrls edstr edstr.ECI_selected ctrls; ); 0;; fun cbSetElementName(ctrlstr, value, edstr)= let edstr.ECI_selected -> selected in let strtrim getEdCtrlTextLineValue ctrlstr -> name in if (name == nil) || ((strcmpi name "") == 0) || !(isNameAvailable edstr.ECI_lItems name) then ( _DLGMessageBox _channel edstr.ECI_ctrls.CWC_settingsWinstr.EDW_win (loc "OS3DCUSTOMINTERFACE_0063") (loc "OS3DCUSTOMINTERFACE_0064") 0; 0; ) else ( setEdCtrlTreeLabel edstr.ECI_ctrls.CWC_ctrltree selected.IU_ctrlItem name; set selected.IU_sName = name; 0; ); 0;; fun cbPosSizeChange(ctrlstr, value, edstr)= //addLogMessage "cbPosSizeChange"; let edstr.ECI_selected.IU_tAnchors -> [l w r t h b] in ( if (ctrlstr == edstr.ECI_ctrls.CWC_ctrlxpos) then ( if (l && !r) then mutate edstr.ECI_selected.IU_tPosSize <- [_ _ value _ _ _] else mutate edstr.ECI_selected.IU_tPosSize <- [value _ _ _ _ _]; ) else if (ctrlstr == edstr.ECI_ctrls.CWC_ctrlwidth) then ( if (!l && w && !r) then mutate edstr.ECI_selected.IU_tPosSize <- [_ _ value _ _ _] else mutate edstr.ECI_selected.IU_tPosSize <- [_ value _ _ _ _]; ) else if (ctrlstr == edstr.ECI_ctrls.CWC_ctrlypos) then ( if (t && !b) then mutate edstr.ECI_selected.IU_tPosSize <- [_ _ _ _ _ value] else mutate edstr.ECI_selected.IU_tPosSize <- [_ _ _ value _ _]; ) else if (ctrlstr == edstr.ECI_ctrls.CWC_ctrlheight) then ( if (!t && h && !b) then mutate edstr.ECI_selected.IU_tPosSize <- [_ _ _ _ _ value] else mutate edstr.ECI_selected.IU_tPosSize <- [_ _ _ _ value _]; ) else nil; //needed to actualize float ctrls maximums setPosSizeCtrlsMax edstr edstr.ECI_selected edstr.ECI_ctrls; //resize selected bmp according to new coords resizeIUBmpCtrl edstr edstr.ECI_selected; setResizeBmpPosition edstr; _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; ); 0;; fun cbTypeSelect(ctrlstr, pos, value, edstr)= set edstr.ECI_selected.IU_iBmpColor = getBmpColor pos; //force resize to update bmp color /*let _CONVERTcompBitmapToObjNode edstr.ECI_selected.IU_compBmp -> node in let _GETobjNodePositionSizeInFatherRef node -> [bx by bw bh] in ( _SIZEobjNode node (bw + 1) (bh + 1) 0; _SIZEobjNode node bw bh 1; );*/ let edstr.ECI_selected.IU_bmpDisplayedRect -> [_ _ w h] in let createIUbmp _channel w h edstr.ECI_selected.IU_iBmpColor 0x000000 -> newbmp in ( _SETcompBitmapResource edstr.ECI_selected.IU_compBmp newbmp [0 0 w h]; _DSalphaBitmap edstr.ECI_selected.IU_abmp; set edstr.ECI_selected.IU_abmp = newbmp; _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; ); changeSettingsWindow edstr edstr.ECI_selected pos; 0;; fun cbTreeTopBtn(ctrlstr, edstr)= let edstr.ECI_ctrls -> ctrls in let edstr.ECI_selected -> iustr in if (iustr == nil) then nil else ( if (iustr.IU_iDepth == 0) then ( let pos_in_list edstr.ECI_lItems iustr 0 -> npos in if (npos == 0) then nil else ( let hd edstr.ECI_lItems -> firstiustr in ( if (npos == 1) then nil else changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem firstiustr.IU_ctrlItem; changeEdCtrlTreeItemPos ctrls.CWC_ctrltree firstiustr.IU_ctrlItem iustr.IU_ctrlItem; selEdCtrlTreeItem ctrls.CWC_ctrltree iustr.IU_ctrlItem; ); set edstr.ECI_lItems = iustr::(remove_from_list edstr.ECI_lItems iustr); ); ) else ( let pos_in_list iustr.IU_parentstr.IU_lChildren iustr 0 -> npos in if (npos == 0) then nil else ( let hd iustr.IU_parentstr.IU_lChildren -> firstiustr in ( if (npos == 1) then nil else changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem firstiustr.IU_ctrlItem; changeEdCtrlTreeItemPos ctrls.CWC_ctrltree firstiustr.IU_ctrlItem iustr.IU_ctrlItem; selEdCtrlTreeItem ctrls.CWC_ctrltree iustr.IU_ctrlItem; ); set iustr.IU_parentstr.IU_lChildren = iustr::(remove_from_list iustr.IU_parentstr.IU_lChildren iustr); ); ); ); 0;; fun cbTreeUpBtn(ctrlstr, edstr)= let edstr.ECI_ctrls -> ctrls in let edstr.ECI_selected -> iustr in if (iustr == nil) then nil else ( if (iustr.IU_iDepth == 0) then ( let pos_in_list edstr.ECI_lItems iustr 0 -> npos in if (npos == 0) then nil else ( if (npos == 1) then let hd edstr.ECI_lItems -> firstiustr in ( changeEdCtrlTreeItemPos ctrls.CWC_ctrltree firstiustr.IU_ctrlItem iustr.IU_ctrlItem; selEdCtrlTreeItem ctrls.CWC_ctrltree iustr.IU_ctrlItem; ) else let nth_list edstr.ECI_lItems (npos - 2) -> previustr in changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem previustr.IU_ctrlItem; set edstr.ECI_lItems = add_nth_in_list (remove_from_list edstr.ECI_lItems iustr) (npos - 1) iustr; ); ) else ( let pos_in_list iustr.IU_parentstr.IU_lChildren iustr 0 -> npos in if (npos == 0) then nil else ( if (npos == 1) then let hd iustr.IU_parentstr.IU_lChildren -> firstiustr in ( changeEdCtrlTreeItemPos ctrls.CWC_ctrltree firstiustr.IU_ctrlItem iustr.IU_ctrlItem; selEdCtrlTreeItem ctrls.CWC_ctrltree iustr.IU_ctrlItem; ) else let nth_list iustr.IU_parentstr.IU_lChildren (npos - 2) -> previustr in changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem previustr.IU_ctrlItem; set iustr.IU_parentstr.IU_lChildren = add_nth_in_list (remove_from_list iustr.IU_parentstr.IU_lChildren iustr) (npos - 1) iustr; ); ); ); 0;; fun cbTreeDownBtn(ctrlstr, edstr)= let edstr.ECI_ctrls -> ctrls in let edstr.ECI_selected -> iustr in if (iustr == nil) then nil else ( if (iustr.IU_iDepth == 0) then ( let sizelist edstr.ECI_lItems -> size in let pos_in_list edstr.ECI_lItems iustr 0 -> npos in if (npos == (size - 1)) then nil else ( let nth_list edstr.ECI_lItems (npos + 1) -> nextiustr in changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem nextiustr.IU_ctrlItem; set edstr.ECI_lItems = add_nth_in_list (remove_from_list edstr.ECI_lItems iustr) (npos + 1) iustr; ); ) else ( let sizelist iustr.IU_parentstr.IU_lChildren -> size in let pos_in_list iustr.IU_parentstr.IU_lChildren iustr 0 -> npos in if (npos == (size - 1)) then nil else ( let nth_list iustr.IU_parentstr.IU_lChildren (npos + 1) -> nextiustr in changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem nextiustr.IU_ctrlItem; set iustr.IU_parentstr.IU_lChildren = add_nth_in_list (remove_from_list iustr.IU_parentstr.IU_lChildren iustr) (npos + 1) iustr; ); ); ); 0;; fun cbTreeBottomBtn(ctrlstr, edstr)= let edstr.ECI_ctrls -> ctrls in let edstr.ECI_selected -> iustr in if (iustr == nil) then nil else ( if (iustr.IU_iDepth == 0) then ( let (sizelist edstr.ECI_lItems) - 1 -> lpos in let pos_in_list edstr.ECI_lItems iustr 0 -> npos in if (npos == lpos) then nil else ( let nth_list edstr.ECI_lItems lpos -> lastiustr in changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem lastiustr.IU_ctrlItem; set edstr.ECI_lItems = lcat (remove_from_list edstr.ECI_lItems iustr) iustr::nil; ); ) else ( let (sizelist iustr.IU_parentstr.IU_lChildren) - 1 -> lpos in let pos_in_list iustr.IU_parentstr.IU_lChildren iustr 0 -> npos in if (npos == lpos) then nil else ( let nth_list iustr.IU_parentstr.IU_lChildren lpos -> lastiustr in changeEdCtrlTreeItemPos ctrls.CWC_ctrltree iustr.IU_ctrlItem lastiustr.IU_ctrlItem; set iustr.IU_parentstr.IU_lChildren = lcat (remove_from_list iustr.IU_parentstr.IU_lChildren iustr) iustr::nil; ); ); ); 0;; /* ********************************************************************************************* / Add/Select/Destroy InterfaceUnit functions / ********************************************************************************************* */ fun cbAddElement(ctrlstr, p)= let p -> [edstr ctrlnew] in let strtrim getEdCtrlTextLineValue ctrlnew -> name in if (name == nil) || ((strcmpi name "") == 0) || !(isNameAvailable edstr.ECI_lItems name) then ( _DLGMessageBox _channel edstr.ECI_ctrls.CWC_settingsWinstr.EDW_win (loc "OS3DCUSTOMINTERFACE_0063") (loc "OS3DCUSTOMINTERFACE_0064") 0; 0; ) else ( let if (edstr.ECI_selected != nil) then [edstr.ECI_selected.IU_ctrlItem (edstr.ECI_selected.IU_iDepth + 1)] else [edstr.ECI_ctrls.CWC_treerootitem 0] -> [parentitem depth] in let 0 -> type in let addEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree parentitem name name depth (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> newitem in let mkInterfaceUnit[nil nil nil nil 0 newitem nil 1 edstr.ECI_selected name depth type nil [0 0 1 0 0 1] 1 0 nil 0 "" "Sans" 10 0x000000 0 0 0 0 0 0 0 0.0 0.0 10000.0 1.0 1 nil 1 0 "" 0 1 0 0 20 0 0 3 4 5 5 0xffffffff 1 0x000000ff nil nil nil] -> iustr in ( let getIUstrParentSize edstr iustr -> [cw ch] in let [(min (max (cw - 10) 10) 100) (min (max (ch - 10) 10) 100)] -> [w h] in ( set iustr.IU_bmpRealCoords = [0 0 w h]; set iustr.IU_bmpDisplayedRect = [0 0 w h]; set iustr.IU_tPosSize = [0.0 (itof w) 0.0 0.0 (itof h) 0.0]; createIUcompBmp edstr iustr w h; ); _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; if edstr.ECI_selected != nil then set edstr.ECI_selected.IU_lChildren = lcat edstr.ECI_selected.IU_lChildren iustr::nil else set edstr.ECI_lItems = lcat edstr.ECI_lItems iustr::nil; selEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree newitem; ); setEdCtrlTextLineValue ctrlnew ""; ); 0;; fun cbValidateElement(ctrlstr, value, p)= cbAddElement nil p; 0;; fun duplicateElement(edstr, iustrtodup, parentstr)= let strcat iustrtodup.IU_sName " (1)" -> name in let 1 -> i in ( while !(isNameAvailable edstr.ECI_lItems name) do ( set i = i + 1; set name = strcatn iustrtodup.IU_sName::" ("::(itoa i)::")"::nil; ); let if (parentstr == nil) then edstr.ECI_ctrls.CWC_treerootitem else parentstr.IU_ctrlItem -> parentitem in let addEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree parentitem name name iustrtodup.IU_iDepth (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> newitem in let duplicateInterfaceUnit iustrtodup newitem parentstr name -> iustr in ( createIUcompBmp edstr iustr 10 10; //resizeIUBmpCtrl edstr iustr; if iustr.IU_parentstr != nil then set iustr.IU_parentstr.IU_lChildren = lcat iustr.IU_parentstr.IU_lChildren iustr::nil else set edstr.ECI_lItems = lcat edstr.ECI_lItems iustr::nil; if (iustrtodup.IU_lChildren == nil) then nil else ( set i = 0; let sizelist iustrtodup.IU_lChildren -> size in while (i < size) do ( let nth_list iustrtodup.IU_lChildren i -> childiustr in duplicateElement edstr childiustr iustr; set i = i + 1; ); ); iustr; ); );; fun cbDuplicateElement(ctrlstr, p)= let p -> [edstr] in let edstr.ECI_selected -> selected in if (selected == nil) then nil else ( saveInterfaceUnit edstr selected edstr.ECI_ctrls; let duplicateElement edstr selected selected.IU_parentstr -> iustr in ( resizeIUBmpCtrl edstr iustr; _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; selEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree iustr.IU_ctrlItem; ); ); 0;; fun cbDelElement(ctrlstr, p)= let p -> [edstr] in let edstr.ECI_selected -> selected in ( delEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree selected.IU_ctrlItem; destroyInterfaceUnitResources selected; if selected.IU_parentstr == nil then set edstr.ECI_lItems = remove_from_list edstr.ECI_lItems selected else set selected.IU_parentstr.IU_lChildren = remove_from_list selected.IU_parentstr.IU_lChildren selected; _PAINTcontainer edstr.ECI_ctrls.CWC_canvas; ); 0;; /* ********************************************************************************************* / Configuration Window creation functions / ********************************************************************************************* */ fun fillTreeCanvas(edstr, iulisttosave, parentstr)= let nil -> litems in if (iulisttosave == nil) then nil else ( let sizelist iulisttosave -> size in let 0 -> i in while (i < size) do ( let nth_list iulisttosave i -> iustrts in let duplicateInterfaceUnit iustrts nil parentstr nil -> iustr in let if (parentstr == nil) then edstr.ECI_ctrls.CWC_treerootitem else iustr.IU_parentstr.IU_ctrlItem -> parentitem in let addEdCtrlTreeItem edstr.ECI_ctrls.CWC_ctrltree parentitem iustr.IU_sName iustr.IU_sName iustr.IU_iDepth (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> newitem in ( createIUcompBmp edstr iustr 10 10; set iustr.IU_ctrlItem = newitem; resizeIUBmpCtrl edstr iustr; fillTreeCanvas edstr iustrts.IU_lChildren iustr; set litems = lcat litems iustr::nil; ); set i = i + 1; ); if parentstr == nil then set edstr.ECI_lItems = litems else set parentstr.IU_lChildren = litems; ); 0;; fun cbCanvasKeyDown(cont, edstr, key, scode)= //addLogMessage strcatnSep "From canvas; key:"::(itoa key)::"scancode:"::(itoa scode)::nil " "; if (scode == 65535) then cbDelElement nil [edstr] else nil; 0;; fun cbTreeKeyDown(ctrltree, itemfather, item, value, type, key, scode, edstr)= //addLogMessage strcatnSep "From tree; key:"::(itoa key)::"scancode:"::(itoa scode)::nil " "; if (scode == 65535) then cbDelElement nil [edstr] else nil; 0;; fun crAnchorCtrl(inst, menuwinstr, channel, xpos, ypos, edstr)= let getPluginDirectory (getInstancePlugin inst) -> plugitpath in let G2DloadAlphaBmp channel (strcat plugitpath "/res/hline.png") -> hLinebmp in let G2DloadAlphaBmp channel (strcat plugitpath "/res/harrow.png") -> hArrowbmp in let G2DloadAlphaBmp channel (strcat plugitpath "/res/vline.png") -> vLinebmp in let G2DloadAlphaBmp channel (strcat plugitpath "/res/varrow.png") -> vArrowbmp in let if menuwinstr.EDW_virtualWin == nil then menuwinstr.EDW_win else menuwinstr.EDW_virtualWin -> father in let _CRcontainerFromObjWin channel father xpos ypos 120 120 CO_CHILDINSIDE 0xffffff "" -> cont in //let _FILLbitmap _CRbitmap channel 40 40 0xd0d0d0 -> bmp in //let _CRalphaBitmap channel bmp nil nil nil -> squareabmp in let createIUbmp channel 40 40 0xd0d0d0 0x484848 -> squareabmp in let _CRcompBitmap channel cont nil [40 40] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE squareabmp 0 0 40 40 -> square in let _CRcompBitmap channel cont nil [0 52] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE hLinebmp 0 0 40 16 -> leftanchor in let _CRcompBitmap channel cont nil [40 52] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE hLinebmp 0 0 40 16 -> widthanchor in let _CRcompBitmap channel cont nil [80 52] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE hLinebmp 0 0 40 16 -> rightanchor in let _CRcompBitmap channel cont nil [52 0] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE vLinebmp 0 0 16 40 -> topanchor in let _CRcompBitmap channel cont nil [52 40] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE vLinebmp 0 0 16 40 -> heightanchor in let _CRcompBitmap channel cont nil [52 80] OBJ_ENABLE|OBJ_VISIBLE OBJ_CONTAINER_CLICK|OBJ_CONTAINER_MOVE vLinebmp 0 0 16 40 -> bottomanchor in ( //_DSbitmap bmp; _CBcompBitmapClick leftanchor @cbAnchorBmpClick [edstr 0]; _CBcompBitmapClick widthanchor @cbAnchorBmpClick [edstr 1]; _CBcompBitmapClick rightanchor @cbAnchorBmpClick [edstr 2]; _CBcompBitmapClick topanchor @cbAnchorBmpClick [edstr 3]; _CBcompBitmapClick heightanchor @cbAnchorBmpClick [edstr 4]; _CBcompBitmapClick bottomanchor @cbAnchorBmpClick [edstr 5]; _PAINTcontainer cont; [cont leftanchor widthanchor rightanchor topanchor heightanchor bottomanchor squareabmp hLinebmp hArrowbmp vLinebmp vArrowbmp]; );; fun createResizeCtrls(inst, channel, canvas, edstr)= let getPluginDirectory (getInstancePlugin inst) -> plugitpath in let G2DloadAlphaBmp channel (strcat plugitpath "/res/resizezone.png") -> resizebmp in let _CRcompBitmap channel canvas nil [0 0] OBJ_DISABLE|OBJ_HIDE OBJ_CONTAINER_MOVE|OBJ_CONTAINER_KEYDOWN resizebmp 0 0 12 12 -> tlresize in let _CRcompBitmap channel canvas nil [0 0] OBJ_DISABLE|OBJ_HIDE OBJ_CONTAINER_MOVE|OBJ_CONTAINER_KEYDOWN resizebmp 0 0 12 12 -> trresize in let _CRcompBitmap channel canvas nil [0 0] OBJ_DISABLE|OBJ_HIDE OBJ_CONTAINER_MOVE|OBJ_CONTAINER_KEYDOWN resizebmp 0 0 12 12 -> blresize in let _CRcompBitmap channel canvas nil [0 0] OBJ_DISABLE|OBJ_HIDE OBJ_CONTAINER_MOVE|OBJ_CONTAINER_KEYDOWN resizebmp 0 0 12 12 -> brresize in let _CONVERTcompBitmapToObjNode tlresize -> tlnode in let _CONVERTcompBitmapToObjNode trresize -> trnode in let _CONVERTcompBitmapToObjNode blresize -> blnode in let _CONVERTcompBitmapToObjNode brresize -> brnode in ( _CBcompBitmapClick tlresize @cbResizeBmpClick [edstr 2]; _CBcompBitmapClick trresize @cbResizeBmpClick [edstr 3]; _CBcompBitmapClick blresize @cbResizeBmpClick [edstr 4]; _CBcompBitmapClick brresize @cbResizeBmpClick [edstr 5]; [tlnode trnode blnode brnode]; );; fun getCanvasSize(posstr, bg, maxw, maxh)= let bg -> [isbcolor bgpath bgresizeflag] in let [maxw maxh] -> size in ( if posstr.IP_iMode == 0 then ( let posstr.IP_pos2Dstr -> pos2Dstr in let pos2Dstr.IP2D_tSize -> [w h] in let pos2Dstr.IP2D_tRatiosize -> [_ _ pw ph _ _ ow oh] in let if (pw == 0) then (ftoi w) else (ftoi w) * (maxw - CIEW_MenuWidth - 22 - 2 * CIEW_EditAreaXMargin + ow) / 100 -> width in let if (ph == 0) then (ftoi h) else (ftoi h) * (maxh - 28 - 22 - 2 * CIEW_EditAreaYMargin + oh) / 100 -> height in set size = [width height]; ) else if posstr.IP_iMode == 1 then ( let posstr.IP_posmatstr -> posmatstr in /*let V3DgetSession c3dXsession -> scene in let SO3SceneGetObject scene posmatstr.IPMAT_sObjectName -> obj in let SO3SceneGetMaterial scene (SO3EntityGetResourceGroup obj) posmatstr.IPMAT_sMaterialName -> mat in let SO3MaterialGetTexture mat posmatstr.IPMAT_iTechnique posmatstr.IPMAT_iPass posmatstr.IPMAT_iTexture -> texture in [400 300]*/ let posmatstr.IPMAT_tSize -> [w h] in set size = [(ftoi w) (ftoi h)]; ) else if posstr.IP_iMode == 2 then ( let posstr.IP_pos3Dstr -> pos3Dstr in let pos3Dstr.IP3D_tSize -> [w h] in set size = [(ftoi w) (ftoi h)]; ) else if posstr.IP_iMode == 3 then ( let posstr.IP_posvrstr -> posvrstr in let posvrstr.IPVR_tSize -> [w h] in set size = [(ftoi w) (ftoi h)]; ) else nil; if (isbcolor || (bgpath == nil) || (!strcmp bgpath "") || (bgresizeflag != 2)) then nil else ( let size -> [width height] in let G2DloadBmp _channel bgpath -> bgbmp in let if (bgbmp == nil) then size else [width (ftoi ((itof width) *. (G2DgetBitmapRatioH bgbmp width height)))] -> nsize in set size = nsize; ); size; );; fun getConfigurationWindowSize(posstr, bg, maxw, maxh)= let getCanvasSize posstr bg maxw maxh -> [w h] in let (w + 2 * CIEW_EditAreaXMargin) -> taw in let (h + 2 * CIEW_EditAreaYMargin) -> tah in let min (taw + 22) (maxw - CIEW_MenuWidth - 16 - 2) -> rtaw in let min (max (tah + 22) (CIEW_MenuHeight + 335 + 40 + 2)) (maxh - 28) -> rtah in let max (rtaw + CIEW_MenuWidth + 16 + 2) 500 -> iw in let max (rtah + 28) CIEW_MenuHeight + 40 + 2 -> ih in [iw ih rtaw rtah taw tah w h];; fun cbBtnConfigWindow(ctrlbtn, p)= let p -> [inst ewinstr posstr edstr iapplybtn [ctrlisbcolor ctrlbcolor ctrlpath ctrlbgresizeflag]] in let getEdCtrlCheckState ctrlisbcolor -> isbcolor in let getEdCtrlColorButtonColor ctrlbcolor -> bcolor in let if isbcolor then G2Dbgra2bgr bcolor else 0x7d7d7d -> bcolor in let getEdCtrlTextLineValue ctrlpath -> bgpath in let getSelectedEdCtrlSelectPos ctrlbgresizeflag -> bgresizeflag in let 10 -> ypos in ( setEdCtrlButtonEnable ctrlbtn 0; let _GETdesktopSize -> [sw sh] in let _GETscreenPos -> [mx my] in let [mx + 10 my - 10] -> [mx my] in let 40 -> hmargin in let getConfigurationWindowSize posstr [isbcolor bgpath bgresizeflag] (sw * 8 / 10) (sh * 8 / 10) -> [iw ih rtaw rtah taw tah w h] 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 setEdWindowIcon (crEdModalDialogWindow ewinstr.EDW_channel ewinstr x y iw ih WN_HIDDEN|WN_NOSCOL|WN_MENU|WN_SIZEBOX|WN_MAXBOX nil (loc "OS3DCUSTOMINTERFACE_0007")) sWinDlgIcon -> configwinstr in let crEdWindowToolBar configwinstr 0 0 iw 28 5 1 EdDefaultTheme.EDT_iToolBarColor ETB_HORIZONTAL -> tbstr in //let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/tb_help.png" -> apng in //let crEdToolBarButton tbstr apng ETB_ALIGN_RIGHT (loc "OS3D_0186") mkfun5 @cbTbBtnPluginHelp /*plugstr.PLUG_sHelp*/ nil -> tbhelp in let crEdScrollWindow _channel configwinstr 0 28 rtaw /*rtah*/(ih - 28) WN_CHILDINSIDE|WN_VSCROLL|WN_HSCROLL EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> scrlwinstr in let crEdWindow _channel scrlwinstr 0 (if tah > rtah then 0 else ((ih - 28 - tah) / 2)) taw tah WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW|EDWIN_RESIZE_MH nil nil -> marginwinstr in let if marginwinstr.EDW_virtualWin == nil then marginwinstr.EDW_win else marginwinstr.EDW_virtualWin -> father in let if (isbcolor || (bgpath == nil) || (!strcmp bgpath "")) then _CRcontainerFromObjWin _channel father CIEW_EditAreaXMargin CIEW_EditAreaYMargin w h CO_CHILDINSIDE|CO_NOBORDER bcolor "" else let crEdCtrlBitmapExt marginwinstr CIEW_EditAreaXMargin CIEW_EditAreaYMargin w h bgpath bcolor nil bgresizeflag -> ctrlbmp in let ctrlbmp.EDC_bitmap -> [cont _ _ _ _ _ _ _ _] in cont -> canvas in let createResizeCtrls inst _channel canvas edstr -> [tlresize trresize blresize brresize] in let crEdScrollWindow _channel configwinstr (rtaw + 1) 28 CIEW_MenuWidth + 16 (ih - 28 - 40) WN_CHILDINSIDE|WN_VSCROLL EDWIN_RESIZE_LW|EDWIN_RESIZE_MH nil nil -> scrlmenuwinstr in let crEdWindow _channel scrlmenuwinstr 0 0 CIEW_MenuWidth CIEW_MenuHeight WN_CHILDINSIDE|WN_NOBORDER nil EDWIN_GROUP nil -> menuwinstr in //let crEdWindow _channel configwinstr (rtaw + 1) 28 CIEW_MenuWidth (ih - 28 - 40) WN_CHILDINSIDE EDWIN_RESIZE_LW|EDWIN_RESIZE_MH EDWIN_GROUP nil -> menuwinstr in let crEdFrameWindow _channel menuwinstr 0 0 CIEW_MenuWidth 235 EDWIN_RESIZE_MW nil (loc "OS3DCUSTOMINTERFACE_0011") (loc "OS3DCUSTOMINTERFACE_0005") -> winfrm in let crEdWindow _channel winfrm 0 18 CIEW_MenuWidth 215 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlTree winstr 10 ypos (CIEW_MenuWidth - 45) 150 EDWIN_RESIZE_MW -> ctrltree in let addEdCtrlTreeItem ctrltree nil "Interface" "Interface" (-1) (strcat APPBASEDIR "os3deditor/res/tree_menu.png") -> rootitem in let G2DloadBmpFile _channel _checkpack strcat APPBASEDIR "os3deditor/res/toparrow.png" -> topbmp in let crEdCtrlButtonBitmap winstr (CIEW_MenuWidth - 30) ypos 20 20 topbmp nil -> topbtn in let G2DloadBmpFile _channel _checkpack strcat APPBASEDIR "os3deditor/res/uparrow.png" -> upbmp in let crEdCtrlButtonBitmap winstr (CIEW_MenuWidth - 30) (ypos + 25) 20 20 upbmp nil -> upbtn in let G2DloadBmpFile _channel _checkpack strcat APPBASEDIR "os3deditor/res/downarrow.png" -> downbmp in let crEdCtrlButtonBitmap winstr (CIEW_MenuWidth - 30) (ypos + 105) 20 20 downbmp nil -> downbtn in let G2DloadBmpFile _channel _checkpack strcat APPBASEDIR "os3deditor/res/bottomarrow.png" -> bottombmp in let crEdCtrlButtonBitmap winstr (CIEW_MenuWidth - 30) (ypos + 130) 20 20 bottombmp nil -> bottombtn in //let crEdWindowToolBar winstr (CIEW_MenuWidth - 30) ypos 20 150 5 4 0xffffff00 ETB_VERTICAL -> treetbstr in //let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/btnopopen.png" -> apng in //let crEdToolBarButton treetbstr apng ETB_ALIGN_LEFT (loc "OS3D_0260") nil -> tbnew in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 155) + 2) 50 20 (loc "OS3DCUSTOMINTERFACE_0013") nil -> labelnew in let crEdCtrlTextLine winstr 70 ypos (CIEW_MenuWidth - 60 - 20) 20 "" nil EDWIN_RESIZE_MW -> ctrlnew in let crEdCtrlButton winstr (CIEW_MenuWidth - 280) (set ypos = ypos + 25) 100 20 (loc "OS3DCUSTOMINTERFACE_0002") nil -> addbtn in let crEdCtrlButton winstr (CIEW_MenuWidth - 175) ypos 80 20 (loc "OS3DCUSTOMINTERFACE_0003") nil -> dupbtn in let crEdCtrlButton winstr (CIEW_MenuWidth - 90) ypos 80 20 (loc "OS3DCUSTOMINTERFACE_0004") nil -> delbtn in let crEdFrameWindow _channel menuwinstr 0 0 CIEW_MenuWidth 220 EDWIN_RESIZE_MW nil (loc "OS3DCUSTOMINTERFACE_0012") (loc "OS3DCUSTOMINTERFACE_0005") -> winfrm in let crEdWindow _channel winfrm 0 18 CIEW_MenuWidth (200 + 335) WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crAnchorCtrl inst winstr _channel 10 (set ypos = 10) edstr -> [cont leftanchor widthanchor rightanchor topanchor heightanchor bottomanchor squareabmp hLinebmp hArrowbmp vLinebmp vArrowbmp] in let crEdCtrlLabel winstr 140 (ypos + 2) 50 20 (loc "OS3DCUSTOMINTERFACE_0013") nil -> labelname in let crEdCtrlTextLine winstr 200 ypos (CIEW_MenuWidth - 200 - 10) 20 "" nil EDWIN_RESIZE_MW -> ctrlname in let crEdCtrlLabel winstr 140 ((set ypos = ypos + 25) + 2) 100 20 (loc "OS3DCUSTOMINTERFACE_0014") nil -> labelxpos in let crEdCtrlFloat winstr (CIEW_MenuWidth - 70) ypos 60 20 0.0 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlxpos in let crEdCtrlLabel winstr 140 ((set ypos = ypos + 25) + 2) 100 20 (loc "OS3DCUSTOMINTERFACE_0016") nil -> labelwidth in let crEdCtrlFloat winstr (CIEW_MenuWidth - 70) ypos 60 20 0.0 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlwidth in let crEdCtrlLabel winstr 140 ((set ypos = ypos + 25) + 2) 100 20 (loc "OS3DCUSTOMINTERFACE_0015") nil -> labelypos in let crEdCtrlFloat winstr (CIEW_MenuWidth - 70) ypos 60 20 0.0 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlypos in let crEdCtrlLabel winstr 140 ((set ypos = ypos + 25) + 2) 100 20 (loc "OS3DCUSTOMINTERFACE_0017") nil -> labelheight in let crEdCtrlFloat winstr (CIEW_MenuWidth - 70) ypos 60 20 0.0 0.0 10000.0 1.0 0 nil EDWIN_RESIZE_MW -> ctrlheight in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 35) + 2) 70 20 (loc "OS3DCUSTOMINTERFACE_0026") nil -> labeltype in let crEdCtrlSelect winstr 80 ypos (CIEW_MenuWidth - 80 - 10) 200 EDWIN_RESIZE_MW -> ctrltype in let crEdCtrlCheck winstr 10 (set ypos = ypos + 30) (CIEW_MenuWidth - 20) 20 (loc "OS3DCUSTOMINTERFACE_0001") EDWIN_RESIZE_MW -> ctrlshow in let mkConfigWinCtrls[marginwinstr canvas tlresize trresize blresize brresize ctrltree rootitem dupbtn delbtn menuwinstr winstr ctrlname ctrltype ctrlshow cont leftanchor widthanchor rightanchor topanchor heightanchor bottomanchor labelxpos ctrlxpos labelwidth ctrlwidth labelypos ctrlypos labelheight ctrlheight nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil squareabmp hLinebmp hArrowbmp vLinebmp vArrowbmp] -> cwcstr in let crEdCtrlButton configwinstr (iw - CIEW_MenuWidth + 10) (ih - 30) 90 20 (loc "OS3D_0282") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> okbtn in let crEdCtrlButton configwinstr (iw - (CIEW_MenuWidth / 2) - 45) (ih - 30) 90 20 (loc "OS3D_0051") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> applybtn in let crEdCtrlButton configwinstr (iw - 100) (ih - 30) 90 20 (loc "OS3D_0084") EDWIN_RESIZE_LH|EDWIN_RESIZE_LW -> cancelbtn in ( set edstr.ECI_ctrls = cwcstr; setEdWindowBackgroundColor scrlwinstr 0xd0d0d0; setEdWindowBackgroundColor marginwinstr 0xd0d0d0; setEdwindowCbSize marginwinstr mkfun4 @cbMarginWinSize edstr; _CBcontainerClick canvas @cbCanvasClick edstr; _CBcontainerCursorMove canvas @cbCanvasMove edstr; _CBcontainerSize canvas @cbCanvasSize edstr; _CBcontainerKeyDown canvas @cbCanvasKeyDown edstr; setEdCtrlTreeCbSelect ctrltree mkfun6 @cbTreeSelect edstr; setEdCtrlTreeCbClick ctrltree mkfun8 @cbTreeClick edstr; fillTreeCanvas edstr edstr.ECI_lItemsToSave nil; _PAINTcontainer canvas; setEdCtrlTreeCbDrag ctrltree mkfun4 @cbDragTree edstr; setEdCtrlTreeCbKeyDown ctrltree mkfun8 @cbTreeKeyDown edstr; setEdCtrlTreeExpandAll ctrltree 1; //paintEdToolBar treetbstr; setEdCtrlButtonCb topbtn mkfun2 @cbTreeTopBtn edstr; setEdCtrlButtonCb upbtn mkfun2 @cbTreeUpBtn edstr; setEdCtrlButtonCb downbtn mkfun2 @cbTreeDownBtn edstr; setEdCtrlButtonCb bottombtn mkfun2 @cbTreeBottomBtn edstr; setEdCtrlTextLineCbValidate ctrlnew mkfun3 @cbValidateElement [edstr ctrlnew]; setEdCtrlButtonCb addbtn mkfun2 @cbAddElement [edstr ctrlnew]; setEdCtrlButtonCb dupbtn mkfun2 @cbDuplicateElement [edstr]; setEdCtrlButtonCb delbtn mkfun2 @cbDelElement [edstr]; setEdCtrlButtonEnable dupbtn 0; //disable controls depending on a selected interface unit setEdCtrlTextLineEnable ctrlname 0; setEdCtrlFloatEnable ctrlxpos 0; setEdCtrlFloatEnable ctrlwidth 0; setEdCtrlFloatEnable ctrlypos 0; setEdCtrlFloatEnable ctrlheight 0; setEdCtrlSelectEnable ctrltype 0; setEdCtrlCheckEnable ctrlshow 0; setEdCtrlTextLineCbValidate ctrlname mkfun3 @cbSetElementName edstr; setEdCtrlFloatCbChange ctrlxpos mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrlwidth mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrlypos mkfun3 @cbPosSizeChange edstr; setEdCtrlFloatCbChange ctrlheight mkfun3 @cbPosSizeChange edstr; fillEdCtrlSelect ctrltype (loc "OS3DCUSTOMINTERFACE_0027")::(loc "OS3DCUSTOMINTERFACE_0028")::(loc "OS3DCUSTOMINTERFACE_0029")::(loc "OS3DCUSTOMINTERFACE_0030")::(loc "OS3DCUSTOMINTERFACE_0031")::(loc "OS3DCUSTOMINTERFACE_0032")::(loc "OS3DCUSTOMINTERFACE_0033")::(loc "OS3DCUSTOMINTERFACE_0034")::(loc "OS3DCUSTOMINTERFACE_0065")::(loc "OS3DCUSTOMINTERFACE_0093")::nil; selectEdCtrlSelectByPos ctrltype 0; setEdCtrlSelectCb ctrltype mkfun4 @cbTypeSelect edstr; setEdCtrlButtonCb okbtn mkfun2 @cbConfigWindowOk [configwinstr edstr]; setEdCtrlButtonCb applybtn mkfun2 @cbConfigWindowApply [configwinstr edstr iapplybtn]; setEdCtrlButtonCb cancelbtn mkfun2 @cbConfigWindowCancel [configwinstr edstr]; setEdToolBarVisible tbstr 1; paintEdToolBar tbstr; let if (posstr.IP_iMode != 0) then [iw iw ih ih] else let posstr.IP_pos2Dstr.IP2D_tRatiosize -> [_ _ pw ph _ _ _ _] in let if (!pw) then [iw iw] else [CIEW_MenuWidth + CIEW_EditAreaXMargin * 2 + 42 nil] -> [minw maxw] in let if (!ph) then [ih ih] else [28 + CIEW_EditAreaYMargin * 2 + 42 nil] -> [minh maxh] in [minw maxw minh maxh] -> [minw maxw minh maxh] in ( setEdWindowMinimumSize configwinstr minw minh ; setEdWindowMaximumSize configwinstr maxw maxh; ); setEdwindowCbDestroy configwinstr mkfun2 @cbConfigWindowDestroy [edstr ctrlbtn]; setEdWindowVisible configwinstr 1; ); ); 0;; /* ********************************************************************************************* / Main plugIT Window Creation/Load / ********************************************************************************************* */ fun cbRefreshBgBtn(pickbtn, p)= let p -> [inst ctrlpath] in setEdCtrlTextLineValue ctrlpath ""; 0;; fun cbDlgGetBgPath(pfile, p)= let p -> [inst ctrlbtn winstr ctrlpath ctrlbcolor ctrlisbcolor] in ( if pfile == nil then nil else let _PtoScol pfile -> file in if file == nil then ( _DLGMessageBox _channel winstr.EDW_win (loc "OS3DCUSTOMINTERFACE_0061") (loc "OS3DCUSTOMINTERFACE_0062") 0; 0; ) else ( setEdCtrlTextLineValue ctrlpath file; setEdCtrlCheckState ctrlisbcolor 0; 0; ); setEdCtrlButtonEnable ctrlbtn 1; ); 0;; fun cbBtnPickBgFile(ctrlbtn, p)= let p -> [inst winstr ctrlpath ctrlbcolor ctrlisbcolor] in let getEdCtrlTextLineValue ctrlpath -> path in let _GETdesktopSize -> [sw sh] in let getEdWindowPos mainInterf.MINT_winMain -> [nx ny] in let getEdWindowSize mainInterf.MINT_winMain -> [nmw nmh] in let [750 450] -> [iw ih] in let crEdOpenFileBitmapDialog _channel winstr nx + ((nmw / 2) - (iw / 2)) ny + ((nmh / 2) - (ih / 2)) iw ih "" ["Bitmaps" "bmp"::"jpg"::"png"::"tga"::nil]::["Bitmap" "bmp"::nil]::["Jpeg" "jpg"::nil]::["PNG" "png"::nil]::["Targa" "tga"::nil]::nil EDFILE_DIALOG_LIST_FOLDERS|EDFILE_DIALOG_SHOW_TOOLBAR nil path -> dlgfstr in ( setEdWindowIcon dlgfstr.EDFD_dialog sWinDlgIcon; setEdOpenFileDialogCb dlgfstr mkfun2 @cbDlgGetBgPath [inst ctrlbtn winstr ctrlpath ctrlbcolor ctrlisbcolor]; setEdCtrlButtonEnable ctrlbtn 1; ); 0;; fun cbCheckBcolor(ctrl, state, p)= let p -> [ctrlbcolor ctrlpath pickbtn ctrlbgresizeflag] in if state then ( setEdCtrlColorButtonEnable ctrlbcolor 1 ; //setEdCtrlTextLineValue ctrlpath nil; setEdCtrlButtonEnable pickbtn 0; setEdCtrlSelectEnable ctrlbgresizeflag 0; ) else ( setEdCtrlColorButtonEnable ctrlbcolor 0; setEdCtrlButtonEnable pickbtn 1; setEdCtrlSelectEnable ctrlbgresizeflag 1; ); 0;; fun getItem(inst, parentstr, name, depth, suffix)= let atoi (getPluginInstanceParam inst strcat "type" suffix) -> type in let if type == nil then 0 else type -> type in let atof (getPluginInstanceParam inst strcat "xpos" suffix) -> xpos in let if xpos == nil then 0.0 else xpos -> xpos in let atof (getPluginInstanceParam inst strcat "width" suffix) -> width in let if width == nil then 100.0 else width -> width in let atof (getPluginInstanceParam inst strcat "xpos2" suffix) -> xpos2 in let if xpos2 == nil then nil else xpos2 -> xpos2 in let atof (getPluginInstanceParam inst strcat "ypos" suffix) -> ypos in let if ypos == nil then 0.0 else ypos -> ypos in let atof (getPluginInstanceParam inst strcat "height" suffix) -> height in let if height == nil then 100.0 else height -> height in let atof (getPluginInstanceParam inst strcat "ypos2" suffix) -> ypos2 in let if ypos2 == nil then nil else ypos2 -> ypos2 in let atoi (getPluginInstanceParam inst strcat "anchorleft" suffix) -> l in let if l == nil then 0 else l -> l in let atoi (getPluginInstanceParam inst strcat "anchorwidth" suffix) -> w in let if w == nil then 0 else w -> w in let atoi (getPluginInstanceParam inst strcat "anchorright" suffix) -> r in let if r == nil then 1 else r -> r in let atoi (getPluginInstanceParam inst strcat "anchortop" suffix) -> t in let if t == nil then 0 else t -> t in let atoi (getPluginInstanceParam inst strcat "anchorheight" suffix) -> h in let if h == nil then 0 else h -> h in let atoi (getPluginInstanceParam inst strcat "anchorbottom" suffix) -> b in let if b == nil then 1 else b -> b in let atoi (getPluginInstanceParam inst strcat "showonstart" suffix) -> showonstart in let if showonstart == nil then 1 else showonstart -> showonstart in let atoi (getPluginInstanceParam inst strcat "usetheme" suffix) -> usetheme in let if usetheme == nil then 0 else usetheme -> usetheme in let loadThemeEltSelectorValuesSuffix inst (getTypeThemeSubsetList type) suffix -> lthemevalues in let atoi (getPluginInstanceParam inst strcat "scroll" suffix) -> scroll in let if scroll == nil then 0 else scroll -> scroll in let getPluginInstanceParam inst strcat "text" suffix -> text in let if text == nil then "" else text -> text in let getPluginInstanceParam inst strcat "fontname" suffix -> fontname in let if fontname == nil then "Sans" else fontname -> fontname in let atoi (getPluginInstanceParam inst strcat "fontsize" suffix) -> fontsize in let if fontsize == nil then 10 else fontsize -> fontsize in let atoi (getPluginInstanceParam inst strcat "fontcolor" suffix) -> fontcolor in let if fontcolor == nil then 0x000000 else fontcolor -> fontcolor in let atoi (getPluginInstanceParam inst strcat "fontflags" suffix) -> fontflags in let if fontflags == nil then 0 else fontflags -> fontflags in let atoi (getPluginInstanceParam inst strcat "halign" suffix) -> halign in let if halign == nil then 0 else halign -> halign in let atoi (getPluginInstanceParam inst strcat "valign" suffix) -> valign in let if valign == nil then 0 else valign -> valign in let atoi (getPluginInstanceParam inst strcat "multiline" suffix) -> multiline in let if multiline == nil then 0 else multiline -> multiline in let atoi (getPluginInstanceParam inst strcat "password" suffix) -> password in let if password == nil then 0 else password -> password in let atoi (getPluginInstanceParam inst strcat "preset" suffix) -> preset in let if preset == nil then 0 else preset -> preset in let atoi (getPluginInstanceParam inst strcat "states" suffix) -> states in let if states == nil then 0 else states -> states in let atof (getPluginInstanceParam inst strcat "value" suffix) -> value in let if value == nil then 0.0 else value -> value in let atof (getPluginInstanceParam inst strcat "minval" suffix) -> minval in let if minval == nil then 0.0 else minval -> minval in let atof (getPluginInstanceParam inst strcat "maxval" suffix) -> maxval in let if maxval == nil then 10000.0 else maxval -> maxval in let atof (getPluginInstanceParam inst strcat "interval" suffix) -> interval in let if interval == nil then 1.0 else interval -> interval in let atoi (getPluginInstanceParam inst strcat "nbdec" suffix) -> nbdec in let if nbdec == nil then 1 else nbdec -> nbdec in let getPluginInstanceParam inst strcat "selectvalues" suffix -> selvalstring in let if selvalstring == nil then nil else strToListSep selvalstring ";;" -> selectvalues in let atoi (getPluginInstanceParam inst strcat "defpos" suffix) -> defpos in let if defpos == nil then 1 else defpos -> defpos in let atoi (getPluginInstanceParam inst strcat "checkinit" suffix) -> checkinit in let if checkinit == nil then 0 else checkinit -> checkinit in let getPluginInstanceParam inst strcat "path" suffix -> path in let if path == nil then "" else path -> path in let atoi (getPluginInstanceParam inst strcat "resizeflag" suffix) -> resizeflag in let if resizeflag == nil then 0 else resizeflag -> resizeflag in let atoi (getPluginInstanceParam inst strcat "nbframes" suffix) -> nbframes in let if nbframes == nil then 1 else nbframes -> nbframes in let atoi (getPluginInstanceParam inst strcat "nbfps" suffix) -> nbfps in let if nbfps == nil then 0 else nbfps -> nbfps in let atoi (getPluginInstanceParam inst strcat "direction" suffix) -> direction in let if direction == nil then 0 else direction -> direction in let atoi (getPluginInstanceParam inst strcat "cursorwidth" suffix) -> cursorwidth in let if cursorwidth == nil then 20 else cursorwidth -> cursorwidth in let atoi (getPluginInstanceParam inst strcat "textpos" suffix) -> textpos in let if textpos == nil then 0 else textpos -> textpos in let atoi (getPluginInstanceParam inst strcat "ignoreclick" suffix) -> ignoreclick in let if ignoreclick == nil then 0 else ignoreclick -> ignoreclick in let atoi (getPluginInstanceParam inst strcat "nbrow" suffix) -> nbrow in let if (nbrow == nil) then 3 else nbrow -> nbrow in let atoi (getPluginInstanceParam inst strcat "nbcol" suffix) -> nbcol in let if (nbcol == nil) then 4 else nbcol -> nbcol in let atoi (getPluginInstanceParam inst strcat "xmargin" suffix) -> xmargin in let if (xmargin == nil) then 5 else xmargin -> xmargin in let atoi (getPluginInstanceParam inst strcat "ymargin" suffix) -> ymargin in let if (ymargin == nil) then 5 else ymargin -> ymargin in let atoi (getPluginInstanceParam inst strcat "cellcolor" suffix) -> cellcolor in let if cellcolor == nil then 0xffffffff else cellcolor -> cellcolor in let atoi (getPluginInstanceParam inst strcat "border" suffix) -> border in let if (border == nil) then 1 else border -> border in let atoi (getPluginInstanceParam inst strcat "bordercolor" suffix) -> bordercolor in let if bordercolor == nil then 0x000000ff else bordercolor -> bordercolor in let (getPluginInstanceParam inst strcat "colwidths" suffix) -> colwidths in let if colwidths == nil then nil else colwidths -> colwidths in let (getPluginInstanceParam inst strcat "data" suffix) -> data in let if data == nil then nil else data -> data in mkInterfaceUnit [nil nil nil nil nil nil nil 1 parentstr name depth type [xpos width xpos2 ypos height ypos2] [l w r t h b] showonstart usetheme lthemevalues scroll text fontname fontsize fontcolor fontflags halign valign multiline password preset states value minval maxval interval nbdec selectvalues defpos checkinit path resizeflag nbframes nbfps direction cursorwidth textpos ignoreclick nbrow nbcol xmargin ymargin cellcolor border bordercolor (readCSVdata data nil) (strToListSep colwidths ";") nil];; fun fillIUlist(inst, edstr, parentstr, suffix)= let if suffix == nil then "" else suffix -> suffix in let parentstr.IU_ctrlItem -> ctrlparent in let if parentstr == nil then 0 else parentstr.IU_iDepth + 1 -> depth in let nil -> litems in let 0 -> i in let 0 -> end in ( while end != 1 do ( let (strcatn suffix::"_"::(itoa i)::nil) -> newsuffix in let getPluginInstanceParam inst strcat "item" newsuffix -> name in ( if name != nil then let getItem inst parentstr name depth newsuffix -> iustr in ( fillIUlist inst edstr iustr newsuffix; set litems = iustr::litems; set i = i + 1; ) else set end = 1; ); ); if parentstr == nil then set edstr.ECI_lItemsToSave = revertlist litems else set parentstr.IU_lChildren = revertlist litems; ); 0;; fun dynamicedit(ewinstr, inst, viewstr, applybtn)= let [455 245] -> [iw ih] in let 10 -> ypos in ( setEdWindowSize ewinstr iw ih; let atoi (getPluginInstanceParam inst "isbcolor") -> isbcolor in let if (isbcolor == nil) then 0 else isbcolor -> isbcolor in let atoi (getPluginInstanceParam inst "bcolor") -> bcolor in let if (bcolor == nil) then 0x000000ff else bcolor -> bcolor in let getPluginInstanceParam inst "bgpath" -> bgpath in let if (bgpath == nil) then "" else bgpath -> bgpath in let atoi getPluginInstanceParam inst "bgresizeflag" -> bgresizeflag in let if (bgresizeflag == nil) then 0 else bgresizeflag -> bgresizeflag in let atoi (getPluginInstanceParam inst "advanced") -> advanced in let if (advanced == nil) then 0 else advanced -> advanced in let atoi (getPluginInstanceParam inst "fadespeed") -> fadespeed in let if (fadespeed == nil) then 0 else fadespeed -> fadespeed in let atoi (getPluginInstanceParam inst "show") -> show in let if (show == nil) then 1 else show -> show in let crPositionInterface inst viewstr ewinstr nil (iPOS_INTERFACE_2D_NO_BACKGROUND_NO_KEEPRATIO | iPOS_INTERFACE_MAT | iPOS_INTERFACE_3D | iPOS_INTERFACE_VR) iw ih -> posstr in let crEdFrameWindow _channel ewinstr 0 0 iw 140 EDWIN_RESIZE_MW nil (loc "OS3DCUSTOMINTERFACE_0007") (loc "OS3DCUSTOMINTERFACE_0005") -> winfrm in let crEdWindow _channel winfrm 0 18 iw 120 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 10) 160 20 (loc "OS3DCUSTOMINTERFACE_0010") EDWIN_RESIZE_MW -> ctrlisbcolor in let crEdCtrlColorButton winstr 180 ypos 100 20 bcolor 1 EDWIN_RESIZE_MW nil -> ctrlbcolor in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3DCUSTOMINTERFACE_0009") nil -> labelpath in let crEdCtrlTextLine winstr 180 ypos 170 20 bgpath nil EDWIN_RESIZE_MW -> ctrlpath in let crEdCtrlButton winstr 360 ypos 55 20 "..." nil -> pickfilebtn in let crEdCtrlButton winstr 420 ypos 35 20 "X" nil -> refreshpath in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3DCUSTOMINTERFACE_0081") nil -> labelresizeflag in let crEdCtrlSelect winstr 180 ypos 100 120 EDWIN_RESIZE_MW -> ctrlbgresizeflag in let crEdCtrlButton winstr ((iw / 2) - 125) (set ypos = ypos + 35) 250 20 (loc "OS3DCUSTOMINTERFACE_0008") nil -> configwinbtn in let crEdFrameWindow _channel ewinstr 0 0 iw 105 EDWIN_RESIZE_MW nil (loc "OS3DCUSTOMINTERFACE_0006") (loc "OS3DCUSTOMINTERFACE_0005") -> winfrm in let crEdWindow _channel winfrm 0 18 iw 85 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) 160 20 (loc "OS3DCUSTOMINTERFACE_0109") nil -> labelf in let crEdCtrlFloat winstr 180 ypos 100 20 itof fadespeed 0.0 1000.0 10.0 0 nil EDWIN_RESIZE_MW -> ctrlfadespeed in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) (iw - 20) 20 (loc "OS3DCUSTOMINTERFACE_0107") EDWIN_RESIZE_MW -> ctrladvanced in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) (iw - 20) 20 (loc "OS3DCUSTOMINTERFACE_0001") EDWIN_RESIZE_MW -> ctrlshow in //let V3DgetDefaultSession viewstr -> sessionstr in let mkEditCInterface[inst posstr nil nil nil nil 0] -> edstr in ( fillIUlist inst edstr nil nil; setEdCtrlCheckState ctrlisbcolor isbcolor; setEdCtrlCheckCbState ctrlisbcolor mkfun3 @cbCheckBcolor [ctrlbcolor ctrlpath pickfilebtn ctrlbgresizeflag]; setEdCtrlTextLineEnable ctrlpath 0; setEdCtrlButtonCb pickfilebtn mkfun2 @cbBtnPickBgFile [inst ewinstr ctrlpath ctrlbcolor ctrlisbcolor]; setEdCtrlButtonCb refreshpath mkfun2 @cbRefreshBgBtn [inst ctrlpath]; fillEdCtrlSelect ctrlbgresizeflag (loc "OS3DCUSTOMINTERFACE_0082")::(loc "OS3DCUSTOMINTERFACE_0083")::(loc "OS3DCUSTOMINTERFACE_0084")::nil; if !isbcolor then ( setEdCtrlColorButtonEnable ctrlbcolor 0; setEdCtrlButtonEnable pickfilebtn 1; setEdCtrlSelectEnable ctrlbgresizeflag 1; ) else ( setEdCtrlColorButtonEnable ctrlbcolor 1; setEdCtrlButtonEnable pickfilebtn 0; setEdCtrlSelectEnable ctrlbgresizeflag 0; ); selectEdCtrlSelectByPos ctrlbgresizeflag bgresizeflag; setEdCtrlButtonCb configwinbtn mkfun2 @cbBtnConfigWindow [inst ewinstr posstr edstr applybtn [ctrlisbcolor ctrlbcolor ctrlpath ctrlbgresizeflag]]; setEdCtrlCheckState ctrladvanced advanced; setEdCtrlCheckState ctrlshow show; [mkfun1 @cbCloseEdit [posstr edstr ctrlisbcolor ctrlbcolor ctrlpath ctrlbgresizeflag ctrladvanced ctrlfadespeed ctrlshow] mkfun1 @cbDestroyEdit [inst edstr]]; ); );;