requires newest update of autohotkey_l
still probably has bugs
version .1 alpha
i know there is lots of room for improvement, and im working on it.
Test Script:
Code:
o := Options("","wp+100 h200 xp-20 yp+250 xs+200 ys-30 xm+10 ym-3 vMyProgress") ; create options object
o.wp := "+400"
o.LastFound := "True" ; Setting an Option to "True" (the string) outputs +Option
o.ToolWindow := "True"
o.Caption := "False" ; Setting Option to "False" (the string) outputs -Option
;o.Color := "Blue"
MsgBox % "current options:`n" . o.ToParam()
Esc::ExitApp
Code:
; options.ahkl
; requires AutoHotkey_L
; by ahklerner
;version .1 alpha
; This object handles a gui's or control's "Options"
; intended use is by control and gui object... but can be modified to suit other purposes
;
Options_Opt(ByRef sOpts,sName,sVal="¬"){
if (sVal = "¬"){ ; get the option
if RegExMatch(sOpts, sName . "=(\+?-?[a-zA-Z0-9\s]*)¬",Match)
return Match1
else
return ""
}
if RegExMatch(sOpts, sName . "=(\+?-?[a-zA-Z0-9\s]*)¬",Match)
sOpts := RegExReplace(sOpts,sName . "=(\+?-?[a-zA-Z0-9\s]*)¬",sName . "=" . sVal . "¬")
else if (sOpts = "¬")
sOpts := sName . "=" . sVal . "¬"
else
sOpts .= sName . "=" . sVal . "¬"
return sOpts
}
Options_GetVal(obj, name){
if name = Parent
return obj.Parent
sOpts := obj.ToStr
return Options_Opt(sOpts,name)
}
Options_SetVal(obj, name, val){
;MsgBox % "options:SetVal`nname:" . name . "`nval:" . val
if name = Parent
return obj.Parent := val
if name = ToStr
return obj.ToStr := val
sOpts := obj.ToStr
ret := Options_Opt(sOpts,name,val)
obj.ToStr := sOpts
return ret
}
Options_Import(obj,prm0){
options := obj
Loop, Parse, prm0, %A_Space%
{
if RegExMatch(A_LoopField,"wp(-[a-zA-Z0-9\s]*)",Match)
out .= "wp=" . Match1 . "¬"
, options.wp := Match1
else if RegExMatch(A_LoopField,"hp(-[a-zA-Z0-9\s]*)",Match)
out .= "hp=" . Match1 . "¬"
, options.hp := Match1
else if RegExMatch(A_LoopField,"wp(\+[a-zA-Z0-9\s]*)",Match)
out .= "wp=" . Match1 . "¬"
, options.wp := Match1
else if RegExMatch(A_LoopField,"hp(\+[a-zA-Z0-9\s]*)",Match)
out .= "hp=" . Match1 . "¬"
, options.hp := Match1
else if RegExMatch(A_LoopField,"xp(-[a-zA-Z0-9\s]*)",Match)
out .= "xp=" . Match1 . "¬"
, options.xp := Match1
else if RegExMatch(A_LoopField,"yp(-[a-zA-Z0-9\s]*)",Match)
out .= "yp=" . Match1 . "¬"
, options.yp := Match1
else if RegExMatch(A_LoopField,"xp(\+[a-zA-Z0-9\s]*)",Match)
out .= "xp=" . Match1 . "¬"
, options.xp := Match1
else if RegExMatch(A_LoopField,"yp(\+[a-zA-Z0-9\s]*)",Match)
out .= "yp=" . Match1 . "¬"
, options.yp := Match1
else if RegExMatch(A_LoopField,"xm(-[a-zA-Z0-9\s]*)",Match)
out .= "xm=" . Match1 . "¬"
, options.xm := Match1
else if RegExMatch(A_LoopField,"xm(\+[a-zA-Z0-9\s]*)",Match)
out .= "xm=" . Match1 . "¬"
, options.xm := Match1
else if RegExMatch(A_LoopField,"ym(-[a-zA-Z0-9\s]*)",Match)
out .= "ym=" . Match1 . "¬"
, options.ym := Match1
else if RegExMatch(A_LoopField,"ym(\+[a-zA-Z0-9\s]*)",Match)
out .= "ym=" . Match1 . "¬"
, options.ym := Match1
else if RegExMatch(A_LoopField,"xs(-[a-zA-Z0-9\s]*)",Match)
out .= "xs=" . Match1 . "¬"
, options.xs := Match1
else if RegExMatch(A_LoopField,"xs(\+[a-zA-Z0-9\s]*)",Match)
out .= "xs=" . Match1 . "¬"
, options.xs := Match1
else if RegExMatch(A_LoopField,"ys(-[a-zA-Z0-9\s]*)",Match)
out .= "ys=" . Match1 . "¬"
, options.ys := Match1
else if RegExMatch(A_LoopField,"ys(\+[a-zA-Z0-9\s]*)",Match)
out .= "ys=" . Match1 . "¬"
, options.ys := Match1
else if RegExMatch(A_LoopField,"ym",Match)
out .= "ym=True¬"
, options.ym := "True"
else if RegExMatch(A_LoopField,"xm",Match)
out .= "xm=True¬"
, options.xm := "True"
else if RegExMatch(A_LoopField,"xs",Match)
out .= "xs=True¬"
, options.xs := "True"
else if RegExMatch(A_LoopField,"ys",Match)
out .= "ys=True¬"
, options.ys := "True"
else if RegExMatch(A_LoopField,"v([a-zA-Z0-9\s]*)",Match){
Match1 = %Match1%
;MsgBox Var Imported
out .= "v" . "=" . Match1 . "¬"
options.Parent.v := Match1
obj.Parent[Match1] := options.Parent
}
else if RegExMatch(A_LoopField,"g([a-zA-Z0-9\s]*)",Match)
out .= "g" . "=" . Match1 . "¬"
, options.g := Match1
else if RegExMatch(A_LoopField,"w([a-zA-Z0-9\s]*)",Match)
out .= "w" . "=" . Match1 . "¬"
, options.w := Match1
else if RegExMatch(A_LoopField,"h([a-zA-Z0-9\s]*)",Match)
out .= "h" . "=" . Match1 . "¬"
, options.h := Match1
else if RegExMatch(A_LoopField,"x([a-zA-Z0-9\s]*)",Match)
out .= "x" . "=" . Match1 . "¬"
, options.x := Match1
else if RegExMatch(A_LoopField,"y([a-zA-Z0-9\s]*)",Match)
out .= "y" . "=" . Match1 . "¬"
, options.y := Match1
else if RegExMatch(A_LoopField,"\+([a-zA-Z0-9\s]*)",Match)
out .= Match1 . "=True¬"
, options[Match1] := "True"
else if RegExMatch(A_LoopField,"\-([a-zA-Z0-9\s]*)",Match)
out .= Match1 . "=False¬"
, options[Match1] := "False"
}
}
Options_ToParam(obj){
StringOpt := obj.ToStr
Loop, Parse, StringOpt, ¬
{
RegExMatch(A_LoopField,"([a-zA-Z0-9\s]*)=",name)
OptName = %name1%
RegExMatch(A_LoopField,"=(\+?-?[a-zA-Z0-9\s]*)",val)
OptVal = %val1%
if OptVal = False
RetVal .= "-" . OptName . " "
else if OptVal = True
RetVal .= "+" . OptName . " "
else
RetVal .= OptName . OptVal . " "
}
return RetVal
}
Options_SetParent(obj,parentObj){
}
Options(parent="",param="¬"){
static COBase
If !COBase
COBase := Object( "__Get" , "Options_GetVal" ; default getter
, "__Set" , "Options_SetVal" ; default setter
, "ToParam" , "Options_ToParam" ; .ToParam()
, "Import" , "Options_Import") ; .Import(sOptions)
; , "SetParent" , "Options_SetParent") ; .SetParent(parentObj)
obj := Object("ToStr", " ", "Parent"," ","base", COBase)
if (param != "¬"){
obj.Import(param)
}
return obj
}