E1M1 Posted March 3, 2011 Posted March 3, 2011 (edited) I am trying to create dynamic editor for my lua file. I found that best way to do this is 3d array. Array dimensions are following: 1) line 2)control 3) tabLines are made of controls which are based on criterias in timing.lua functions.I have 1 tab for every function in timing.lua.Meaning of lines and tabs are explained on screenshot:My objective:Write code that would work so that when I click on remove it would tell me number of line where remove button I clicked is located and tab on which it lays.Problem:I dont know how to edit ConsoleWrite("Line: "&$OtherControls[0][0][0]&" Tab: ") (on line 91) if I want to make it print line nr and tab nr.It would be great if someone would be so nice and help me figure out how that line should be.Script.au3expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> $list = False If FileExists(@ScriptDir & "\timeedit.eng.lng") Then $list = StringSplit(FileRead(@ScriptDir & "\timeedit.eng.lng"), @CRLF, 1) EndIf $sFileData = FileRead(@ScriptDir & "\timing.lua") Dim $buttons[1] $buttons[0] = "-9999" Dim $OtherControls[1][1][1] ;~ $sFileData = FileRead(@ScriptDir & "\ra.lua") ;~ GetTiming("Monday") ;~ Exit $y = 50 #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Timing", 628, 453, 192, 124) If $list[0] > 1 Then WinSetTitle($Form1, "", $list[10]) $Tab1 = GUICtrlCreateTab(0, 0, 625, 417) GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT) $TabSheet1 = GUICtrlCreateTabItem("Mon") If $list[0] > 1 Then GUICtrlSetData(-1, $list[1]) _execute(GetTiming("Monday")) $TabSheet2 = GUICtrlCreateTabItem("Tue") If $list[0] > 1 Then GUICtrlSetData(-1, $list[2]) $y = 50 _execute(GetTiming("Tuesday")) $TabSheet3 = GUICtrlCreateTabItem("Wed") If $list[0] > 1 Then GUICtrlSetData(-1, $list[3]) $y = 50 _execute(GetTiming("Wednesday")) $TabSheet4 = GUICtrlCreateTabItem("Thu") If $list[0] > 1 Then GUICtrlSetData(-1, $list[4]) $y = 50 _execute(GetTiming("Thursday")) $TabSheet5 = GUICtrlCreateTabItem("Fri") If $list[0] > 1 Then GUICtrlSetData(-1, $list[5]) $y = 50 _execute(GetTiming("Friday")) $TabSheet6 = GUICtrlCreateTabItem("Sat") If $list[0] > 1 Then GUICtrlSetData(-1, $list[6]) $y = 50 _execute(GetTiming("Saturday")) $TabSheet7 = GUICtrlCreateTabItem("Sun") If $list[0] > 1 Then GUICtrlSetData(-1, $list[7]) $y = 50 _execute(GetTiming("Sunday")) GUICtrlCreateTabItem("") $Save = GUICtrlCreateButton("Save", 8, 424, 75, 25, $WS_GROUP) If $list[0] > 1 Then GUICtrlSetData(-1, $list[8]) $Reload = GUICtrlCreateButton("Reload", 88, 424, 75, 25, $WS_GROUP) If $list[0] > 1 Then GUICtrlSetData(-1, $list[9]) $new = GUICtrlCreateButton($list[16], 548, 424, 75, 25, $WS_GROUP) GUISetState(@SW_SHOW) ;~ _ArrayDisplay($OtherControls) ;~ _ArrayDisplay($buttons) ;~ _MultiDimArrayDisplay($OtherControls, "My multipliable dimensional array displayer") ;~ _execute(GetTiming("Monday")) Func _execute($sStr) ;~ MsgBox(0,0,$sStr) Local $handle $a = StringSplit($sStr, @CRLF, 1) For $i = 1 To $a[0] $handle = Execute($a[$i]) If StringInStr($a[$i], "GUICtrlCreateButton") Then ReDim $buttons[UBound($buttons) + 1] ReDim $OtherControls[UBound($OtherControls,1) + 1][1][UBound($OtherControls,3)] $buttons[UBound($buttons) - 1] = $handle ElseIf StringInStr($a[$i], "GUICtrlCreateCombo") or StringInStr($a[$i], "GUICtrlCreateInput") Then ReDim $OtherControls[UBound($OtherControls)][UBound($OtherControls,2)+1][UBound($OtherControls,3)] $OtherControls[UBound($OtherControls) - 1][UBound($OtherControls,2)-1][UBound($OtherControls,3)-1] = $handle ConsoleWrite("$OtherControls["&UBound($OtherControls) - 1&"]["&UBound($OtherControls,2)-1&"]["&UBound($OtherControls,3)-1&"] = "&$handle&@CRLF) EndIf Next ReDim $OtherControls[UBound($OtherControls)][UBound($OtherControls,2)][UBound($OtherControls,3)+1] EndFunc ;==>_execute #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() for $i= 0 To UBound($buttons) -1 If $nMsg = $buttons[$i] Then ;~ ConsoleWrite("Line: "&$OtherControls[0][0][0]&" Tab: ") EndIf Next Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Save EndSwitch WEnd Func GetTiming($sDay) $split = StringSplit($sFileData, @CRLF, 1) For $i = 1 To $split[0] $start = StringInStr($split[$i], "function " & $sDay) If $start Then ExitLoop EndIf Next ConsoleWrite("i = " & $i & @CRLF) For $n = $i To $split[0] $start = StringInStr($split[$n], "Allowed =") If $start Then ExitLoop EndIf Next ConsoleWrite("n = " & $n & @CRLF) For $a = $n To $split[0] $paramstart = StringInStr($split[$a], "(") If $paramstart Then ExitLoop EndIf Next ConsoleWrite("a = " & $a & @CRLF) For $b = $a To $split[0] $paramend = StringInStr($split[$b], ")") If $paramend Then ExitLoop EndIf Next ConsoleWrite("b = " & $b & @CRLF) $fullstr = "" For $c = $a To $b $fullstr &= Interpretate(_RemoveSpace($split[$c])) Next Return $fullstr EndFunc ;==>GetTiming Func Interpretate($sStr) If StringLeft($sStr, 2) = "--" Then Return "" EndIf If StringLen($sStr) < 2 Then Return "" EndIf ;~ ConsoleWrite("interpretate: "&$sStr&@CRLF) $words = StringSplit($sStr, " ") $global = "" If $words[0] >= 3 Then For $i = 1 To $words[0] If StringInStr($words[$i], "<") Or StringInStr($words[$i], ">") Or StringInStr($words[$i], "=") Then $data = '' $data &= 'GUICtrlCreateCombo("", ' & 10 + ($i - 1) * 120 & ', ' & $y & ',75)' & @CRLF $data &= 'GUICtrlSetData(-1, ' & luaReplace('"<|>|==|<=|>=|~="') & ',"' & luaReplace($words[$i]) & '")' & @CRLF $data &= 'GUICtrlSetColor(-1,0xff0000)' & @CRLF EndIf If StringInStr($words[$i], "and") Or StringInStr($words[$i], "or") Then $data = '' $data &= 'GUICtrlCreateCombo("",' & 10 + ($i - 1) * 120 & ',' & $y & ',75)' & @CRLF $data &= 'GUICtrlSetData(-1, ' & luaReplace('"and|or"') & ',"' & luaReplace($words[$i]) & '")' & @CRLF $data &= 'GUICtrlSetColor(-1,0x0000ff)' & @CRLF EndIf If StringInStr($words[$i], "minute") Or StringInStr($words[$i], "hour") Then $data = '' $data &= 'GUICtrlCreateCombo("", ' & 10 + ($i - 1) * 120 & ',' & $y & ',75)' & @CRLF $data &= 'GUICtrlSetData(-1, ' & luaReplace('"hour|minute"') & ',"' & luaReplace($words[$i]) & '")' & @CRLF $data &= 'GUICtrlSetColor(-1,0xcc00cc)' & @CRLF EndIf If StringIsDigit($words[$i]) Then $data = '' $data &= 'GUICtrlCreateInput("' & luaReplace($words[$i]) & '",' & 10 + ($i - 1) * 120 & ',' & $y & ',75,25)' & @CRLF EndIf $global &= $data ;~ ConsoleWrite($words[$i]&@CRLF) Next EndIf $global &= 'GUICtrlCreateButton("'&$list[15]&'",' & 10 + ($i - 1) * 120 & ',' & $y & ',75,25)' & @CRLF $y += 45 Return $global EndFunc ;==>Interpretate Func luaReplace($sStr) $sStr = StringReplace($sStr, "hour", $list[11]) $sStr = StringReplace($sStr, "minute", $list[12]) $sStr = StringReplace($sStr, "and", $list[13]) $sStr = StringReplace($sStr, "or", $list[14]) Return $sStr EndFunc ;==>luaReplace ; #FUNCTION# ;=============================================================================== ; ; Name...........: _RemoveSpace ; Description ...: Removes spaces and tabs at beginning of string ; Syntax.........: _RemoveSpace($sString) ; Parameters ....: $sString - Input string ; Return values .: $sString with out spaces and tabs at the beginning of string ; Author ........: E1M1 ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; No ; ; ;========================================================================================== Func _RemoveSpace($sString) While 1 If StringLeft($sString, 1) = " " Or StringLeft($sString, 1) = @TAB Then $sString = StringTrimLeft($sString, 1) Else Return $sString EndIf WEnd EndFunc ;==>_RemoveSpace ;~ $lang_id=et ;~ $monday='Esmaspäev' ;~ $tuesday='Tesipäev' ;~ $wednesday='Kolmapäev' ;~ $thursday='Neljapäev' ;~ $friday='Reede' ;~ $saturday='Laupäev' ;~ $sunday='Pühapäev' ;~ $save='Salvesta' ;~ $load_again='Lae uuesti' ;~ $times='Ajad' ;~ * 'load_again' astimeedit.eng.lngMonday Tuesday Wednesday Thursday Friday Saturday Sunday Save Reload Times hour minute and or remove Addtiming.luaexpandcollapse popupnow = os.date("*t"); local hour,minute,weekday = now.hour,now.minute,now.wday; variable = 1234 function IsAllowed() local Fixed = true local Allowed = false if Fixed == false then if weekday == 1 then Allowed = Sunday() elseif weekday == 2 then Allowed = Monday() elseif weekday == 3 then Allowed = Tuesday() elseif weekday == 4 then Allowed = Wednesday() elseif weekday == 5 then Allowed = Thursday() elseif weekday == 6 then Allowed = Friday() elseif weekday == 7 then Allowed = Saturday() end else Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) end return Allowed end function Monday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end function Tuesday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end function Wednesday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end function Thursday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end function Friday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end function Saturday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end function Sunday() Allowed = ( hour >= 16 and minute >= 0 and minute < 59 or hour >= 18 ) return Allowed end Edited March 3, 2011 by E1M1 edited
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now