Advertisement
Skortioth

Basalt FULL

Jul 26th, 2022
871
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 146.05 KB | None | 0 0
  1. local project = {}
  2. local packaged = true
  3. local baseRequire = require
  4. local require = function(path)
  5.     for _,v in pairs(project)do
  6.         for name,b in pairs(v)do
  7.             if(name==path)then
  8.                 return b()
  9.             end
  10.         end
  11.     end
  12.     return baseRequire(path);
  13. end
  14. local getProject = function(subDir)
  15.     if(subDir~=nil)then
  16.         return project[subDir]
  17.     end
  18.     return project
  19. end
  20. project['objects'] = {}project['libraries'] = {}project['default'] = {}project['objects']['Animation'] = function(...)local ab=require("utils").getValueFromXML
  21. local bb=require("basaltEvent")local cb=math.floor
  22. local db=function(ad,bd,cd)return ad+ (bd-ad)*cd end;local _c=function(ad)return ad end
  23. local ac=function(ad)return 1 -ad end;local bc=function(ad)return ad*ad*ad end;local cc=function(ad)
  24. return ac(bc(ac(ad)))end;local dc=function(ad)
  25. return db(bc(ad),cc(ad),ad)end
  26. local _d={linear=_c,lerp=db,flip=ac,easeIn=bc,easeOut=cc,easeInOut=dc}
  27. return
  28. function(ad)local bd={}local cd="Animation"local dd;local __a={}local a_a=0;local b_a=false;local c_a=1;local d_a=false;local _aa=bb()
  29. local aaa=0;local baa;local caa=false;local daa=false;local _ba="easeOut"local aba;local function bba(aca)for bca,cca in pairs(aca)do
  30. cca(bd,__a[c_a].t,c_a)end end
  31. local function cba(aca)if(c_a==1)then
  32. aca:animationStartHandler()end;if(__a[c_a]~=nil)then bba(__a[c_a].f)
  33. a_a=__a[c_a].t end;c_a=c_a+1
  34. if(__a[c_a]==nil)then if(d_a)then c_a=1;a_a=0 else
  35. aca:animationDoneHandler()return end end;if(__a[c_a].t>0)then
  36. dd=os.startTimer(__a[c_a].t-a_a)else cba(aca)end end
  37. local function dba(aca,bca)for n=1,#__a do
  38. if(__a[n].t==aca)then table.insert(__a[n].f,bca)return end end
  39. for n=1,#__a do
  40. if(__a[n].t>aca)then if
  41. (__a[n-1]~=nil)then if(__a[n-1].t<aca)then
  42. table.insert(__a,n-1,{t=aca,f={bca}})return end else
  43. table.insert(__a,n,{t=aca,f={bca}})return end end end
  44. if(#__a<=0)then table.insert(__a,1,{t=aca,f={bca}})return elseif(
  45. __a[#__a].t<aca)then table.insert(__a,{t=aca,f={bca}})end end
  46. local function _ca(aca,bca,cca,dca,_da,ada)local bda,cda
  47. dba(dca+0.05,function()bda,cda=_da(aba)end)
  48. for n=0.05,cca,0.05 do
  49. dba(dca+n,function()
  50. local dda=math.floor(_d.lerp(bda,aca,_d[_ba](n/cca))+0.5)
  51. local __b=math.floor(_d.lerp(cda,bca,_d[_ba](n/cca))+0.5)ada(aba,dda,__b)end)end end
  52. bd={name=ad,getType=function(aca)return cd end,getBaseFrame=function(aca)if(aca.parent~=nil)then
  53. return aca.parent:getBaseFrame()end;return aca end,setMode=function(aca,bca)
  54. _ba=bca;return aca end,generateXMLEventFunction=function(aca,bca,cca)
  55. local dca=function(_da)
  56. if(_da:sub(1,1)=="#")then
  57. local ada=aca:getBaseFrame():getDeepObject(_da:sub(2,_da:len()))
  58. if(ada~=nil)and(ada.internalObjetCall~=nil)then bca(aca,function()
  59. ada:internalObjetCall()end)end else
  60. bca(aca,aca:getBaseFrame():getVariable(_da))end end;if(type(cca)=="string")then dca(cca)elseif(type(cca)=="table")then
  61. for _da,ada in pairs(cca)do dca(ada)end end;return aca end,setValuesByXMLData=function(aca,bca)caa=
  62. ab("loop",bca)==true and true or false
  63. if(
  64. ab("object",bca)~=nil)then
  65. local cca=aca:getBaseFrame():getDeepObject(ab("object",bca))if(cca==nil)then
  66. cca=aca:getBaseFrame():getVariable(ab("object",bca))end
  67. if(cca~=nil)then aca:setObject(cca)end end
  68. if(bca["move"]~=nil)then local cca=ab("x",bca["move"])
  69. local dca=ab("y",bca["move"])local _da=ab("duration",bca["move"])
  70. local ada=ab("time",bca["move"])aca:move(cca,dca,_da,ada)end
  71. if(bca["size"]~=nil)then local cca=ab("width",bca["size"])
  72. local dca=ab("height",bca["size"])local _da=ab("duration",bca["size"])
  73. local ada=ab("time",bca["size"])aca:size(cca,dca,_da,ada)end
  74. if(bca["offset"]~=nil)then local cca=ab("x",bca["offset"])
  75. local dca=ab("y",bca["offset"])local _da=ab("duration",bca["offset"])
  76. local ada=ab("time",bca["offset"])aca:offset(cca,dca,_da,ada)end
  77. if(bca["textColor"]~=nil)then
  78. local cca=ab("duration",bca["textColor"])local dca=ab("time",bca["textColor"])local _da={}
  79. local ada=bca["textColor"]["color"]
  80. if(ada~=nil)then if(ada.properties~=nil)then ada={ada}end;for bda,cda in pairs(ada)do
  81. table.insert(_da,colors[cda:value()])end end;if(cca~=nil)and(#_da>0)then
  82. aca:changeTextColor(cca,dca or 0,table.unpack(_da))end end
  83. if(bca["background"]~=nil)then
  84. local cca=ab("duration",bca["background"])local dca=ab("time",bca["background"])local _da={}
  85. local ada=bca["background"]["color"]
  86. if(ada~=nil)then if(ada.properties~=nil)then ada={ada}end;for bda,cda in pairs(ada)do
  87. table.insert(_da,colors[cda:value()])end end;if(cca~=nil)and(#_da>0)then
  88. aca:changeBackground(cca,dca or 0,table.unpack(_da))end end
  89. if(bca["text"]~=nil)then local cca=ab("duration",bca["text"])
  90. local dca=ab("time",bca["text"])local _da={}local ada=bca["text"]["text"]
  91. if(ada~=nil)then if(ada.properties~=nil)then
  92. ada={ada}end;for bda,cda in pairs(ada)do
  93. table.insert(_da,cda:value())end end;if(cca~=nil)and(#_da>0)then
  94. aca:changeText(cca,dca or 0,table.unpack(_da))end end;if(ab("onDone",bca)~=nil)then
  95. aca:generateXMLEventFunction(aca.onDone,ab("onDone",bca))end;if(ab("onStart",bca)~=nil)then
  96. aca:generateXMLEventFunction(aca.onDone,ab("onStart",bca))end
  97. if
  98. (ab("autoDestroy",bca)~=nil)then if(ab("autoDestroy",bca))then daa=true end end;_ba=ab("mode",bca)or _ba
  99. if(ab("play",bca)~=nil)then if
  100. (ab("play",bca))then aca:play(caa)end end;return aca end,getZIndex=function(aca)return
  101. 1 end,getName=function(aca)return aca.name end,setObject=function(aca,bca)aba=bca;return aca end,move=function(aca,bca,cca,dca,_da,ada)aba=
  102. ada or aba
  103. _ca(bca,cca,dca,_da or 0,aba.getPosition,aba.setPosition)return aca end,offset=function(aca,bca,cca,dca,_da,ada)
  104. aba=ada or aba
  105. _ca(bca,cca,dca,_da or 0,aba.getOffset,aba.setOffset)return aca end,size=function(aca,bca,cca,dca,_da,ada)
  106. aba=ada or aba;_ca(bca,cca,dca,_da or 0,aba.getSize,aba.setSize)return
  107. aca end,changeText=function(aca,bca,cca,...)local dca={...}cca=
  108. cca or 0;aba=obj or aba;for n=1,#dca do
  109. dba(cca+n* (bca/#dca),function()
  110. aba.setText(aba,dca[n])end)end;return aca end,changeBackground=function(aca,bca,cca,...)
  111. local dca={...}cca=cca or 0;aba=obj or aba;for n=1,#dca do
  112. dba(cca+n* (bca/#dca),function()
  113. aba.setBackground(aba,dca[n])end)end;return aca end,changeTextColor=function(aca,bca,cca,...)
  114. local dca={...}cca=cca or 0;aba=obj or aba;for n=1,#dca do
  115. dba(cca+n* (bca/#dca),function()
  116. aba.setForeground(aba,dca[n])end)end;return aca end,add=function(aca,bca,cca)
  117. baa=bca
  118. dba((cca or aaa)+
  119. (__a[#__a]~=nil and __a[#__a].t or 0),bca)return aca end,wait=function(aca,bca)aaa=bca;return aca end,rep=function(aca,bca)
  120. if(
  121. baa~=nil)then for n=1,bca or 1 do
  122. dba((wait or aaa)+
  123. (__a[#__a]~=nil and __a[#__a].t or 0),baa)end end;return aca end,onDone=function(aca,bca)
  124. _aa:registerEvent("animation_done",bca)return aca end,onStart=function(aca,bca)
  125. _aa:registerEvent("animation_start",bca)return aca end,setAutoDestroy=function(aca,bca)
  126. daa=bca~=nil and bca or true;return aca end,animationDoneHandler=function(aca)
  127. _aa:sendEvent("animation_done",aca)
  128. if(daa)then aca.parent:removeObject(aca)aca=nil end end,animationStartHandler=function(aca)
  129. _aa:sendEvent("animation_start",aca)end,clear=function(aca)__a={}baa=nil;aaa=0;c_a=1;a_a=0;d_a=false;return aca end,play=function(aca,bca)
  130. aca:cancel()b_a=true;d_a=bca and true or false;c_a=1;a_a=0
  131. if(__a[c_a]~=nil)then
  132. if(
  133. __a[c_a].t>0)then dd=os.startTimer(__a[c_a].t)else cba()end else aca:animationDoneHandler()end;return aca end,cancel=function(aca)if(
  134. dd~=nil)then os.cancelTimer(dd)d_a=false end;b_a=false;return
  135. aca end,internalObjetCall=function(aca)aca:play(caa)end,eventHandler=function(aca,bca,cca)if
  136. (b_a)then
  137. if(bca=="timer")and(cca==dd)then if(__a[c_a]~=nil)then cba(aca)else
  138. aca:animationDoneHandler()end end end end}bd.__index=bd;return bd end
  139. end;
  140. project['objects']['Button'] = function(...)local d=require("Object")local _a=require("utils")
  141. local aa=_a.getValueFromXML
  142. return
  143. function(ba)local ca=d(ba)local da="Button"local _b="center"local ab="center"ca:setZIndex(5)
  144. ca:setValue("Button")ca.width=12;ca.height=3
  145. local bb={init=function(cb)
  146. cb.bgColor=cb.parent:getTheme("ButtonBG")cb.fgColor=cb.parent:getTheme("ButtonText")end,getType=function(cb)return
  147. da end,setHorizontalAlign=function(cb,db)_b=db end,setVerticalAlign=function(cb,db)ab=db end,setText=function(cb,db)ca:setValue(db)
  148. return cb end,setValuesByXMLData=function(cb,db)ca.setValuesByXMLData(cb,db)
  149. if(aa("text",db)~=
  150. nil)then cb:setText(aa("text",db))end;if(aa("horizontalAlign",db)~=nil)then
  151. _b=aa("horizontalAlign",db)end;if(aa("verticalAlign",db)~=nil)then
  152. ab=aa("verticalAlign",db)end;return cb end,draw=function(cb)
  153. if
  154. (ca.draw(cb))then
  155. if(cb.parent~=nil)then local db,_c=cb:getAnchorPosition()
  156. local ac,bc=cb:getSize()local cc=_a.getTextVerticalAlign(bc,ab)
  157. if(cb.bgColor~=false)then
  158. cb.parent:drawBackgroundBox(db,_c,ac,bc,cb.bgColor)cb.parent:drawTextBox(db,_c,ac,bc," ")end;if(cb.fgColor~=false)then
  159. cb.parent:drawForegroundBox(db,_c,ac,bc,cb.fgColor)end
  160. for n=1,bc do if(n==cc)then
  161. cb.parent:setText(db,_c+ (n-1),_a.getTextHorizontalAlign(cb:getValue(),ac,_b))end end end;cb:setVisualChanged(false)end end}return setmetatable(bb,ca)end
  162. end;
  163. project['objects']['Checkbox'] = function(...)local d=require("Object")local _a=require("utils")
  164. local aa=_a.getValueFromXML
  165. return
  166. function(ba)local ca=d(ba)local da="Checkbox"ca:setZIndex(5)ca:setValue(false)
  167. ca.width=1;ca.height=1
  168. local _b={symbol="\42",init=function(ab)
  169. ab.bgColor=ab.parent:getTheme("CheckboxBG")ab.fgColor=ab.parent:getTheme("CheckboxText")end,getType=function(ab)return
  170. da end,mouseHandler=function(ab,bb,cb,db,_c)
  171. if(ca.mouseHandler(ab,bb,cb,db,_c))then
  172. if
  173. ( (bb=="mouse_click")and(cb==1))or(bb=="monitor_touch")then
  174. if(ab:getValue()~=true)and(
  175. ab:getValue()~=false)then ab:setValue(false)else ab:setValue(not
  176. ab:getValue())end end;return true end;return false end,setValuesByXMLData=function(ab,bb)
  177. ca.setValuesByXMLData(ab,bb)
  178. if(aa("checked",bb)~=nil)then if(aa("checked",bb))then ab:setValue(true)else
  179. ab:setValue(false)end end;return ab end,draw=function(ab)
  180. if
  181. (ca.draw(ab))then
  182. if(ab.parent~=nil)then local bb,cb=ab:getAnchorPosition()
  183. local db,_c=ab:getSize()local ac=_a.getTextVerticalAlign(_c,"center")if
  184. (ab.bgColor~=false)then
  185. ab.parent:drawBackgroundBox(bb,cb,db,_c,ab.bgColor)end
  186. for n=1,_c do
  187. if(n==ac)then
  188. if(ab:getValue()==true)then
  189. ab.parent:writeText(bb,
  190. cb+ (n-1),_a.getTextHorizontalAlign(ab.symbol,db,"center"),ab.bgColor,ab.fgColor)else
  191. ab.parent:writeText(bb,cb+ (n-1),_a.getTextHorizontalAlign(" ",db,"center"),ab.bgColor,ab.fgColor)end end end end;ab:setVisualChanged(false)end end}return setmetatable(_b,ca)end
  192. end;
  193. project['objects']['Dropdown'] = function(...)local d=require("Object")local _a=require("utils")
  194. local aa=require("utils").getValueFromXML
  195. return
  196. function(ba)local ca=d(ba)local da="Dropdown"ca.width=12;ca.height=1;ca:setZIndex(6)
  197. local _b={}local ab;local bb;local cb=true;local db="left"local _c=0;local ac=16;local bc=6;local cc="\16"local dc="\31"local _d=false
  198. local ad={getType=function(bd)
  199. return da end,init=function(bd)
  200. bd.bgColor=bd.parent:getTheme("DropdownBG")bd.fgColor=bd.parent:getTheme("DropdownText")
  201. ab=bd.parent:getTheme("SelectionBG")bb=bd.parent:getTheme("SelectionText")end,setValuesByXMLData=function(bd,cd)
  202. ca.setValuesByXMLData(bd,cd)if(aa("selectionBG",cd)~=nil)then
  203. ab=colors[aa("selectionBG",cd)]end;if(aa("selectionFG",cd)~=nil)then
  204. bb=colors[aa("selectionFG",cd)]end;if(aa("dropdownWidth",cd)~=nil)then
  205. ac=aa("dropdownWidth",cd)end;if(aa("dropdownHeight",cd)~=nil)then
  206. bc=aa("dropdownHeight",cd)end;if(aa("offset",cd)~=nil)then
  207. _c=aa("offset",cd)end
  208. if(cd["item"]~=nil)then local dd=cd["item"]if
  209. (dd.properties~=nil)then dd={dd}end;for __a,a_a in pairs(dd)do
  210. bd:addItem(aa("text",a_a),colors[aa("bg",a_a)],colors[aa("fg",a_a)])end end end,setOffset=function(bd,cd)
  211. _c=cd;return bd end,getOffset=function(bd)return _c end,addItem=function(bd,cd,dd,__a,...)
  212. table.insert(_b,{text=cd,bgCol=dd or bd.bgColor,fgCol=__a or bd.fgColor,args={...}})return bd end,getAll=function(bd)return _b end,removeItem=function(bd,cd)
  213. table.remove(_b,cd)return bd end,getItem=function(bd,cd)return _b[cd]end,getItemIndex=function(bd)
  214. local cd=bd:getValue()for dd,__a in pairs(_b)do if(__a==cd)then return dd end end end,clear=function(bd)
  215. _b={}bd:setValue({})return bd end,getItemCount=function(bd)return#_b end,editItem=function(bd,cd,dd,__a,a_a,...)
  216. table.remove(_b,cd)
  217. table.insert(_b,cd,{text=dd,bgCol=__a or bd.bgColor,fgCol=a_a or bd.fgColor,args={...}})return bd end,selectItem=function(bd,cd)bd:setValue(
  218. _b[cd]or{})return bd end,setSelectedItem=function(bd,cd,dd,__a)
  219. ab=cd or bd.bgColor;bb=dd or bd.fgColor;cb=__a;return bd end,setDropdownSize=function(bd,cd,dd)
  220. ac,bc=cd,dd;return bd end,mouseHandler=function(bd,cd,dd,__a,a_a)
  221. if(_d)then
  222. local b_a,c_a=bd:getAbsolutePosition(bd:getAnchorPosition())
  223. if
  224. ( (cd=="mouse_click")and(dd==1))or(cd=="monitor_touch")then if(#_b>0)then
  225. for n=1,bc do if(_b[n+_c]~=nil)then
  226. if
  227. (b_a<=__a)and(b_a+ac>__a)and(c_a+n==a_a)then bd:setValue(_b[n+_c])return true end end end end end
  228. if(cd=="mouse_scroll")then _c=_c+dd;if(_c<0)then _c=0 end;if(dd==1)then
  229. if(#_b>bc)then if(_c>#_b-bc)then _c=#_b-
  230. bc end else _c=math.min(#_b-1,0)end end;return true end;bd:setVisualChanged()end
  231. if(ca.mouseHandler(bd,cd,dd,__a,a_a))then _d=true else _d=false end end,draw=function(bd)
  232. if
  233. (ca.draw(bd))then local cd,dd=bd:getAnchorPosition()local __a,a_a=bd:getSize()
  234. if
  235. (bd.parent~=nil)then if(bd.bgColor~=false)then
  236. bd.parent:drawBackgroundBox(cd,dd,__a,a_a,bd.bgColor)end;local b_a=bd:getValue()
  237. local c_a=_a.getTextHorizontalAlign((
  238. b_a~=nil and b_a.text or""),__a,db):sub(1,
  239. __a-1).. (_d and dc or cc)
  240. bd.parent:writeText(cd,dd,c_a,bd.bgColor,bd.fgColor)
  241. if(_d)then
  242. for n=1,bc do
  243. if(_b[n+_c]~=nil)then
  244. if(_b[n+_c]==b_a)then
  245. if(cb)then
  246. bd.parent:writeText(cd,dd+n,_a.getTextHorizontalAlign(_b[n+
  247. _c].text,ac,db),ab,bb)else
  248. bd.parent:writeText(cd,dd+n,_a.getTextHorizontalAlign(_b[n+_c].text,ac,db),_b[n+
  249. _c].bgCol,_b[n+_c].fgCol)end else
  250. bd.parent:writeText(cd,dd+n,_a.getTextHorizontalAlign(_b[n+_c].text,ac,db),_b[n+
  251. _c].bgCol,_b[n+_c].fgCol)end end end end end;bd:setVisualChanged(false)end end}return setmetatable(ad,ca)end
  252. end;
  253. project['objects']['Graphic'] = function(...)local da=require("Object")local _b=require("geometricPoints")
  254. local ab=require("tHex")local bb=require("utils").getValueFromXML
  255. local cb,db,_c,ac=string.sub,string.len,math.max,math.min
  256. return
  257. function(bc)local cc=da(bc)local dc="Graphic"cc:setZIndex(2)local _d={}local ad={}local bd={}
  258. local cd=false;local dd,__a=0,0;local a_a=false;local b_a,c_a;local d_a,_aa=40,15;local aaa=false;local baa={}for n=1,16 do baa[string.byte("0123456789abcdef",n,n)]=
  259. 2 ^ (n-1)end
  260. local function caa(dba)local _ca={}for i=1,
  261. #dba do _ca[i]=dba:sub(i,i)end;return _ca end
  262. local function daa(dba,_ca,aca,bca,cca)
  263. if(_ca>=1)and(_ca<=bca)then
  264. if(dba+db(cca)>0)and(dba<=aca)then
  265. local dca=ad[_ca]local _da;local ada=dba+#cca-1
  266. if(dba<1)then
  267. cca=cb(cca,1 -dba+1,aca-dba+1)elseif(ada>aca)then cca=cb(cca,1,aca-dba+1)end
  268. if(dba>1)then _da=cb(dca,1,dba-1)..cca else _da=cca end;if ada<aca then _da=_da..cb(dca,ada+1,aca)end
  269. ad[_ca]=_da end end end
  270. local function _ba()local dba,_ca=d_a,_aa;if(cd)then dba=dba*2;_ca=_ca*3 end
  271. for y=1,_ca do
  272. if(ad[y]~=nil)then if(dba>
  273. ad[y]:len())then ad[y]=ad[y]..
  274. (ab[cc.bgColor]):rep(dba-ad[y]:len())else
  275. ad[y]=ad[y]:sub(1,dba)end else
  276. ad[y]=(ab[cc.bgColor]):rep(dba)end end end;_ba()
  277. local function aba()
  278. local function dba(b_b,c_b)local d_b={}for x=1,c_b:len()do
  279. d_b[x]=baa[string.byte(c_b,x,x)]or 0 end;table.insert(b_b,d_b)end
  280. function parseImage(b_b)if type(b_b)~="string"then
  281. error("bad argument #1 (expected string, got "..type(b_b)..")")end;local c_b={}for d_b in
  282. (b_b.."\n"):gmatch("(.-)\n")do dba(c_b,d_b)end;return c_b end;local _ca=""for y=1,#ad do
  283. if(y==#ad)then _ca=_ca..ad[y]else _ca=_ca..ad[y].."\n"end end;local aca=parseImage(_ca)
  284. local bca={[0]={8,4,3,6,5},{4,14,8,7},{6,10,8,7},{9,11,8,0},{1,14,8,0},{13,12,8,0},{2,10,8,0},{15,8,10,11,12,14},{0,7,1,9,2,13},{3,11,8,7},{2,6,7,15},{9,3,7,15},{13,5,7,15},{5,12,8,7},{1,4,7,15},{7,10,11,12,14}}local cca,dca,_da={},{},{}for i=0,15 do dca[2 ^i]=i end
  285. do local b_b="0123456789abcdef"
  286. for i=1,16 do cca[b_b:sub(i,i)]=
  287. i-1;cca[i-1]=b_b:sub(i,i)
  288. _da[b_b:sub(i,i)]=2 ^ (i-1)_da[2 ^ (i-1)]=b_b:sub(i,i)local c_b=bca[i-1]for i=1,#c_b do
  289. c_b[i]=2 ^c_b[i]end end end
  290. local function ada(b_b)local c_b=bca[dca[b_b[#b_b][1] ] ]
  291. for j=1,#c_b do local d_b=c_b[j]for i=1,
  292. #b_b-1 do if b_b[i][1]==d_b then return i end end end;return 1 end
  293. local function bda(b_b,c_b)
  294. if not c_b then local _ab={}c_b={}for i=1,6 do local aab=b_b[i]local bab=c_b[aab]
  295. c_b[aab],_ab[i]=bab and(bab+1)or 1,aab end;b_b=_ab end;local d_b={}for _ab,aab in pairs(c_b)do d_b[#d_b+1]={_ab,aab}end
  296. if#
  297. d_b>1 then
  298. while#d_b>2 do
  299. table.sort(d_b,function(_bb,abb)return _bb[2]>abb[2]end)local aab,bab=ada(d_b),#d_b;local cab,dab=d_b[bab][1],d_b[aab][1]for i=1,6 do
  300. if b_b[i]==
  301. cab then b_b[i]=dab;d_b[aab][2]=d_b[aab][2]+1 end end;d_b[bab]=nil end;local _ab=128;for i=1,#b_b-1 do
  302. if b_b[i]~=b_b[6]then _ab=_ab+2 ^ (i-1)end end;return string.char(_ab),_da[d_b[1][1]==b_b[6]and
  303. d_b[2][1]or d_b[1][1] ],
  304. _da[b_b[6] ]else
  305. return"\128",_da[b_b[1] ],_da[b_b[1] ]end end
  306. local cda,dda,__b,a_b={{},{},{}},0,#aca+#aca%3,cc.bgColor or colors.black
  307. for i=1,#aca do if#aca[i]>dda then dda=#aca[i]end end
  308. for y=0,__b-1,3 do local b_b,c_b,d_b,_ab={},{},{},1
  309. for x=0,dda-1,2 do local aab,bab={},{}
  310. for yy=1,3 do
  311. for xx=1,2 do
  312. aab[#aab+1]=
  313. (aca[y+yy]and aca[y+yy][
  314. x+xx])and(aca[y+yy][x+xx]==0 and a_b or aca[y+yy][
  315. x+xx])or a_b;bab[aab[#aab] ]=
  316. bab[aab[#aab] ]and(bab[aab[#aab] ]+1)or 1 end end;b_b[_ab],c_b[_ab],d_b[_ab]=bda(aab,bab)_ab=_ab+1 end
  317. cda[1][#cda[1]+1],cda[2][#cda[2]+1],cda[3][#cda[3]+1]=table.concat(b_b),table.concat(c_b),table.concat(d_b)end;cda.width,cda.height=#cda[1][1],#cda[1]bd=cda end
  318. local function bba()local dba,_ca=d_a,_aa;if(cd)then dba=dba*2;_ca=_ca*3 end;for aca,bca in pairs(_d)do
  319. for cca,dca in
  320. pairs(bca[1])do daa(dca.x,dca.y,dba,_ca,bca[2])end end;if(cd)then aba()end end
  321. local cba={init=function(dba)dba.bgColor=dba.parent:getTheme("GraphicBG")end,getType=function(dba)return
  322. dc end,setSize=function(dba,_ca,aca,bca)cc.setSize(dba,_ca,aca,bca)if not(aaa)then d_a=_ca
  323. _aa=aca;_ba()end;bba()return dba end,setOffset=function(dba,_ca,aca)dd=
  324. _ca or dd;__a=aca or __a;return dba end,setCanvasSize=function(dba,_ca,aca)
  325. d_a,_aa=_ca,aca;aaa=true;_ba()return dba end,clearCanvas=function(dba)_d={}ad={}_ba()end,getOffset=function(dba)return
  326. dd,__a end,setValuesByXMLData=function(dba,_ca)cc.setValuesByXMLData(dba,_ca)
  327. if(
  328. bb("text",_ca)~=nil)then dba:setText(bb("text",_ca))end;if(bb("xOffset",_ca)~=nil)then
  329. dba:setOffset(bb("xOffset",_ca),__a)end;if(bb("yOffset",_ca)~=nil)then
  330. dba:setOffset(dd,bb("yOffset",_ca))end;if(bb("wCanvas",_ca)~=nil)then
  331. d_a=bb("wCanvas",_ca)end;if(bb("hCanvas",_ca)~=nil)then
  332. _aa=bb("hCanvas",_ca)end;if(bb("shrink",_ca)~=nil)then if(bb("shrink",_ca))then
  333. dba:shrink()end end
  334. if
  335. (bb("dragable",_ca)~=nil)then if(bb("dragable",_ca))then a_a=true end end
  336. if(_ca["ellipse"]~=nil)then local aca=_ca["ellipse"]if(aca.properties~=nil)then
  337. aca={aca}end
  338. for bca,cca in pairs(aca)do local dca=colors[bb("color",cca)]
  339. local _da=bb("radius",cca)local ada=bb("radius2",cca)local bda=bb("x",cca)local cda=bb("y",cca)
  340. local dda=bb("filled",cca)dba:addEllipse(dca,_da,ada,bda,cda,dda)end end
  341. if(_ca["circle"]~=nil)then local aca=_ca["circle"]if(aca.properties~=nil)then
  342. aca={aca}end
  343. for bca,cca in pairs(aca)do local dca=colors[bb("color",cca)]
  344. local _da=tonumber(bb("radius",cca))local ada=tonumber(bb("x",cca))
  345. local bda=tonumber(bb("y",cca))local cda=bb("filled",cca)
  346. dba:addCircle(dca,_da,ada,bda,cda)end end
  347. if(_ca["line"]~=nil)then local aca=_ca["line"]
  348. if(aca.properties~=nil)then aca={aca}end
  349. for bca,cca in pairs(aca)do local dca=colors[bb("color",cca)]
  350. local _da=tonumber(bb("x",cca))local ada=tonumber(bb("x2",cca))
  351. local bda=tonumber(bb("y",cca))local cda=tonumber(bb("y2",cca))
  352. dba:addLine(dca,_da,bda,ada,cda)end end
  353. if(_ca["rectangle"]~=nil)then local aca=_ca["rectangle"]if
  354. (aca.properties~=nil)then aca={aca}end
  355. for bca,cca in pairs(aca)do
  356. local dca=colors[bb("color",cca)]local _da=tonumber(bb("x",cca))
  357. local ada=tonumber(bb("x2",cca))local bda=tonumber(bb("y",cca))
  358. local cda=tonumber(bb("y2",cca))
  359. local dda=bb("filled",cca)=="true"and true or false;dba:addRectangle(dca,_da,bda,ada,cda,dda)end end
  360. if(_ca["triangle"]~=nil)then local aca=_ca["triangle"]if(aca.properties~=nil)then
  361. aca={aca}end
  362. for bca,cca in pairs(aca)do local dca=colors[bb("color",cca)]
  363. local _da=tonumber(bb("x",cca))local ada=tonumber(bb("x2",cca))
  364. local bda=tonumber(bb("x2",cca))local cda=tonumber(bb("y",cca))
  365. local dda=tonumber(bb("y2",cca))local __b=tonumber(bb("y3",cca))local a_b=bb("filled",cca)
  366. dba:addTriangle(dca,_da,cda,ada,dda,bda,__b,a_b)end end;return dba end,addCircle=function(dba,_ca,aca,bca,cca,dca)
  367. local _da=ab[_ca]
  368. table.insert(_d,{_b.circle(bca or 1,cca or 1,aca,dca),ab[_ca]})bba()return dba end,addEllipse=function(dba,_ca,aca,bca,cca,dca,_da)
  369. table.insert(_d,{_b.ellipse(
  370. cca or 1,dca or 1,aca,bca,_da),ab[_ca]})bba()return dba end,addLine=function(dba,_ca,aca,bca,cca,dca)
  371. table.insert(_d,{_b.line(
  372. aca or 1,bca or 1,cca or 1,dca or 1),ab[_ca]})bba()return dba end,addTriangle=function(dba,_ca,aca,bca,cca,dca,_da,ada,bda)
  373. table.insert(_d,{_b.triangle(
  374. aca or 1,bca or 1,cca or 1,dca or 1,_da or 1,ada or 1,bda),ab[_ca]})bba()return dba end,addRectangle=function(dba,_ca,aca,bca,cca,dca,_da)
  375. table.insert(_d,{_b.rectangle(
  376. aca or 1,bca or 1,cca or 1,dca or 1,_da),ab[_ca]})bba()return dba end,shrink=function(dba)
  377. cd=true;_ba()aba()return dba end,setDragable=function(dba,_ca)
  378. a_a=_ca==true and true or false;return dba end,mouseHandler=function(dba,_ca,aca,bca,cca)
  379. if(cc.mouseHandler(dba,_ca,aca,bca,cca))then
  380. if
  381. (a_a)then if(_ca=="mouse_click")then b_a,c_a=bca,cca end
  382. if(_ca=="mouse_drag")then if
  383. (b_a~=nil)and(c_a~=nil)then
  384. dd=_c(ac(dd+b_a-bca,d_a-dba:getWidth()),0)b_a=bca
  385. __a=_c(ac(__a+c_a-cca,_aa-dba:getHeight()),0)c_a=cca end end end;return true end;return false end,draw=function(dba)
  386. if
  387. (cc.draw(dba))then
  388. if(dba.parent~=nil)then local _ca,aca=dba:getAnchorPosition()
  389. local bca,cca=dba:getSize()if(dba.bgColor~=false)then
  390. dba.parent:drawBackgroundBox(_ca,aca,bca,cca,dba.bgColor)end
  391. if(cd)then local dca,_da,ada=bd[1],bd[2],bd[3]
  392. for i=1,bd.height
  393. do local bda,cda=_ca+dd,aca+i-1 +__a
  394. if
  395. (cda>aca-1)and(cda<=aca+cca-1)and(bda<=bca+_ca)then local dda=dca[i]local __b,a_b,b_b=_c(bda,_ca),_c(1 -bda+1,1),ac(
  396. bca- (bda-_ca),bca)
  397. if
  398. type(dda)=="string"then dba.parent:setText(__b,cda,cb(dda,a_b,b_b))
  399. dba.parent:setFG(__b,cda,cb(_da[i],a_b,b_b))
  400. dba.parent:setBG(__b,cda,cb(ada[i],a_b,b_b))elseif type(dda)=="table"then
  401. dba.parent:setText(__b,cda,cb(dda[2],a_b,b_b))
  402. dba.parent:setFG(__b,cda,cb(_da[i],a_b,b_b))
  403. dba.parent:setBG(__b,cda,cb(ada[i],a_b,b_b))end end end else
  404. for i=1,#ad do local dca,_da=_ca+dd,aca+i-1 +__a
  405. if
  406. (_da>aca-1)and(_da<=aca+cca-1)and(dca<=bca+_ca)then local ada,bda,cda=_c(dca,_ca),_c(1 -dca+1,1),ac(bca-
  407. (dca-_ca),bca)
  408. dba.parent:setBG(ada,_da,cb(ad[i],bda,cda))end end end end;dba:setVisualChanged(false)end end}return setmetatable(cba,cc)end
  409. end;
  410. project['objects']['Image'] = function(...)local c=require("Object")
  411. local d=require("utils").getValueFromXML
  412. return
  413. function(_a)local aa=c(_a)local ba="Image"aa:setZIndex(2)local ca;local da;local _b=false
  414. local function ab()
  415. local cb={[0]={8,4,3,6,5},{4,14,8,7},{6,10,8,7},{9,11,8,0},{1,14,8,0},{13,12,8,0},{2,10,8,0},{15,8,10,11,12,14},{0,7,1,9,2,13},{3,11,8,7},{2,6,7,15},{9,3,7,15},{13,5,7,15},{5,12,8,7},{1,4,7,15},{7,10,11,12,14}}local db,_c,ac={},{},{}for i=0,15 do _c[2 ^i]=i end
  416. do local cd="0123456789abcdef"
  417. for i=1,16 do db[cd:sub(i,i)]=
  418. i-1;db[i-1]=cd:sub(i,i)
  419. ac[cd:sub(i,i)]=2 ^ (i-1)ac[2 ^ (i-1)]=cd:sub(i,i)local dd=cb[i-1]for i=1,#dd do
  420. dd[i]=2 ^dd[i]end end end
  421. local function bc(cd)local dd=cb[_c[cd[#cd][1] ] ]
  422. for j=1,#dd do local __a=dd[j]for i=1,#cd-1 do if
  423. cd[i][1]==__a then return i end end end;return 1 end
  424. local function cc(cd,dd)
  425. if not dd then local a_a={}dd={}for i=1,6 do local b_a=cd[i]local c_a=dd[b_a]
  426. dd[b_a],a_a[i]=c_a and(c_a+1)or 1,b_a end;cd=a_a end;local __a={}for a_a,b_a in pairs(dd)do __a[#__a+1]={a_a,b_a}end
  427. if
  428. #__a>1 then
  429. while#__a>2 do
  430. table.sort(__a,function(aaa,baa)return aaa[2]>baa[2]end)local b_a,c_a=bc(__a),#__a;local d_a,_aa=__a[c_a][1],__a[b_a][1]for i=1,6 do
  431. if
  432. cd[i]==d_a then cd[i]=_aa;__a[b_a][2]=__a[b_a][2]+1 end end;__a[c_a]=nil end;local a_a=128
  433. for i=1,#cd-1 do if cd[i]~=cd[6]then a_a=a_a+2 ^ (i-1)end end
  434. return string.char(a_a),ac[__a[1][1]==cd[6]and __a[2][1]or
  435. __a[1][1] ],ac[cd[6] ]else return"\128",ac[cd[1] ],ac[cd[1] ]end end
  436. local dc,_d,ad,bd={{},{},{}},0,#ca+#ca%3,aa.bgColor or colors.black;for i=1,#ca do if#ca[i]>_d then _d=#ca[i]end end
  437. for y=0,ad-1,3 do
  438. local cd,dd,__a,a_a={},{},{},1
  439. for x=0,_d-1,2 do local b_a,c_a={},{}
  440. for yy=1,3 do
  441. for xx=1,2 do
  442. b_a[#b_a+1]=(ca[y+yy]and ca[y+yy][x+xx])and
  443. (ca[y+
  444. yy][x+xx]==0 and bd or ca[y+yy][x+xx])or bd;c_a[b_a[#b_a] ]=
  445. c_a[b_a[#b_a] ]and(c_a[b_a[#b_a] ]+1)or 1 end end;cd[a_a],dd[a_a],__a[a_a]=cc(b_a,c_a)a_a=a_a+1 end
  446. dc[1][#dc[1]+1],dc[2][#dc[2]+1],dc[3][#dc[3]+1]=table.concat(cd),table.concat(dd),table.concat(__a)end;dc.width,dc.height=#dc[1][1],#dc[1]da=dc end
  447. local bb={init=function(cb)cb.bgColor=cb.parent:getTheme("ImageBG")end,getType=function(cb)return
  448. ba end,loadImage=function(cb,db)ca=paintutils.loadImage(db)_b=false;return cb end,shrink=function(cb)
  449. ab()_b=true;return cb end,setValuesByXMLData=function(cb,db)aa.setValuesByXMLData(cb,db)
  450. if(
  451. d("shrink",db)~=nil)then if(d("shrink",db))then cb:shrink()end end
  452. if(d("path",db)~=nil)then cb:loadImage(d("path",db))end;return cb end,draw=function(cb)
  453. if
  454. (aa.draw(cb))then
  455. if(cb.parent~=nil)then
  456. if(ca~=nil)then local db,_c=cb:getAnchorPosition()
  457. local ac,bc=cb:getSize()
  458. if(_b)then local cc,dc,_d=da[1],da[2],da[3]
  459. for i=1,da.height do local ad=cc[i]
  460. if type(ad)=="string"then cb.parent:setText(db,
  461. _c+i-1,ad)
  462. cb.parent:setFG(db,_c+i-1,dc[i])cb.parent:setBG(db,_c+i-1,_d[i])elseif
  463. type(ad)=="table"then cb.parent:setText(db,_c+i-1,ad[2])cb.parent:setFG(db,_c+
  464. i-1,dc[i])
  465. cb.parent:setBG(db,_c+i-1,_d[i])end end else
  466. for yPos=1,math.min(#ca,bc)do local cc=ca[yPos]
  467. for xPos=1,math.min(#cc,ac)do if cc[xPos]>0 then
  468. cb.parent:drawBackgroundBox(
  469. db+xPos-1,_c+yPos-1,1,1,cc[xPos])end end end end end end;cb:setVisualChanged(false)end end}return setmetatable(bb,aa)end
  470. end;
  471. project['objects']['Input'] = function(...)local d=require("Object")local _a=require("utils")
  472. local aa=_a.getValueFromXML
  473. return
  474. function(ba)local ca=d(ba)local da="Input"local _b="text"local ab=0;ca:setZIndex(5)
  475. ca:setValue("")ca.width=10;ca.height=1;local bb=1;local cb=1;local db=""local _c;local ac;local bc=db;local cc=false
  476. local dc={init=function(_d)
  477. _d.bgColor=_d.parent:getTheme("InputBG")_d.fgColor=_d.parent:getTheme("InputFG")end,getType=function(_d)return
  478. da end,setInputType=function(_d,ad)if
  479. (ad=="password")or(ad=="number")or(ad=="text")then _b=ad end;return _d end,setDefaultText=function(_d,ad,bd,cd)
  480. db=ad;_c=cd or _c;ac=bd or ac;if(_d:isFocused())then bc=""else bc=db end
  481. return _d end,getInputType=function(_d)return _b end,setValue=function(_d,ad)
  482. ca.setValue(_d,tostring(ad))
  483. if not(cc)then bb=tostring(ad):len()+1 end;return _d end,getValue=function(_d)
  484. local ad=ca.getValue(_d)return _b=="number"and tonumber(ad)or ad end,setInputLimit=function(_d,ad)ab=
  485. tonumber(ad)or ab;return _d end,getInputLimit=function(_d)return ab end,setValuesByXMLData=function(_d,ad)
  486. ca.setValuesByXMLData(_d,ad)local bd,cd
  487. if(aa("defaultBG",ad)~=nil)then bd=aa("defaultBG",ad)end
  488. if(aa("defaultFG",ad)~=nil)then cd=aa("defaultFG",ad)end;if(aa("default",ad)~=nil)then
  489. _d:setDefaultText(aa("default",ad),cd~=nil and colors[cd],
  490. bd~=nil and colors[bd])end
  491. if
  492. (aa("limit",ad)~=nil)then _d:setInputLimit(aa("limit",ad))end
  493. if(aa("type",ad)~=nil)then _d:setInputType(aa("type",ad))end;return _d end,getFocusHandler=function(_d)
  494. ca.getFocusHandler(_d)
  495. if(_d.parent~=nil)then local ad,bd=_d:getAnchorPosition()bc=""if(_d.parent~=nil)then
  496. _d.parent:setCursor(true,
  497. ad+bb-cb,bd+math.floor(_d.height/2),_d.fgColor)end end end,loseFocusHandler=function(_d)
  498. ca.loseFocusHandler(_d)
  499. if(_d.parent~=nil)then _d.parent:setCursor(false)bc=db end end,keyHandler=function(_d,ad,bd)
  500. if(ca.keyHandler(_d,ad,bd))then
  501. local cd,dd=_d:getSize()cc=true
  502. if(ad=="key")then
  503. if(bd==keys.backspace)then
  504. local d_a=tostring(ca.getValue())if(bb>1)then
  505. _d:setValue(d_a:sub(1,bb-2)..d_a:sub(bb,d_a:len()))if(bb>1)then bb=bb-1 end
  506. if(cb>1)then if(bb<cb)then cb=cb-1 end end end end;if(bd==keys.enter)then if(_d.parent~=nil)then end end
  507. if(bd==
  508. keys.right)then
  509. local d_a=tostring(ca.getValue()):len()bb=bb+1;if(bb>d_a)then bb=d_a+1 end;if(bb<1)then bb=1 end;if
  510. (bb<cb)or(bb>=cd+cb)then cb=bb-cd+1 end;if(cb<1)then cb=1 end end
  511. if(bd==keys.left)then bb=bb-1;if(bb>=1)then
  512. if(bb<cb)or(bb>=cd+cb)then cb=bb end end;if(bb<1)then bb=1 end;if(cb<1)then cb=1 end end end
  513. if(ad=="char")then local d_a=ca.getValue()
  514. if(d_a:len()<ab or ab<=0)then
  515. if
  516. (_b=="number")then local _aa=d_a;if(bd==".")or(tonumber(bd)~=nil)then
  517. _d:setValue(d_a:sub(1,bb-1)..
  518. bd..d_a:sub(bb,d_a:len()))bb=bb+1 end;if(
  519. tonumber(ca.getValue())==nil)then _d:setValue(_aa)end else
  520. _d:setValue(d_a:sub(1,
  521. bb-1)..bd..d_a:sub(bb,d_a:len()))bb=bb+1 end;if(bb>=cd+cb)then cb=cb+1 end end end;local __a,a_a=_d:getAnchorPosition()
  522. local b_a=tostring(ca.getValue())
  523. local c_a=(bb<=b_a:len()and bb-1 or b_a:len())- (cb-1)if(c_a>_d.x+cd-1)then c_a=_d.x+cd-1 end;if
  524. (_d.parent~=nil)then
  525. _d.parent:setCursor(true,__a+c_a,a_a+math.floor(dd/2),_d.fgColor)end;cc=false end end,mouseHandler=function(_d,ad,bd,cd,dd)
  526. if
  527. (ca.mouseHandler(_d,ad,bd,cd,dd))then if(ad=="mouse_click")and(bd==1)then end;return true end;return false end,draw=function(_d)
  528. if
  529. (ca.draw(_d))then
  530. if(_d.parent~=nil)then local ad,bd=_d:getAnchorPosition()
  531. local cd,dd=_d:getSize()local __a=_a.getTextVerticalAlign(dd,"center")if
  532. (_d.bgColor~=false)then
  533. _d.parent:drawBackgroundBox(ad,bd,cd,dd,_d.bgColor)end
  534. for n=1,dd do
  535. if(n==__a)then
  536. local a_a=tostring(ca.getValue())local b_a=_d.bgColor;local c_a=_d.fgColor;local d_a;if(a_a:len()<=0)then d_a=bc;b_a=_c or b_a;c_a=
  537. ac or c_a end;d_a=bc
  538. if(a_a~="")then d_a=a_a end;d_a=d_a:sub(cb,cd+cb-1)local _aa=cd-d_a:len()
  539. if(_aa<0)then _aa=0 end;if(_b=="password")and(a_a~="")then
  540. d_a=string.rep("*",d_a:len())end
  541. d_a=d_a..string.rep(" ",_aa)_d.parent:writeText(ad,bd+ (n-1),d_a,b_a,c_a)end end end;_d:setVisualChanged(false)end end}return setmetatable(dc,ca)end
  542. end;
  543. project['objects']['Label'] = function(...)local ba=require("Object")local ca=require("utils")
  544. local da=ca.getValueFromXML;local _b=ca.createText;local ab=require("tHex")local bb=require("bigfont")
  545. return
  546. function(cb)
  547. local db=ba(cb)local _c="Label"db:setZIndex(3)local ac=true;db:setValue("Label")
  548. db.width=5;local bc="left"local cc="top"local dc=0;local _d,ad=false,false
  549. local bd={getType=function(cd)return _c end,setText=function(cd,dd)
  550. dd=tostring(dd)db:setValue(dd)if(ac)then cd.width=dd:len()end
  551. if not(_d)then cd.fgColor=
  552. cd.parent:getForeground()or colors.white end;if not(ad)then
  553. cd.bgColor=cd.parent:getBackground()or colors.black end;return cd end,setBackground=function(cd,dd)
  554. db.setBackground(cd,dd)ad=true;return cd end,setForeground=function(cd,dd)
  555. db.setForeground(cd,dd)_d=true;return cd end,setTextAlign=function(cd,dd,__a)bc=dd or bc;cc=__a or cc
  556. cd:setVisualChanged()return cd end,setFontSize=function(cd,dd)if(dd>0)and(dd<=4)then
  557. dc=dd-1 or 0 end;return cd end,getFontSize=function(cd)return dc+1 end,setValuesByXMLData=function(cd,dd)
  558. db.setValuesByXMLData(cd,dd)
  559. if(da("text",dd)~=nil)then cd:setText(da("text",dd))end
  560. if(da("verticalAlign",dd)~=nil)then cc=da("verticalAlign",dd)end;if(da("horizontalAlign",dd)~=nil)then
  561. bc=da("horizontalAlign",dd)end;if(da("font",dd)~=nil)then
  562. cd:setFontSize(da("font",dd))end;return cd end,setSize=function(cd,dd,__a)
  563. db.setSize(cd,dd,__a)ac=false;cd:setVisualChanged()return cd end,draw=function(cd)
  564. if
  565. (db.draw(cd))then
  566. if(cd.parent~=nil)then local dd,__a=cd:getAnchorPosition()
  567. local a_a,b_a=cd:getSize()local c_a=ca.getTextVerticalAlign(b_a,cc)
  568. if(cd.bgColor~=false)then
  569. cd.parent:drawBackgroundBox(dd,__a,a_a,b_a,cd.bgColor)cd.parent:drawTextBox(dd,__a,a_a,b_a," ")end;if(cd.fgColor~=false)then
  570. cd.parent:drawForegroundBox(dd,__a,a_a,b_a,cd.fgColor)end
  571. if(dc==0)then
  572. if not(ac)then
  573. local d_a=_b(cd:getValue(),cd:getWidth())
  574. for _aa,aaa in pairs(d_a)do cd.parent:setText(dd,__a+_aa-1,aaa)end else
  575. for n=1,b_a do if(n==c_a)then
  576. cd.parent:setText(dd,__a+ (n-1),ca.getTextHorizontalAlign(cd:getValue(),a_a,bc))end end end else
  577. local d_a=bb(dc,cd:getValue(),cd.fgColor,cd.bgColor or colors.black)
  578. if(ac)then cd:setSize(#d_a[1][1],#d_a[1]-1)end
  579. for n=1,b_a do
  580. if(n==c_a)then local _aa,aaa=cd.parent:getSize()
  581. local baa,caa=#d_a[1][1],#d_a[1]
  582. dd=dd or math.floor((_aa-baa)/2)+1
  583. __a=__a or math.floor((aaa-caa)/2)+1
  584. for i=1,caa do
  585. cd.parent:setFG(dd,__a+i+n-2,ca.getTextHorizontalAlign(d_a[2][i],a_a,bc))
  586. cd.parent:setBG(dd,__a+i+n-2,ca.getTextHorizontalAlign(d_a[3][i],a_a,bc,ab[cd.bgColor or colors.black]))
  587. cd.parent:setText(dd,__a+i+n-2,ca.getTextHorizontalAlign(d_a[1][i],a_a,bc))end end end end end;cd:setVisualChanged(false)end end}return setmetatable(bd,db)end
  588. end;
  589. project['objects']['List'] = function(...)local d=require("Object")local _a=require("utils")
  590. local aa=_a.getValueFromXML
  591. return
  592. function(ba)local ca=d(ba)local da="List"ca.width=16;ca.height=6;ca:setZIndex(5)local _b={}
  593. local ab;local bb;local cb=true;local db="left"local _c=0;local ac=true
  594. local bc={init=function(cc)
  595. cc.bgColor=cc.parent:getTheme("ListBG")cc.fgColor=cc.parent:getTheme("ListText")
  596. ab=cc.parent:getTheme("SelectionBG")bb=cc.parent:getTheme("SelectionText")end,getType=function(cc)return
  597. da end,addItem=function(cc,dc,_d,ad,...)
  598. table.insert(_b,{text=dc,bgCol=_d or cc.bgColor,fgCol=ad or cc.fgColor,args={...}})if(#_b==1)then cc:setValue(_b[1])end;return cc end,setOffset=function(cc,dc)
  599. _c=dc;return cc end,getOffset=function(cc)return _c end,removeItem=function(cc,dc)table.remove(_b,dc)
  600. return cc end,getItem=function(cc,dc)return _b[dc]end,getAll=function(cc)return _b end,getItemIndex=function(cc)
  601. local dc=cc:getValue()for _d,ad in pairs(_b)do if(ad==dc)then return _d end end end,clear=function(cc)
  602. _b={}cc:setValue({})return cc end,getItemCount=function(cc)return#_b end,editItem=function(cc,dc,_d,ad,bd,...)
  603. table.remove(_b,dc)
  604. table.insert(_b,dc,{text=_d,bgCol=ad or cc.bgColor,fgCol=bd or cc.fgColor,args={...}})return cc end,selectItem=function(cc,dc)cc:setValue(
  605. _b[dc]or{})return cc end,setSelectedItem=function(cc,dc,_d,ad)
  606. ab=dc or cc.bgColor;bb=_d or cc.fgColor;cb=ad;return cc end,setScrollable=function(cc,dc)
  607. ac=dc;return cc end,setValuesByXMLData=function(cc,dc)ca.setValuesByXMLData(cc,dc)
  608. if(
  609. aa("selectionBG",dc)~=nil)then ab=colors[aa("selectionBG",dc)]end;if(aa("selectionFG",dc)~=nil)then
  610. bb=colors[aa("selectionFG",dc)]end;if(aa("scrollable",dc)~=nil)then
  611. if
  612. (aa("scrollable",dc))then cc:setScrollable(true)else cc:setScrollable(false)end end;if
  613. (aa("offset",dc)~=nil)then _c=aa("offset",dc)end
  614. if(dc["item"]~=nil)then
  615. local _d=dc["item"]if(_d.properties~=nil)then _d={_d}end;for ad,bd in pairs(_d)do
  616. cc:addItem(aa("text",bd),colors[aa("bg",bd)],colors[aa("fg",bd)])end end;return cc end,mouseHandler=function(cc,dc,_d,ad,bd)
  617. local cd,dd=cc:getAbsolutePosition(cc:getAnchorPosition())local __a,a_a=cc:getSize()
  618. if
  619.  
  620. (cd<=ad)and(cd+__a>ad)and(dd<=bd)and(dd+a_a>bd)and(cc:isVisible())then
  621. if
  622. ( ( (dc=="mouse_click")or(dc=="mouse_drag"))and(_d==1))or(dc=="monitor_touch")then
  623. if(#_b>0)then
  624. for n=1,a_a do
  625. if(
  626. _b[n+_c]~=nil)then if(cd<=ad)and(cd+__a>ad)and(dd+n-1 ==bd)then cc:setValue(_b[
  627. n+_c])
  628. cc:getEventSystem():sendEvent("mouse_click",cc,"mouse_click",0,ad,bd,_b[
  629. n+_c])end end end end end
  630. if(dc=="mouse_scroll")and(ac)then _c=_c+_d;if(_c<0)then _c=0 end
  631. if(_d>=1)then if(#_b>a_a)then if(
  632. _c>#_b-a_a)then _c=#_b-a_a end
  633. if(_c>=#_b)then _c=#_b-1 end else _c=_c-1 end end end;cc:setVisualChanged()return true end end,draw=function(cc)
  634. if
  635. (ca.draw(cc))then
  636. if(cc.parent~=nil)then local dc,_d=cc:getAnchorPosition()
  637. local ad,bd=cc:getSize()if(cc.bgColor~=false)then
  638. cc.parent:drawBackgroundBox(dc,_d,ad,bd,cc.bgColor)end
  639. for n=1,bd do
  640. if(_b[n+_c]~=nil)then
  641. if(_b[n+_c]==
  642. cc:getValue())then
  643. if(cb)then
  644. cc.parent:writeText(dc,_d+n-1,_a.getTextHorizontalAlign(_b[n+_c].text,ad,db),ab,bb)else
  645. cc.parent:writeText(dc,_d+n-1,_a.getTextHorizontalAlign(_b[n+_c].text,ad,db),_b[
  646. n+_c].bgCol,_b[n+_c].fgCol)end else
  647. cc.parent:writeText(dc,_d+n-1,_a.getTextHorizontalAlign(_b[n+_c].text,ad,db),_b[
  648. n+_c].bgCol,_b[n+_c].fgCol)end end end end;cc:setVisualChanged(false)end end}return setmetatable(bc,ca)end
  649. end;
  650. project['objects']['Menubar'] = function(...)local _a=require("Object")local aa=require("utils")
  651. local ba=aa.getValueFromXML;local ca=require("tHex")
  652. return
  653. function(da)local _b=_a(da)local ab="Menubar"local bb={}_b.width=30
  654. _b.height=1;_b:setZIndex(5)local cb={}local db;local _c;local ac=true;local bc="left"local cc=0;local dc=1
  655. local _d=false
  656. local function ad()local bd=0;local cd=0;local dd=bb:getWidth()
  657. for n=1,#cb do if(cd+cb[n].text:len()+
  658. dc*2 >dd)then
  659. if(cd<dd)then bd=bd+ (cb[n].text:len()+dc*2 - (
  660. dd-cd))else bd=bd+
  661. cb[n].text:len()+dc*2 end end;cd=cd+
  662. cb[n].text:len()+dc*2 end;return bd end
  663. bb={init=function(bd)bd.bgColor=bd.parent:getTheme("MenubarBG")
  664. bd.fgColor=bd.parent:getTheme("MenubarText")db=bd.parent:getTheme("SelectionBG")
  665. _c=bd.parent:getTheme("SelectionText")end,getType=function(bd)return
  666. ab end,addItem=function(bd,cd,dd,__a,...)
  667. table.insert(cb,{text=tostring(cd),bgCol=dd or bd.bgColor,fgCol=__a or bd.fgColor,args={...}})if(#cb==1)then bd:setValue(cb[1])end;return bd end,getAll=function(bd)return
  668. cb end,getItemIndex=function(bd)local cd=bd:getValue()for dd,__a in pairs(cb)do
  669. if(__a==cd)then return dd end end end,clear=function(bd)
  670. cb={}bd:setValue({})return bd end,setSpace=function(bd,cd)dc=cd or dc;return bd end,setOffset=function(bd,cd)cc=
  671. cd or 0;if(cc<0)then cc=0 end;local dd=ad()if(cc>dd)then cc=dd end;return bd end,getOffset=function(bd)return
  672. cc end,setScrollable=function(bd,cd)_d=cd;if(cd==nil)then _d=true end;return bd end,setValuesByXMLData=function(bd,cd)
  673. _b.setValuesByXMLData(bd,cd)if(ba("selectionBG",cd)~=nil)then
  674. db=colors[ba("selectionBG",cd)]end;if(ba("selectionFG",cd)~=nil)then
  675. _c=colors[ba("selectionFG",cd)]end;if(ba("scrollable",cd)~=nil)then
  676. if
  677. (ba("scrollable",cd))then bd:setScrollable(true)else bd:setScrollable(false)end end
  678. if
  679. (ba("offset",cd)~=nil)then bd:setOffset(ba("offset",cd))end;if(ba("space",cd)~=nil)then dc=ba("space",cd)end
  680. if(
  681. cd["item"]~=nil)then local dd=cd["item"]if(dd.properties~=nil)then dd={dd}end;for __a,a_a in
  682. pairs(dd)do
  683. bd:addItem(ba("text",a_a),colors[ba("bg",a_a)],colors[ba("fg",a_a)])end end;return bd end,removeItem=function(bd,cd)
  684. table.remove(cb,cd)return bd end,getItem=function(bd,cd)return cb[cd]end,getItemCount=function(bd)return#cb end,editItem=function(bd,cd,dd,__a,a_a,...)
  685. table.remove(cb,cd)
  686. table.insert(cb,cd,{text=dd,bgCol=__a or bd.bgColor,fgCol=a_a or bd.fgColor,args={...}})return bd end,selectItem=function(bd,cd)bd:setValue(
  687. cb[cd]or{})return bd end,setSelectedItem=function(bd,cd,dd,__a)
  688. db=cd or bd.bgColor;_c=dd or bd.fgColor;ac=__a;return bd end,mouseHandler=function(bd,cd,dd,__a,a_a)
  689. if
  690. (_b.mouseHandler(bd,cd,dd,__a,a_a))then
  691. local b_a,c_a=bd:getAbsolutePosition(bd:getAnchorPosition())local d_a,_aa=bd:getSize()
  692. if
  693.  
  694. (b_a<=__a)and(b_a+d_a>__a)and(c_a<=a_a)and(c_a+_aa>a_a)and(bd:isVisible())then
  695. if(bd.parent~=nil)then bd.parent:setFocusedObject(bd)end
  696. if(cd=="mouse_click")or(cd=="monitor_touch")then local aaa=0
  697. for n=1,#cb do
  698. if
  699. (cb[n]~=nil)then
  700. if
  701. (b_a+aaa<=__a+cc)and(
  702. b_a+aaa+cb[n].text:len()+ (dc*2)>__a+cc)and(c_a==a_a)then bd:setValue(cb[n])
  703. bd:getEventSystem():sendEvent(cd,bd,cd,0,__a,a_a,cb[n])end;aaa=aaa+cb[n].text:len()+dc*2 end end end;if(cd=="mouse_scroll")and(_d)then cc=cc+dd;if(cc<0)then cc=0 end;local aaa=ad()if
  704. (cc>aaa)then cc=aaa end end
  705. bd:setVisualChanged(true)return true end end;return false end,draw=function(bd)
  706. if
  707. (_b.draw(bd))then
  708. if(bd.parent~=nil)then local cd,dd=bd:getAnchorPosition()
  709. local __a,a_a=bd:getSize()if(bd.bgColor~=false)then
  710. bd.parent:drawBackgroundBox(cd,dd,__a,a_a,bd.bgColor)end;local b_a=""local c_a=""local d_a=""
  711. for _aa,aaa in pairs(cb)do
  712. local baa=
  713. (" "):rep(dc)..aaa.text.. (" "):rep(dc)b_a=b_a..baa
  714. if(aaa==bd:getValue())then c_a=c_a..
  715. ca[db or aaa.bgCol or bd.bgColor]:rep(baa:len())d_a=d_a..
  716. ca[_c or aaa.FgCol or
  717. bd.fgColor]:rep(baa:len())else c_a=c_a..
  718. ca[aaa.bgCol or bd.bgColor]:rep(baa:len())d_a=d_a..
  719. ca[aaa.FgCol or bd.fgColor]:rep(baa:len())end end
  720. bd.parent:setText(cd,dd,b_a:sub(cc+1,__a+cc))
  721. bd.parent:setBG(cd,dd,c_a:sub(cc+1,__a+cc))
  722. bd.parent:setFG(cd,dd,d_a:sub(cc+1,__a+cc))end;bd:setVisualChanged(false)end end}return setmetatable(bb,_b)end
  723. end;
  724. project['objects']['Pane'] = function(...)local b=require("Object")
  725. return
  726. function(c)local d=b(c)local _a="Pane"
  727. local aa={init=function(ba)
  728. ba.bgColor=ba.parent:getTheme("PaneBG")ba.fgColor=ba.parent:getTheme("PaneBG")end,getType=function(ba)return
  729. _a end,draw=function(ba)
  730. if(d.draw(ba))then
  731. if(ba.parent~=nil)then
  732. local ca,da=ba:getAnchorPosition()local _b,ab=ba:getSize()
  733. ba.parent:drawBackgroundBox(ca,da,_b,ab,ba.bgColor)
  734. ba.parent:drawForegroundBox(ca,da,_b,ab,ba.fgColor)end;ba:setVisualChanged(false)end end}return setmetatable(aa,d)end
  735. end;
  736. project['objects']['Program'] = function(...)local aa=require("Object")local ba=require("tHex")
  737. local ca=require("process")local da=require("utils").getValueFromXML;local _b=string.sub
  738. return
  739. function(ab,bb)
  740. local cb=aa(ab)local db="Program"cb:setZIndex(5)local _c;local ac
  741. local function bc(bd,cd,dd,__a)local a_a,b_a=1,1
  742. local c_a,d_a=colors.black,colors.white;local _aa=false;local aaa=false;local baa={}local caa={}local daa={}local _ba={}local aba;local bba={}for i=0,15 do local __b=2 ^i
  743. _ba[__b]={bb:getBasaltInstance().getBaseTerm().getPaletteColour(__b)}end;local function cba()aba=(" "):rep(dd)
  744. for n=0,15
  745. do local __b=2 ^n;local a_b=ba[__b]bba[__b]=a_b:rep(dd)end end
  746. local function dba()cba()local __b=aba
  747. local a_b=bba[colors.white]local b_b=bba[colors.black]
  748. for n=1,__a do
  749. baa[n]=_b(baa[n]==nil and __b or baa[n]..__b:sub(1,dd-
  750. baa[n]:len()),1,dd)
  751. daa[n]=_b(daa[n]==nil and a_b or daa[n]..
  752. a_b:sub(1,dd-daa[n]:len()),1,dd)
  753. caa[n]=_b(caa[n]==nil and b_b or caa[n]..
  754. b_b:sub(1,dd-caa[n]:len()),1,dd)end end;dba()local function _ca()
  755. if a_a>=1 and b_a>=1 and a_a<=dd and b_a<=__a then else end end
  756. local function aca(__b,a_b,b_b)local c_b=a_a;local d_b=c_b+#__b-1
  757. if
  758. b_a>=1 and b_a<=__a then
  759. if c_b<=dd and d_b>=1 then
  760. if c_b==1 and d_b==dd then
  761. baa[b_a]=__b;daa[b_a]=a_b;caa[b_a]=b_b else local _ab,aab,bab
  762. if c_b<1 then local dbb=1 -c_b+1
  763. local _cb=dd-c_b+1;_ab=_b(__b,dbb,_cb)aab=_b(a_b,dbb,_cb)bab=_b(b_b,dbb,_cb)elseif
  764. d_b>dd then local dbb=dd-c_b+1;_ab=_b(__b,1,dbb)aab=_b(a_b,1,dbb)
  765. bab=_b(b_b,1,dbb)else _ab=__b;aab=a_b;bab=b_b end;local cab=baa[b_a]local dab=daa[b_a]local _bb=caa[b_a]local abb,bbb,cbb
  766. if c_b>1 then local dbb=c_b-1;abb=
  767. _b(cab,1,dbb).._ab;bbb=_b(dab,1,dbb)..aab
  768. cbb=_b(_bb,1,dbb)..bab else abb=_ab;bbb=aab;cbb=bab end
  769. if d_b<dd then local dbb=d_b+1;abb=abb.._b(cab,dbb,dd)
  770. bbb=bbb.._b(dab,dbb,dd)cbb=cbb.._b(_bb,dbb,dd)end;baa[b_a]=abb;daa[b_a]=bbb;caa[b_a]=cbb end end;a_a=d_b+1;if(aaa)then _ca()end end end
  771. local function bca(__b,a_b,b_b)
  772. if(b_b~=nil)then local c_b=baa[a_b]if(c_b~=nil)then
  773. baa[a_b]=_b(c_b:sub(1,__b-1)..b_b..c_b:sub(__b+
  774. (b_b:len()),dd),1,dd)end end end
  775. local function cca(__b,a_b,b_b)
  776. if(b_b~=nil)then local c_b=caa[a_b]if(c_b~=nil)then
  777. caa[a_b]=_b(c_b:sub(1,__b-1)..b_b..c_b:sub(__b+
  778. (b_b:len()),dd),1,dd)end end end
  779. local function dca(__b,a_b,b_b)
  780. if(b_b~=nil)then local c_b=daa[a_b]if(c_b~=nil)then
  781. daa[a_b]=_b(c_b:sub(1,__b-1)..b_b..c_b:sub(__b+
  782. (b_b:len()),dd),1,dd)end end end
  783. local _da=function(__b)
  784. if type(__b)~="number"then
  785. error("bad argument #1 (expected number, got "..type(__b)..")",2)elseif ba[__b]==nil then
  786. error("Invalid color (got "..__b..")",2)end;d_a=__b end
  787. local ada=function(__b)
  788. if type(__b)~="number"then
  789. error("bad argument #1 (expected number, got "..type(__b)..")",2)elseif ba[__b]==nil then
  790. error("Invalid color (got "..__b..")",2)end;c_a=__b end
  791. local bda=function(__b,a_b,b_b,c_b)if type(__b)~="number"then
  792. error("bad argument #1 (expected number, got "..type(__b)..")",2)end
  793. if ba[__b]==nil then error("Invalid color (got "..
  794. __b..")",2)end;local d_b
  795. if
  796. type(a_b)=="number"and b_b==nil and c_b==nil then d_b={colours.rgb8(a_b)}_ba[__b]=d_b else if
  797. type(a_b)~="number"then
  798. error("bad argument #2 (expected number, got "..type(a_b)..")",2)end;if type(b_b)~="number"then
  799. error(
  800. "bad argument #3 (expected number, got "..type(b_b)..")",2)end;if type(c_b)~="number"then
  801. error(
  802. "bad argument #4 (expected number, got "..type(c_b)..")",2)end;d_b=_ba[__b]d_b[1]=a_b
  803. d_b[2]=b_b;d_b[3]=c_b end end
  804. local cda=function(__b)if type(__b)~="number"then
  805. error("bad argument #1 (expected number, got "..type(__b)..")",2)end
  806. if ba[__b]==nil then error("Invalid color (got "..
  807. __b..")",2)end;local a_b=_ba[__b]return a_b[1],a_b[2],a_b[3]end
  808. local dda={setCursorPos=function(__b,a_b)if type(__b)~="number"then
  809. error("bad argument #1 (expected number, got "..type(__b)..")",2)end;if type(a_b)~="number"then
  810. error(
  811. "bad argument #2 (expected number, got "..type(a_b)..")",2)end;a_a=math.floor(__b)
  812. b_a=math.floor(a_b)if(aaa)then _ca()end end,getCursorPos=function()return
  813. a_a,b_a end,setCursorBlink=function(__b)if type(__b)~="boolean"then
  814. error("bad argument #1 (expected boolean, got "..
  815. type(__b)..")",2)end;_aa=__b end,getCursorBlink=function()return
  816. _aa end,getPaletteColor=cda,getPaletteColour=cda,setBackgroundColor=ada,setBackgroundColour=ada,setTextColor=_da,setTextColour=_da,setPaletteColor=bda,setPaletteColour=bda,getBackgroundColor=function()return c_a end,getBackgroundColour=function()return c_a end,getSize=function()return dd,__a end,getTextColor=function()return
  817. d_a end,getTextColour=function()return d_a end,basalt_resize=function(__b,a_b)dd,__a=__b,a_b;dba()end,basalt_reposition=function(__b,a_b)
  818. bd,cd=__b,a_b end,basalt_setVisible=function(__b)aaa=__b end,drawBackgroundBox=function(__b,a_b,b_b,c_b,d_b)for n=1,c_b do
  819. cca(__b,a_b+ (n-1),ba[d_b]:rep(b_b))end end,drawForegroundBox=function(__b,a_b,b_b,c_b,d_b)
  820. for n=1,c_b do dca(__b,
  821. a_b+ (n-1),ba[d_b]:rep(b_b))end end,drawTextBox=function(__b,a_b,b_b,c_b,d_b)for n=1,c_b do
  822. bca(__b,a_b+ (n-1),d_b:rep(b_b))end end,writeText=function(__b,a_b,b_b,c_b,d_b)
  823. c_b=c_b or c_a;d_b=d_b or d_a;bca(bd,a_b,b_b)
  824. cca(__b,a_b,ba[c_b]:rep(b_b:len()))dca(__b,a_b,ba[d_b]:rep(b_b:len()))end,basalt_update=function()if(
  825. bb~=nil)then
  826. for n=1,__a do bb:setText(bd,cd+ (n-1),baa[n])
  827. bb:setBG(bd,cd+ (n-1),caa[n])bb:setFG(bd,cd+ (n-1),daa[n])end end end,scroll=function(__b)if
  828. type(__b)~="number"then
  829. error("bad argument #1 (expected number, got "..type(__b)..")",2)end
  830. if __b~=0 then local a_b=aba
  831. local b_b=bba[d_a]local c_b=bba[c_a]
  832. for newY=1,__a do local d_b=newY+__b
  833. if d_b>=1 and d_b<=__a then
  834. baa[newY]=baa[d_b]caa[newY]=caa[d_b]daa[newY]=daa[d_b]else baa[newY]=a_b
  835. daa[newY]=b_b;caa[newY]=c_b end end end;if(aaa)then _ca()end end,isColor=function()return
  836. bb:getBasaltInstance().getBaseTerm().isColor()end,isColour=function()return
  837. bb:getBasaltInstance().getBaseTerm().isColor()end,write=function(__b)
  838. __b=tostring(__b)if(aaa)then
  839. aca(__b,ba[d_a]:rep(__b:len()),ba[c_a]:rep(__b:len()))end end,clearLine=function()
  840. if
  841. (aaa)then bca(1,b_a,(" "):rep(dd))
  842. cca(1,b_a,ba[c_a]:rep(dd))dca(1,b_a,ba[d_a]:rep(dd))end;if(aaa)then _ca()end end,clear=function()
  843. for n=1,__a
  844. do bca(1,n,(" "):rep(dd))
  845. cca(1,n,ba[c_a]:rep(dd))dca(1,n,ba[d_a]:rep(dd))end;if(aaa)then _ca()end end,blit=function(__b,a_b,b_b)if
  846. type(__b)~="string"then
  847. error("bad argument #1 (expected string, got "..type(__b)..")",2)end;if type(a_b)~="string"then
  848. error(
  849. "bad argument #2 (expected string, got "..type(a_b)..")",2)end;if type(b_b)~="string"then
  850. error(
  851. "bad argument #3 (expected string, got "..type(b_b)..")",2)end
  852. if
  853. #a_b~=#__b or#b_b~=#__b then error("Arguments must be the same length",2)end;if(aaa)then aca(__b,a_b,b_b)end end}return dda end;cb.width=30;cb.height=12;local cc=bc(1,1,cb.width,cb.height)local dc
  854. local _d=false;local ad={}
  855. _c={init=function(bd)bd.bgColor=bd.parent:getTheme("ProgramBG")end,getType=function(bd)return
  856. db end,show=function(bd)cb.show(bd)
  857. cc.setBackgroundColor(bd.bgColor)cc.setTextColor(bd.fgColor)
  858. cc.basalt_setVisible(true)return bd end,hide=function(bd)
  859. cb.hide(bd)cc.basalt_setVisible(false)return bd end,setPosition=function(bd,cd,dd,__a)
  860. cb.setPosition(bd,cd,dd,__a)
  861. cc.basalt_reposition(bd:getAnchorPosition())return bd end,setValuesByXMLData=function(bd,cd)
  862. cb.setValuesByXMLData(bd,cd)if(da("path",cd)~=nil)then ac=da("path",cd)end;if(
  863. da("execute",cd)~=nil)then
  864. if(da("execute",cd))then if(ac~=nil)then bd:execute(ac)end end end end,getBasaltWindow=function()return
  865. cc end,getBasaltProcess=function()return dc end,setSize=function(bd,cd,dd,__a)cb.setSize(bd,cd,dd,__a)
  866. cc.basalt_resize(bd:getSize())return bd end,getStatus=function(bd)if(dc~=nil)then
  867. return dc:getStatus()end;return"inactive"end,execute=function(bd,cd,...)
  868. ac=cd or ac;dc=ca:new(ac,cc,...)
  869. cc.setBackgroundColor(colors.black)cc.setTextColor(colors.white)cc.clear()
  870. cc.setCursorPos(1,1)cc.setBackgroundColor(bd.bgColor)
  871. cc.setTextColor(bd.fgColor)cc.basalt_setVisible(true)dc:resume()_d=false;return bd end,stop=function(bd)if(
  872. dc~=nil)then
  873. if not(dc:isDead())then dc:resume("terminate")if(dc:isDead())then
  874. if(
  875. bd.parent~=nil)then bd.parent:setCursor(false)end end end end
  876. return bd end,pause=function(bd,cd)_d=
  877. cd or(not _d)
  878. if(dc~=nil)then if not(dc:isDead())then if not(_d)then
  879. bd:injectEvents(ad)ad={}end end end;return bd end,isPaused=function(bd)
  880. return _d end,injectEvent=function(bd,cd,dd,__a,a_a,b_a,c_a)
  881. if(dc~=nil)then
  882. if not(dc:isDead())then if(_d==false)or(c_a)then
  883. dc:resume(cd,dd,__a,a_a,b_a)else
  884. table.insert(ad,{event=cd,args={dd,__a,a_a,b_a}})end end end;return bd end,getQueuedEvents=function(bd)return
  885. ad end,updateQueuedEvents=function(bd,cd)ad=cd or ad;return bd end,injectEvents=function(bd,cd)if(dc~=nil)then
  886. if
  887. not(dc:isDead())then for dd,__a in pairs(cd)do
  888. dc:resume(__a.event,table.unpack(__a.args))end end end;return bd end,mouseHandler=function(bd,cd,dd,__a,a_a)
  889. if
  890. (cb.mouseHandler(bd,cd,dd,__a,a_a))then if(dc==nil)then return false end
  891. if not(dc:isDead())then
  892. if not(_d)then
  893. local b_a,c_a=bd:getAbsolutePosition(bd:getAnchorPosition(
  894. nil,nil,true))dc:resume(cd,dd,__a-b_a+1,a_a-c_a+1)end end;return true end end,keyHandler=function(bd,cd,dd)
  895. cb.keyHandler(bd,cd,dd)if(bd:isFocused())then if(dc==nil)then return false end
  896. if not(dc:isDead())then if not(_d)then if
  897. (bd.draw)then dc:resume(cd,dd)end end end end end,getFocusHandler=function(bd)
  898. cb.getFocusHandler(bd)
  899. if(dc~=nil)then
  900. if not(dc:isDead())then
  901. if not(_d)then
  902. if(bd.parent~=nil)then
  903. local cd,dd=cc.getCursorPos()local __a,a_a=bd:getAnchorPosition()
  904. if(bd.parent~=nil)then
  905. local b_a,c_a=bd:getSize()
  906. if
  907. (__a+cd-1 >=1 and __a+cd-1 <=__a+b_a-1 and
  908. dd+a_a-1 >=1 and dd+a_a-1 <=a_a+c_a-1)then
  909. bd.parent:setCursor(cc.getCursorBlink(),__a+cd-1,dd+a_a-1,cc.getTextColor())end end end end end end end,loseFocusHandler=function(bd)
  910. cb.loseFocusHandler(bd)
  911. if(dc~=nil)then if not(dc:isDead())then if(bd.parent~=nil)then
  912. bd.parent:setCursor(false)end end end end,eventHandler=function(bd,cd,dd,__a,a_a,b_a)if
  913. (dc==nil)then return end
  914. if not(dc:isDead())then
  915. if not(_d)then
  916. if
  917.  
  918.  
  919.  
  920. (cd~="mouse_click")and
  921. (cd~="monitor_touch")and(cd~="mouse_up")and(cd~=
  922. "mouse_scroll")and(cd~="mouse_drag")and(cd~="key_up")and(
  923. cd~="key")and(cd~="char")and(cd~="terminate")then dc:resume(cd,dd,__a,a_a,b_a)end
  924. if(bd:isFocused())then local c_a,d_a=bd:getAnchorPosition()
  925. local _aa,aaa=cc.getCursorPos()
  926. if(bd.parent~=nil)then local baa,caa=bd:getSize()
  927. if
  928. (
  929. c_a+_aa-1 >=1 and c_a+_aa-1 <=
  930. c_a+baa-1 and aaa+d_a-1 >=1 and aaa+d_a-1 <=d_a+caa-1)then
  931. bd.parent:setCursor(cc.getCursorBlink(),c_a+_aa-1,aaa+d_a-1,cc.getTextColor())end end
  932. if(cd=="terminate")and(bd:isFocused())then bd:stop()end end else
  933. if
  934.  
  935.  
  936.  
  937.  
  938. (cd~="mouse_click")and(cd~="monitor_touch")and(cd~="mouse_up")and(cd~="mouse_scroll")and
  939. (cd~="mouse_drag")and(cd~="key_up")and(cd~="key")and(cd~="char")and(cd~="terminate")then
  940. table.insert(ad,{event=cd,args={dd,__a,a_a,b_a}})end end end end,draw=function(bd)
  941. if
  942. (cb.draw(bd))then
  943. if(bd.parent~=nil)then local cd,dd=bd:getAnchorPosition()
  944. local __a,a_a=bd:getSize()cc.basalt_reposition(cd,dd)if(bd.bgColor~=false)then
  945. bd.parent:drawBackgroundBox(cd,dd,__a,a_a,bd.bgColor)end;cc.basalt_update()end;bd:setVisualChanged(false)end end}return setmetatable(_c,cb)end
  946. end;
  947. project['objects']['Progressbar'] = function(...)local c=require("Object")
  948. local d=require("utils").getValueFromXML
  949. return
  950. function(_a)local aa=c(_a)local ba="Progressbar"local ca=0;aa:setZIndex(5)
  951. aa:setValue(false)aa.width=25;aa.height=1;local da;local _b=""local ab=colors.white;local bb=""local cb=0
  952. local db={init=function(_c)
  953. _c.bgColor=_c.parent:getTheme("ProgressbarBG")_c.fgColor=_c.parent:getTheme("ProgressbarText")
  954. da=_c.parent:getTheme("ProgressbarActiveBG")end,getType=function(_c)return
  955. ba end,setValuesByXMLData=function(_c,ac)aa.setValuesByXMLData(_c,ac)if(d("direction",ac)~=
  956. nil)then cb=d("direction",ac)end
  957. if(
  958. d("progressColor",ac)~=nil)then da=colors[d("progressColor",ac)]end
  959. if(d("progressSymbol",ac)~=nil)then _b=d("progressSymbol",ac)end;if(d("backgroundSymbol",ac)~=nil)then
  960. bb=d("backgroundSymbol",ac)end
  961. if
  962. (d("progressSymbolColor",ac)~=nil)then ab=colors[d("progressSymbolColor",ac)]end;if(d("onDone",ac)~=nil)then
  963. _c:generateXMLEventFunction(_c.onProgressDone,d("onDone",ac))end;return _c end,setDirection=function(_c,ac)
  964. cb=ac;return _c end,setProgressBar=function(_c,ac,bc,cc)da=ac or da;_b=bc or _b;ab=cc or ab;return _c end,setBackgroundSymbol=function(_c,ac)
  965. bb=ac:sub(1,1)return _c end,setProgress=function(_c,ac)
  966. if(ac>=0)and(ac<=100)and(ca~=ac)then ca=ac
  967. _c:setValue(ca)if(ca==100)then _c:progressDoneHandler()end end;return _c end,getProgress=function(_c)
  968. return ca end,onProgressDone=function(_c,ac)_c:registerEvent("progress_done",ac)return _c end,progressDoneHandler=function(_c)
  969. _c:sendEvent("progress_done",_c)end,draw=function(_c)
  970. if(aa.draw(_c))then
  971. if(_c.parent~=nil)then
  972. local ac,bc=_c:getAnchorPosition()local cc,dc=_c:getSize()if(_c.bgColor~=false)then
  973. _c.parent:drawBackgroundBox(ac,bc,cc,dc,_c.bgColor)end;if(bb~="")then
  974. _c.parent:drawTextBox(ac,bc,cc,dc,bb)end;if(_c.fgColor~=false)then
  975. _c.parent:drawForegroundBox(ac,bc,cc,dc,_c.fgColor)end
  976. if(cb==1)then
  977. _c.parent:drawBackgroundBox(ac,bc,cc,dc/100 *ca,da)
  978. _c.parent:drawForegroundBox(ac,bc,cc,dc/100 *ca,ab)
  979. _c.parent:drawTextBox(ac,bc,cc,dc/100 *ca,_b)elseif(cb==2)then
  980. _c.parent:drawBackgroundBox(ac,bc+math.ceil(dc-dc/100 *ca),cc,
  981. dc/100 *ca,da)
  982. _c.parent:drawForegroundBox(ac,bc+math.ceil(dc-dc/100 *ca),cc,dc/
  983. 100 *ca,ab)
  984. _c.parent:drawTextBox(ac,bc+math.ceil(dc-dc/100 *ca),cc,
  985. dc/100 *ca,_b)elseif(cb==3)then
  986. _c.parent:drawBackgroundBox(ac+math.ceil(cc-cc/100 *ca),bc,
  987. cc/100 *ca,dc,da)
  988. _c.parent:drawForegroundBox(ac+math.ceil(cc-cc/100 *ca),bc,
  989. cc/100 *ca,dc,ab)
  990. _c.parent:drawTextBox(ac+math.ceil(cc-cc/100 *ca),bc,cc/100 *
  991. ca,dc,_b)else
  992. _c.parent:drawBackgroundBox(ac,bc,cc/100 *ca,dc,da)
  993. _c.parent:drawForegroundBox(ac,bc,cc/100 *ca,dc,ab)
  994. _c.parent:drawTextBox(ac,bc,cc/100 *ca,dc,_b)end end;_c:setVisualChanged(false)end end}return setmetatable(db,aa)end
  995. end;
  996. project['objects']['Radio'] = function(...)local d=require("Object")local _a=require("utils")
  997. local aa=_a.getValueFromXML
  998. return
  999. function(ba)local ca=d(ba)local da="Radio"ca.width=8;ca:setZIndex(5)local _b={}local ab;local bb;local cb
  1000. local db;local _c;local ac;local bc=true;local cc="\7"local dc="left"
  1001. local _d={init=function(ad)
  1002. ad.bgColor=ad.parent:getTheme("MenubarBG")ad.fgColor=ad.parent:getTheme("MenubarFG")
  1003. ab=ad.parent:getTheme("SelectionBG")bb=ad.parent:getTheme("SelectionText")
  1004. cb=ad.parent:getTheme("MenubarBG")db=ad.parent:getTheme("MenubarText")end,getType=function(ad)return
  1005. da end,setValuesByXMLData=function(ad,bd)ca.setValuesByXMLData(ad,bd)
  1006. if(
  1007. aa("selectionBG",bd)~=nil)then ab=colors[aa("selectionBG",bd)]end;if(aa("selectionFG",bd)~=nil)then
  1008. bb=colors[aa("selectionFG",bd)]end;if(aa("boxBG",bd)~=nil)then
  1009. cb=colors[aa("boxBG",bd)]end;if(aa("inactiveBoxBG",bd)~=nil)then
  1010. _c=colors[aa("inactiveBoxBG",bd)]end;if(aa("inactiveBoxFG",bd)~=nil)then
  1011. ac=colors[aa("inactiveBoxFG",bd)]end;if(aa("boxFG",bd)~=nil)then
  1012. db=colors[aa("boxFG",bd)]end;if(aa("symbol",bd)~=nil)then
  1013. cc=aa("symbol",bd)end
  1014. if(bd["item"]~=nil)then local cd=bd["item"]if
  1015. (cd.properties~=nil)then cd={cd}end;for dd,__a in pairs(cd)do
  1016. ad:addItem(aa("text",__a),aa("x",__a),aa("y",__a),colors[aa("bg",__a)],colors[aa("fg",__a)])end end;return ad end,addItem=function(ad,bd,cd,dd,__a,a_a,...)
  1017. table.insert(_b,{x=
  1018. cd or 1,y=dd or 1,text=bd,bgCol=__a or ad.bgColor,fgCol=a_a or ad.fgColor,args={...}})if(#_b==1)then ad:setValue(_b[1])end;return ad end,getAll=function(ad)return
  1019. _b end,removeItem=function(ad,bd)table.remove(_b,bd)return ad end,getItem=function(ad,bd)return
  1020. _b[bd]end,getItemIndex=function(ad)local bd=ad:getValue()for cd,dd in pairs(_b)do
  1021. if(dd==bd)then return cd end end end,clear=function(ad)
  1022. _b={}ad:setValue({})return ad end,getItemCount=function(ad)return#_b end,editItem=function(ad,bd,cd,dd,__a,a_a,b_a,...)
  1023. table.remove(_b,bd)
  1024. table.insert(_b,bd,{x=dd or 1,y=__a or 1,text=cd,bgCol=a_a or ad.bgColor,fgCol=b_a or ad.fgColor,args={...}})return ad end,selectItem=function(ad,bd)ad:setValue(
  1025. _b[bd]or{})return ad end,setActiveSymbol=function(ad,bd)
  1026. cc=bd:sub(1,1)return ad end,setSelectedItem=function(ad,bd,cd,dd,__a,a_a)ab=bd or ab;bb=cd or bb;cb=dd or cb
  1027. db=__a or db;bc=a_a~=nil and a_a or true;return ad end,mouseHandler=function(ad,bd,cd,dd,__a)
  1028. local a_a,b_a=ad:getAbsolutePosition(ad:getAnchorPosition())
  1029. if
  1030. ( (bd=="mouse_click")and(cd==1))or(bd=="monitor_touch")then
  1031. if(#_b>0)then
  1032. for c_a,d_a in pairs(_b)do
  1033. if(a_a+d_a.x-1 <=dd)and(
  1034. a_a+d_a.x-1 +d_a.text:len()+2 >=dd)and(
  1035. b_a+d_a.y-1 ==__a)then
  1036. ad:setValue(d_a)
  1037. if(ad.parent~=nil)then ad.parent:setFocusedObject(ad)end
  1038. ad:getEventSystem():sendEvent(bd,ad,bd,cd,dd,__a)ad:setVisualChanged()return true end end end end;return false end,draw=function(ad)
  1039. if
  1040. (ca.draw(ad))then
  1041. if(ad.parent~=nil)then local bd,cd=ad:getAnchorPosition()
  1042. for dd,__a in pairs(_b)do
  1043. if(__a==
  1044. ad:getValue())then if(dc=="left")then
  1045. ad.parent:writeText(__a.x+bd-1,__a.y+cd-1,cc,cb,db)
  1046. ad.parent:writeText(__a.x+2 +bd-1,__a.y+cd-1,__a.text,ab,bb)end else
  1047. ad.parent:drawBackgroundBox(
  1048. __a.x+bd-1,__a.y+cd-1,1,1,_c or ad.bgColor)
  1049. ad.parent:writeText(__a.x+2 +bd-1,__a.y+cd-1,__a.text,__a.bgCol,__a.fgCol)end end end;ad:setVisualChanged(false)end end}return setmetatable(_d,ca)end
  1050. end;
  1051. project['objects']['Scrollbar'] = function(...)local c=require("Object")
  1052. local d=require("utils").getValueFromXML
  1053. return
  1054. function(_a)local aa=c(_a)local ba="Scrollbar"aa.width=1;aa.height=8;aa:setValue(1)
  1055. aa:setZIndex(2)local ca="vertical"local da=" "local _b;local ab="\127"local bb=aa.height;local cb=1;local db=1
  1056. local _c={init=function(ac)
  1057. ac.bgColor=ac.parent:getTheme("ScrollbarBG")ac.fgColor=ac.parent:getTheme("ScrollbarText")
  1058. _b=ac.parent:getTheme("ScrollbarSymbolColor")end,getType=function(ac)return
  1059. ba end,setSymbol=function(ac,bc)da=bc:sub(1,1)ac:setVisualChanged()return ac end,setValuesByXMLData=function(ac,bc)
  1060. aa.setValuesByXMLData(ac,bc)
  1061. if(d("maxValue",bc)~=nil)then bb=d("maxValue",bc)end;if(d("backgroundSymbol",bc)~=nil)then
  1062. ab=d("backgroundSymbol",bc):sub(1,1)end;if(d("symbol",bc)~=nil)then
  1063. da=d("symbol",bc):sub(1,1)end;if(d("barType",bc)~=nil)then
  1064. ca=d("barType",bc):lower()end;if(d("symbolSize",bc)~=nil)then
  1065. ac:setSymbolSize(d("symbolSize",bc))end;if(d("symbolColor",bc)~=nil)then
  1066. _b=colors[d("symbolColor",bc)]end;if(d("index",bc)~=nil)then
  1067. ac:setIndex(d("index",bc))end end,setIndex=function(ac,bc)
  1068. cb=bc;if(cb<1)then cb=1 end;local cc,dc=ac:getSize()
  1069. cb=math.min(cb,(ca=="vertical"and dc or
  1070. cc)- (db-1))
  1071. ac:setValue(bb/ (ca=="vertical"and dc or cc)*cb)return ac end,getIndex=function(ac)return
  1072. cb end,setSymbolSize=function(ac,bc)db=tonumber(bc)or 1;local cc,dc=ac:getSize()
  1073. if(ca==
  1074. "vertical")then
  1075. ac:setValue(cb-1 * (bb/ (dc- (db-1)))-
  1076. (bb/ (dc- (db-1))))elseif(ca=="horizontal")then
  1077. ac:setValue(cb-1 * (bb/ (cc- (db-1)))- (bb/ (cc-
  1078. (db-1))))end;ac:setVisualChanged()return ac end,setMaxValue=function(ac,bc)
  1079. bb=bc;return ac end,setBackgroundSymbol=function(ac,bc)ab=string.sub(bc,1,1)
  1080. ac:setVisualChanged()return ac end,setSymbolColor=function(ac,bc)_b=bc
  1081. ac:setVisualChanged()return ac end,setBarType=function(ac,bc)ca=bc:lower()return ac end,mouseHandler=function(ac,bc,cc,dc,_d)
  1082. if
  1083. (aa.mouseHandler(ac,bc,cc,dc,_d))then
  1084. local ad,bd=ac:getAbsolutePosition(ac:getAnchorPosition())local cd,dd=ac:getSize()
  1085. if
  1086. (
  1087. ( (bc=="mouse_click")or(bc=="mouse_drag"))and(cc==1))or(bc=="monitor_touch")then
  1088. if(ca=="horizontal")then
  1089. for _index=0,cd do
  1090. if
  1091. (ad+_index==dc)and(bd<=_d)and(bd+dd>_d)then cb=math.min(_index+1,cd- (db-1))
  1092. ac:setValue(bb/cd* (cb))ac:setVisualChanged()end end end
  1093. if(ca=="vertical")then
  1094. for _index=0,dd do
  1095. if
  1096. (bd+_index==_d)and(ad<=dc)and(ad+cd>dc)then cb=math.min(_index+1,dd- (db-1))
  1097. ac:setValue(bb/dd* (cb))ac:setVisualChanged()end end end end
  1098. if(bc=="mouse_scroll")then cb=cb+cc;if(cb<1)then cb=1 end
  1099. cb=math.min(cb,(
  1100. ca=="vertical"and dd or cd)- (db-1))
  1101. ac:setValue(bb/ (ca=="vertical"and dd or cd)*cb)end;return true end end,draw=function(ac)
  1102. if
  1103. (aa.draw(ac))then
  1104. if(ac.parent~=nil)then local bc,cc=ac:getAnchorPosition()
  1105. local dc,_d=ac:getSize()
  1106. if(ca=="horizontal")then
  1107. ac.parent:writeText(bc,cc,ab:rep(cb-1),ac.bgColor,ac.fgColor)
  1108. ac.parent:writeText(bc+cb-1,cc,da:rep(db),_b,_b)
  1109. ac.parent:writeText(bc+cb+db-1,cc,ab:rep(dc- (cb+db-1)),ac.bgColor,ac.fgColor)end
  1110. if(ca=="vertical")then
  1111. for n=0,_d-1 do
  1112. if(cb==n+1)then for curIndexOffset=0,math.min(db-1,_d)do
  1113. ac.parent:writeText(bc,cc+n+curIndexOffset,da,_b,_b)end else if
  1114. (n+1 <cb)or(n+1 >cb-1 +db)then
  1115. ac.parent:writeText(bc,cc+n,ab,ac.bgColor,ac.fgColor)end end end end end;ac:setVisualChanged(false)end end}return setmetatable(_c,aa)end
  1116. end;
  1117. project['objects']['Slider'] = function(...)local c=require("Object")
  1118. local d=require("utils").getValueFromXML
  1119. return
  1120. function(_a)local aa=c(_a)local ba="Slider"aa.width=8;aa.height=1;aa:setValue(1)
  1121. local ca="horizontal"local da=" "local _b;local ab="\140"local bb=aa.width;local cb=1;local db=1
  1122. local _c={init=function(ac)
  1123. ac.bgColor=ac.parent:getTheme("SliderBG")ac.fgColor=ac.parent:getTheme("SliderText")
  1124. _b=ac.parent:getTheme("SliderSymbolColor")end,getType=function(ac)
  1125. return ba end,setSymbol=function(ac,bc)da=bc:sub(1,1)ac:setVisualChanged()return ac end,setValuesByXMLData=function(ac,bc)
  1126. aa.setValuesByXMLData(ac,bc)
  1127. if(d("maxValue",bc)~=nil)then bb=d("maxValue",bc)end;if(d("backgroundSymbol",bc)~=nil)then
  1128. ab=d("backgroundSymbol",bc):sub(1,1)end;if(d("barType",bc)~=nil)then
  1129. ca=d("barType",bc):lower()end;if(d("symbol",bc)~=nil)then
  1130. da=d("symbol",bc):sub(1,1)end;if(d("symbolSize",bc)~=nil)then
  1131. ac:setSymbolSize(d("symbolSize",bc))end;if(d("symbolColor",bc)~=nil)then
  1132. _b=colors[d("symbolColor",bc)]end;if(d("index",bc)~=nil)then
  1133. ac:setIndex(d("index",bc))end end,setIndex=function(ac,bc)
  1134. cb=bc;if(cb<1)then cb=1 end;local cc,dc=ac:getSize()
  1135. cb=math.min(cb,(ca=="vertical"and dc or
  1136. cc)- (db-1))
  1137. ac:setValue(bb/ (ca=="vertical"and dc or cc)*cb)return ac end,getIndex=function(ac)return
  1138. cb end,setSymbolSize=function(ac,bc)db=tonumber(bc)or 1
  1139. if(ca=="vertical")then
  1140. ac:setValue(cb-1 * (bb/
  1141. (h- (db-1)))- (bb/ (h- (db-1))))elseif(ca=="horizontal")then
  1142. ac:setValue(cb-1 * (bb/ (w- (db-1)))- (bb/
  1143. (w- (db-1))))end;ac:setVisualChanged()return ac end,setMaxValue=function(ac,bc)
  1144. bb=bc;return ac end,setBackgroundSymbol=function(ac,bc)ab=string.sub(bc,1,1)
  1145. ac:setVisualChanged()return ac end,setSymbolColor=function(ac,bc)_b=bc
  1146. ac:setVisualChanged()return ac end,setBarType=function(ac,bc)ca=bc:lower()return ac end,mouseHandler=function(ac,bc,cc,dc,_d)
  1147. if
  1148. (aa.mouseHandler(ac,bc,cc,dc,_d))then
  1149. local ad,bd=ac:getAbsolutePosition(ac:getAnchorPosition())local cd,dd=ac:getSize()
  1150. if
  1151. (
  1152. ( (bc=="mouse_click")or(bc=="mouse_drag"))and(cc==1))or(bc=="monitor_touch")then
  1153. if(ca=="horizontal")then
  1154. for _index=0,cd do
  1155. if
  1156. (ad+_index==dc)and(bd<=_d)and(bd+dd>_d)then cb=math.min(_index+1,cd- (db-1))
  1157. ac:setValue(bb/cd* (cb))ac:setVisualChanged()end end end
  1158. if(ca=="vertical")then
  1159. for _index=0,dd do
  1160. if
  1161. (bd+_index==_d)and(ad<=dc)and(ad+cd>dc)then cb=math.min(_index+1,dd- (db-1))
  1162. ac:setValue(bb/dd* (cb))ac:setVisualChanged()end end end end
  1163. if(bc=="mouse_scroll")then cb=cb+cc;if(cb<1)then cb=1 end
  1164. cb=math.min(cb,(
  1165. ca=="vertical"and dd or cd)- (db-1))
  1166. ac:setValue(bb/ (ca=="vertical"and dd or cd)*cb)end;return true end end,draw=function(ac)
  1167. if
  1168. (aa.draw(ac))then
  1169. if(ac.parent~=nil)then local bc,cc=ac:getAnchorPosition()
  1170. local dc,_d=ac:getSize()
  1171. if(ca=="horizontal")then
  1172. ac.parent:writeText(bc,cc,ab:rep(cb-1),ac.bgColor,ac.fgColor)
  1173. ac.parent:writeText(bc+cb-1,cc,da:rep(db),_b,_b)
  1174. ac.parent:writeText(bc+cb+db-1,cc,ab:rep(dc- (cb+db-1)),ac.bgColor,ac.fgColor)end
  1175. if(ca=="vertical")then
  1176. for n=0,_d-1 do
  1177. if(cb==n+1)then for curIndexOffset=0,math.min(db-1,_d)do
  1178. ac.parent:writeText(bc,cc+n+curIndexOffset,da,_b,_b)end else if
  1179. (n+1 <cb)or(n+1 >cb-1 +db)then
  1180. ac.parent:writeText(bc,cc+n,ab,ac.bgColor,ac.fgColor)end end end end end;ac:setVisualChanged(false)end end}return setmetatable(_c,aa)end
  1181. end;
  1182. project['objects']['Switch'] = function(...)local c=require("Object")
  1183. local d=require("utils").getValueFromXML
  1184. return
  1185. function(_a)local aa=c(_a)local ba="Switch"aa.width=2;aa.height=1
  1186. aa.bgColor=colors.lightGray;aa.fgColor=colors.gray;aa:setValue(false)aa:setZIndex(5)
  1187. local ca=colors.black;local da=colors.red;local _b=colors.green
  1188. local ab={init=function(bb)
  1189. bb.bgColor=bb.parent:getTheme("SwitchBG")bb.fgColor=bb.parent:getTheme("SwitchText")
  1190. ca=bb.parent:getTheme("SwitchBGSymbol")da=bb.parent:getTheme("SwitchInactive")
  1191. _b=bb.parent:getTheme("SwitchActive")end,getType=function(bb)return
  1192. ba end,setSymbolColor=function(bb,cb)ca=cb;bb:setVisualChanged()return bb end,setActiveBackground=function(bb,cb)
  1193. _b=cb;bb:setVisualChanged()return bb end,setInactiveBackground=function(bb,cb)da=cb
  1194. bb:setVisualChanged()return bb end,setValuesByXMLData=function(bb,cb)aa.setValuesByXMLData(bb,cb)
  1195. if(
  1196. d("inactiveBG",cb)~=nil)then da=colors[d("inactiveBG",cb)]end
  1197. if(d("activeBG",cb)~=nil)then _b=colors[d("activeBG",cb)]end;if(d("symbolColor",cb)~=nil)then
  1198. ca=colors[d("symbolColor",cb)]end end,mouseHandler=function(bb,cb,db,_c,ac)
  1199. if
  1200. (aa.mouseHandler(bb,cb,db,_c,ac))then
  1201. local bc,cc=bb:getAbsolutePosition(bb:getAnchorPosition())
  1202. if
  1203. ( (cb=="mouse_click")and(db==1))or(cb=="monitor_touch")then bb:setValue(not bb:getValue())end;return true end end,draw=function(bb)
  1204. if
  1205. (aa.draw(bb))then
  1206. if(bb.parent~=nil)then local cb,db=bb:getAnchorPosition()
  1207. local _c,ac=bb:getSize()
  1208. bb.parent:drawBackgroundBox(cb,db,_c,ac,bb.bgColor)
  1209. if(bb:getValue())then
  1210. bb.parent:drawBackgroundBox(cb,db,1,ac,_b)bb.parent:drawBackgroundBox(cb+1,db,1,ac,ca)else
  1211. bb.parent:drawBackgroundBox(cb,db,1,ac,ca)bb.parent:drawBackgroundBox(cb+1,db,1,ac,da)end end;bb:setVisualChanged(false)end end}return setmetatable(ab,aa)end
  1212. end;
  1213. project['objects']['Textfield'] = function(...)local d=require("Object")local _a=require("tHex")
  1214. local aa=require("utils").getValueFromXML
  1215. return
  1216. function(ba)local ca=d(ba)local da="Textfield"local _b,ab,bb,cb=1,1,1,1;local db={""}local _c={""}local ac={""}
  1217. local bc={}local cc={}ca.width=30;ca.height=12;ca:setZIndex(5)
  1218. local function dc(cd,dd)local __a={}
  1219. if(cd:len()>0)then
  1220. for a_a in
  1221. string.gmatch(cd,dd)do local b_a,c_a=string.find(cd,a_a)
  1222. if(b_a~=nil)and(c_a~=nil)then
  1223. table.insert(__a,b_a)table.insert(__a,c_a)
  1224. local d_a=string.sub(cd,1,(b_a-1))local _aa=string.sub(cd,c_a+1,cd:len())cd=d_a..
  1225. (":"):rep(a_a:len()).._aa end end end;return __a end
  1226. local function _d(cd,dd)dd=dd or cb
  1227. local __a=_a[cd.fgColor]:rep(ac[dd]:len())
  1228. local a_a=_a[cd.bgColor]:rep(_c[dd]:len())
  1229. for b_a,c_a in pairs(cc)do local d_a=dc(db[dd],c_a[1])
  1230. if(#d_a>0)then
  1231. for x=1,#d_a/2 do local _aa=x*2 -1;if(
  1232. c_a[2]~=nil)then
  1233. __a=__a:sub(1,d_a[_aa]-1).._a[c_a[2] ]:rep(d_a[_aa+1]-
  1234. (d_a[_aa]-1))..
  1235. __a:sub(d_a[_aa+1]+1,__a:len())end;if
  1236. (c_a[3]~=nil)then
  1237. a_a=a_a:sub(1,d_a[_aa]-1)..
  1238.  
  1239. _a[c_a[3] ]:rep(d_a[_aa+1]- (d_a[_aa]-1))..a_a:sub(d_a[_aa+1]+1,a_a:len())end end end end
  1240. for b_a,c_a in pairs(bc)do
  1241. for d_a,_aa in pairs(c_a)do local aaa=dc(db[dd],_aa)
  1242. if(#aaa>0)then for x=1,#aaa/2 do local baa=x*2 -1
  1243. __a=__a:sub(1,
  1244. aaa[baa]-1)..
  1245.  
  1246. _a[b_a]:rep(aaa[baa+1]- (aaa[baa]-1))..__a:sub(aaa[baa+1]+1,__a:len())end end end end;ac[dd]=__a;_c[dd]=a_a end;local function ad(cd)for n=1,#db do _d(cd,n)end end
  1247. local bd={init=function(cd)
  1248. cd.bgColor=cd.parent:getTheme("TextfieldBG")cd.fgColor=cd.parent:getTheme("TextfieldText")end,getType=function(cd)return
  1249. da end,setBackground=function(cd,dd)ca.setBackground(cd,dd)ad(cd)return cd end,setForeground=function(cd,dd)
  1250. ca.setForeground(cd,dd)ad(cd)return cd end,setValuesByXMLData=function(cd,dd)
  1251. ca.setValuesByXMLData(cd,dd)
  1252. if(dd["lines"]~=nil)then local __a=dd["lines"]["line"]if
  1253. (__a.properties~=nil)then __a={__a}end;for a_a,b_a in pairs(__a)do
  1254. cd:addLine(b_a:value())end end
  1255. if(dd["keywords"]~=nil)then
  1256. for __a,a_a in pairs(dd["keywords"])do
  1257. if(colors[__a]~=nil)then
  1258. local b_a=a_a;if(b_a.properties~=nil)then b_a={b_a}end;local c_a={}
  1259. for d_a,_aa in pairs(b_a)do
  1260. local aaa=_aa["keyword"]if(_aa["keyword"].properties~=nil)then
  1261. aaa={_aa["keyword"]}end;for baa,caa in pairs(aaa)do
  1262. table.insert(c_a,caa:value())end end;cd:addKeywords(colors[__a],c_a)end end end
  1263. if(dd["rules"]~=nil)then
  1264. if(dd["rules"]["rule"]~=nil)then
  1265. local __a=dd["rules"]["rule"]if(dd["rules"]["rule"].properties~=nil)then
  1266. __a={dd["rules"]["rule"]}end
  1267. for a_a,b_a in pairs(__a)do if(aa("pattern",b_a)~=nil)then
  1268. cd:addRule(aa("pattern",b_a),colors[aa("fg",b_a)],colors[aa("bg",b_a)])end end end end end,getLines=function(cd)return
  1269. db end,getLine=function(cd,dd)return db[dd]end,editLine=function(cd,dd,__a)db[dd]=__a or db[dd]
  1270. return cd end,clear=function(cd)db={""}_c={""}ac={""}_b,ab,bb,cb=1,1,1,1;return cd end,addLine=function(cd,dd,__a)
  1271. if(
  1272. dd~=nil)then
  1273. if(#db==1)and(db[1]=="")then db[1]=dd
  1274. _c[1]=_a[cd.bgColor]:rep(dd:len())ac[1]=_a[cd.fgColor]:rep(dd:len())return cd end
  1275. if(__a~=nil)then table.insert(db,__a,dd)
  1276. table.insert(_c,__a,_a[cd.bgColor]:rep(dd:len()))
  1277. table.insert(ac,_a[cd.fgColor]:rep(dd:len()))else table.insert(db,dd)
  1278. table.insert(_c,_a[cd.bgColor]:rep(dd:len()))
  1279. table.insert(ac,_a[cd.fgColor]:rep(dd:len()))end end;return cd end,addKeywords=function(cd,dd,__a)if(
  1280. bc[dd]==nil)then bc[dd]={}end;for a_a,b_a in pairs(__a)do
  1281. table.insert(bc[dd],b_a)end;return cd end,addRule=function(cd,dd,__a,a_a)
  1282. table.insert(cc,{dd,__a,a_a})return cd end,editRule=function(cd,dd,__a,a_a)
  1283. for b_a,c_a in pairs(cc)do if(c_a[1]==dd)then
  1284. cc[b_a][2]=__a;cc[b_a][3]=a_a end end;return cd end,removeRule=function(cd,dd)
  1285. for __a,a_a in pairs(cc)do if(
  1286. a_a[1]==dd)then table.remove(cc,__a)end end;return cd end,setKeywords=function(cd,dd,__a)bc[dd]=__a;return cd end,removeLine=function(cd,dd)table.remove(db,
  1287. dd or#db)
  1288. if(#db<=0)then table.insert(db,"")end;return cd end,getTextCursor=function(cd)return bb,cb end,getFocusHandler=function(cd)
  1289. ca.getFocusHandler(cd)
  1290. if(cd.parent~=nil)then local dd,__a=cd:getAnchorPosition()if(cd.parent~=nil)then
  1291. cd.parent:setCursor(true,
  1292. dd+bb-ab,__a+cb-_b,cd.fgColor)end end end,loseFocusHandler=function(cd)
  1293. ca.loseFocusHandler(cd)
  1294. if(cd.parent~=nil)then cd.parent:setCursor(false)end end,keyHandler=function(cd,dd,__a)
  1295. if(ca.keyHandler(cd,dd,__a))then
  1296. local a_a,b_a=cd:getAnchorPosition()local c_a,d_a=cd:getSize()
  1297. if(dd=="key")then
  1298. if(__a==keys.backspace)then
  1299. if(db[cb]=="")then
  1300. if(cb>1)then
  1301. table.remove(db,cb)table.remove(ac,cb)table.remove(_c,cb)bb=
  1302. db[cb-1]:len()+1;ab=bb-c_a+1;if(ab<1)then ab=1 end;cb=cb-1 end elseif(bb<=1)then
  1303. if(cb>1)then bb=db[cb-1]:len()+1;ab=bb-c_a+1
  1304. if(ab<1)then ab=1 end;db[cb-1]=db[cb-1]..db[cb]
  1305. ac[cb-1]=ac[cb-1]..ac[cb]_c[cb-1]=_c[cb-1].._c[cb]table.remove(db,cb)
  1306. table.remove(ac,cb)table.remove(_c,cb)cb=cb-1 end else
  1307. db[cb]=db[cb]:sub(1,bb-2)..db[cb]:sub(bb,db[cb]:len())
  1308. ac[cb]=ac[cb]:sub(1,bb-2)..ac[cb]:sub(bb,ac[cb]:len())
  1309. _c[cb]=_c[cb]:sub(1,bb-2).._c[cb]:sub(bb,_c[cb]:len())if(bb>1)then bb=bb-1 end
  1310. if(ab>1)then if(bb<ab)then ab=ab-1 end end end;if(cb<_b)then _b=_b-1 end;_d(cd)cd:setValue("")end
  1311. if(__a==keys.delete)then
  1312. if(bb>db[cb]:len())then
  1313. if(db[cb+1]~=nil)then db[cb]=db[cb]..
  1314. db[cb+1]table.remove(db,cb+1)
  1315. table.remove(_c,cb+1)table.remove(ac,cb+1)end else
  1316. db[cb]=db[cb]:sub(1,bb-1)..db[cb]:sub(bb+1,db[cb]:len())
  1317. ac[cb]=ac[cb]:sub(1,bb-1)..ac[cb]:sub(bb+1,ac[cb]:len())
  1318. _c[cb]=_c[cb]:sub(1,bb-1).._c[cb]:sub(bb+1,_c[cb]:len())end;_d(cd)end
  1319. if(__a==keys.enter)then
  1320. table.insert(db,cb+1,db[cb]:sub(bb,db[cb]:len()))
  1321. table.insert(ac,cb+1,ac[cb]:sub(bb,ac[cb]:len()))
  1322. table.insert(_c,cb+1,_c[cb]:sub(bb,_c[cb]:len()))db[cb]=db[cb]:sub(1,bb-1)
  1323. ac[cb]=ac[cb]:sub(1,bb-1)_c[cb]=_c[cb]:sub(1,bb-1)cb=cb+1;bb=1;ab=1;if(cb-_b>=d_a)then
  1324. _b=_b+1 end;cd:setValue("")end
  1325. if(__a==keys.up)then
  1326. if(cb>1)then cb=cb-1;if(bb>db[cb]:len()+1)then bb=
  1327. db[cb]:len()+1 end;if(ab>1)then if(bb<ab)then ab=bb-c_a+1;if(ab<1)then
  1328. ab=1 end end end;if(_b>1)then if(
  1329. cb<_b)then _b=_b-1 end end end end
  1330. if(__a==keys.down)then if(cb<#db)then cb=cb+1;if(bb>db[cb]:len()+1)then bb=
  1331. db[cb]:len()+1 end
  1332. if(cb>=_b+d_a)then _b=_b+1 end end end
  1333. if(__a==keys.right)then bb=bb+1;if(cb<#db)then if(bb>db[cb]:len()+1)then bb=1
  1334. cb=cb+1 end elseif(bb>db[cb]:len())then
  1335. bb=db[cb]:len()+1 end;if(bb<1)then bb=1 end;if
  1336. (bb<ab)or(bb>=c_a+ab)then ab=bb-c_a+1 end
  1337. if(ab<1)then ab=1 end end
  1338. if(__a==keys.left)then bb=bb-1;if(bb>=1)then
  1339. if(bb<ab)or(bb>=c_a+ab)then ab=bb end end
  1340. if(cb>1)then if(bb<1)then cb=cb-1
  1341. bb=db[cb]:len()+1;ab=bb-c_a+1 end end;if(bb<1)then bb=1 end;if(ab<1)then ab=1 end end end
  1342. if(dd=="char")then db[cb]=db[cb]:sub(1,bb-1)..__a..
  1343. db[cb]:sub(bb,db[cb]:len())ac[cb]=ac[cb]:sub(1,
  1344. bb-1)..
  1345. _a[cd.fgColor]..ac[cb]:sub(bb,ac[cb]:len())_c[cb]=_c[cb]:sub(1,
  1346. bb-1)..
  1347. _a[cd.bgColor].._c[cb]:sub(bb,_c[cb]:len())
  1348. bb=bb+1;if(bb>=c_a+ab)then ab=ab+1 end;_d(cd)cd:setValue("")end;local _aa=
  1349. (bb<=db[cb]:len()and bb-1 or db[cb]:len())- (ab-1)if(_aa>
  1350. cd.x+c_a-1)then _aa=cd.x+c_a-1 end;local aaa=(
  1351. cb-_b<d_a and cb-_b or cb-_b-1)if(_aa<1)then _aa=0 end;cd.parent:setCursor(true,
  1352. a_a+_aa,b_a+aaa,cd.fgColor)
  1353. return true end end,mouseHandler=function(cd,dd,__a,a_a,b_a)
  1354. if
  1355. (ca.mouseHandler(cd,dd,__a,a_a,b_a))then
  1356. local c_a,d_a=cd:getAbsolutePosition(cd:getAnchorPosition())local _aa,aaa=cd:getAnchorPosition()local baa,caa=cd:getSize()
  1357. if
  1358. (dd=="mouse_click")or(dd=="monitor_touch")then
  1359. if(db[b_a-d_a+_b]~=nil)then bb=
  1360. a_a-c_a+ab;cb=b_a-d_a+_b;if(bb>db[cb]:len())then bb=
  1361. db[cb]:len()+1 end
  1362. if(bb<ab)then ab=bb-1;if(ab<1)then ab=1 end end;if(cd.parent~=nil)then
  1363. cd.parent:setCursor(true,_aa+bb-ab,aaa+cb-_b,cd.fgColor)end end end
  1364. if(dd=="mouse_drag")then
  1365. if(db[b_a-d_a+_b]~=nil)then bb=a_a-c_a+ab;cb=
  1366. b_a-d_a+_b
  1367. if(bb>db[cb]:len())then bb=db[cb]:len()+1 end;if(bb<ab)then ab=bb-1;if(ab<1)then ab=1 end end;if(cd.parent~=nil)then
  1368. cd.parent:setCursor(true,
  1369. _aa+bb-ab,aaa+cb-_b,cd.fgColor)end end end
  1370. if(dd=="mouse_scroll")then _b=_b+__a
  1371. if(_b>#db- (caa-1))then _b=#db- (caa-1)end;if(_b<1)then _b=1 end
  1372. if(cd.parent~=nil)then
  1373. if(c_a+bb-ab>=c_a and
  1374. c_a+bb-ab<c_a+baa)and
  1375. (d_a+cb-_b>=d_a and d_a+cb-_b<d_a+caa)then
  1376. cd.parent:setCursor(true,_aa+bb-ab,aaa+cb-_b,cd.fgColor)else cd.parent:setCursor(false)end end end;cd:setVisualChanged()return true end end,draw=function(cd)
  1377. if
  1378. (ca.draw(cd))then
  1379. if(cd.parent~=nil)then local dd,__a=cd:getAnchorPosition()
  1380. local a_a,b_a=cd:getSize()if(cd.bgColor~=false)then
  1381. cd.parent:drawBackgroundBox(dd,__a,a_a,b_a,cd.bgColor)end;if(cd.fgColor~=false)then
  1382. cd.parent:drawForegroundBox(dd,__a,a_a,b_a,cd.fgColor)end
  1383. for n=1,b_a do local c_a=""local d_a=""local _aa=""
  1384. if(
  1385. db[n+_b-1]~=nil)then c_a=db[n+_b-1]_aa=ac[n+_b-1]d_a=_c[n+_b-1]end;c_a=c_a:sub(ab,a_a+ab-1)
  1386. d_a=d_a:sub(ab,a_a+ab-1)_aa=_aa:sub(ab,a_a+ab-1)local aaa=a_a-c_a:len()if(aaa<0)then
  1387. aaa=0 end;c_a=c_a..string.rep(" ",aaa)d_a=d_a..
  1388. string.rep(_a[cd.bgColor],aaa)_aa=_aa..
  1389. string.rep(_a[cd.fgColor],aaa)
  1390. cd.parent:setText(dd,__a+n-1,c_a)cd.parent:setBG(dd,__a+n-1,d_a)
  1391. cd.parent:setFG(dd,__a+n-1,_aa)end end;cd:setVisualChanged(false)end end}return setmetatable(bd,ca)end
  1392. end;
  1393. project['objects']['Thread'] = function(...)local b=require("utils").getValueFromXML
  1394. return
  1395. function(c)local d;local _a="Thread"local aa;local ba
  1396. local ca=false
  1397. local da=function(_b,ab)
  1398. if(ab:sub(1,1)=="#")then
  1399. local bb=_b:getBaseFrame():getDeepObject(ab:sub(2,ab:len()))
  1400. if(bb~=nil)and(bb.internalObjetCall~=nil)then return(function()
  1401. bb:internalObjetCall()end)end else return _b:getBaseFrame():getVariable(ab)end;return _b end
  1402. d={name=c,getType=function(_b)return _a end,getZIndex=function(_b)return 1 end,getName=function(_b)return _b.name end,getBaseFrame=function(_b)if
  1403. (_b.parent~=nil)then return _b.parent:getBaseFrame()end
  1404. return _b end,setValuesByXMLData=function(_b,ab)local bb;if(b("thread",ab)~=nil)then
  1405. bb=da(_b,b("thread",ab))end
  1406. if(b("start",ab)~=nil)then if
  1407. (b("start",ab))and(bb~=nil)then _b:start(bb)end end;return _b end,start=function(_b,ab)
  1408. if(
  1409. ab==nil)then error("Function provided to thread is nil")end;aa=ab;ba=coroutine.create(aa)ca=true
  1410. local bb,cb=coroutine.resume(ba)if not(bb)then if(cb~="Terminated")then
  1411. error("Thread Error Occurred - "..cb)end end;return
  1412. _b end,getStatus=function(_b,ab)if(
  1413. ba~=nil)then return coroutine.status(ba)end;return nil end,stop=function(_b,ab)
  1414. ca=false;return _b end,eventHandler=function(_b,ab,bb,cb,db)
  1415. if(ca)then
  1416. if(coroutine.status(ba)~="dead")then
  1417. local _c,ac=coroutine.resume(ba,ab,bb,cb,db)if not(_c)then if(ac~="Terminated")then
  1418. error("Thread Error Occurred - "..ac)end end else
  1419. ca=false end end end}d.__index=d;return d end
  1420. end;
  1421. project['objects']['Timer'] = function(...)local c=require("basaltEvent")
  1422. local d=require("utils").getValueFromXML
  1423. return
  1424. function(_a)local aa="Timer"local ba=0;local ca=0;local da=0;local _b;local ab=c()local bb=false
  1425. local cb=function(_c,ac,bc)
  1426. local cc=function(dc)
  1427. if(dc:sub(1,1)=="#")then
  1428. local _d=_c:getBaseFrame():getDeepObject(dc:sub(2,dc:len()))
  1429. if(_d~=nil)and(_d.internalObjetCall~=nil)then ac(_c,function()
  1430. _d:internalObjetCall()end)end else
  1431. ac(_c,_c:getBaseFrame():getVariable(dc))end end;if(type(bc)=="string")then cc(bc)elseif(type(bc)=="table")then
  1432. for dc,_d in pairs(bc)do cc(_d)end end;return _c end
  1433. local db={name=_a,getType=function(_c)return aa end,setValuesByXMLData=function(_c,ac)
  1434. if(d("time",ac)~=nil)then ba=d("time",ac)end;if(d("repeat",ac)~=nil)then ca=d("repeat",ac)end
  1435. if(
  1436. d("start",ac)~=nil)then if(d("start",ac))then _c:start()end end;if(d("onCall",ac)~=nil)then
  1437. cb(_c,_c.onCall,d("onCall",ac))end;return _c end,getBaseFrame=function(_c)
  1438. if(
  1439. _c.parent~=nil)then return _c.parent:getBaseFrame()end;return _c end,getZIndex=function(_c)return 1 end,getName=function(_c)
  1440. return _c.name end,setTime=function(_c,ac,bc)ba=ac or 0;ca=bc or 1;return _c end,start=function(_c)if(bb)then
  1441. os.cancelTimer(_b)end;da=ca;_b=os.startTimer(ba)bb=true;return _c end,isActive=function(_c)return
  1442. bb end,cancel=function(_c)if(_b~=nil)then os.cancelTimer(_b)end
  1443. bb=false;return _c end,onCall=function(_c,ac)
  1444. ab:registerEvent("timed_event",ac)return _c end,eventHandler=function(_c,ac,bc)
  1445. if
  1446. ac=="timer"and bc==_b and bb then ab:sendEvent("timed_event",_c)
  1447. if(da>=1)then da=da-1;if(da>=1)then
  1448. _b=os.startTimer(ba)end elseif(da==-1)then _b=os.startTimer(ba)end end end}db.__index=db;return db end
  1449. end;
  1450. project['libraries']['basaltDraw'] = function(...)local d=require("tHex")local _a,aa=string.sub,string.rep
  1451. return
  1452. function(ba)
  1453. local ca=ba or term.current()local da;local _b,ab=ca.getSize()local bb={}local cb={}local db={}local _c={}local ac={}local bc={}local cc
  1454. local dc={}local function _d()cc=aa(" ",_b)
  1455. for n=0,15 do local a_a=2 ^n;local b_a=d[a_a]dc[a_a]=aa(b_a,_b)end end;_d()
  1456. local function ad()local a_a=cc
  1457. local b_a=dc[colors.white]local c_a=dc[colors.black]
  1458. for currentY=1,ab do
  1459. bb[currentY]=_a(
  1460. bb[currentY]==nil and a_a or
  1461. bb[currentY]..a_a:sub(1,_b-bb[currentY]:len()),1,_b)
  1462. db[currentY]=_a(db[currentY]==nil and b_a or db[currentY]..b_a:sub(1,_b-
  1463. db[currentY]:len()),1,_b)
  1464. cb[currentY]=_a(cb[currentY]==nil and c_a or cb[currentY]..c_a:sub(1,_b-
  1465. cb[currentY]:len()),1,_b)end end;ad()
  1466. local function bd(a_a,b_a,c_a)
  1467. if(b_a>=1)and(b_a<=ab)then
  1468. if
  1469. (a_a+c_a:len()>0)and(a_a<=_b)then local d_a=bb[b_a]local _aa;local aaa=a_a+#c_a-1
  1470. if(a_a<1)then local baa=1 -a_a+1
  1471. local caa=_b-a_a+1;c_a=_a(c_a,baa,caa)elseif(aaa>_b)then local baa=_b-a_a+1;c_a=_a(c_a,1,baa)end
  1472. if(a_a>1)then local baa=a_a-1;_aa=_a(d_a,1,baa)..c_a else _aa=c_a end;if aaa<_b then _aa=_aa.._a(d_a,aaa+1,_b)end
  1473. bb[b_a]=_aa end end end
  1474. local function cd(a_a,b_a,c_a)
  1475. if(b_a>=1)and(b_a<=ab)then
  1476. if(a_a+c_a:len()>0)and(a_a<=_b)then
  1477. local d_a=cb[b_a]local _aa;local aaa=a_a+#c_a-1
  1478. if(a_a<1)then
  1479. c_a=_a(c_a,1 -a_a+1,_b-a_a+1)elseif(aaa>_b)then c_a=_a(c_a,1,_b-a_a+1)end
  1480. if(a_a>1)then _aa=_a(d_a,1,a_a-1)..c_a else _aa=c_a end;if aaa<_b then _aa=_aa.._a(d_a,aaa+1,_b)end
  1481. cb[b_a]=_aa end end end
  1482. local function dd(a_a,b_a,c_a)
  1483. if(b_a>=1)and(b_a<=ab)then
  1484. if(a_a+c_a:len()>0)and(a_a<=_b)then
  1485. local d_a=db[b_a]local _aa;local aaa=a_a+#c_a-1
  1486. if(a_a<1)then local baa=1 -a_a+1;local caa=_b-a_a+1
  1487. c_a=_a(c_a,baa,caa)elseif(aaa>_b)then local baa=_b-a_a+1;c_a=_a(c_a,1,baa)end
  1488. if(a_a>1)then local baa=a_a-1;_aa=_a(d_a,1,baa)..c_a else _aa=c_a end;if aaa<_b then _aa=_aa.._a(d_a,aaa+1,_b)end
  1489. db[b_a]=_aa end end end
  1490. local __a={setMirror=function(a_a)da=a_a end,setBG=function(a_a,b_a,c_a)cd(a_a,b_a,c_a)end,setText=function(a_a,b_a,c_a)
  1491. bd(a_a,b_a,c_a)end,setFG=function(a_a,b_a,c_a)dd(a_a,b_a,c_a)end,drawBackgroundBox=function(a_a,b_a,c_a,d_a,_aa)for n=1,d_a do
  1492. cd(a_a,b_a+ (n-1),aa(d[_aa],c_a))end end,drawForegroundBox=function(a_a,b_a,c_a,d_a,_aa)
  1493. for n=1,d_a do dd(a_a,b_a+
  1494. (n-1),aa(d[_aa],c_a))end end,drawTextBox=function(a_a,b_a,c_a,d_a,_aa)for n=1,d_a do
  1495. bd(a_a,b_a+ (n-1),aa(_aa,c_a))end end,writeText=function(a_a,b_a,c_a,d_a,_aa)d_a=d_a or
  1496. ca.getBackgroundColor()
  1497. _aa=_aa or ca.getTextColor()bd(a_a,b_a,c_a)
  1498. cd(a_a,b_a,aa(d[d_a],c_a:len()))dd(a_a,b_a,aa(d[_aa],c_a:len()))end,update=function()
  1499. local a_a,b_a=ca.getCursorPos()local c_a=false
  1500. if(ca.getCursorBlink~=nil)then c_a=ca.getCursorBlink()end;ca.setCursorBlink(false)if(da~=nil)then
  1501. ca.setCursorBlink(false)end
  1502. for n=1,ab do ca.setCursorPos(1,n)
  1503. ca.blit(bb[n],db[n],cb[n])if(da~=nil)then da.setCursorPos(1,n)
  1504. da.blit(bb[n],db[n],cb[n])end end;ca.setBackgroundColor(colors.black)
  1505. ca.setCursorBlink(c_a)ca.setCursorPos(a_a,b_a)
  1506. if(da~=nil)then
  1507. da.setBackgroundColor(colors.black)da.setCursorBlink(c_a)da.setCursorPos(a_a,b_a)end end,setTerm=function(a_a)
  1508. ca=a_a end}return __a end
  1509. end;
  1510. project['libraries']['basaltEvent'] = function(...)
  1511. return
  1512. function()local a={}local b={}
  1513. local c={registerEvent=function(d,_a,aa)if(a[_a]==nil)then a[_a]={}b[_a]=1 end
  1514. a[_a][b[_a] ]=aa;b[_a]=b[_a]+1;return b[_a]-1 end,removeEvent=function(d,_a,aa)a[_a][aa[_a] ]=
  1515. nil end,sendEvent=function(d,_a,...)local aa
  1516. if(a[_a]~=nil)then for ba,ca in pairs(a[_a])do local da=ca(...)if(da==
  1517. false)then aa=da end end end;return aa end}c.__index=c;return c end
  1518. end;
  1519. project['libraries']['bigfont'] = function(...)local ba=require("tHex")
  1520. local ca={{"\32\32\32\137\156\148\158\159\148\135\135\144\159\139\32\136\157\32\159\139\32\32\143\32\32\143\32\32\32\32\32\32\32\32\147\148\150\131\148\32\32\32\151\140\148\151\140\147","\32\32\32\149\132\149\136\156\149\144\32\133\139\159\129\143\159\133\143\159\133\138\32\133\138\32\133\32\32\32\32\32\32\150\150\129\137\156\129\32\32\32\133\131\129\133\131\132","\32\32\32\130\131\32\130\131\32\32\129\32\32\32\32\130\131\32\130\131\32\32\32\32\143\143\143\32\32\32\32\32\32\130\129\32\130\135\32\32\32\32\131\32\32\131\32\131","\139\144\32\32\143\148\135\130\144\149\32\149\150\151\149\158\140\129\32\32\32\135\130\144\135\130\144\32\149\32\32\139\32\159\148\32\32\32\32\159\32\144\32\148\32\147\131\132","\159\135\129\131\143\149\143\138\144\138\32\133\130\149\149\137\155\149\159\143\144\147\130\132\32\149\32\147\130\132\131\159\129\139\151\129\148\32\32\139\131\135\133\32\144\130\151\32","\32\32\32\32\32\32\130\135\32\130\32\129\32\129\129\131\131\32\130\131\129\140\141\132\32\129\32\32\129\32\32\32\32\32\32\32\131\131\129\32\32\32\32\32\32\32\32\32","\32\32\32\32\149\32\159\154\133\133\133\144\152\141\132\133\151\129\136\153\32\32\154\32\159\134\129\130\137\144\159\32\144\32\148\32\32\32\32\32\32\32\32\32\32\32\151\129","\32\32\32\32\133\32\32\32\32\145\145\132\141\140\132\151\129\144\150\146\129\32\32\32\138\144\32\32\159\133\136\131\132\131\151\129\32\144\32\131\131\129\32\144\32\151\129\32","\32\32\32\32\129\32\32\32\32\130\130\32\32\129\32\129\32\129\130\129\129\32\32\32\32\130\129\130\129\32\32\32\32\32\32\32\32\133\32\32\32\32\32\129\32\129\32\32","\150\156\148\136\149\32\134\131\148\134\131\148\159\134\149\136\140\129\152\131\32\135\131\149\150\131\148\150\131\148\32\148\32\32\148\32\32\152\129\143\143\144\130\155\32\134\131\148","\157\129\149\32\149\32\152\131\144\144\131\148\141\140\149\144\32\149\151\131\148\32\150\32\150\131\148\130\156\133\32\144\32\32\144\32\130\155\32\143\143\144\32\152\129\32\134\32","\130\131\32\131\131\129\131\131\129\130\131\32\32\32\129\130\131\32\130\131\32\32\129\32\130\131\32\130\129\32\32\129\32\32\133\32\32\32\129\32\32\32\130\32\32\32\129\32","\150\140\150\137\140\148\136\140\132\150\131\132\151\131\148\136\147\129\136\147\129\150\156\145\138\143\149\130\151\32\32\32\149\138\152\129\149\32\32\157\152\149\157\144\149\150\131\148","\149\143\142\149\32\149\149\32\149\149\32\144\149\32\149\149\32\32\149\32\32\149\32\149\149\32\149\32\149\32\144\32\149\149\130\148\149\32\32\149\32\149\149\130\149\149\32\149","\130\131\129\129\32\129\131\131\32\130\131\32\131\131\32\131\131\129\129\32\32\130\131\32\129\32\129\130\131\32\130\131\32\129\32\129\131\131\129\129\32\129\129\32\129\130\131\32","\136\140\132\150\131\148\136\140\132\153\140\129\131\151\129\149\32\149\149\32\149\149\32\149\137\152\129\137\152\129\131\156\133\149\131\32\150\32\32\130\148\32\152\137\144\32\32\32","\149\32\32\149\159\133\149\32\149\144\32\149\32\149\32\149\32\149\150\151\129\138\155\149\150\130\148\32\149\32\152\129\32\149\32\32\32\150\32\32\149\32\32\32\32\32\32\32","\129\32\32\130\129\129\129\32\129\130\131\32\32\129\32\130\131\32\32\129\32\129\32\129\129\32\129\32\129\32\131\131\129\130\131\32\32\32\129\130\131\32\32\32\32\140\140\132","\32\154\32\159\143\32\149\143\32\159\143\32\159\144\149\159\143\32\159\137\145\159\143\144\149\143\32\32\145\32\32\32\145\149\32\144\32\149\32\143\159\32\143\143\32\159\143\32","\32\32\32\152\140\149\151\32\149\149\32\145\149\130\149\157\140\133\32\149\32\154\143\149\151\32\149\32\149\32\144\32\149\149\153\32\32\149\32\149\133\149\149\32\149\149\32\149","\32\32\32\130\131\129\131\131\32\130\131\32\130\131\129\130\131\129\32\129\32\140\140\129\129\32\129\32\129\32\137\140\129\130\32\129\32\130\32\129\32\129\129\32\129\130\131\32","\144\143\32\159\144\144\144\143\32\159\143\144\159\138\32\144\32\144\144\32\144\144\32\144\144\32\144\144\32\144\143\143\144\32\150\129\32\149\32\130\150\32\134\137\134\134\131\148","\136\143\133\154\141\149\151\32\129\137\140\144\32\149\32\149\32\149\154\159\133\149\148\149\157\153\32\154\143\149\159\134\32\130\148\32\32\149\32\32\151\129\32\32\32\32\134\32","\133\32\32\32\32\133\129\32\32\131\131\32\32\130\32\130\131\129\32\129\32\130\131\129\129\32\129\140\140\129\131\131\129\32\130\129\32\129\32\130\129\32\32\32\32\32\129\32","\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32","\32\32\32\32\32\32\32\32\32\32\32\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\32\32\32\32\32\32\32\32\32\32\32","\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32","\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32","\32\32\32\32\32\32\32\32\32\32\32\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\32\32\32\32\32\32\32\32\32\32\32","\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32","\32\32\32\32\145\32\159\139\32\151\131\132\155\143\132\134\135\145\32\149\32\158\140\129\130\130\32\152\147\155\157\134\32\32\144\144\32\32\32\32\32\32\152\131\155\131\131\129","\32\32\32\32\149\32\149\32\145\148\131\32\149\32\149\140\157\132\32\148\32\137\155\149\32\32\32\149\154\149\137\142\32\153\153\32\131\131\149\131\131\129\149\135\145\32\32\32","\32\32\32\32\129\32\130\135\32\131\131\129\134\131\132\32\129\32\32\129\32\131\131\32\32\32\32\130\131\129\32\32\32\32\129\129\32\32\32\32\32\32\130\131\129\32\32\32","\150\150\32\32\148\32\134\32\32\132\32\32\134\32\32\144\32\144\150\151\149\32\32\32\32\32\32\145\32\32\152\140\144\144\144\32\133\151\129\133\151\129\132\151\129\32\145\32","\130\129\32\131\151\129\141\32\32\142\32\32\32\32\32\149\32\149\130\149\149\32\143\32\32\32\32\142\132\32\154\143\133\157\153\132\151\150\148\151\158\132\151\150\148\144\130\148","\32\32\32\140\140\132\32\32\32\32\32\32\32\32\32\151\131\32\32\129\129\32\32\32\32\134\32\32\32\32\32\32\32\129\129\32\129\32\129\129\130\129\129\32\129\130\131\32","\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\159\142\32\150\151\129\150\131\132\140\143\144\143\141\145\137\140\148\141\141\144\157\142\32\159\140\32\151\134\32\157\141\32","\157\140\149\157\140\149\157\140\149\157\140\149\157\140\149\157\140\149\151\151\32\154\143\132\157\140\32\157\140\32\157\140\32\157\140\32\32\149\32\32\149\32\32\149\32\32\149\32","\129\32\129\129\32\129\129\32\129\129\32\129\129\32\129\129\32\129\129\131\129\32\134\32\131\131\129\131\131\129\131\131\129\131\131\129\130\131\32\130\131\32\130\131\32\130\131\32","\151\131\148\152\137\145\155\140\144\152\142\145\153\140\132\153\137\32\154\142\144\155\159\132\150\156\148\147\32\144\144\130\145\136\137\32\146\130\144\144\130\145\130\136\32\151\140\132","\151\32\149\151\155\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\152\137\144\157\129\149\149\32\149\149\32\149\149\32\149\149\32\149\130\150\32\32\157\129\149\32\149","\131\131\32\129\32\129\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\32\32\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\129\32\130\131\32\133\131\32","\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\159\142\32\159\159\144\152\140\144\156\143\32\159\141\129\153\140\132\157\141\32\130\145\32\32\147\32\136\153\32\130\146\32","\152\140\149\152\140\149\152\140\149\152\140\149\152\140\149\152\140\149\149\157\134\154\143\132\157\140\133\157\140\133\157\140\133\157\140\133\32\149\32\32\149\32\32\149\32\32\149\32","\130\131\129\130\131\129\130\131\129\130\131\129\130\131\129\130\131\129\130\130\131\32\134\32\130\131\129\130\131\129\130\131\129\130\131\129\32\129\32\32\129\32\32\129\32\32\129\32","\159\134\144\137\137\32\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\32\132\32\159\143\32\147\32\144\144\130\145\136\137\32\146\130\144\144\130\145\130\138\32\146\130\144","\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\131\147\129\138\134\149\149\32\149\149\32\149\149\32\149\149\32\149\154\143\149\32\157\129\154\143\149","\130\131\32\129\32\129\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\32\32\130\131\32\130\131\129\130\131\129\130\131\129\130\131\129\140\140\129\130\131\32\140\140\129"},{"000110000110110000110010101000000010000000100101","000000110110000000000010101000000010000000100101","000000000000000000000000000000000000000000000000","100010110100000010000110110000010100000100000110","000000110000000010110110000110000000000000110000","000000000000000000000000000000000000000000000000","000000110110000010000000100000100000000000000010","000000000110110100010000000010000000000000000100","000000000000000000000000000000000000000000000000","010000000000100110000000000000000000000110010000","000000000000000000000000000010000000010110000000","000000000000000000000000000000000000000000000000","011110110000000100100010110000000100000000000000","000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000","110000110110000000000000000000010100100010000000","000010000000000000110110000000000100010010000000","000000000000000000000000000000000000000000000000","010110010110100110110110010000000100000110110110","000000000000000000000110000000000110000000000000","000000000000000000000000000000000000000000000000","010100010110110000000000000000110000000010000000","110110000000000000110000110110100000000010000000","000000000000000000000000000000000000000000000000","000100011111000100011111000100011111000100011111","000000000000100100100100011011011011111111111111","000000000000000000000000000000000000000000000000","000100011111000100011111000100011111000100011111","000000000000100100100100011011011011111111111111","100100100100100100100100100100100100100100100100","000000110100110110000010000011110000000000011000","000000000100000000000010000011000110000000001000","000000000000000000000000000000000000000000000000","010000100100000000000000000100000000010010110000","000000000000000000000000000000110110110110110000","000000000000000000000000000000000000000000000000","110110110110110110000000110110110110110110110110","000000000000000000000110000000000000000000000000","000000000000000000000000000000000000000000000000","000000000000110110000110010000000000000000010010","000010000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000","110110110110110110110000110110110110000000000000","000000000000000000000110000000000000000000000000","000000000000000000000000000000000000000000000000","110110110110110110110000110000000000000000010000","000000000000000000000000100000000000000110000110","000000000000000000000000000000000000000000000000"}}local da={}local _b={}
  1521. do local cb=0;local db=#ca[1]local _c=#ca[1][1]
  1522. for i=1,db,3 do
  1523. for j=1,_c,3 do
  1524. local ac=string.char(cb)local bc={}bc[1]=ca[1][i]:sub(j,j+2)
  1525. bc[2]=ca[1][i+1]:sub(j,j+2)bc[3]=ca[1][i+2]:sub(j,j+2)local cc={}cc[1]=ca[2][i]:sub(j,
  1526. j+2)cc[2]=ca[2][i+1]:sub(j,j+2)cc[3]=ca[2][
  1527. i+2]:sub(j,j+2)_b[ac]={bc,cc}cb=cb+1 end end;da[1]=_b end
  1528. local function ab(cb,db)local _c={["0"]="1",["1"]="0"}if cb<=#da then return true end
  1529. for f=#da+1,cb do local ac={}local bc=da[
  1530. f-1]
  1531. for char=0,255 do local cc=string.char(char)local dc={}local _d={}
  1532. local ad=bc[cc][1]local bd=bc[cc][2]
  1533. for i=1,#ad do local cd,dd,__a,a_a,b_a,c_a={},{},{},{},{},{}
  1534. for j=1,#ad[1]do
  1535. local d_a=_b[ad[i]:sub(j,j)][1]table.insert(cd,d_a[1])table.insert(dd,d_a[2])
  1536. table.insert(__a,d_a[3])local _aa=_b[ad[i]:sub(j,j)][2]
  1537. if
  1538. bd[i]:sub(j,j)=="1"then
  1539. table.insert(a_a,(_aa[1]:gsub("[01]",_c)))
  1540. table.insert(b_a,(_aa[2]:gsub("[01]",_c)))
  1541. table.insert(c_a,(_aa[3]:gsub("[01]",_c)))else table.insert(a_a,_aa[1])
  1542. table.insert(b_a,_aa[2])table.insert(c_a,_aa[3])end end;table.insert(dc,table.concat(cd))
  1543. table.insert(dc,table.concat(dd))table.insert(dc,table.concat(__a))
  1544. table.insert(_d,table.concat(a_a))table.insert(_d,table.concat(b_a))
  1545. table.insert(_d,table.concat(c_a))end;ac[cc]={dc,_d}if db then db="Font"..f.."Yeld"..char
  1546. os.queueEvent(db)os.pullEvent(db)end end;da[f]=ac end;return true end
  1547. local function bb(cb,db,_c,ac,bc)
  1548. if not type(db)=="string"then error("Not a String",3)end
  1549. local cc=type(_c)=="string"and _c:sub(1,1)or ba[_c]or
  1550. error("Wrong Front Color",3)
  1551. local dc=type(ac)=="string"and ac:sub(1,1)or ba[ac]or
  1552. error("Wrong Back Color",3)if(da[cb]==nil)then ab(3,false)end;local _d=da[cb]or
  1553. error("Wrong font size selected",3)if db==""then
  1554. return{{""},{""},{""}}end;local ad={}
  1555. for c_a in db:gmatch('.')do table.insert(ad,c_a)end;local bd={}local cd=#_d[ad[1] ][1]
  1556. for nLine=1,cd do local c_a={}
  1557. for i=1,#ad do c_a[i]=_d[ad[i] ]and
  1558. _d[ad[i] ][1][nLine]or""end;bd[nLine]=table.concat(c_a)end;local dd={}local __a={}local a_a={["0"]=cc,["1"]=dc}local b_a={["0"]=dc,["1"]=cc}
  1559. for nLine=1,cd do
  1560. local c_a={}local d_a={}
  1561. for i=1,#ad do
  1562. local _aa=_d[ad[i] ]and _d[ad[i] ][2][nLine]or""
  1563. c_a[i]=_aa:gsub("[01]",
  1564. bc and{["0"]=_c:sub(i,i),["1"]=ac:sub(i,i)}or a_a)
  1565. d_a[i]=_aa:gsub("[01]",
  1566. bc and{["0"]=ac:sub(i,i),["1"]=_c:sub(i,i)}or b_a)end;dd[nLine]=table.concat(c_a)
  1567. __a[nLine]=table.concat(d_a)end;return{bd,dd,__a}end;return bb
  1568. end;
  1569. project['libraries']['geometricPoints'] = function(...)
  1570. local function _a(da,_b,ab,bb)local cb={}if da==ab and _b==bb then return{x=da,y=ab}end
  1571. local db=math.min(da,ab)local _c,ac,bc;if db==da then ac,_c,bc=_b,ab,bb else ac,_c,bc=bb,da,_b end;local cc,dc=_c-db,
  1572. bc-ac
  1573. if cc>math.abs(dc)then local _d=ac;local ad=dc/cc;for x=db,_c do table.insert(cb,{x=x,y=math.floor(
  1574. _d+0.5)})
  1575. _d=_d+ad end else local _d,ad=db,cc/dc
  1576. if bc>=ac then for y=ac,bc do table.insert(cb,{x=math.floor(
  1577. _d+0.5),y=y})_d=_d+
  1578. ad end else for y=ac,bc,-1 do
  1579. table.insert(cb,{x=math.floor(_d+0.5),y=y})_d=_d-ad end end end;return cb end
  1580. local function aa(da,_b,ab)local bb={}for x=-ab,ab+1 do
  1581. local cb=math.floor(math.sqrt(ab*ab-x*x))
  1582. for y=-cb,cb+1 do table.insert(bb,{x=da+x,y=_b+y})end end;return bb end
  1583. local function ba(da,_b,ab,bb,cb)local db,_c=math.ceil(math.floor(ab-0.5)/2),math.ceil(
  1584. math.floor(bb-0.5)/2)local ac,bc=0,_c
  1585. local cc=( (
  1586. _c*_c)- (db*db*_c)+ (0.25 *db*db))local dc=2 *_c^2 *ac;local _d=2 *db^2 *bc;local ad={}
  1587. while dc<_d do
  1588. table.insert(ad,{x=ac+da,y=bc+_b})table.insert(ad,{x=-ac+da,y=bc+_b})table.insert(ad,{x=ac+
  1589. da,y=-bc+_b})
  1590. table.insert(ad,{x=-ac+da,y=-bc+_b})if cb then
  1591. for y=-bc+_b+1,bc+_b-1 do table.insert(ad,{x=ac+da,y=y})table.insert(ad,{x=
  1592. -ac+da,y=y})end end
  1593. if cc<0 then ac=ac+1
  1594. dc=dc+2 *_c^2;cc=cc+dc+_c^2 else ac,bc=ac+1,bc-1;dc=dc+2 *_c^2
  1595. _d=_d-2 *db^2;cc=cc+dc-_d+_c^2 end end
  1596. local bd=( ( (_c*_c)* ( (ac+0.5)* (ac+0.5)))+
  1597. ( (db*db)* ( (bc-1)* (bc-1)))- (db*db*_c*_c))
  1598. while bc>=0 do table.insert(ad,{x=ac+da,y=bc+_b})table.insert(ad,{x=-
  1599. ac+da,y=bc+_b})
  1600. table.insert(ad,{x=ac+da,y=-bc+_b})table.insert(ad,{x=-ac+da,y=-bc+_b})
  1601. if cb then for y=-bc+_b,
  1602. bc+_b do table.insert(ad,{x=ac+da,y=y})
  1603. table.insert(ad,{x=-ac+da,y=y})end end
  1604. if bd>0 then bc=bc-1;_d=_d-2 *db^2;bd=bd+db^2 -_d else bc=bc-1;ac=ac+1;_d=_d-2 *
  1605. db^2;dc=dc+2 *_c^2;bd=bd+dc-_d+db^2 end end;return ad end;local function ca(da,_b,ab,bb)return ba(da,_b,ab,ab,bb)end
  1606. return
  1607. {circle=function(da,_b,ab,bb)
  1608. return ca(da,_b,ab,bb)end,rectangle=function(da,_b,ab,bb,cb)local db={}
  1609. if(cb)then for y=_b,bb do for x=da,ab do
  1610. table.insert(db,{x=x,y=y})end end else for y=_b,bb do
  1611. for x=da,ab do if
  1612. (x==da)or(x==ab)or(y==_b)or(y==bb)then
  1613. table.insert(db,{x=x,y=y})end end end end;return db end,triangle=function(da,_b,ab,bb,cb,db,_c)
  1614. local
  1615. function ac(dc,_d,ad,bd,cd,dd,__a)local a_a=(dd-_d)/ (__a-ad)local b_a=(dd-bd)/ (__a-cd)local c_a=math.ceil(
  1616. ad-0.5)
  1617. local d_a=math.ceil(__a-0.5)-1
  1618. for y=c_a,d_a do local _aa=a_a* (y+0.5 -ad)+_d
  1619. local aaa=b_a* (y+0.5 -cd)+bd;local baa=math.ceil(_aa-0.5)local caa=math.ceil(aaa-0.5)for x=baa,caa do
  1620. table.insert(dc,{x=x,y=y})end end end
  1621. local function bc(dc,_d,ad,bd,cd,dd,__a)local a_a=(bd-_d)/ (cd-ad)local b_a=(dd-_d)/ (__a-ad)
  1622. local c_a=math.ceil(ad-0.5)local d_a=math.ceil(__a-0.5)-1
  1623. for y=c_a,d_a do
  1624. local _aa=a_a* (y+0.5 -ad)+_d;local aaa=b_a* (y+0.5 -ad)+_d
  1625. local baa=math.ceil(_aa-0.5)local caa=math.ceil(aaa-0.5)for x=baa,caa do
  1626. table.insert(dc,{x=x,y=y})end end end;local cc={}
  1627. if(_c)then if bb<_b then da,_b,ab,bb=ab,bb,da,_b end;if db<bb then
  1628. ab,bb,cb,db=cb,db,ab,bb end;if bb<bb then da,_b,ab,bb=ab,bb,da,_b end
  1629. if _b==bb then if ab<da then
  1630. da,_b,ab,bb=ab,bb,da,_b end;ac(cc,da,_b,ab,bb,cb,db)elseif bb==db then if cb<ab then
  1631. cb,db,ab,bb=ab,bb,cb,db end;bc(cc,da,_b,ab,bb,cb,db)else
  1632. local dc=(bb-_b)/ (db-_b)local _d=da+ ( (cb-da)*dc)local ad=_b+ ( (db-_b)*dc)
  1633. if
  1634. ab<_d then bc(cc,da,_b,ab,bb,_d,ad)ac(cc,ab,bb,_d,ad,cb,db)else
  1635. bc(cc,da,_b,_d,ad,da,_b)ac(cc,_d,ad,ab,bb,cb,db)end end else cc=_a(da,_b,ab,bb)for dc,_d in pairs(_a(ab,bb,cb,db))do
  1636. table.insert(cc,_d)end;for dc,_d in pairs(_a(cb,db,da,_b))do
  1637. table.insert(cc,_d)end end;return cc end,line=_a,ellipse=function(da,_b,ab,bb,cb)return
  1638. ba(da,_b,ab,bb,cb)end}
  1639. end;
  1640. project['libraries']['layout'] = function(...)
  1641. local function c(_a)local aa={}aa.___value=nil;aa.___name=_a;aa.___children={}aa.___props={}function aa:value()return
  1642. self.___value end
  1643. function aa:setValue(ba)self.___value=ba end;function aa:name()return self.___name end
  1644. function aa:setName(ba)self.___name=ba end;function aa:children()return self.___children end;function aa:numChildren()return
  1645. #self.___children end
  1646. function aa:addChild(ba)
  1647. if self[ba:name()]~=nil then
  1648. if
  1649. type(self[ba:name()].name)=="function"then local ca={}
  1650. table.insert(ca,self[ba:name()])self[ba:name()]=ca end;table.insert(self[ba:name()],ba)else
  1651. self[ba:name()]=ba end;table.insert(self.___children,ba)end;function aa:properties()return self.___props end;function aa:numProperties()
  1652. return#self.___props end
  1653. function aa:addProperty(ba,ca)local da="@"..ba
  1654. if self[da]~=nil then if
  1655. type(self[da])=="string"then local _b={}table.insert(_b,self[da])
  1656. self[da]=_b end
  1657. table.insert(self[da],ca)else self[da]=ca end
  1658. table.insert(self.___props,{name=ba,value=self[ba]})end;return aa end;local d={}
  1659. function d:ToXmlString(_a)_a=string.gsub(_a,"&","&amp;")
  1660. _a=string.gsub(_a,"<","&lt;")_a=string.gsub(_a,">","&gt;")
  1661. _a=string.gsub(_a,"\"","&quot;")
  1662. _a=string.gsub(_a,"([^%w%&%;%p%\t% ])",function(aa)
  1663. return string.format("&#x%X;",string.byte(aa))end)return _a end
  1664. function d:FromXmlString(_a)
  1665. _a=string.gsub(_a,"&#x([%x]+)%;",function(aa)
  1666. return string.char(tonumber(aa,16))end)
  1667. _a=string.gsub(_a,"&#([0-9]+)%;",function(aa)return string.char(tonumber(aa,10))end)_a=string.gsub(_a,"&quot;","\"")
  1668. _a=string.gsub(_a,"&apos;","'")_a=string.gsub(_a,"&gt;",">")
  1669. _a=string.gsub(_a,"&lt;","<")_a=string.gsub(_a,"&amp;","&")return _a end;function d:ParseArgs(_a,aa)
  1670. string.gsub(aa,"(%w+)=([\"'])(.-)%2",function(ba,ca,da)
  1671. _a:addProperty(ba,self:FromXmlString(da))end)end
  1672. function d:ParseXmlText(_a)
  1673. local aa={}local ba=c()table.insert(aa,ba)local ca,da,_b,ab,bb;local cb,db=1,1
  1674. while true do
  1675. ca,db,da,_b,ab,bb=string.find(_a,"<(%/?)([%w_:]+)(.-)(%/?)>",cb)if not ca then break end;local ac=string.sub(_a,cb,ca-1)
  1676. if not
  1677. string.find(ac,"^%s*$")then
  1678. local bc=(ba:value()or"")..self:FromXmlString(ac)aa[#aa]:setValue(bc)end
  1679. if bb=="/"then local bc=c(_b)self:ParseArgs(bc,ab)ba:addChild(bc)elseif
  1680. da==""then local bc=c(_b)self:ParseArgs(bc,ab)table.insert(aa,bc)
  1681. ba=bc else local bc=table.remove(aa)ba=aa[#aa]if#aa<1 then
  1682. error("XmlParser: nothing to close with ".._b)end;if bc:name()~=_b then
  1683. error("XmlParser: trying to close "..bc.name..
  1684. " with ".._b)end;ba:addChild(bc)end;cb=db+1 end;local _c=string.sub(_a,cb)if#aa>1 then
  1685. error("XmlParser: unclosed "..aa[#aa]:name())end;return ba end
  1686. function d:loadFile(_a,aa)if not aa then aa=system.ResourceDirectory end
  1687. local ba=system.pathForFile(_a,aa)local ca,da=io.open(ba,"r")
  1688. if ca and not da then local _b=ca:read("*a")
  1689. io.close(ca)return self:ParseXmlText(_b),nil else print(da)return nil end end;return d
  1690. end;
  1691. project['libraries']['logSystem'] = function(...)local c=""local d="log.txt"return
  1692. {setLogDir=function(_a)c=_a end,setLogFileName=function(_a)d=_a end,__call=function()end}
  1693. end;
  1694. project['libraries']['process'] = function(...)local d={}local _a={}local aa=0
  1695. function _a:new(ba,ca,...)local da=table.pack(...)
  1696. local _b=setmetatable({path=ba},{__index=self})_b.window=ca;_b.processId=aa
  1697. _b.coroutine=coroutine.create(function()
  1698. os.run({},ba,table.unpack(da))end)d[aa]=_b;aa=aa+1;return _b end
  1699. function _a:resume(ba,...)term.redirect(self.window)
  1700. local ca,da=coroutine.resume(self.coroutine,ba,...)self.window=term.current()if ca then self.filter=da else
  1701. basalt.debug(da)end end
  1702. function _a:isDead()
  1703. if(self.coroutine~=nil)then
  1704. if
  1705. (coroutine.status(self.coroutine)=="dead")then table.remove(d,self.processId)return true end else return true end;return false end
  1706. function _a:getStatus()if(self.coroutine~=nil)then
  1707. return coroutine.status(self.coroutine)end;return nil end
  1708. function _a:start()coroutine.resume(self.coroutine)end;return _a
  1709. end;
  1710. project['libraries']['tHex'] = function(...)
  1711. return
  1712. {[colors.white]="0",[colors.orange]="1",[colors.magenta]="2",[colors.lightBlue]="3",[colors.yellow]="4",[colors.lime]="5",[colors.pink]="6",[colors.gray]="7",[colors.lightGray]="8",[colors.cyan]="9",[colors.purple]="a",[colors.blue]="b",[colors.brown]="c",[colors.green]="d",[colors.red]="e",[colors.black]="f"}
  1713. end;
  1714. project['libraries']['utils'] = function(...)
  1715. local b=function(c,d)if d==nil then d="%s"end;local _a={}for aa in string.gmatch(c,"([^"..d.."]+)")do
  1716. table.insert(_a,aa)end;return _a end
  1717. return
  1718. {getTextHorizontalAlign=function(c,d,_a,aa)c=string.sub(c,1,d)local ba=d-string.len(c)
  1719. if(_a=="right")then c=string.rep(
  1720. aa or" ",ba)..c elseif(_a=="center")then
  1721. c=string.rep(aa or" ",math.floor(
  1722. ba/2))..c..
  1723. string.rep(aa or" ",math.floor(ba/2))
  1724. c=c.. (string.len(c)<d and(aa or" ")or"")else c=c..string.rep(aa or" ",ba)end;return c end,getTextVerticalAlign=function(c,d)
  1725. local _a=0
  1726. if(d=="center")then _a=math.ceil(c/2)if(_a<1)then _a=1 end end;if(d=="bottom")then _a=c end;if(_a<1)then _a=1 end;return _a end,rpairs=function(c)
  1727. return function(d,_a)_a=
  1728. _a-1;if _a~=0 then return _a,d[_a]end end,c,#c+1 end,splitString=b,createText=function(c,d)local _a=b(c,"\n")local aa={}
  1729. for ba,ca in
  1730. pairs(_a)do local da=""local _b=b(ca," ")
  1731. for ab,bb in pairs(_b)do
  1732. if(#da+#bb<=d)then
  1733. da=da==""and bb or da.." "..bb;if(ab==#_b)then table.insert(aa,da)end else
  1734. table.insert(aa,da)da=bb:sub(1,d)if(ab==#_b)then table.insert(aa,da)end end end end;return aa end,getValueFromXML=function(c,d)
  1735. local _a;if(type(d)~="table")then return end;if(d[c]~=nil)then
  1736. if(type(d[c])=="table")then if(
  1737. d[c].value~=nil)then _a=d[c]:value()end end end
  1738. if(_a==nil)then _a=d["@"..c]end;if(_a=="true")then _a=true elseif(_a=="false")then _a=false elseif(tonumber(_a)~=nil)then
  1739. _a=tonumber(_a)end;return _a end,numberFromString=function(c)return load(
  1740. "return "..c)()end,uuid=function()
  1741. local c=math.random
  1742. local function d()local _a='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'return
  1743. string.gsub(_a,'[xy]',function(aa)local ba=
  1744. (aa=='x')and c(0,0xf)or c(8,0xb)
  1745. return string.format('%x',ba)end)end;return d()end}
  1746. end;
  1747. project['default']['Frame'] = function(...)local bb=require("Object")local cb=require("loadObjects")
  1748. local db=require("basaltDraw")local _c=require("utils")local ac=require("layout")local bc=_c.uuid
  1749. local cc=_c.rpairs;local dc=_c.getValueFromXML;local _d,ad,bd=string.sub,math.min,math.max
  1750. return
  1751. function(cd,dd,__a,a_a)
  1752. local b_a=bb(cd)local c_a="Frame"local d_a={}local _aa={}local aaa={}local baa={}local caa={}local daa={}local _ba=0;local aba=__a or
  1753. term.current()local bba=""local cba=false;local dba=false;local _ca=0;local aca=0;local bca=false
  1754. local cca=0;local dca=10;local _da=false;local ada=false;local bda=""local cda=false;local dda;local __b
  1755. b_a:setZIndex(10)local a_b=db(aba)local b_b=false;local c_b=1;local d_b=1;local _ab=colors.white;local aab,bab=0,0;local cab={}
  1756. local function dab(adb,bdb)if(bdb~=
  1757. nil)then bdb:setValuesByXMLData(adb)end end
  1758. local function _bb(adb,bdb,cdb)
  1759. if(adb~=nil)then if(adb.properties~=nil)then adb={adb}end;for ddb,__c in pairs(adb)do local a_c=bdb(cdb,
  1760. __c["@id"]or bc())
  1761. table.insert(cab,a_c)dab(__c,a_c)end end end
  1762. if(dd~=nil)then b_a.parent=dd;b_a.width,b_a.height=dd:getSize()
  1763. b_a.bgColor=dd:getTheme("FrameBG")b_a.fgColor=dd:getTheme("FrameText")else
  1764. b_a.width,b_a.height=aba.getSize()b_a.bgColor=a_a.getTheme("BasaltBG")
  1765. b_a.fgColor=a_a.getTheme("BasaltText")end
  1766. local function abb(adb)for bdb,cdb in pairs(d_a)do
  1767. for ddb,__c in pairs(cdb)do if(__c:getName()==adb)then return __c end end end end
  1768. local function bbb(adb)local bdb=abb(adb)if(bdb~=nil)then return bdb end
  1769. for cdb,ddb in pairs(d_a)do
  1770. for __c,a_c in pairs(ddb)do if(
  1771. a_c:getType()=="Frame")then local b_c=a_c:getDeepObject(adb)
  1772. if(b_c~=nil)then return b_c end end end end end
  1773. local function cbb(adb)local bdb=adb:getZIndex()
  1774. if(abb(adb.name)~=nil)then return nil end
  1775. if(d_a[bdb]==nil)then
  1776. for x=1,#_aa+1 do if(_aa[x]~=nil)then if(bdb==_aa[x])then break end;if
  1777. (bdb>_aa[x])then table.insert(_aa,x,bdb)break end else
  1778. table.insert(_aa,bdb)end end;if(#_aa<=0)then table.insert(_aa,bdb)end;d_a[bdb]={}end;adb.parent=aaa;if(adb.init~=nil)then adb:init()end
  1779. table.insert(d_a[bdb],adb)return adb end
  1780. local function dbb(adb)
  1781. for bdb,cdb in pairs(d_a)do for ddb,__c in pairs(cdb)do if(__c==adb)then table.remove(d_a[bdb],ddb)
  1782. return true end end end;return false end
  1783. local function _cb(adb)local bdb,cdb=pcall(load("return "..adb))
  1784. if not(bdb)then error(adb..
  1785. " is not a valid dynamic code")end;return load("return "..adb)()end
  1786. local function acb(adb,bdb,cdb)for ddb,__c in pairs(daa)do
  1787. if(__c[2]==cdb)and(__c[4]==bdb)then return __c end end;_ba=_ba+1
  1788. daa[_ba]={0,cdb,{},bdb,_ba}return daa[_ba]end
  1789. local function bcb(adb,bdb)local cdb={}local ddb={}for __c in bdb:gmatch("%a+%.x")do local a_c=__c:gsub("%.x","")
  1790. if
  1791. (a_c~="self")and(a_c~="parent")then table.insert(cdb,a_c)end end
  1792. for __c in
  1793. bdb:gmatch("%w+%.y")do local a_c=__c:gsub("%.y","")if(a_c~="self")and(a_c~="parent")then
  1794. table.insert(cdb,a_c)end end;for __c in bdb:gmatch("%a+%.w")do local a_c=__c:gsub("%.w","")
  1795. if(a_c~="self")and
  1796. (a_c~="parent")then table.insert(cdb,a_c)end end
  1797. for __c in
  1798. bdb:gmatch("%a+%.h")do local a_c=__c:gsub("%.h","")if(a_c~="self")and(a_c~="parent")then
  1799. table.insert(cdb,a_c)end end
  1800. for __c,a_c in pairs(cdb)do ddb[a_c]=abb(a_c)if(ddb[a_c]==nil)then
  1801. error("Dynamic Values - unable to find object "..a_c)end end;ddb["self"]=adb;ddb["parent"]=adb:getParent()return ddb end
  1802. local function ccb(adb,bdb)local cdb=adb;for ddb in adb:gmatch("%w+%.x")do
  1803. cdb=cdb:gsub(ddb,bdb[ddb:gsub("%.x","")]:getX())end;for ddb in adb:gmatch("%w+%.y")do
  1804. cdb=cdb:gsub(ddb,bdb[ddb:gsub("%.y","")]:getY())end;for ddb in adb:gmatch("%w+%.w")do
  1805. cdb=cdb:gsub(ddb,bdb[ddb:gsub("%.w","")]:getWidth())end;for ddb in adb:gmatch("%w+%.h")do
  1806. cdb=cdb:gsub(ddb,bdb[ddb:gsub("%.h","")]:getHeight())end;return cdb end
  1807. local function dcb()
  1808. if(#daa>0)then
  1809. for n=1,_ba do
  1810. if(daa[n]~=nil)then local adb;if(#daa[n][3]<=0)then
  1811. daa[n][3]=bcb(daa[n][4],daa[n][2])end
  1812. adb=ccb(daa[n][2],daa[n][3])daa[n][1]=_cb(adb)end end end end;local function _db(adb)return daa[adb][1]end
  1813. aaa={barActive=false,barBackground=colors.gray,barTextcolor=colors.black,barText="New Frame",barTextAlign="left",isMoveable=false,newDynamicValue=acb,recalculateDynamicValues=dcb,getDynamicValue=_db,getType=function(adb)return
  1814. c_a end,setFocusedObject=function(adb,bdb)dda=bdb;return adb end,getVariable=function(adb,bdb)
  1815. return a_a.getVariable(bdb)end,setSize=function(adb,bdb,cdb,ddb)b_a.setSize(adb,bdb,cdb,ddb)
  1816. for __c,a_c in pairs(_aa)do if(
  1817. d_a[a_c]~=nil)then
  1818. for b_c,c_c in pairs(d_a[a_c])do if(c_c.eventHandler~=nil)then
  1819. c_c:sendEvent("basalt_resize",c_c,adb)end end end end;return adb end,setTheme=function(adb,bdb)
  1820. caa=bdb;return adb end,getTheme=function(adb,bdb)return
  1821. caa[bdb]or(adb.parent~=nil and
  1822. adb.parent:getTheme(bdb)or a_a.getTheme(bdb))end,setPosition=function(adb,bdb,cdb,ddb)
  1823. b_a.setPosition(adb,bdb,cdb,ddb)
  1824. for __c,a_c in pairs(_aa)do if(d_a[a_c]~=nil)then
  1825. for b_c,c_c in pairs(d_a[a_c])do if(c_c.eventHandler~=nil)then
  1826. c_c:sendEvent("basalt_reposition",c_c,adb)end end end end;return adb end,getBasaltInstance=function(adb)return
  1827. a_a end,setOffset=function(adb,bdb,cdb)
  1828. aab=bdb~=nil and
  1829. math.floor(bdb<0 and math.abs(bdb)or-bdb)or aab
  1830. bab=cdb~=nil and
  1831. math.floor(cdb<0 and math.abs(cdb)or-cdb)or bab;return adb end,getOffsetInternal=function(adb)return
  1832. aab,bab end,getOffset=function(adb)
  1833. return aab<0 and math.abs(aab)or-aab,
  1834. bab<0 and math.abs(bab)or-bab end,removeFocusedObject=function(adb)dda=nil;return adb end,getFocusedObject=function(adb)
  1835. return __b end,setCursor=function(adb,bdb,cdb,ddb,__c)
  1836. if(adb.parent~=nil)then local a_c,b_c=adb:getAnchorPosition()
  1837. adb.parent:setCursor(
  1838. bdb or false,(cdb or 0)+a_c-1,(ddb or 0)+b_c-1,__c or _ab)else
  1839. local a_c,b_c=adb:getAbsolutePosition(adb:getAnchorPosition(adb:getX(),adb:getY(),true))b_b=bdb or false;if(cdb~=nil)then c_b=a_c+cdb-1 end;if(ddb~=nil)then d_b=b_c+
  1840. ddb-1 end;_ab=__c or _ab
  1841. adb:setVisualChanged()end;return adb end,setMoveable=function(adb,bdb)adb.isMoveable=
  1842. bdb or not adb.isMoveable
  1843. adb:setVisualChanged()return adb end,setScrollable=function(adb,bdb)
  1844. bca=bdb and true or false;return adb end,setImportantScroll=function(adb,bdb)cda=bdb and true or false
  1845. return adb end,setMaxScroll=function(adb,bdb)dca=bdb or dca;return adb end,setMinScroll=function(adb,bdb)cca=
  1846. bdb or cca;return adb end,getMaxScroll=function(adb)return dca end,getMinScroll=function(adb)return cca end,show=function(adb)
  1847. b_a.show(adb)
  1848. if(adb.parent==nil)then a_a.setActiveFrame(adb)if(cba)then
  1849. a_a.setMonitorFrame(bba,adb)else a_a.setMainFrame(adb)end end;return adb end,hide=function(adb)
  1850. b_a.hide(adb)
  1851. if(adb.parent==nil)then if(activeFrame==adb)then activeFrame=nil end;if(cba)then
  1852. if(
  1853. a_a.getMonitorFrame(bba)==adb)then a_a.setActiveFrame(nil)end else
  1854. if(a_a.getMainFrame()==adb)then a_a.setMainFrame(nil)end end end;return adb end,addLayout=function(adb,bdb)
  1855. if(
  1856. bdb~=nil)then
  1857. if(fs.exists(bdb))then local cdb=fs.open(bdb,"r")
  1858. local ddb=ac:ParseXmlText(cdb.readAll())cdb.close()cab={}adb:setValuesByXMLData(ddb)end end;return adb end,getLastLayout=function(adb)return
  1859. cab end,addLayoutFromString=function(adb,bdb)if(bdb~=nil)then local cdb=ac:ParseXmlText(bdb)
  1860. adb:setValuesByXMLData(cdb)end;return adb end,setValuesByXMLData=function(adb,bdb)
  1861. b_a.setValuesByXMLData(adb,bdb)if(dc("moveable",bdb)~=nil)then if(dc("moveable",bdb))then
  1862. adb:setMoveable(true)end end;if(
  1863. dc("scrollable",bdb)~=nil)then
  1864. if(dc("scrollable",bdb))then adb:setScrollable(true)end end;if
  1865. (dc("monitor",bdb)~=nil)then
  1866. adb:setMonitor(dc("monitor",bdb)):show()end;if(dc("mirror",bdb)~=nil)then
  1867. adb:setMirror(dc("mirror",bdb))end
  1868. if(dc("bar",bdb)~=nil)then if(dc("bar",bdb))then
  1869. adb:showBar(true)else adb:showBar(false)end end
  1870. if(dc("barText",bdb)~=nil)then adb.barText=dc("barText",bdb)end;if(dc("barBG",bdb)~=nil)then
  1871. adb.barBackground=colors[dc("barBG",bdb)]end;if(dc("barFG",bdb)~=nil)then
  1872. adb.barTextcolor=colors[dc("barFG",bdb)]end;if(dc("barAlign",bdb)~=nil)then
  1873. adb.barTextAlign=dc("barAlign",bdb)end;if(dc("layout",bdb)~=nil)then
  1874. adb:addLayout(dc("layout",bdb))end;if(dc("xOffset",bdb)~=nil)then
  1875. adb:setOffset(dc("xOffset",bdb),bab)end;if(dc("yOffset",bdb)~=nil)then
  1876. adb:setOffset(bab,dc("yOffset",bdb))end;if(dc("maxScroll",bdb)~=nil)then
  1877. adb:setMaxScroll(dc("maxScroll",bdb))end;if(dc("minScroll",bdb)~=nil)then
  1878. adb:setMaxScroll(dc("minScroll",bdb))end;if
  1879. (dc("importantScroll",bdb)~=nil)then
  1880. adb:setImportantScroll(dc("importantScroll",bdb))end;local cdb=bdb:children()
  1881. for ddb,__c in
  1882. pairs(cdb)do if(__c.___name~="animation")then
  1883. local a_c=__c.___name:gsub("^%l",string.upper)
  1884. if(cb[a_c]~=nil)then _bb(__c,adb["add"..a_c],adb)end end end;_bb(bdb["frame"],adb.addFrame,adb)
  1885. _bb(bdb["animation"],adb.addAnimation,adb)return adb end,showBar=function(adb,bdb)adb.barActive=
  1886. bdb or not adb.barActive
  1887. adb:setVisualChanged()return adb end,setBar=function(adb,bdb,cdb,ddb)
  1888. adb.barText=bdb or""adb.barBackground=cdb or adb.barBackground
  1889. adb.barTextcolor=ddb or adb.barTextcolor;adb:setVisualChanged()return adb end,setBarTextAlign=function(adb,bdb)adb.barTextAlign=
  1890. bdb or"left"adb:setVisualChanged()return adb end,setMirror=function(adb,bdb)
  1891. bda=bdb;if(mirror~=nil)then a_b.setMirror(mirror)end;_da=true
  1892. return adb end,removeMirror=function(adb)mirror=nil;_da=false
  1893. a_b.setMirror(nil)return adb end,setMonitor=function(adb,bdb)
  1894. if(bdb~=nil)and(bdb~=false)then
  1895. if(
  1896. peripheral.getType(bdb)=="monitor")then aba=peripheral.wrap(bdb)dba=true end
  1897. if(adb.parent~=nil)then adb.parent:removeObject(adb)end;cba=true else aba=parentTerminal;cba=false;if(a_a.getMonitorFrame(bba)==adb)then a_a.setMonitorFrame(bba,
  1898. nil)end end;a_b=db(aba)bba=bdb or nil;return adb end,getVisualChanged=function(adb)
  1899. local bdb=b_a.getVisualChanged(adb)
  1900. for cdb,ddb in pairs(_aa)do if(d_a[ddb]~=nil)then
  1901. for __c,a_c in pairs(d_a[ddb])do if(a_c.getVisualChanged~=nil and
  1902. a_c:getVisualChanged())then bdb=true end end end end;return bdb end,loseFocusHandler=function(adb)
  1903. b_a.loseFocusHandler(adb)if(dda~=nil)then dda:loseFocusHandler()dda=nil end end,getFocusHandler=function(adb)
  1904. b_a.getFocusHandler(adb)if(adb.parent~=nil)then adb.parent:removeObject(adb)
  1905. adb.parent:addObject(adb)end end,keyHandler=function(adb,bdb,cdb)
  1906. if(
  1907. __b~=nil)then if(__b~=adb)then if(__b.keyHandler~=nil)then
  1908. if(__b:keyHandler(bdb,cdb))then return true end end else
  1909. b_a.keyHandler(adb,bdb,cdb)end end;return false end,backgroundKeyHandler=function(adb,bdb,cdb)
  1910. b_a.backgroundKeyHandler(adb,bdb,cdb)
  1911. for ddb,__c in pairs(_aa)do if(d_a[__c]~=nil)then
  1912. for a_c,b_c in pairs(d_a[__c])do if(b_c.backgroundKeyHandler~=nil)then
  1913. b_c:backgroundKeyHandler(bdb,cdb)end end end end end,eventHandler=function(adb,bdb,cdb,ddb,__c,a_c)
  1914. b_a.eventHandler(adb,bdb,cdb,ddb,__c,a_c)
  1915. for b_c,c_c in pairs(_aa)do if(d_a[c_c]~=nil)then
  1916. for d_c,_ac in pairs(d_a[c_c])do if(_ac.eventHandler~=nil)then
  1917. _ac:eventHandler(bdb,cdb,ddb,__c,a_c)end end end end
  1918. if(cba)then if(bdb=="peripheral")and(cdb==bba)then
  1919. if
  1920. (peripheral.getType(bba)=="monitor")then dba=true;aba=peripheral.wrap(bba)a_b=db(aba)end end
  1921. if(bdb==
  1922. "peripheral_detach")and(cdb==bba)then dba=false end end
  1923. if(_da)then if(peripheral.getType(bda)=="monitor")then ada=true
  1924. a_b.setMirror(peripheral.wrap(bda))end;if(bdb=="peripheral_detach")and
  1925. (cdb==bda)then dba=false end
  1926. if
  1927. (bdb=="monitor_touch")then adb:mouseHandler(bdb,cdb,ddb,__c,a_c)end end;if(bdb=="terminate")then aba.setCursorPos(1,1)aba.clear()
  1928. a_a.stop()end end,mouseHandler=function(adb,bdb,cdb,ddb,__c)
  1929. if
  1930. (adb.drag)then local d_c,_ac=adb.parent:getOffsetInternal()d_c=d_c<0 and
  1931. math.abs(d_c)or-d_c;_ac=
  1932. _ac<0 and math.abs(_ac)or-_ac
  1933. if(bdb=="mouse_drag")then local aac=1;local bac=1;if
  1934. (adb.parent~=nil)then
  1935. aac,bac=adb.parent:getAbsolutePosition(adb.parent:getAnchorPosition())end
  1936. adb:setPosition(
  1937. ddb+_ca- (aac-1)+d_c,__c+aca- (bac-1)+_ac)end;if(bdb=="mouse_up")then adb.drag=false end;return true end
  1938. local a_c,b_c=adb:getAbsolutePosition(adb:getAnchorPosition())local c_c=false;if(b_c-1 ==__c)and(adb:getBorder("top"))then __c=__c+1
  1939. c_c=true end
  1940. if(b_a.mouseHandler(adb,bdb,cdb,ddb,__c))then
  1941. a_c=a_c+aab;b_c=b_c+bab;if(bca)and(cda)then
  1942. if(bdb=="mouse_scroll")then if(cdb>0)or(cdb<0)then bab=bd(ad(bab-cdb,-cca),
  1943. -dca)end end end
  1944. for d_c,_ac in pairs(_aa)do
  1945. if
  1946. (d_a[_ac]~=nil)then
  1947. for aac,bac in cc(d_a[_ac])do if(bac.mouseHandler~=nil)then if(bac:mouseHandler(bdb,cdb,ddb,__c))then
  1948. return true end end end end end;adb:removeFocusedObject()
  1949. if(adb.isMoveable)then
  1950. if
  1951. (ddb>=a_c)and(ddb<=
  1952. a_c+adb:getWidth()-1)and(__c==b_c)and(bdb=="mouse_click")then adb.drag=true;_ca=a_c-
  1953. ddb;aca=c_c and 1 or 0 end end;if(bca)and(not cda)then
  1954. if(bdb=="mouse_scroll")then if(cdb>0)or(cdb<0)then bab=bd(ad(bab-cdb,-cca),
  1955. -dca)end end end;return true end;return false end,setText=function(adb,bdb,cdb,ddb)
  1956. local __c,a_c=adb:getAnchorPosition()
  1957. if(cdb>=1)and(cdb<=adb:getHeight())then
  1958. if(adb.parent~=nil)then
  1959. adb.parent:setText(bd(
  1960. bdb+ (__c-1),__c),a_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1961. adb:getWidth()-bdb+1,1)))else
  1962. a_b.setText(bd(bdb+ (__c-1),__c),a_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1963. adb:getWidth()-bdb+1,1)))end end end,setBG=function(adb,bdb,cdb,ddb)
  1964. local __c,a_c=adb:getAnchorPosition()
  1965. if(cdb>=1)and(cdb<=adb:getHeight())then
  1966. if(adb.parent~=nil)then
  1967. adb.parent:setBG(bd(
  1968. bdb+ (__c-1),__c),a_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1969. adb:getWidth()-bdb+1,1)))else
  1970. a_b.setBG(bd(bdb+ (__c-1),__c),a_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1971. adb:getWidth()-bdb+1,1)))end end end,setFG=function(adb,bdb,cdb,ddb)
  1972. local __c,a_c=adb:getAnchorPosition()
  1973. if(cdb>=1)and(cdb<=adb:getHeight())then
  1974. if(adb.parent~=nil)then
  1975. adb.parent:setFG(bd(
  1976. bdb+ (__c-1),__c),a_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1977. adb:getWidth()-bdb+1,1)))else
  1978. a_b.setFG(bd(bdb+ (__c-1),__c),a_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1979. adb:getWidth()-bdb+1,1)))end end end,writeText=function(adb,bdb,cdb,ddb,__c,a_c)
  1980. local b_c,c_c=adb:getAnchorPosition()
  1981. if(cdb>=1)and(cdb<=adb:getHeight())then
  1982. if(adb.parent~=nil)then
  1983. adb.parent:writeText(bd(
  1984. bdb+ (b_c-1),b_c),c_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),
  1985. adb:getWidth()-bdb+1),__c,a_c)else
  1986. a_b.writeText(bd(bdb+ (b_c-1),b_c),c_c+cdb-1,_d(ddb,bd(1 -bdb+1,1),bd(
  1987. adb:getWidth()-bdb+1,1)),__c,a_c)end end end,drawBackgroundBox=function(adb,bdb,cdb,ddb,__c,a_c)
  1988. local b_c,c_c=adb:getAnchorPosition()
  1989. __c=(cdb<1 and(
  1990. __c+cdb>adb:getHeight()and adb:getHeight()or __c+cdb-1)or(
  1991. __c+
  1992. cdb>adb:getHeight()and adb:getHeight()-cdb+1 or __c))
  1993. ddb=(bdb<1 and(ddb+bdb>adb:getWidth()and adb:getWidth()or ddb+
  1994. bdb-1)or(
  1995.  
  1996. ddb+bdb>adb:getWidth()and adb:getWidth()-bdb+1 or ddb))
  1997. if(adb.parent~=nil)then
  1998. adb.parent:drawBackgroundBox(bd(bdb+ (b_c-1),b_c),bd(cdb+ (c_c-1),c_c),ddb,__c,a_c)else
  1999. a_b.drawBackgroundBox(bd(bdb+ (b_c-1),b_c),bd(cdb+ (c_c-1),c_c),ddb,__c,a_c)end end,drawTextBox=function(adb,bdb,cdb,ddb,__c,a_c)
  2000. local b_c,c_c=adb:getAnchorPosition()
  2001. __c=(cdb<1 and(
  2002. __c+cdb>adb:getHeight()and adb:getHeight()or __c+cdb-1)or(
  2003. __c+
  2004. cdb>adb:getHeight()and adb:getHeight()-cdb+1 or __c))
  2005. ddb=(bdb<1 and(ddb+bdb>adb:getWidth()and adb:getWidth()or ddb+
  2006. bdb-1)or(
  2007.  
  2008. ddb+bdb>adb:getWidth()and adb:getWidth()-bdb+1 or ddb))
  2009. if(adb.parent~=nil)then
  2010. adb.parent:drawTextBox(bd(bdb+ (b_c-1),b_c),bd(cdb+ (c_c-1),c_c),ddb,__c,_d(a_c,1,1))else
  2011. a_b.drawTextBox(bd(bdb+ (b_c-1),b_c),bd(cdb+ (c_c-1),c_c),ddb,__c,_d(a_c,1,1))end end,drawForegroundBox=function(adb,bdb,cdb,ddb,__c,a_c)
  2012. local b_c,c_c=adb:getAnchorPosition()
  2013. __c=(cdb<1 and(
  2014. __c+cdb>adb:getHeight()and adb:getHeight()or __c+cdb-1)or(
  2015. __c+
  2016. cdb>adb:getHeight()and adb:getHeight()-cdb+1 or __c))
  2017. ddb=(bdb<1 and(ddb+bdb>adb:getWidth()and adb:getWidth()or ddb+
  2018. bdb-1)or(
  2019.  
  2020. ddb+bdb>adb:getWidth()and adb:getWidth()-bdb+1 or ddb))
  2021. if(adb.parent~=nil)then
  2022. adb.parent:drawForegroundBox(bd(bdb+ (b_c-1),b_c),bd(cdb+ (c_c-1),c_c),ddb,__c,a_c)else
  2023. a_b.drawForegroundBox(bd(bdb+ (b_c-1),b_c),bd(cdb+ (c_c-1),c_c),ddb,__c,a_c)end end,draw=function(adb)if
  2024. (cba)and not(dba)then return false end
  2025. if(adb:getVisualChanged())then
  2026. if
  2027. (b_a.draw(adb))then
  2028. if(__b~=dda)then if(dda~=nil)then dda:getFocusHandler()end;if
  2029. (__b~=nil)then __b:loseFocusHandler()end;__b=dda end
  2030. local bdb,cdb=adb:getAbsolutePosition(adb:getAnchorPosition())local ddb,__c=adb:getAnchorPosition()local a_c,b_c=adb:getSize()
  2031. if(
  2032. adb.parent~=nil)then
  2033. if(adb.bgColor~=false)then
  2034. adb.parent:drawBackgroundBox(ddb,__c,a_c,b_c,adb.bgColor)adb.parent:drawTextBox(ddb,__c,a_c,b_c," ")end;if(adb.bgColor~=false)then
  2035. adb.parent:drawForegroundBox(ddb,__c,a_c,b_c,adb.fgColor)end else
  2036. if(adb.bgColor~=false)then
  2037. a_b.drawBackgroundBox(ddb,__c,a_c,b_c,adb.bgColor)a_b.drawTextBox(ddb,__c,a_c,b_c," ")end;if(adb.fgColor~=false)then
  2038. a_b.drawForegroundBox(ddb,__c,a_c,b_c,adb.fgColor)end end;aba.setCursorBlink(false)
  2039. if(adb.barActive)then
  2040. if(adb.parent~=nil)then
  2041. adb.parent:writeText(ddb,__c,_c.getTextHorizontalAlign(adb.barText,a_c,adb.barTextAlign),adb.barBackground,adb.barTextcolor)else
  2042. a_b.writeText(ddb,__c,_c.getTextHorizontalAlign(adb.barText,a_c,adb.barTextAlign),adb.barBackground,adb.barTextcolor)end
  2043. if(adb:getBorder("left"))then
  2044. if(adb.parent~=nil)then
  2045. adb.parent:drawBackgroundBox(ddb-1,__c,1,1,adb.barBackground)if(adb.bgColor~=false)then
  2046. adb.parent:drawBackgroundBox(ddb-1,__c+1,1,b_c-1,adb.bgColor)end end end
  2047. if(adb:getBorder("top"))then if(adb.parent~=nil)then
  2048. adb.parent:drawBackgroundBox(ddb-1,__c-1,a_c+1,1,adb.barBackground)end end end;for c_c,d_c in cc(_aa)do
  2049. if(d_a[d_c]~=nil)then for _ac,aac in pairs(d_a[d_c])do
  2050. if(aac.draw~=nil)then aac:draw()end end end end
  2051. if(b_b)then
  2052. aba.setTextColor(_ab)aba.setCursorPos(c_b,d_b)
  2053. if(adb.parent~=nil)then
  2054. aba.setCursorBlink(adb:isFocused())else aba.setCursorBlink(b_b)end end;adb:setVisualChanged(false)end end end,drawUpdate=function(adb)if
  2055. (cba)and not(dba)then return false end;a_b.update()end,addObject=function(adb,bdb)return
  2056. cbb(bdb)end,removeObject=function(adb,bdb)return dbb(bdb)end,getObject=function(adb,bdb)return abb(bdb)end,getDeepObject=function(adb,bdb)return
  2057. bbb(bdb)end,addFrame=function(adb,bdb)
  2058. local cdb=a_a.newFrame(bdb or bc(),adb,nil,a_a)return cbb(cdb)end}
  2059. for adb,bdb in pairs(cb)do aaa["add"..adb]=function(cdb,ddb)
  2060. return cbb(bdb(ddb or bc(),cdb))end end;setmetatable(aaa,b_a)return aaa end
  2061. end;
  2062. project['default']['loadObjects'] = function(...)local d={}if(packaged)then
  2063. for ba,ca in pairs(getProject("objects"))do d[ba]=ca()end;return d end
  2064. local _a=table.pack(...)local aa=fs.getDir(_a[2]or"Basalt")if(aa==nil)then
  2065. error("Unable to find directory "..
  2066. _a[2].." please report this bug to our discord.")end;for ba,ca in
  2067. pairs(fs.list(fs.combine(aa,"objects")))do
  2068. if(ca~="example.lua")then local da=ca:gsub(".lua","")d[da]=require(da)end end;return d
  2069. end;
  2070. project['default']['Object'] = function(...)local aa=require("basaltEvent")local ba=require("utils")
  2071. local ca=ba.splitString;local da=ba.numberFromString;local _b=ba.getValueFromXML
  2072. return
  2073. function(ab)local bb="Object"local cb={}local db=1
  2074. local _c;local ac="topLeft"local bc=false;local cc=true;local dc=false;local _d=false;local ad=false;local bd=false
  2075. local cd=false;local dd=colors.black;local __a=colors.black;local a_a=true;local b_a=false;local c_a,d_a,_aa,aaa=0,0,0,0
  2076. local baa=true;local caa=aa()
  2077. cb={x=1,y=1,width=1,height=1,bgColor=colors.black,fgColor=colors.white,name=ab or"Object",parent=nil,show=function(daa)cc=true;baa=true;return daa end,hide=function(daa)
  2078. cc=false;baa=true;return daa end,enable=function(daa)a_a=true;return daa end,disable=function(daa)
  2079. a_a=false;return daa end,generateXMLEventFunction=function(daa,_ba,aba)
  2080. local bba=function(cba)
  2081. if(cba:sub(1,1)=="#")then
  2082. local dba=daa:getBaseFrame():getDeepObject(cba:sub(2,cba:len()))
  2083. if(dba~=nil)and(dba.internalObjetCall~=nil)then _ba(daa,function()
  2084. dba:internalObjetCall()end)end else
  2085. _ba(daa,daa:getBaseFrame():getVariable(cba))end end;if(type(aba)=="string")then bba(aba)elseif(type(aba)=="table")then
  2086. for cba,dba in pairs(aba)do bba(dba)end end;return daa end,setValuesByXMLData=function(daa,_ba)
  2087. local aba=daa:getBaseFrame()if(_b("x",_ba)~=nil)then
  2088. daa:setPosition(_b("x",_ba),daa.y)end;if(_b("y",_ba)~=nil)then
  2089. daa:setPosition(daa.x,_b("y",_ba))end;if(_b("width",_ba)~=nil)then
  2090. daa:setSize(_b("width",_ba),daa.height)end;if(_b("height",_ba)~=nil)then
  2091. daa:setSize(daa.width,_b("height",_ba))end;if(_b("bg",_ba)~=nil)then
  2092. daa:setBackground(colors[_b("bg",_ba)])end;if(_b("fg",_ba)~=nil)then
  2093. daa:setForeground(colors[_b("fg",_ba)])end;if(_b("value",_ba)~=nil)then
  2094. daa:setValue(colors[_b("value",_ba)])end
  2095. if(_b("visible",_ba)~=nil)then if
  2096. (_b("visible",_ba))then daa:show()else daa:hide()end end
  2097. if(_b("enabled",_ba)~=nil)then if(_b("enabled",_ba))then daa:enable()else
  2098. daa:disable()end end;if(_b("zIndex",_ba)~=nil)then
  2099. daa:setZIndex(_b("zIndex",_ba))end;if(_b("anchor",_ba)~=nil)then
  2100. daa:setAnchor(_b("anchor",_ba))end;if(_b("shadow",_ba)~=nil)then if(_b("shadow",_ba))then
  2101. daa:showShadow(true)end end;if(
  2102. _b("shadowColor",_ba)~=nil)then
  2103. daa:setShadow(colors[_b("shadowColor",_ba)])end
  2104. if(_b("border",_ba)~=nil)then if
  2105. (_b("border",_ba))then _d,ad,bd,cd=true,true,true,true end end;if(_b("borderLeft",_ba)~=nil)then
  2106. if(_b("borderLeft",_ba))then _d=true else _d=false end end
  2107. if
  2108. (_b("borderTop",_ba)~=nil)then if(_b("borderTop",_ba))then ad=true else ad=false end end;if(_b("borderRight",_ba)~=nil)then
  2109. if(_b("borderRight",_ba))then bd=true else bd=false end end
  2110. if
  2111. (_b("borderBottom",_ba)~=nil)then if(_b("borderBottom",_ba))then cd=true else cd=false end end;if(_b("borderColor",_ba)~=nil)then
  2112. daa:setBorder(colors[_b("borderColor",_ba)])end;if
  2113. (_b("ignoreOffset",_ba)~=nil)then
  2114. if(_b("ignoreOffset",_ba))then daa:ignoreOffset(true)end end;if
  2115. (_b("onClick",_ba)~=nil)then
  2116. daa:generateXMLEventFunction(daa.onClick,_b("onClick",_ba))end;if
  2117. (_b("onClickUp",_ba)~=nil)then
  2118. daa:generateXMLEventFunction(daa.onClickUp,_b("onClickUp",_ba))end;if
  2119. (_b("onScroll",_ba)~=nil)then
  2120. daa:generateXMLEventFunction(daa.onScroll,_b("onScroll",_ba))end;if
  2121. (_b("onDrag",_ba)~=nil)then
  2122. daa:generateXMLEventFunction(daa.onDrag,_b("onDrag",_ba))end;if(_b("onKey",_ba)~=nil)then
  2123. daa:generateXMLEventFunction(daa.onKey,_b("onKey",_ba))end;if(_b("onKeyUp",_ba)~=nil)then
  2124. daa:generateXMLEventFunction(daa.onKeyUp,_b("onKeyUp",_ba))end;if
  2125. (_b("onChange",_ba)~=nil)then
  2126. daa:generateXMLEventFunction(daa.onChange,_b("onChange",_ba))end;if
  2127. (_b("onResize",_ba)~=nil)then
  2128. daa:generateXMLEventFunction(daa.onResize,_b("onResize",_ba))end;if
  2129. (_b("onReposition",_ba)~=nil)then
  2130. daa:generateXMLEventFunction(daa.onReposition,_b("onReposition",_ba))end;if
  2131. (_b("onEvent",_ba)~=nil)then
  2132. daa:generateXMLEventFunction(daa.onEvent,_b("onEvent",_ba))end;if
  2133. (_b("onGetFocus",_ba)~=nil)then
  2134. daa:generateXMLEventFunction(daa.onGetFocus,_b("onGetFocus",_ba))end;if
  2135. (_b("onLoseFocus",_ba)~=nil)then
  2136. daa:generateXMLEventFunction(daa.onLoseFocus,_b("onLoseFocus",_ba))end;if(
  2137. _b("onBackgroundKey",_ba)~=nil)then
  2138. daa:generateXMLEventFunction(daa.onBackgroundKey,_b("onBackgroundKey",_ba))end;if(
  2139. _b("onBackgroundKeyUp",_ba)~=nil)then
  2140. daa:generateXMLEventFunction(daa.onBackgroundKeyUp,_b("onBackgroundKeyUp",_ba))end;return daa end,isVisible=function(daa)return
  2141. cc end,setFocus=function(daa)if(daa.parent~=nil)then
  2142. daa.parent:setFocusedObject(daa)end;return daa end,setZIndex=function(daa,_ba)
  2143. db=_ba;if(daa.parent~=nil)then daa.parent:removeObject(daa)
  2144. daa.parent:addObject(daa)end;return daa end,getZIndex=function(daa)return
  2145. db end,getType=function(daa)return bb end,getName=function(daa)return daa.name end,remove=function(daa)
  2146. if
  2147. (daa.parent~=nil)then daa.parent:removeObject(daa)end;return daa end,setParent=function(daa,_ba)
  2148. if(_ba.getType~=nil and
  2149. _ba:getType()=="Frame")then daa:remove()
  2150. _ba:addObject(daa)if(daa.draw)then daa:show()end end;return daa end,setValue=function(daa,_ba)
  2151. if(
  2152. _c~=_ba)then _c=_ba;baa=true;daa:valueChangedHandler()end;return daa end,getValue=function(daa)return _c end,getVisualChanged=function(daa)
  2153. return baa end,setVisualChanged=function(daa,_ba)baa=_ba or true;if(_ba==nil)then baa=true end;return daa end,getEventSystem=function(daa)return
  2154. caa end,getParent=function(daa)return daa.parent end,getObjectReferencesForDynVal=function(daa,_ba)end,setPosition=function(daa,_ba,aba,bba)
  2155. if
  2156. (type(_ba)=="number")then daa.x=bba and daa:getX()+_ba or _ba end;if(type(aba)=="number")then
  2157. daa.y=bba and daa:getY()+aba or aba end
  2158. if(daa.parent~=nil)then if(type(_ba)=="string")then
  2159. daa.x=daa.parent:newDynamicValue(daa,_ba)end;if(type(aba)=="string")then
  2160. daa.y=daa.parent:newDynamicValue(daa,aba)end
  2161. daa.parent:recalculateDynamicValues()end;caa:sendEvent("basalt_reposition",daa)baa=true;return daa end,getX=function(daa)return
  2162.  
  2163. type(daa.x)=="number"and daa.x or math.floor(daa.x[1]+0.5)end,getY=function(daa)return
  2164.  
  2165. type(daa.y)=="number"and daa.y or math.floor(daa.y[1]+0.5)end,getPosition=function(daa)return
  2166. daa:getX(),daa:getY()end,getVisibility=function(daa)return cc end,setVisibility=function(daa,_ba)
  2167. cc=_ba or not cc;baa=true;return daa end,setSize=function(daa,_ba,aba,bba)
  2168. if(type(_ba)=="number")then daa.width=bba and
  2169. daa.width+_ba or _ba end;if(type(aba)=="number")then
  2170. daa.height=bba and daa.height+aba or aba end
  2171. if(daa.parent~=nil)then if(type(_ba)=="string")then
  2172. daa.width=daa.parent:newDynamicValue(daa,_ba)end;if(type(aba)=="string")then
  2173. daa.height=daa.parent:newDynamicValue(daa,aba)end
  2174. daa.parent:recalculateDynamicValues()end;caa:sendEvent("basalt_resize",daa)baa=true;return daa end,getHeight=function(daa)
  2175. return
  2176. type(daa.height)=="number"and daa.height or
  2177. math.floor(daa.height[1]+0.5)end,getWidth=function(daa)return
  2178.  
  2179. type(daa.width)=="number"and daa.width or math.floor(daa.width[1]+0.5)end,getSize=function(daa)return
  2180. daa:getWidth(),daa:getHeight()end,calculateDynamicValues=function(daa)
  2181. if(
  2182. type(daa.width)=="table")then daa.width:calculate()end
  2183. if(type(daa.height)=="table")then daa.height:calculate()end
  2184. if(type(daa.x)=="table")then daa.x:calculate()end
  2185. if(type(daa.y)=="table")then daa.y:calculate()end;return daa end,setBackground=function(daa,_ba)daa.bgColor=
  2186. _ba or false;baa=true;return daa end,getBackground=function(daa)return
  2187. daa.bgColor end,setForeground=function(daa,_ba)daa.fgColor=_ba or false;baa=true;return daa end,getForeground=function(daa)return
  2188. daa.fgColor end,showShadow=function(daa,_ba)dc=_ba or(not dc)return daa end,setShadow=function(daa,_ba)
  2189. dd=_ba;return daa end,isShadowActive=function(daa)return dc end,showBorder=function(daa,...)
  2190. for _ba,aba in pairs(table.pack(...))do if(
  2191. aba=="left")then _d=true end;if(aba=="top")then ad=true end;if
  2192. (aba=="right")then bd=true end;if(aba=="bottom")then cd=true end end;return daa end,setBorder=function(daa,_ba)
  2193. __a=_ba;return daa end,getBorder=function(daa,_ba)if(_ba=="left")then return _d end
  2194. if(_ba=="top")then return ad end;if(_ba=="right")then return bd end;if(_ba=="bottom")then return cd end end,draw=function(daa)
  2195. if
  2196. (cc)then
  2197. if(daa.parent~=nil)then local _ba,aba=daa:getAnchorPosition()
  2198. local bba,cba=daa:getSize()
  2199. if(dc)then
  2200. daa.parent:drawBackgroundBox(_ba+1,aba+cba,bba,1,dd)
  2201. daa.parent:drawBackgroundBox(_ba+bba,aba+1,1,cba,dd)
  2202. daa.parent:drawForegroundBox(_ba+1,aba+cba,bba,1,dd)
  2203. daa.parent:drawForegroundBox(_ba+bba,aba+1,1,cba,dd)end
  2204. if(_d)then
  2205. daa.parent:drawTextBox(_ba-1,aba,1,cba,"\149")
  2206. daa.parent:drawForegroundBox(_ba-1,aba,1,cba,__a)if(daa.bgColor~=false)then
  2207. daa.parent:drawBackgroundBox(_ba-1,aba,1,cba,daa.bgColor)end end
  2208. if(_d)and(ad)then
  2209. daa.parent:drawTextBox(_ba-1,aba-1,1,1,"\151")
  2210. daa.parent:drawForegroundBox(_ba-1,aba-1,1,1,__a)if(daa.bgColor~=false)then
  2211. daa.parent:drawBackgroundBox(_ba-1,aba-1,1,1,daa.bgColor)end end
  2212. if(ad)then
  2213. daa.parent:drawTextBox(_ba,aba-1,bba,1,"\131")
  2214. daa.parent:drawForegroundBox(_ba,aba-1,bba,1,__a)if(daa.bgColor~=false)then
  2215. daa.parent:drawBackgroundBox(_ba,aba-1,bba,1,daa.bgColor)end end;if(ad)and(bd)then
  2216. daa.parent:drawTextBox(_ba+bba,aba-1,1,1,"\149")
  2217. daa.parent:drawForegroundBox(_ba+bba,aba-1,1,1,__a)end
  2218. if(bd)then daa.parent:drawTextBox(
  2219. _ba+bba,aba,1,cba,"\149")daa.parent:drawForegroundBox(
  2220. _ba+bba,aba,1,cba,__a)end;if(bd)and(cd)then
  2221. daa.parent:drawTextBox(_ba+bba,aba+cba,1,1,"\129")
  2222. daa.parent:drawForegroundBox(_ba+bba,aba+cba,1,1,__a)end
  2223. if(cd)then daa.parent:drawTextBox(_ba,
  2224. aba+cba,bba,1,"\131")daa.parent:drawForegroundBox(_ba,
  2225. aba+cba,bba,1,__a)end;if(cd)and(_d)then
  2226. daa.parent:drawTextBox(_ba-1,aba+cba,1,1,"\131")
  2227. daa.parent:drawForegroundBox(_ba-1,aba+cba,1,1,__a)end end;return true end;return false end,getAbsolutePosition=function(daa,_ba,aba)
  2228. if(
  2229. _ba==nil)or(aba==nil)then _ba,aba=daa:getAnchorPosition()end
  2230. if(daa.parent~=nil)then
  2231. local bba,cba=daa.parent:getAbsolutePosition()_ba=bba+_ba-1;aba=cba+aba-1 end;return _ba,aba end,getAnchorPosition=function(daa,_ba,aba,bba)if(
  2232. _ba==nil)then _ba=daa:getX()end
  2233. if(aba==nil)then aba=daa:getY()end
  2234. if(daa.parent~=nil)then local cba,dba=daa.parent:getSize()
  2235. if(ac=="top")then _ba=math.floor(
  2236. cba/2)+_ba-1 elseif(ac=="topRight")then
  2237. _ba=cba+_ba-1 elseif(ac=="right")then _ba=cba+_ba-1
  2238. aba=math.floor(dba/2)+aba-1 elseif(ac=="bottomRight")then _ba=cba+_ba-1;aba=dba+aba-1 elseif(ac=="bottom")then _ba=math.floor(
  2239. cba/2)+_ba-1;aba=dba+aba-1 elseif(ac==
  2240. "bottomLeft")then aba=dba+aba-1 elseif(ac=="left")then
  2241. aba=math.floor(dba/2)+aba-1 elseif(ac=="center")then _ba=math.floor(cba/2)+_ba-1;aba=math.floor(
  2242. dba/2)+aba-1 end;local _ca,aca=daa.parent:getOffsetInternal()if not(bc or bba)then return _ba+
  2243. _ca,aba+aca end end;return _ba,aba end,ignoreOffset=function(daa,_ba)
  2244. bc=_ba;if(_ba==nil)then bc=true end;return daa end,getBaseFrame=function(daa)
  2245. if(
  2246. daa.parent~=nil)then return daa.parent:getBaseFrame()end;return daa end,setAnchor=function(daa,_ba)ac=_ba;baa=true;return daa end,getAnchor=function(daa)return
  2247. ac end,onChange=function(daa,...)
  2248. for _ba,aba in pairs(table.pack(...))do if(type(aba)=="function")then
  2249. daa:registerEvent("value_changed",aba)end end;return daa end,onClick=function(daa,...)
  2250. for _ba,aba in
  2251. pairs(table.pack(...))do
  2252. if(type(aba)=="function")then
  2253. daa:registerEvent("mouse_click",aba)daa:registerEvent("monitor_touch",aba)end end;return daa end,onClickUp=function(daa,...)for _ba,aba in
  2254. pairs(table.pack(...))do
  2255. if(type(aba)=="function")then daa:registerEvent("mouse_up",aba)end end;return daa end,onScroll=function(daa,...)
  2256. for _ba,aba in
  2257. pairs(table.pack(...))do if(type(aba)=="function")then
  2258. daa:registerEvent("mouse_scroll",aba)end end;return daa end,onDrag=function(daa,...)if
  2259. (a_a)then
  2260. for _ba,aba in pairs(table.pack(...))do if(type(aba)=="function")then
  2261. daa:registerEvent("mouse_drag",aba)end end end;return daa end,onEvent=function(daa,...)
  2262. for _ba,aba in
  2263. pairs(table.pack(...))do if(type(aba)=="function")then
  2264. daa:registerEvent("custom_event_handler",aba)end end;return daa end,onKey=function(daa,...)
  2265. for _ba,aba in
  2266. pairs(table.pack(...))do if(type(aba)=="function")then daa:registerEvent("key",aba)
  2267. daa:registerEvent("char",aba)end end;return daa end,onResize=function(daa,...)
  2268. for _ba,aba in
  2269. pairs(table.pack(...))do if(type(aba)=="function")then
  2270. daa:registerEvent("basalt_resize",aba)end end;return daa end,onReposition=function(daa,...)
  2271. for _ba,aba in
  2272. pairs(table.pack(...))do if(type(aba)=="function")then
  2273. daa:registerEvent("basalt_reposition",aba)end end;return daa end,onKeyUp=function(daa,...)for _ba,aba in
  2274. pairs(table.pack(...))do
  2275. if(type(aba)=="function")then daa:registerEvent("key_up",aba)end end;return daa end,onBackgroundKey=function(daa,...)
  2276. for _ba,aba in
  2277. pairs(table.pack(...))do
  2278. if(type(aba)=="function")then
  2279. daa:registerEvent("background_key",aba)daa:registerEvent("background_char",aba)end end;return daa end,onBackgroundKeyUp=function(daa,...)
  2280. for _ba,aba in
  2281. pairs(table.pack(...))do if(type(aba)=="function")then
  2282. daa:registerEvent("background_key_up",aba)end end;return daa end,isFocused=function(daa)if(
  2283. daa.parent~=nil)then
  2284. return daa.parent:getFocusedObject()==daa end;return false end,onGetFocus=function(daa,...)
  2285. for _ba,aba in
  2286. pairs(table.pack(...))do if(type(aba)=="function")then
  2287. daa:registerEvent("get_focus",aba)end end;return daa end,onLoseFocus=function(daa,...)
  2288. for _ba,aba in
  2289. pairs(table.pack(...))do if(type(aba)=="function")then
  2290. daa:registerEvent("lose_focus",aba)end end;return daa end,registerEvent=function(daa,_ba,aba)return
  2291. caa:registerEvent(_ba,aba)end,removeEvent=function(daa,_ba,aba)
  2292. return caa:removeEvent(_ba,aba)end,sendEvent=function(daa,_ba,...)return caa:sendEvent(_ba,daa,...)end,mouseHandler=function(daa,_ba,aba,bba,cba)
  2293. if
  2294. (a_a)and(cc)then
  2295. local dba,_ca=daa:getAbsolutePosition(daa:getAnchorPosition())local aca,bca=daa:getSize()local cca=false;if
  2296. (_ca-1 ==cba)and(daa:getBorder("top"))then cba=cba+1;cca=true end;if(_ba=="mouse_up")then
  2297. b_a=false end
  2298. if(b_a)and(_ba=="mouse_drag")then local dca,_da,ada,bda=0,0,1,1
  2299. if(daa.parent~=
  2300. nil)then dca,_da=daa.parent:getOffsetInternal()dca=dca<0 and
  2301. math.abs(dca)or-dca;_da=
  2302. _da<0 and math.abs(_da)or-_da
  2303. ada,bda=daa.parent:getAbsolutePosition(daa.parent:getAnchorPosition())end
  2304. local cda,dda=bba+_aa- (ada-1)+dca,cba+aaa- (bda-1)+_da
  2305. local __b=caa:sendEvent(_ba,daa,_ba,aba,cda,dda,c_a,d_a,bba,cba)end
  2306. if(dba<=bba)and(dba+aca>bba)and(_ca<=cba)and
  2307. (_ca+bca>cba)then if(_ba=="mouse_click")then b_a=true;c_a,d_a=bba,cba;_aa,aaa=dba-bba,
  2308. _ca-cba end
  2309. if(_ba~="mouse_drag")then if(
  2310. _ba~="mouse_up")then if(daa.parent~=nil)then
  2311. daa.parent:setFocusedObject(daa)end end
  2312. local dca=caa:sendEvent(_ba,daa,_ba,aba,bba,cba)if(dca~=nil)then return dca end end;return true end end;return false end,keyHandler=function(daa,_ba,aba)if
  2313. (a_a)then
  2314. if(daa:isFocused())then local bba=caa:sendEvent(_ba,daa,_ba,aba)if(bba~=nil)then
  2315. return bba end;return true end end;return false end,backgroundKeyHandler=function(daa,_ba,aba)
  2316. if
  2317. (a_a)then
  2318. local bba=caa:sendEvent("background_".._ba,daa,_ba,aba)if(bba~=nil)then return bba end end;return true end,valueChangedHandler=function(daa)
  2319. caa:sendEvent("value_changed",daa)end,eventHandler=function(daa,_ba,aba,bba,cba,dba)
  2320. caa:sendEvent("custom_event_handler",daa,_ba,aba,bba,cba,dba)end,getFocusHandler=function(daa)
  2321. local _ba=caa:sendEvent("get_focus",daa)if(_ba~=nil)then return _ba end;return true end,loseFocusHandler=function(daa)
  2322. local _ba=caa:sendEvent("lose_focus",daa)if(_ba~=nil)then return _ba end;return true end}cb.__index=cb;return cb end
  2323. end;
  2324. project['default']['theme'] = function(...)
  2325. return
  2326. {BasaltBG=colors.lightGray,BasaltText=colors.black,FrameBG=colors.gray,FrameText=colors.black,ButtonBG=colors.gray,ButtonText=colors.black,CheckboxBG=colors.gray,CheckboxText=colors.black,InputBG=colors.gray,InputText=colors.black,TextfieldBG=colors.gray,TextfieldText=colors.black,ListBG=colors.gray,ListText=colors.black,MenubarBG=colors.gray,MenubarText=colors.black,DropdownBG=colors.gray,DropdownText=colors.black,RadioBG=colors.gray,RadioText=colors.black,SelectionBG=colors.black,SelectionText=colors.lightGray,GraphicBG=colors.black,ImageBG=colors.black,PaneBG=colors.black,ProgramBG=colors.black,ProgressbarBG=colors.gray,ProgressbarText=colors.black,ProgressbarActiveBG=colors.black,ScrollbarBG=colors.lightGray,ScrollbarText=colors.gray,ScrollbarSymbolColor=colors.black,SliderBG=colors.lightGray,SliderText=colors.gray,SliderSymbolColor=colors.black,SwitchBG=colors.lightGray,SwitchText=colors.gray,SwitchBGSymbol=colors.black,SwitchInactive=colors.red,SwitchActive=colors.green}
  2327. end;
  2328. local aaa=require("basaltEvent")()
  2329. local baa=require("Frame")local caa=require("theme")local daa=require("utils")local _ba=daa.uuid
  2330. local aba=daa.createText;local bba=term.current()local cba=5;local dba=true
  2331. local _ca=fs.getDir(table.pack(...)[2]or"")local aca,bca,cca,dca,_da={},{},{},{},{}local ada,bda,cda,dda;if not term.isColor or
  2332. not term.isColor()then
  2333. error('Basalt requires an advanced (golden) computer to run.',0)end
  2334. local function __b()dda=false end;local a_b=function(abb,bbb)dca[abb]=bbb end
  2335. local b_b=function(abb)return dca[abb]end;local c_b=function(abb)caa=abb end
  2336. local d_b=function(abb)return caa[abb]end
  2337. local _ab={getMainFrame=function()return ada end,setVariable=a_b,getVariable=b_b,getTheme=d_b,setMainFrame=function(abb)ada=abb end,getActiveFrame=function()return bda end,setActiveFrame=function(abb)bda=abb end,getFocusedObject=function()return
  2338. cda end,setFocusedObject=function(abb)cda=abb end,getMonitorFrame=function(abb)return cca[abb]end,setMonitorFrame=function(abb,bbb)
  2339. cca[abb]=bbb end,getBaseTerm=function()return bba end,stop=__b,newFrame=baa,getDirectory=function()return _ca end}
  2340. local aab=function(abb)bba.clear()bba.setBackgroundColor(colors.black)
  2341. bba.setTextColor(colors.red)local bbb,cbb=bba.getSize()
  2342. local dbb=function(ccb,dcb)if dcb==nil then dcb="%s"end;local _db={}
  2343. for adb in string.gmatch(ccb,
  2344. "([^"..dcb.."]+)")do table.insert(_db,adb)end;return _db end;local _cb=dbb(abb," ")local acb="Basalt error: "local bcb=1
  2345. for n=1,#_cb do
  2346. bba.setCursorPos(1,bcb)if(#acb+#_cb[n]<bbb)then acb=acb.." ".._cb[n]else
  2347. bba.write(acb)acb=_cb[n]bcb=bcb+1 end;if(n==#_cb)then
  2348. bba.write(acb)end end;bba.setCursorPos(1,bcb+1)end
  2349. local function bab(abb,bbb,cbb,dbb,_cb)
  2350. if(#_da>0)then local acb={}
  2351. for n=1,#_da do
  2352. if(_da[n]~=nil)then
  2353. if
  2354. (coroutine.status(_da[n])=="suspended")then
  2355. local bcb,ccb=coroutine.resume(_da[n],abb,bbb,cbb,dbb,_cb)if not(bcb)then aab(ccb)end else table.insert(acb,n)end end end
  2356. for n=1,#acb do table.remove(_da,acb[n]- (n-1))end end end;local function cab()
  2357. if(dda)then if(ada~=nil)then ada:draw()ada:drawUpdate()end;for abb,bbb in
  2358. pairs(cca)do bbb:draw()bbb:drawUpdate()end end end
  2359. local function dab(abb,bbb,cbb,dbb,_cb)
  2360. if(
  2361. aaa:sendEvent("basaltEventCycle",abb,bbb,cbb,dbb,_cb)==false)then return end
  2362. if(ada~=nil)then
  2363. if(abb=="mouse_click")then
  2364. ada:mouseHandler(abb,bbb,cbb,dbb,_cb)bda=ada elseif(abb=="mouse_drag")then
  2365. ada:mouseHandler(abb,bbb,cbb,dbb,_cb)bda=ada elseif(abb=="mouse_up")then
  2366. ada:mouseHandler(abb,bbb,cbb,dbb,_cb)bda=ada elseif(abb=="mouse_scroll")then
  2367. ada:mouseHandler(abb,bbb,cbb,dbb,_cb)bda=ada elseif(abb=="monitor_touch")then if(cca[bbb]~=nil)then
  2368. cca[bbb]:mouseHandler(abb,bbb,cbb,dbb,_cb)bda=cca[bbb]end end end;if(abb=="key")or(abb=="char")then
  2369. if(bda~=nil)then
  2370. bda:keyHandler(abb,bbb)bda:backgroundKeyHandler(abb,bbb)end end;if(abb=="key")then
  2371. aca[bbb]=true end;if(abb=="key_up")then aca[bbb]=false end
  2372. for acb,bcb in
  2373. pairs(bca)do bcb:eventHandler(abb,bbb,cbb,dbb,_cb)end;bab(abb,bbb,cbb,dbb,_cb)cab()end;local _bb={}
  2374. _bb={setTheme=c_b,getTheme=d_b,getVersion=function()return cba end,setVariable=a_b,getVariable=b_b,setBaseTerm=function(abb)bba=abb end,autoUpdate=function(abb)local bbb=pcall;dda=abb;if
  2375. (abb==nil)then dda=true end;cab()
  2376. while dda do local cbb,dbb,_cb,acb,bcb=os.pullEventRaw()
  2377. local ccb,dcb=bbb(dab,cbb,dbb,_cb,acb,bcb)if not(ccb)then aab(dcb)return end end end,update=function(abb,bbb,cbb,dbb,_cb)if(
  2378. abb~=nil)then dab(abb,bbb,cbb,dbb,_cb)end end,stop=__b,isKeyDown=function(abb)if(
  2379. aca[abb]==nil)then return false end;return aca[abb]end,getFrame=function(abb)for bbb,cbb in
  2380. pairs(bca)do if(cbb.name==abb)then return cbb end end end,getActiveFrame=function()return
  2381. bda end,setActiveFrame=function(abb)
  2382. if(abb:getType()=="Frame")then bda=abb;return true end;return false end,onEvent=function(...)
  2383. for abb,bbb in
  2384. pairs(table.pack(...))do if(type(bbb)=="function")then
  2385. aaa:registerEvent("basaltEventCycle",bbb)end end end,shedule=function(abb)
  2386. assert(abb~=
  2387. "function","Shedule needs a function in order to work!")return
  2388. function(...)local bbb=coroutine.create(abb)
  2389. local cbb,dbb=coroutine.resume(bbb,...)if(cbb)then table.insert(_da,bbb)else aab(dbb)end end end,createFrame=function(abb)abb=
  2390. abb or _ba()
  2391. for cbb,dbb in pairs(bca)do if(dbb.name==abb)then return nil end end;local bbb=baa(abb,nil,nil,_ab)table.insert(bca,bbb)
  2392. if(ada==nil)and(
  2393. bbb:getName()~="basaltDebuggingFrame")then bbb:show()end;return bbb end,removeFrame=function(abb)bca[abb]=
  2394. nil end,setProjectDir=function(abb)_ca=abb end,debug=function(...)local abb={...}if
  2395. (ada.name~="basaltDebuggingFrame")then
  2396. if(ada~=_bb.debugFrame)then _bb.debugLabel:setParent(ada)end end;local bbb=""for cbb,dbb in pairs(abb)do
  2397. bbb=bbb..
  2398. tostring(dbb).. (#abb~=cbb and", "or"")end
  2399. _bb.debugLabel:setText("[Debug] "..bbb)for cbb,dbb in pairs(aba(bbb,_bb.debugList:getWidth()))do
  2400. _bb.debugList:addItem(dbb)end
  2401. if(
  2402. _bb.debugList:getItemCount()>50)then _bb.debugList:removeItem(1)end
  2403. _bb.debugList:setValue(_bb.debugList:getItem(_bb.debugList:getItemCount()))if
  2404. (_bb.debugList.getItemCount()>_bb.debugList:getHeight())then
  2405. _bb.debugList:setOffset(_bb.debugList:getItemCount()-
  2406. _bb.debugList:getHeight())end
  2407. _bb.debugLabel:show()end}
  2408. _bb.debugFrame=_bb.createFrame("basaltDebuggingFrame"):showBar():setBackground(colors.lightGray):setBar("Debug",colors.black,colors.gray)
  2409. _bb.debugFrame:addButton("back"):setAnchor("topRight"):setSize(1,1):setText("\22"):onClick(function()if(
  2410. _bb.oldFrame~=nil)then _bb.oldFrame:show()end end):setBackground(colors.red):show()
  2411. _bb.debugList=_bb.debugFrame:addList("debugList"):setSize(
  2412. _bb.debugFrame.width-2,_bb.debugFrame.height-3):setPosition(2,3):setScrollable(true):show()
  2413. _bb.debugLabel=_bb.debugFrame:addLabel("debugLabel"):onClick(function()
  2414. _bb.oldFrame=ada;_bb.debugFrame:show()end):setBackground(colors.black):setForeground(colors.white):setAnchor("bottomLeft"):ignoreOffset():setZIndex(20):show()return _bb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement