From 87105c4856ec44d2718dea9a45d45243e71df8dc Mon Sep 17 00:00:00 2001 From: Robert Jelic <36573031+NoryiE@users.noreply.github.com> Date: Sun, 21 May 2023 15:24:39 +0200 Subject: [PATCH] Small docs fix --- basaltPackageManager.lua | 1282 ----------------------------------- basaltPackager.lua | 507 -------------- docs/objects/List.md | 2 +- examples/basaltPreview.lua | 79 --- examples/basaltPreview2.lua | 167 ----- examples/basaltPreview2.xml | 209 ------ 6 files changed, 1 insertion(+), 2245 deletions(-) delete mode 100644 basaltPackageManager.lua delete mode 100644 basaltPackager.lua delete mode 100644 examples/basaltPreview.lua delete mode 100644 examples/basaltPreview2.lua delete mode 100644 examples/basaltPreview2.xml diff --git a/basaltPackageManager.lua b/basaltPackageManager.lua deleted file mode 100644 index fea6e01..0000000 --- a/basaltPackageManager.lua +++ /dev/null @@ -1,1282 +0,0 @@ -local project = {} -local packaged = true -local baseRequire = require -local require = function(path) - for _,v in pairs(project)do - for name,b in pairs(v)do - if(name==path)then - return b() - end - end - end - return baseRequire(path); -end -local getProject = function(subDir) - if(subDir~=nil)then - return project[subDir] - end - return project -end -project['objects'] = {}project['libraries'] = {}project['default'] = {}project['objects']['Animation'] = function(...) -return -function(a)local b={}local c="Animation"local d;local _a={}local aa=1;local ba=false;local ca=0;local da;local _b -local function ab()if(_a[aa]~=nil)then -_a[aa].f(b,aa)end;aa=aa+1 -if(_a[aa]==nil)then if(ba)then aa=1 else return end end -if(_a[aa].t>0)then d=os.startTimer(_a[aa].t)else ab()end end -b={name=a,getType=function(bb)return c end,getZIndex=function(bb)return 1 end,getName=function(bb)return bb.name end,add=function(bb,cb,db)da=cb;table.insert(_a,{f=cb,t= -db or ca})return bb end,setObject=function(bb,cb) -_b=cb;return bb end,move=function(bb,cb,db,_c,ac,bc)if(bc~=nil)then _b=bc end;if(_b.setPosition==nil)or(_b.getPosition== -nil)then return bb end -local cc,dc=_b:getPosition()if(cc==cb)and(dc==db)then return bb end;local _d=cc<=cb and(cb-cc)/ac or -(cc-cb)/ac;local ad=dc<=db and(db-dc)/ac or -(dc-db)/ac;local bd,cd=cc>cb and true or false, -dc>db and true or false -for n=1,math.floor(ac)do local dd -if -(n==ac)then dd=function()_b:setPosition(cb,db)end else -dd=function() -_b:setPosition(math.floor( -bd and cc+ (-_d*n)or cc+_d*n),math.floor(cd and dc+ (- -ad*n)or dc+ad*n))end end;table.insert(_a,{f=dd,t=_c/ac})end;return bb end,offset=function(bb,cb,db,_c,ac,bc)if( -bc~=nil)then _b=bc end;if -(_b.setOffset==nil)or(_b.getOffset==nil)then return bb end;local cc,dc=_b:getOffset() -cc=math.abs(cc)dc=math.abs(dc)if(cc==cb)and(dc==db)then return bb end;local _d=cc<=cb and -(cb-cc)/ac or(cc-cb)/ac;local ad=dc<=db and -(db-dc)/ac or(dc-db)/ac;local bd,cd= -cc>cb and true or false,dc>db and true or false -for n=1,math.floor(ac) -do local dd -if(n==ac)then dd=function()_b:setOffset(cb,db)end else -dd=function() -_b:setOffset(math.floor( -bd and cc+ (-_d*n)or cc+_d*n),math.floor(cd and dc+ (- -ad*n)or dc+ad*n))end end;table.insert(_a,{f=dd,t=_c/ac})end;return bb end,textColoring=function(bb,cb,...) -local db=table.pack(...)for n=1,#db do -table.insert(_a,{f=function()_b:setForeground(db[n])end,t=cb/#db})end;return bb end,backgroundColoring=function(bb,cb,...) -local db=table.pack(...)for n=1,#db do -table.insert(_a,{f=function()_b:setBackground(db[n])end,t=cb/#db})end;return bb end,setText=function(bb,cb,db) -if( -_b.setText~=nil)then for n=1,db:len()do -table.insert(_a,{f=function()_b:setText(db:sub(1,n))end,t= -cb/db:len()})end end;return bb end,changeText=function(bb,cb,...) -if( -_b.setText~=nil)then local db=table.pack(...)for n=1,#db do -table.insert(_a,{f=function() -_b:setText(db[n])end,t=cb/#db})end end;return bb end,coloring=function(bb,cb,...) -local db=table.pack(...) -for n=1,#db do -if(type(db[n]=="table"))then -table.insert(_a,{f=function()if(db[n][1]~=nil)then -_b:setBackground(db[n][1])end;if(db[n][2]~=nil)then -_b:setForeground(db[n][2])end end,t= -cb/#db})end end;return bb end,wait=function(bb,cb) -ca=cb;return bb end,rep=function(bb,cb) -for n=1,cb do table.insert(_a,{f=da,t=ca})end;return bb end,clear=function(bb)_a={}da=nil;ca=0;aa=1;ba=false;return bb end,play=function(bb,cb)ba= -cb and true or false;aa=1;if(_a[aa]~=nil)then if(_a[aa].t>0)then -d=os.startTimer(_a[aa].t)else ab()end end -return bb end,cancel=function(bb) -os.cancelTimer(d)ba=false;return bb end,eventHandler=function(bb,cb,db)if(cb=="timer")and(db==d)then if -(_a[aa]~=nil)then ab()end end end}b.__index=b;return b end -end; -project['objects']['Button'] = function(...)local d=require("Object")local _a=require("theme") -local aa=require("utils") -return -function(ba)local ca=d(ba)local da="Button"ca:setValue("Button") -ca:setZIndex(5)ca.width=8;ca.bgColor=_a.ButtonBG;ca.fgColor=_a.ButtonFG;local _b="center" -local ab="center" -local bb={getType=function(cb)return da end,setHorizontalAlign=function(cb,db)_b=db end,setVerticalAlign=function(cb,db)ab=db end,setText=function(cb,db)ca:setValue(db) -return cb end,draw=function(cb) -if(ca.draw(cb))then -if(cb.parent~=nil)then -local db,_c=cb:getAnchorPosition()local ac=aa.getTextVerticalAlign(cb.height,ab)if -(cb.bgColor~=false)then -cb.parent:drawBackgroundBox(db,_c,cb.width,cb.height,cb.bgColor) -cb.parent:drawTextBox(db,_c,cb.width,cb.height," ")end;if( -cb.fgColor~=false)then -cb.parent:drawForegroundBox(db,_c,cb.width,cb.height,cb.fgColor)end -for n=1,cb.height do if(n==ac)then -cb.parent:setText(db,_c+ -(n-1),aa.getTextHorizontalAlign(cb:getValue(),cb.width,_b))end end end;cb:setVisualChanged(false)end end}return setmetatable(bb,ca)end -end; -project['objects']['Checkbox'] = function(...)local d=require("Object")local _a=require("theme") -local aa=require("utils") -return -function(ba)local ca=d(ba)local da="Checkbox"ca:setZIndex(5)ca:setValue(false) -ca.width=1;ca.height=1;ca.bgColor=_a.CheckboxBG;ca.fgColor=_a.CheckboxFG -local _b={symbol="\42",getType=function(ab)return da end,mouseHandler=function(ab,bb,cb,db,_c) -if -(ca.mouseHandler(ab,bb,cb,db,_c))then -if -( (bb=="mouse_click")and(cb==1))or(bb=="monitor_touch")then -if(ab:getValue()~=true)and(ab:getValue()~=false)then -ab:setValue(false)else ab:setValue(not ab:getValue())end end;return true end;return false end,draw=function(ab) -if -(ca.draw(ab))then -if(ab.parent~=nil)then local bb,cb=ab:getAnchorPosition() -local db=aa.getTextVerticalAlign(ab.height,"center")if(ab.bgColor~=false)then -ab.parent:drawBackgroundBox(bb,cb,ab.width,ab.height,ab.bgColor)end -for n=1,ab.height do -if(n==db)then -if -(ab:getValue()==true)then -ab.parent:writeText(bb,cb+ (n-1),aa.getTextHorizontalAlign(ab.symbol,ab.width,"center"),ab.bgColor,ab.fgColor)else -ab.parent:writeText(bb,cb+ (n-1),aa.getTextHorizontalAlign(" ",ab.width,"center"),ab.bgColor,ab.fgColor)end end end end;ab:setVisualChanged(false)end end}return setmetatable(_b,ca)end -end; -project['objects']['Dropdown'] = function(...)local d=require("Object")local _a=require("theme") -local aa=require("utils") -return -function(ba)local ca=d(ba)local da="Dropdown"ca.width=12;ca.height=1;ca.bgColor=_a.dropdownBG -ca.fgColor=_a.dropdownFG;ca:setZIndex(6)local _b={}local ab=_a.selectionBG;local bb=_a.selectionFG -local cb=true;local db="left"local _c=0;local ac=16;local bc=6;local cc="\16"local dc="\31"local _d=false -local ad={getType=function(bd)return da end,setIndexOffset=function(bd,cd) -_c=cd;return bd end,getIndexOffset=function(bd)return _c end,addItem=function(bd,cd,dd,__a,...) -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) -table.remove(_b,cd)return bd end,getItem=function(bd,cd)return _b[cd]end,getItemIndex=function(bd) -local cd=bd:getValue()for dd,__a in pairs(_b)do if(__a==cd)then return dd end end end,clear=function(bd) -_b={}bd:setValue({})return bd end,getItemCount=function(bd)return#_b end,editItem=function(bd,cd,dd,__a,a_a,...) -table.remove(_b,cd) -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( -_b[cd]or{})return bd end,setSelectedItem=function(bd,cd,dd,__a) -ab=cd or bd.bgColor;bb=dd or bd.fgColor;cb=__a;return bd end,setDropdownSize=function(bd,cd,dd) -ac,bc=cd,dd;return bd end,mouseHandler=function(bd,cd,dd,__a,a_a) -if(_d)then -local b_a,c_a=bd:getAbsolutePosition(bd:getAnchorPosition()) -if -( (cd=="mouse_click")and(dd==1))or(cd=="monitor_touch")then if(#_b>0)then -for n=1,bc do if(_b[n+_c]~=nil)then -if -(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 -if(cd=="mouse_scroll")then _c=_c+dd;if(_c<0)then _c=0 end -if(dd==1)then if(#_b>bc)then if(_c>#_b-bc)then _c=#_b- -bc end else _c=_b-1 end end;return true end;bd:setVisualChanged()end -if(ca.mouseHandler(bd,cd,dd,__a,a_a))then _d=true else _d=false end end,draw=function(bd) -if -(ca.draw(bd))then local cd,dd=bd:getAnchorPosition() -if(bd.parent~=nil)then if(bd.bgColor~=false)then -bd.parent:drawBackgroundBox(cd,dd,bd.width,bd.height,bd.bgColor)end;local __a=bd:getValue() -local a_a=aa.getTextHorizontalAlign(( -__a~=nil and __a.text or""),bd.width,db):sub(1, -bd.width-1).. (_d and dc or cc) -bd.parent:writeText(cd,dd,a_a,bd.bgColor,bd.fgColor) -if(_d)then -for n=1,bc do -if(_b[n+_c]~=nil)then -if(_b[n+_c]==__a)then -if(cb)then -bd.parent:writeText(cd,dd+n,aa.getTextHorizontalAlign(_b[n+ -_c].text,ac,db),ab,bb)else -bd.parent:writeText(cd,dd+n,aa.getTextHorizontalAlign(_b[n+_c].text,ac,db),_b[n+ -_c].bgCol,_b[n+_c].fgCol)end else -bd.parent:writeText(cd,dd+n,aa.getTextHorizontalAlign(_b[n+_c].text,ac,db),_b[n+ -_c].bgCol,_b[n+_c].fgCol)end end end end end;bd:setVisualChanged(false)end end}return setmetatable(ad,ca)end -end; -project['objects']['Label'] = function(...)local aa=require("Object")local ba=require("theme") -local ca=require("utils")local da=require("tHex")local _b=require("bigfont") -return -function(ab)local bb=aa(ab) -local cb="Label"bb:setZIndex(3)local db=true;bb:setValue("")local _c="left"local ac="top" -local bc=0;local cc,dc=false,false -local _d={getType=function(ad)return cb end,setText=function(ad,bd)bd=tostring(bd) -bb:setValue(bd)if(db)then ad.width=bd:len()end -if not(cc)then ad.fgColor= -ad.parent:getForeground()or colors.white end;if not(dc)then -ad.bgColor=ad.parent:getBackground()or colors.black end;return ad end,setBackground=function(ad,bd) -bb.setBackground(ad,bd)dc=true;return ad end,setForeground=function(ad,bd) -bb.setForeground(ad,bd)cc=true;return ad end,setTextAlign=function(ad,bd,cd)_c=bd or _c;ac=cd or ac -ad:setVisualChanged()return ad end,setFontSize=function(ad,bd)if(bd>0)and(bd<=4)then -bc=bd-1 or 0 end;return ad end,getFontSize=function(ad)return bc+1 end,setSize=function(ad,bd,cd) -bb.setSize(ad,bd,cd)db=false;ad:setVisualChanged()return ad end,draw=function(ad) -if -(bb.draw(ad))then -if(ad.parent~=nil)then local bd,cd=ad:getAnchorPosition() -local dd=ca.getTextVerticalAlign(ad.height,ac)if(ad.bgColor~=false)then -ad.parent:drawBackgroundBox(bd,cd,ad.width,ad.height,ad.bgColor) -ad.parent:drawTextBox(bd,cd,ad.width,ad.height," ")end;if( -ad.fgColor~=false)then -ad.parent:drawForegroundBox(bd,cd,ad.width,ad.height,ad.fgColor)end -if(bc==0)then -for n=1,ad.height do if(n==dd)then -ad.parent:setText(bd, -cd+ (n-1),ca.getTextHorizontalAlign(ad:getValue(),ad.width,_c))end end else -local __a=_b(bc,ad:getValue(),ad.fgColor,ad.bgColor or colors.black) -if(db)then ad.height=#__a[1]-1;ad.width=#__a[1][1]end -for n=1,ad.height do -if(n==dd)then local a_a,b_a=ad.parent:getSize() -local c_a,d_a=#__a[1][1],#__a[1] -bd=bd or math.floor((a_a-c_a)/2)+1 -cd=cd or math.floor((b_a-d_a)/2)+1 -for i=1,d_a do -ad.parent:setFG(bd,cd+i+n-2,ca.getTextHorizontalAlign(__a[2][i],ad.width,_c)) -ad.parent:setBG(bd,cd+i+n-2,ca.getTextHorizontalAlign(__a[3][i],ad.width,_c,da[ad.bgColor or colors.black])) -ad.parent:setText(bd,cd+i+n-2,ca.getTextHorizontalAlign(__a[1][i],ad.width,_c))end end end end end;ad:setVisualChanged(false)end end}return setmetatable(_d,bb)end -end; -project['objects']['List'] = function(...)local d=require("Object")local _a=require("theme") -local aa=require("utils") -return -function(ba)local ca=d(ba)local da="List"ca.width=16;ca.height=6;ca.bgColor=_a.listBG -ca.fgColor=_a.listFG;ca:setZIndex(5)local _b={}local ab=_a.selectionBG;local bb=_a.selectionFG -local cb=true;local db="left"local _c=0;local ac=true -local bc={getType=function(cc)return da end,addItem=function(cc,dc,_d,ad,...) -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,setIndexOffset=function(cc,dc) -_c=dc;return cc end,getIndexOffset=function(cc)return _c end,removeItem=function(cc,dc)table.remove(_b,dc) -return cc end,getItem=function(cc,dc)return _b[dc]end,getAll=function(cc)return _b end,getItemIndex=function(cc) -local dc=cc:getValue()for _d,ad in pairs(_b)do if(ad==dc)then return _d end end end,clear=function(cc) -_b={}cc:setValue({})return cc end,getItemCount=function(cc)return#_b end,editItem=function(cc,dc,_d,ad,bd,...) -table.remove(_b,dc) -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( -_b[dc]or{})return cc end,setSelectedItem=function(cc,dc,_d,ad) -ab=dc or cc.bgColor;bb=_d or cc.fgColor;cb=ad;return cc end,setScrollable=function(cc,dc) -ac=dc;return cc end,mouseHandler=function(cc,dc,_d,ad,bd) -local cd,dd=cc:getAbsolutePosition(cc:getAnchorPosition()) -if -(cd<=ad)and(cd+cc.width>ad)and(dd<=bd)and( -dd+cc.height>bd)and(cc:isVisible())then -if -( ( (dc=="mouse_click")or(dc=="mouse_drag"))and(_d==1))or(dc=="monitor_touch")then -if(#_b>0)then -for n=1,cc.height do -if( -_b[n+_c]~=nil)then -if -(cd<=ad)and(cd+cc.width>ad)and(dd+n-1 ==bd)then cc:setValue(_b[n+_c]) -cc:getEventSystem():sendEvent("mouse_click",cc,"mouse_click",0,ad,bd,_b[ -n+_c])end end end end end -if(dc=="mouse_scroll")and(ac)then _c=_c+_d;if(_c<0)then _c=0 end;if(_d>=1)then -if -(#_b>cc.height)then if(_c>#_b-cc.height)then _c=#_b-cc.height end;if -(_c>=#_b)then _c=#_b-1 end else _c=_c-1 end end end;cc:setVisualChanged()return true end end,draw=function(cc) -if -(ca.draw(cc))then -if(cc.parent~=nil)then local dc,_d=cc:getAnchorPosition()if(cc.bgColor~=false)then -cc.parent:drawBackgroundBox(dc,_d,cc.width,cc.height,cc.bgColor)end -for n=1,cc.height do -if(_b[n+_c]~=nil)then -if( -_b[n+_c]==cc:getValue())then -if(cb)then -cc.parent:writeText(dc,_d+n-1,aa.getTextHorizontalAlign(_b[n+_c].text,cc.width,db),ab,bb)else -cc.parent:writeText(dc,_d+n-1,aa.getTextHorizontalAlign(_b[n+_c].text,cc.width,db),_b[ -n+_c].bgCol,_b[n+_c].fgCol)end else -cc.parent:writeText(dc,_d+n-1,aa.getTextHorizontalAlign(_b[n+_c].text,cc.width,db),_b[ -n+_c].bgCol,_b[n+_c].fgCol)end end end end;cc:setVisualChanged(false)end end}return setmetatable(bc,ca)end -end; -project['objects']['List'] = function(...)local d=require("Object")local _a=require("theme") -local aa=require("utils") -return -function(ba)local ca=d(ba)local da="List"ca.width=16;ca.height=6;ca.bgColor=_a.listBG -ca.fgColor=_a.listFG;ca:setZIndex(5)local _b={}local ab=_a.selectionBG;local bb=_a.selectionFG -local cb=true;local db="left"local _c=0;local ac=true -local bc={getType=function(cc)return da end,addItem=function(cc,dc,_d,ad,...) -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,setIndexOffset=function(cc,dc) -_c=dc;return cc end,getIndexOffset=function(cc)return _c end,removeItem=function(cc,dc)table.remove(_b,dc) -return cc end,getItem=function(cc,dc)return _b[dc]end,getAll=function(cc)return _b end,getItemIndex=function(cc) -local dc=cc:getValue()for _d,ad in pairs(_b)do if(ad==dc)then return _d end end end,clear=function(cc) -_b={}cc:setValue({})return cc end,getItemCount=function(cc)return#_b end,editItem=function(cc,dc,_d,ad,bd,...) -table.remove(_b,dc) -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( -_b[dc]or{})return cc end,setSelectedItem=function(cc,dc,_d,ad) -ab=dc or cc.bgColor;bb=_d or cc.fgColor;cb=ad;return cc end,setScrollable=function(cc,dc) -ac=dc;return cc end,mouseHandler=function(cc,dc,_d,ad,bd) -local cd,dd=cc:getAbsolutePosition(cc:getAnchorPosition()) -if -(cd<=ad)and(cd+cc.width>ad)and(dd<=bd)and( -dd+cc.height>bd)and(cc:isVisible())then -if -( ( (dc=="mouse_click")or(dc=="mouse_drag"))and(_d==1))or(dc=="monitor_touch")then -if(#_b>0)then -for n=1,cc.height do -if( -_b[n+_c]~=nil)then -if -(cd<=ad)and(cd+cc.width>ad)and(dd+n-1 ==bd)then cc:setValue(_b[n+_c]) -cc:getEventSystem():sendEvent("mouse_click",cc,"mouse_click",0,ad,bd,_b[ -n+_c])end end end end end -if(dc=="mouse_scroll")and(ac)then _c=_c+_d;if(_c<0)then _c=0 end;if(_d>=1)then -if -(#_b>cc.height)then if(_c>#_b-cc.height)then _c=#_b-cc.height end;if -(_c>=#_b)then _c=#_b-1 end else _c=_c-1 end end end;cc:setVisualChanged()return true end end,draw=function(cc) -if -(ca.draw(cc))then -if(cc.parent~=nil)then local dc,_d=cc:getAnchorPosition()if(cc.bgColor~=false)then -cc.parent:drawBackgroundBox(dc,_d,cc.width,cc.height,cc.bgColor)end -for n=1,cc.height do -if(_b[n+_c]~=nil)then -if( -_b[n+_c]==cc:getValue())then -if(cb)then -cc.parent:writeText(dc,_d+n-1,aa.getTextHorizontalAlign(_b[n+_c].text,cc.width,db),ab,bb)else -cc.parent:writeText(dc,_d+n-1,aa.getTextHorizontalAlign(_b[n+_c].text,cc.width,db),_b[ -n+_c].bgCol,_b[n+_c].fgCol)end else -cc.parent:writeText(dc,_d+n-1,aa.getTextHorizontalAlign(_b[n+_c].text,cc.width,db),_b[ -n+_c].bgCol,_b[n+_c].fgCol)end end end end;cc:setVisualChanged(false)end end}return setmetatable(bc,ca)end -end; -project['objects']['Menubar'] = function(...)local _a=require("Object")local aa=require("theme") -local ba=require("utils")local ca=require("tHex") -return -function(da)local _b=_a(da)local ab="Menubar"local bb={}_b.width=30 -_b.height=1;_b.bgColor=colors.gray;_b.fgColor=colors.lightGray -_b:setZIndex(5)local cb={}local db=aa.selectionBG;local _c=aa.selectionFG;local ac=true;local bc="left"local cc=0 -local dc=1;local _d=false -local function ad()local bd=0;local cd=0 -for n=1,#cb do -if(cd+cb[n].text:len()+dc*2 > -bb.width)then -if(cddd)then cc=dd end;return bd end,getPositionOffset=function(bd)return -cc end,setScrollable=function(bd,cd)_d=cd;if(cd==nil)then _d=true end;return bd end,removeItem=function(bd,cd) -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,...) -table.remove(cb,cd) -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( -cb[cd]or{})return bd end,setSelectedItem=function(bd,cd,dd,__a) -db=cd or bd.bgColor;_c=dd or bd.fgColor;ac=__a;return bd end,mouseHandler=function(bd,cd,dd,__a,a_a) -if -(_b.mouseHandler(bd,cd,dd,__a,a_a))then -local b_a,c_a=bd:getAbsolutePosition(bd:getAnchorPosition()) -if - -(b_a<=__a)and(b_a+bd.width>__a)and(c_a<=a_a)and(c_a+bd.height>a_a)and(bd:isVisible())then -if(bd.parent~=nil)then bd.parent:setFocusedObject(bd)end -if(cd=="mouse_click")or(cd=="monitor_touch")then local d_a=0 -for n=1,#cb do -if -(cb[n]~=nil)then -if -(b_a+d_a<=__a+cc)and( -b_a+d_a+cb[n].text:len()+ (dc*2)>__a+cc)and(c_a==a_a)then bd:setValue(cb[n]) -bd:getEventSystem():sendEvent(cd,bd,cd,0,__a,a_a,cb[n])end;d_a=d_a+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 d_a=ad()if -(cc>d_a)then cc=d_a end end -bd:setVisualChanged(true)return true end end;return false end,draw=function(bd) -if -(_b.draw(bd))then -if(bd.parent~=nil)then local cd,dd=bd:getAnchorPosition()if(bd.bgColor~=false)then -bd.parent:drawBackgroundBox(cd,dd,bd.width,bd.height,bd.bgColor)end;local __a=""local a_a=""local b_a="" -for c_a,d_a in -pairs(cb)do -local _aa=(" "):rep(dc)..d_a.text.. (" "):rep(dc)__a=__a.._aa -if(d_a==bd:getValue())then a_a=a_a.. -ca[db or d_a.bgCol or bd.bgColor]:rep(_aa:len())b_a=b_a.. -ca[_c or d_a.FgCol or -bd.fgColor]:rep(_aa:len())else a_a=a_a.. -ca[d_a.bgCol or bd.bgColor]:rep(_aa:len())b_a=b_a.. -ca[d_a.FgCol or bd.fgColor]:rep(_aa:len())end end -bd.parent:setText(cd,dd,__a:sub(cc+1,bd.width+cc)) -bd.parent:setBG(cd,dd,a_a:sub(cc+1,bd.width+cc)) -bd.parent:setFG(cd,dd,b_a:sub(cc+1,bd.width+cc))end;bd:setVisualChanged(false)end end}return setmetatable(bb,_b)end -end; -project['objects']['Radio'] = function(...)local d=require("Object")local _a=require("theme") -local aa=require("utils") -return -function(ba)local ca=d(ba)local da="Radio"ca.width=8;ca.bgColor=_a.listBG -ca.fgColor=_a.listFG;ca:setZIndex(5)local _b={}local ab=_a.selectionBG;local bb=_a.selectionFG -local cb=ca.bgColor;local db=ca.fgColor;local _c=true;local ac="\7"local bc="left" -local cc={getType=function(dc)return da end,addItem=function(dc,_d,ad,bd,cd,dd,...) -table.insert(_b,{x=ad or 1,y= -bd or 1,text=_d,bgCol=cd or dc.bgColor,fgCol=dd or dc.fgColor,args={...}})if(#_b==1)then dc:setValue(_b[1])end;return dc end,getAll=function(dc)return -_b end,removeItem=function(dc,_d)table.remove(_b,_d)return dc end,getItem=function(dc,_d)return -_b[_d]end,getItemIndex=function(dc)local _d=dc:getValue()for ad,bd in pairs(_b)do -if(bd==_d)then return ad end end end,clear=function(dc) -_b={}dc:setValue({})return dc end,getItemCount=function(dc)return#_b end,editItem=function(dc,_d,ad,bd,cd,dd,__a,...) -table.remove(_b,_d) -table.insert(_b,_d,{x=bd or 1,y=cd or 1,text=ad,bgCol=dd or dc.bgColor,fgCol=__a or dc.fgColor,args={...}})return dc end,selectItem=function(dc,_d)dc:setValue( -_b[_d]or{})return dc end,setSelectedItem=function(dc,_d,ad,bd,cd,dd)ab=_d or ab;bb= -ad or bb;cb=bd or cb;db=cd or db;_c=dd;return dc end,mouseHandler=function(dc,_d,ad,bd,cd) -local dd,__a=dc:getAbsolutePosition(dc:getAnchorPosition()) -if -( (_d=="mouse_click")and(ad==1))or(_d=="monitor_touch")then -if(#_b>0)then -for a_a,b_a in pairs(_b)do -if(dd+b_a.x-1 <=bd)and( -dd+b_a.x-1 +b_a.text:len()+2 >=bd)and( -__a+b_a.y-1 ==cd)then dc:setValue(b_a) -if( -dc.parent~=nil)then dc.parent:setFocusedObject(dc)end;dc:setVisualChanged()return true end end end end;return false end,draw=function(dc) -if -(ca.draw(dc))then -if(dc.parent~=nil)then local _d,ad=dc:getAnchorPosition() -for bd,cd in pairs(_b)do -if(cd== -dc:getValue())then if(bc=="left")then -dc.parent:writeText(cd.x+_d-1,cd.y+ad-1,ac,cb,db) -dc.parent:writeText(cd.x+2 +_d-1,cd.y+ad-1,cd.text,ab,bb)end else -dc.parent:drawBackgroundBox( -cd.x+_d-1,cd.y+ad-1,1,1,dc.bgColor) -dc.parent:writeText(cd.x+2 +_d-1,cd.y+ad-1,cd.text,cd.bgCol,cd.fgCol)end end end;dc:setVisualChanged(false)end end}return setmetatable(cc,ca)end -end; -project['objects']['Scrollbar'] = function(...)local c=require("Object")local d=require("theme") -return -function(_a)local aa=c(_a) -local ba="Scrollbar"aa.width=1;aa.height=8;aa.bgColor=colors.lightGray -aa.fgColor=colors.gray;aa:setValue(1)aa:setZIndex(2)local ca="vertical"local da=" " -local _b=colors.black;local ab="\127"local bb=aa.height;local cb=1;local db=1 -local _c={getType=function(ac)return ba end,setSymbol=function(ac,bc)da=bc:sub(1,1) -ac:setVisualChanged()return ac end,setSymbolSize=function(ac,bc)db=tonumber(bc)or 1 -if -(ca=="vertical")then -ac:setValue(cb-1 * (bb/ (ac.height- (db-1)))- (bb/ ( -ac.height- (db-1))))elseif(ca=="horizontal")then -ac:setValue( -cb-1 * (bb/ (ac.width- (db-1)))- (bb/ (ac.width- (db-1))))end;ac:setVisualChanged()return ac end,setMaxValue=function(ac,bc) -bb=bc;return ac end,setBackgroundSymbol=function(ac,bc)ab=string.sub(bc,1,1) -ac:setVisualChanged()return ac end,setSymbolColor=function(ac,bc)_b=bc -ac:setVisualChanged()return ac end,setBarType=function(ac,bc)ca=bc:lower()return ac end,mouseHandler=function(ac,bc,cc,dc,_d) -if -(aa.mouseHandler(ac,bc,cc,dc,_d))then -local ad,bd=ac:getAbsolutePosition(ac:getAnchorPosition()) -if -( ( (bc=="mouse_click")or(bc=="mouse_drag"))and(cc==1))or(bc=="monitor_touch")then -if(ca=="horizontal")then -for _index=0,ac.width -do if -(ad+_index==dc)and(bd<=_d)and(bd+ac.height>_d)then cb=math.min(_index+1,ac.width- (db-1))ac:setValue( -bb/ac.width* (cb)) -ac:setVisualChanged()end end end -if(ca=="vertical")then -for _index=0,ac.height do if(bd+_index==_d)and(ad<=dc)and -(ad+ac.width>dc)then -cb=math.min(_index+1,ac.height- (db-1))ac:setValue(bb/ac.height* (cb)) -ac:setVisualChanged()end end end end -if(bc=="mouse_scroll")then cb=cb+cc;if(cb<1)then cb=1 end -cb=math.min(cb,( -ca=="vertical"and ac.height or ac.width)- (db-1)) -ac:setValue( -bb/ (ca=="vertical"and ac.height or ac.width)*cb)end;return true end end,draw=function(ac) -if -(aa.draw(ac))then -if(ac.parent~=nil)then local bc,cc=ac:getAnchorPosition() -if(ca=="horizontal")then -ac.parent:writeText(bc,cc,ab:rep( -cb-1),ac.bgColor,ac.fgColor) -ac.parent:writeText(bc+cb-1,cc,da:rep(db),_b,_b) -ac.parent:writeText(bc+cb+db-1,cc,ab:rep(ac.width- (cb+db-1)),ac.bgColor,ac.fgColor)end -if(ca=="vertical")then -for n=0,ac.height-1 do -if(cb==n+1)then for curIndexOffset=0,math.min(db-1,ac.height)do -ac.parent:writeText(bc, -cc+n+curIndexOffset,da,_b,_b)end else if(n+1 cb-1 +db)then -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 -end; -project['objects']['Thread'] = function(...) -return -function(a)local b;local c="Thread"local d;local _a;local aa=false -b={name=a,getType=function(ba)return c end,getZIndex=function(ba)return 1 end,getName=function(ba) -return ba.name end,start=function(ba,ca)if(ca==nil)then -error("Function provided to thread is nil")end;d=ca;_a=coroutine.create(d) -aa=true;local da,_b=coroutine.resume(_a)if not(da)then -if(_b~="Terminated")then error( -"Thread Error Occurred - ".._b)end end;return ba end,getStatus=function(ba,ca)if( -_a~=nil)then return coroutine.status(_a)end;return nil end,stop=function(ba,ca) -aa=false;return ba end,eventHandler=function(ba,ca,da,_b,ab) -if(aa)then -if(coroutine.status(_a)~="dead")then -local bb,cb=coroutine.resume(_a,ca,da,_b,ab)if not(bb)then if(cb~="Terminated")then -error("Thread Error Occurred - "..cb)end end else -aa=false end end end}b.__index=b;return b end -end; -project['libraries']['basaltDraw'] = function(...)local d=require("tHex")local _a,aa=string.sub,string.rep -return -function(ba) -local ca=ba or term.current()local da,_b=ca.getSize()local ab={}local bb={}local cb={}local db={}local _c={}local ac={}local bc;local cc={}local function dc() -bc=aa(" ",da) -for n=0,15 do local __a=2 ^n;local a_a=d[__a]cc[__a]=aa(a_a,da)end end;dc() -local function _d()local __a=bc -local a_a=cc[colors.white]local b_a=cc[colors.black] -for currentY=1,_b do -ab[currentY]=_a( -ab[currentY]==nil and __a or -ab[currentY]..__a:sub(1,da-ab[currentY]:len()),1,da) -cb[currentY]=_a(cb[currentY]==nil and a_a or cb[currentY]..a_a:sub(1,da- -cb[currentY]:len()),1,da) -bb[currentY]=_a(bb[currentY]==nil and b_a or bb[currentY]..b_a:sub(1,da- -bb[currentY]:len()),1,da)end end;_d() -local function ad(__a,a_a,b_a) -if(a_a>=1)and(a_a<=_b)then -if -(__a+b_a:len()>0)and(__a<=da)then local c_a=ab[a_a]local d_a;local _aa=__a+#b_a-1 -if(__a<1)then local aaa=1 -__a+1 -local baa=da-__a+1;b_a=_a(b_a,aaa,baa)elseif(_aa>da)then local aaa=da-__a+1;b_a=_a(b_a,1,aaa)end -if(__a>1)then local aaa=__a-1;d_a=_a(c_a,1,aaa)..b_a else d_a=b_a end;if _aa=1)and(a_a<=_b)then -if(__a+b_a:len()>0)and(__a<=da)then -local c_a=bb[a_a]local d_a;local _aa=__a+#b_a-1 -if(__a<1)then -b_a=_a(b_a,1 -__a+1,da-__a+1)elseif(_aa>da)then b_a=_a(b_a,1,da-__a+1)end -if(__a>1)then d_a=_a(c_a,1,__a-1)..b_a else d_a=b_a end;if _aa=1)and(a_a<=_b)then -if(__a+b_a:len()>0)and(__a<=da)then -local c_a=cb[a_a]local d_a;local _aa=__a+#b_a-1 -if(__a<1)then local aaa=1 -__a+1;local baa=da-__a+1 -b_a=_a(b_a,aaa,baa)elseif(_aa>da)then local aaa=da-__a+1;b_a=_a(b_a,1,aaa)end -if(__a>1)then local aaa=__a-1;d_a=_a(c_a,1,aaa)..b_a else d_a=b_a end;if _aa1 then -while#_c>2 do -table.sort(_c,function(ad,bd)return -ad[2]>bd[2]end)local bc,cc=ba(_c),#_c;local dc,_d=_c[cc][1],_c[bc][1] -for i=1,6 do if cb[i]==dc then cb[i]=_d;_c[bc][2]= -_c[bc][2]+1 end end;_c[cc]=nil end;local ac=128 -for i=1,#cb-1 do if cb[i]~=cb[6]then ac=ac+2 ^ (i-1)end end;return string.char(ac), -aa[_c[1][1]==cb[6]and _c[2][1]or _c[1][1] ],aa[cb[6] ]else -return"\128",aa[cb[1] ],aa[cb[1] ]end end;local da,_b,ab,bb={{},{},{}},0,#a+#a%3,b or colors.black;for i=1,#a do if -#a[i]>_b then _b=#a[i]end end -for y=0,ab-1,3 do local cb,db,_c,ac={},{},{},1 -for x=0,_b-1,2 do -local bc,cc={},{} -for yy=1,3 do -for xx=1,2 do -bc[#bc+1]= -(a[y+yy]and a[y+yy][x+xx])and( -a[y+yy][x+xx]==0 and bb or a[y+yy][x+xx])or bb -cc[bc[#bc] ]=cc[bc[#bc] ]and(cc[bc[#bc] ]+1)or 1 end end;cb[ac],db[ac],_c[ac]=ca(bc,cc)ac=ac+1 end -da[1][#da[1]+1],da[2][#da[2]+1],da[3][#da[3]+1]=table.concat(cb),table.concat(db),table.concat(_c)end;da.width,da.height=#da[1][1],#da[1]return da end} -end; -project['default']['Frame'] = function(...)local ca=require("Object")local da=require("loadObjects") -local _b=require("basaltDraw")local ab=require("theme")local bb=require("utils")local cb=bb.rpairs -local db=string.sub -return -function(_c,ac,bc,cc)local dc=ca(_c)local _d="Frame"local ad={}local bd={}local cd={} -local dd=bc or term.current()local __a=""local a_a=false;local b_a=false;local c_a=0;local d_a=0;dc:setZIndex(10) -local _aa=_b(dd)local aaa=false;local baa=1;local caa=1;local daa=colors.white;local _ba,aba=0,0 -if(ac~=nil)then dc.parent=ac -dc.width,dc.height=ac:getSize()dc.bgColor=ab.FrameBG;dc.fgColor=ab.FrameFG else -dc.width,dc.height=dd.getSize()dc.bgColor=ab.basaltBG;dc.fgColor=ab.basaltFG end -local function bba(_ca)for aca,bca in pairs(ad)do -for cca,dca in pairs(bca)do if(dca.name==_ca)then return bca end end end end -local function cba(_ca)local aca=_ca:getZIndex() -if(bba(_ca.name)~=nil)then return nil end -if(ad[aca]==nil)then for x=1,#bd+1 do -if(bd[x]~=nil)then if(aca==bd[x])then break end;if(aca>bd[x])then -table.insert(bd,x,aca)break end else table.insert(bd,aca)end end;if( -#bd<=0)then table.insert(bd,aca)end;ad[aca]={}end;_ca.parent=cd;table.insert(ad[aca],_ca)return _ca end -local function dba(_ca) -for aca,bca in pairs(ad)do for cca,dca in pairs(bca)do -if(dca==_ca)then table.remove(ad[aca],cca)return true end end end;return false end -cd={barActive=false,barBackground=colors.gray,barTextcolor=colors.black,barText="New Frame",barTextAlign="left",isMoveable=false,getType=function(_ca)return _d end,setFocusedObject=function(_ca,aca) -if -(cc.getFocusedObject()~=nil)then -cc.getFocusedObject():loseFocusHandler()cc.setFocusedObject(nil)end;if(aca~=nil)then cc.setFocusedObject(aca) -aca:getFocusHandler()end;return _ca end,setSize=function(_ca,aca,bca) -dc.setSize(_ca,aca,bca) -for cca,dca in pairs(bd)do if(ad[dca]~=nil)then -for _da,ada in pairs(ad[dca])do if(ada.eventHandler~=nil)then -ada:sendEvent("basalt_resize",ada,_ca)end end end end;return _ca end,getBasaltInstance=function(_ca)return -cc end,setOffset=function(_ca,aca,bca) -_ba=aca~=nil and -math.floor(aca<0 and math.abs(aca)or-aca)or _ba -aba=bca~=nil and -math.floor(bca<0 and math.abs(bca)or-bca)or aba;return _ca end,getOffset=function(_ca)return -_ba,aba end,removeFocusedObject=function(_ca)if(cc.getFocusedObject()~=nil)then -cc.getFocusedObject():loseFocusHandler()end;cc.setFocusedObject(nil)return -_ca end,getFocusedObject=function(_ca)return -cc.getFocusedObject()end,setCursor=function(_ca,aca,bca,cca,dca) -if(_ca.parent~=nil)then -local _da,ada=_ca:getAnchorPosition() -_ca.parent:setCursor(aca or false,(bca or 0)+_da-1,(cca or 0)+ada-1, -dca or daa)else -local _da,ada=_ca:getAbsolutePosition(_ca:getAnchorPosition())aaa=aca or false;if(bca~=nil)then baa=_da+bca-1 end;if(cca~=nil)then caa=ada+ -cca-1 end;daa=dca or daa -_ca:setVisualChanged()end;return _ca end,setMoveable=function(_ca,aca)_ca.isMoveable= -aca or not _ca.isMoveable -_ca:setVisualChanged()return _ca end,show=function(_ca)dc.show(_ca) -if( -_ca.parent==nil)then cc.setActiveFrame(_ca)if(a_a)then -cc.setMonitorFrame(__a,_ca)else cc.setMainFrame(_ca)end end;return _ca end,hide=function(_ca) -dc.hide(_ca) -if(_ca.parent==nil)then if(activeFrame==_ca)then activeFrame=nil end;if(a_a)then -if( -cc.getMonitorFrame(__a)==_ca)then cc.setActiveFrame(nil)end else -if(cc.getMainFrame()==_ca)then cc.setMainFrame(nil)end end end;return _ca end,showBar=function(_ca,aca)_ca.barActive= -aca or not _ca.barActive -_ca:setVisualChanged()return _ca end,setBar=function(_ca,aca,bca,cca) -_ca.barText=aca or""_ca.barBackground=bca or _ca.barBackground -_ca.barTextcolor=cca or _ca.barTextcolor;_ca:setVisualChanged()return _ca end,setBarTextAlign=function(_ca,aca)_ca.barTextAlign= -aca or"left"_ca:setVisualChanged()return _ca end,setMonitor=function(_ca,aca) -if( -aca~=nil)and(aca~=false)then -if -(peripheral.getType(aca)=="monitor")then dd=peripheral.wrap(aca)b_a=true end;a_a=true else dd=parentTerminal;a_a=false;if(cc.getMonitorFrame(__a)==_ca)then cc.setMonitorFrame(__a, -nil)end end;_aa=_aa(dd)__a=aca or nil;return _ca end,getVisualChanged=function(_ca) -local aca=dc.getVisualChanged(_ca) -for bca,cca in pairs(bd)do if(ad[cca]~=nil)then -for dca,_da in pairs(ad[cca])do if(_da.getVisualChanged~=nil and -_da:getVisualChanged())then aca=true end end end end;return aca end,loseFocusHandler=function(_ca) -dc.loseFocusHandler(_ca)end,getFocusHandler=function(_ca)dc.getFocusHandler(_ca) -if(_ca.parent~=nil)then -_ca.parent:removeObject(_ca)_ca.parent:addObject(_ca)end end,keyHandler=function(_ca,aca,bca) -local cca=cc.getFocusedObject() -if(cca~=nil)then if(cca~=_ca)then if(cca.keyHandler~=nil)then -if(cca:keyHandler(aca,bca))then return true end end else -dc.keyHandler(_ca,aca,bca)end end;return false end,backgroundKeyHandler=function(_ca,aca,bca) -dc.backgroundKeyHandler(_ca,aca,bca) -for cca,dca in pairs(bd)do if(ad[dca]~=nil)then -for _da,ada in pairs(ad[dca])do if(ada.backgroundKeyHandler~=nil)then -ada:backgroundKeyHandler(aca,bca)end end end end end,eventHandler=function(_ca,aca,bca,cca,dca,_da) -dc.eventHandler(_ca,aca,bca,cca,dca,_da) -for ada,bda in pairs(bd)do if(ad[bda]~=nil)then -for cda,dda in pairs(ad[bda])do if(dda.eventHandler~=nil)then -dda:eventHandler(aca,bca,cca,dca,_da)end end end end -if(a_a)then if(aca=="peripheral")and(bca==__a)then -if -(peripheral.getType(__a)=="monitor")then b_a=true;dd=peripheral.wrap(__a)_aa=_aa(dd)end end -if(aca== -"peripheral_detach")and(bca==__a)then b_a=false end end -if(aca=="terminate")then dd.clear()dd.setCursorPos(1,1)cc.stop()end end,mouseHandler=function(_ca,aca,bca,cca,dca) -local _da,ada=_ca:getOffset()_da=_da<0 and math.abs(_da)or-_da;ada=ada<0 and -math.abs(ada)or-ada -if(_ca.drag)then -if(aca=="mouse_drag")then -local __b=1;local a_b=1;if(_ca.parent~=nil)then -__b,a_b=_ca.parent:getAbsolutePosition(_ca.parent:getAnchorPosition())end -_ca:setPosition( -cca+c_a- (__b-1)+_da,dca+d_a- (a_b-1)+ada)end;if(aca=="mouse_up")then _ca.drag=false end;return true end -local bda,cda=_ca:getAbsolutePosition(_ca:getAnchorPosition())local dda=false;if(cda-1 ==dca)and(_ca:getBorder("top"))then dca=dca+1 -dda=true end -if(dc.mouseHandler(_ca,aca,bca,cca,dca))then -local __b,a_b=_ca:getAbsolutePosition(_ca:getAnchorPosition())__b=__b+_ba;a_b=a_b+aba -for b_b,c_b in pairs(bd)do -if(ad[c_b]~=nil)then for d_b,_ab in cb(ad[c_b])do -if -(_ab.mouseHandler~=nil)then if(_ab:mouseHandler(aca,bca,cca,dca))then return true end end end end end -if(_ca.isMoveable)then -local b_b,c_b=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -if -(cca>=b_b)and(cca<=b_b+_ca.width-1)and(dca==c_b)and(aca=="mouse_click")then _ca.drag=true -c_a=b_b-cca;d_a=dda and 1 or 0 end end -if(cc.getFocusedObject()~=nil)then -cc.getFocusedObject():loseFocusHandler()cc.setFocusedObject(nil)end;return true end;return false end,setText=function(_ca,aca,bca,cca) -local dca,_da=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -if(bca>=1)and(bca<=_ca.height)then -if(_ca.parent~=nil)then -local ada,bda=_ca.parent:getAnchorPosition() -_ca.parent:setText(math.max(aca+ (dca-1),dca)- (ada-1), -_da+bca-1 - (bda-1),db(cca,math.max(1 -aca+1,1),math.max(_ca.width-aca+1,1)))else -_aa.setText(math.max(aca+ (dca-1),dca),_da+bca-1,db(cca,math.max(1 -aca+1,1),math.max( -_ca.width-aca+1,1)))end end end,setBG=function(_ca,aca,bca,cca) -local dca,_da=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -if(bca>=1)and(bca<=_ca.height)then -if(_ca.parent~=nil)then -local ada,bda=_ca.parent:getAnchorPosition() -_ca.parent:setBG(math.max(aca+ (dca-1),dca)- (ada-1), -_da+bca-1 - (bda-1),db(cca,math.max(1 -aca+1,1),math.max(_ca.width-aca+1,1)))else -_aa.setBG(math.max(aca+ (dca-1),dca),_da+bca-1,db(cca,math.max(1 -aca+1,1),math.max( -_ca.width-aca+1,1)))end end end,setFG=function(_ca,aca,bca,cca) -local dca,_da=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -if(bca>=1)and(bca<=_ca.height)then -if(_ca.parent~=nil)then -local ada,bda=_ca.parent:getAnchorPosition() -_ca.parent:setFG(math.max(aca+ (dca-1),dca)- (ada-1), -_da+bca-1 - (bda-1),db(cca,math.max(1 -aca+1,1),math.max(_ca.width-aca+1,1)))else -_aa.setFG(math.max(aca+ (dca-1),dca),_da+bca-1,db(cca,math.max(1 -aca+1,1),math.max( -_ca.width-aca+1,1)))end end end,writeText=function(_ca,aca,bca,cca,dca,_da) -local ada,bda=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -if(bca>=1)and(bca<=_ca.height)then -if(_ca.parent~=nil)then -local cda,dda=_ca.parent:getAnchorPosition() -_ca.parent:writeText(math.max(aca+ (ada-1),ada)- (cda-1),bda+ -bca-1 - (dda-1),db(cca,math.max(1 -aca+1,1),_ca.width-aca+1),dca,_da)else -_aa.writeText(math.max(aca+ (ada-1),ada),bda+bca-1,db(cca,math.max(1 -aca+1,1),math.max( -_ca.width-aca+1,1)),dca,_da)end end end,drawBackgroundBox=function(_ca,aca,bca,cca,dca,_da) -local ada,bda=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -dca=(bca<1 and -(dca+bca>_ca.height and _ca.height or dca+bca-1)or( -dca+bca>_ca.height and _ca.height-bca+1 or dca)) -cca=(aca<1 and -(cca+aca>_ca.width and _ca.width or cca+aca-1)or( -cca+aca>_ca.width and _ca.width-aca+1 or cca)) -if(_ca.parent~=nil)then local cda,dda=_ca.parent:getAnchorPosition() -_ca.parent:drawBackgroundBox(math.max( -aca+ (ada-1),ada)- (cda-1), -math.max(bca+ (bda-1),bda)- (dda-1),cca,dca,_da)else -_aa.drawBackgroundBox(math.max(aca+ (ada-1),ada),math.max(bca+ (bda-1),bda),cca,dca,_da)end end,drawTextBox=function(_ca,aca,bca,cca,dca,_da) -local ada,bda=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -dca=(bca<1 and -(dca+bca>_ca.height and _ca.height or dca+bca-1)or( -dca+bca>_ca.height and _ca.height-bca+1 or dca)) -cca=(aca<1 and -(cca+aca>_ca.width and _ca.width or cca+aca-1)or( -cca+aca>_ca.width and _ca.width-aca+1 or cca)) -if(_ca.parent~=nil)then local cda,dda=_ca.parent:getAnchorPosition() -_ca.parent:drawTextBox(math.max( -aca+ (ada-1),ada)- (cda-1), -math.max(bca+ (bda-1),bda)- (dda-1),cca,dca,_da:sub(1,1))else -_aa.drawTextBox(math.max(aca+ (ada-1),ada),math.max(bca+ (bda-1),bda),cca,dca,_da:sub(1,1))end end,drawForegroundBox=function(_ca,aca,bca,cca,dca,_da) -local ada,bda=_ca:getAbsolutePosition(_ca:getAnchorPosition()) -dca=(bca<1 and -(dca+bca>_ca.height and _ca.height or dca+bca-1)or( -dca+bca>_ca.height and _ca.height-bca+1 or dca)) -cca=(aca<1 and -(cca+aca>_ca.width and _ca.width or cca+aca-1)or( -cca+aca>_ca.width and _ca.width-aca+1 or cca)) -if(_ca.parent~=nil)then local cda,dda=_ca.parent:getAnchorPosition() -_ca.parent:drawForegroundBox(math.max( -aca+ (ada-1),ada)- (cda-1), -math.max(bca+ (bda-1),bda)- (dda-1),cca,dca,_da)else -_aa.drawForegroundBox(math.max(aca+ (ada-1),ada),math.max(bca+ (bda-1),bda),cca,dca,_da)end end,draw=function(_ca)if -(a_a)and not(b_a)then return false end -if(_ca:getVisualChanged())then -if -(dc.draw(_ca))then -local aca,bca=_ca:getAbsolutePosition(_ca:getAnchorPosition())local cca,dca=_ca:getAnchorPosition() -if(_ca.parent~=nil)then -if -(_ca.bgColor~=false)then -_ca.parent:drawBackgroundBox(cca,dca,_ca.width,_ca.height,_ca.bgColor) -_ca.parent:drawTextBox(cca,dca,_ca.width,_ca.height," ")end;if(_ca.bgColor~=false)then -_ca.parent:drawForegroundBox(cca,dca,_ca.width,_ca.height,_ca.fgColor)end else -if(_ca.bgColor~=false)then -_aa.drawBackgroundBox(aca,bca,_ca.width,_ca.height,_ca.bgColor)_aa.drawTextBox(aca,bca,_ca.width,_ca.height," ")end;if(_ca.fgColor~=false)then -_aa.drawForegroundBox(aca,bca,_ca.width,_ca.height,_ca.fgColor)end end;dd.setCursorBlink(false) -if(_ca.barActive)then -if(_ca.parent~=nil)then -_ca.parent:writeText(cca,dca,bb.getTextHorizontalAlign(_ca.barText,_ca.width,_ca.barTextAlign),_ca.barBackground,_ca.barTextcolor)else -_aa.writeText(aca,bca,bb.getTextHorizontalAlign(_ca.barText,_ca.width,_ca.barTextAlign),_ca.barBackground,_ca.barTextcolor)end -if(_ca:getBorder("left"))then -if(_ca.parent~=nil)then -_ca.parent:drawBackgroundBox(cca-1,dca,1,1,_ca.barBackground)if(_ca.bgColor~=false)then -_ca.parent:drawBackgroundBox(cca-1,dca+1,1,_ca.height-1,_ca.bgColor)end end end -if(_ca:getBorder("top"))then if(_ca.parent~=nil)then -_ca.parent:drawBackgroundBox(cca-1,dca-1,_ca.width+1,1,_ca.barBackground)end end end;for _da,ada in cb(bd)do -if(ad[ada]~=nil)then for bda,cda in pairs(ad[ada])do -if(cda.draw~=nil)then cda:draw()end end end end;if(aaa)then -dd.setTextColor(daa)dd.setCursorPos(baa,caa) -if(_ca.parent~=nil)then -dd.setCursorBlink(_ca:isFocused())else dd.setCursorBlink(aaa)end end -_ca:setVisualChanged(false)end end end,drawUpdate=function(_ca)if -(a_a)and not(b_a)then return false end;_aa.update()end,addObject=function(_ca,aca)return -cba(aca)end,removeObject=function(_ca,aca)return dba(aca)end,getObject=function(_ca,aca)return bba(aca)end,addFrame=function(_ca,aca)local bca=cc.newFrame(aca,_ca, -nil,cc)return cba(bca)end}for _ca,aca in pairs(da)do -cd["add".._ca]=function(bca,cca)return cba(aca(cca,bca))end end;setmetatable(cd,dc) -return cd end -end; -project['default']['loadObjects'] = function(...)local b={}if(packaged)then -for c,d in pairs(getProject("objects"))do b[c]=d()end;return b end;for c,d in -pairs(fs.list(fs.combine("Basalt","objects")))do -if(d~="example.lua")then local _a=d:gsub(".lua","")b[_a]=require(_a)end end;return b -end; -project['default']['Object'] = function(...)local b=require("basaltEvent") -return -function(c)local d="Object"local _a;local aa=1;local ba="topLeft" -local ca=false;local da=false;local _b=false;local ab=false;local bb=false;local cb=false;local db=false -local _c=colors.black;local ac=colors.black;local bc=true;local cc=b() -local dc={x=1,y=1,width=1,height=1,bgColor=colors.black,fgColor=colors.white,name=c or"Object",parent=nil,show=function(_d)da=true -bc=true;return _d end,hide=function(_d)da=false;bc=true;return _d end,isVisible=function(_d)return da end,setFocus=function(_d) -if( -_d.parent~=nil)then _d.parent:setFocusedObject(_d)end;return _d end,setZIndex=function(_d,ad)aa=ad -if(_d.parent~=nil)then -_d.parent:removeObject(_d)_d.parent:addObject(_d)end;return _d end,getZIndex=function(_d)return aa end,getType=function(_d)return -d end,getName=function(_d)return _d.name end,remove=function(_d)if(_d.parent~=nil)then -_d.parent:removeObject(_d)end;return _d end,setParent=function(_d,ad) -if( -ad.getType~=nil and ad:getType()=="Frame")then _d:remove() -ad:addObject(_d)if(_d.draw)then _d:show()end end;return _d end,setValue=function(_d,ad) -if( -_a~=ad)then _a=ad;bc=true;_d:valueChangedHandler()end;return _d end,getValue=function(_d)return _a end,getVisualChanged=function(_d)return bc end,setVisualChanged=function(_d,ad)bc= -ad or true;if(ad==nil)then bc=true end;return _d end,getEventSystem=function(_d)return -cc end,getParent=function(_d)return _d.parent end,setPosition=function(_d,ad,bd,cd)if(cd)then _d.x,_d.y=math.floor(_d.x+ad),math.floor( -_d.y+bd)else -_d.x,_d.y=math.floor(ad),math.floor(bd)end;bc=true;return _d end,getPosition=function(_d)return -_d.x,_d.y end,getVisibility=function(_d)return da end,setVisibility=function(_d,ad)da=ad or not da;bc=true -return _d end,setSize=function(_d,ad,bd)_d.width,_d.height=ad,bd -cc:sendEvent("basalt_resize",_d)bc=true;return _d end,getHeight=function(_d)return _d.height end,getWidth=function(_d)return -_d.width end,getSize=function(_d)return _d.width,_d.height end,setBackground=function(_d,ad) -_d.bgColor=ad;bc=true;return _d end,getBackground=function(_d)return _d.bgColor end,setForeground=function(_d,ad) -_d.fgColor=ad;bc=true;return _d end,getForeground=function(_d)return _d.fgColor end,showShadow=function(_d,ad)_b=ad or -(not _b)return _d end,setShadow=function(_d,ad)_c=ad;return _d end,isShadowActive=function(_d) -return _b end,showBorder=function(_d,...) -for ad,bd in pairs(table.pack(...))do if(bd=="left")then ab=true end;if( -bd=="top")then bb=true end;if(bd=="right")then cb=true end;if(bd=="bottom")then -db=true end end;return _d end,setBorder=function(_d,ad) -_c=ad;return _d end,getBorder=function(_d,ad)if(ad=="left")then return ab end -if(ad=="top")then return bb end;if(ad=="right")then return cb end;if(ad=="bottom")then return db end end,draw=function(_d) -if -(da)then -if(_d.parent~=nil)then local ad,bd=_d:getAnchorPosition() -if(_b)then -_d.parent:drawBackgroundBox( -ad+1,bd+_d.height,_d.width,1,_c) -_d.parent:drawBackgroundBox(ad+_d.width,bd+1,1,_d.height,_c) -_d.parent:drawForegroundBox(ad+1,bd+_d.height,_d.width,1,_c) -_d.parent:drawForegroundBox(ad+_d.width,bd+1,1,_d.height,_c)end -if(ab)then -_d.parent:drawTextBox(ad-1,bd,1,_d.height,"\149") -_d.parent:drawForegroundBox(ad-1,bd,1,_d.height,ac)if(_d.bgColor~=false)then -_d.parent:drawBackgroundBox(ad-1,bd,1,_d.height,_d.bgColor)end end -if(ab)and(bb)then -_d.parent:drawTextBox(ad-1,bd-1,1,1,"\151")_d.parent:drawForegroundBox(ad-1,bd-1,1,1,ac)if( -_d.bgColor~=false)then -_d.parent:drawBackgroundBox(ad-1,bd-1,1,1,_d.bgColor)end end -if(bb)then -_d.parent:drawTextBox(ad,bd-1,_d.width,1,"\131") -_d.parent:drawForegroundBox(ad,bd-1,_d.width,1,ac)if(_d.bgColor~=false)then -_d.parent:drawBackgroundBox(ad,bd-1,_d.width,1,_d.bgColor)end end;if(bb)and(cb)then -_d.parent:drawTextBox(ad+_d.width,bd-1,1,1,"\149") -_d.parent:drawForegroundBox(ad+_d.width,bd-1,1,1,ac)end;if(cb)then -_d.parent:drawTextBox( -ad+_d.width,bd,1,_d.height,"\149") -_d.parent:drawForegroundBox(ad+_d.width,bd,1,_d.height,ac)end;if(cb)and(db)then -_d.parent:drawTextBox( -ad+_d.width,bd+_d.height,1,1,"\129") -_d.parent:drawForegroundBox(ad+_d.width,bd+_d.height,1,1,ac)end;if(db)then -_d.parent:drawTextBox(ad, -bd+_d.height,_d.width,1,"\131") -_d.parent:drawForegroundBox(ad,bd+_d.height,_d.width,1,ac)end -if(db)and(ab)then _d.parent:drawTextBox( -ad-1,bd+_d.height,1,1,"\131")_d.parent:drawForegroundBox( -ad-1,bd+_d.height,1,1,ac)end end;return true end;return false end,getAbsolutePosition=function(_d,ad,bd) -if( -ad==nil)or(bd==nil)then ad,bd=_d:getAnchorPosition()end -if(_d.parent~=nil)then -local cd,dd=_d.parent:getAbsolutePosition(_d.parent:getAnchorPosition())ad=cd+ad-1;bd=dd+bd-1 end;return ad,bd end,getAnchorPosition=function(_d,ad,bd,cd)if( -ad==nil)then ad=_d.x end;if(bd==nil)then bd=_d.y end -if(ba=="top")then -ad=math.floor( -_d.parent.width/2)+ad-1 elseif(ba=="topRight")then ad=_d.parent.width+ad-1 elseif(ba=="right")then ad= -_d.parent.width+ad-1;bd= -math.floor(_d.parent.height/2)+bd-1 elseif(ba=="bottomRight")then ad= -_d.parent.width+ad-1 -bd=_d.parent.height+bd-1 elseif(ba=="bottom")then -ad=math.floor(_d.parent.width/2)+ad-1;bd=_d.parent.height+bd-1 elseif(ba=="bottomLeft")then bd= -_d.parent.height+bd-1 elseif(ba=="left")then bd= -math.floor(_d.parent.height/2)+bd-1 elseif(ba=="center")then -ad=math.floor( -_d.parent.width/2)+ad-1 -bd=math.floor(_d.parent.height/2)+bd-1 end -if(_d.parent~=nil)then local dd,__a=_d.parent:getOffset()if not(ca or cd)then return -ad+dd,bd+__a end end;return ad,bd end,ignoreOffset=function(_d,ad) -ca=ad;if(ad==nil)then ca=true end;return _d end,getBaseFrame=function(_d)if -(_d.parent~=nil)then return _d.parent:getBaseFrame()end -return _d end,setAnchor=function(_d,ad)ba=ad;bc=true;return _d end,getAnchor=function(_d)return -ba end,onChange=function(_d,...) -for ad,bd in pairs(table.pack(...))do if(type(bd)=="function")then -_d:registerEvent("value_changed",bd)end end;return _d end,onClick=function(_d,...) -for ad,bd in -pairs(table.pack(...))do if(type(bd)=="function")then _d:registerEvent("mouse_click",bd) -_d:registerEvent("monitor_touch",bd)end end;return _d end,onClickUp=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then _d:registerEvent("mouse_up",bd)end end;return _d end,onScroll=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then _d:registerEvent("mouse_scroll",bd)end end;return _d end,onDrag=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then _d:registerEvent("mouse_drag",bd)end end;return _d end,onEvent=function(_d,...) -for ad,bd in -pairs(table.pack(...))do if(type(bd)=="function")then -_d:registerEvent("custom_event_handler",bd)end end;return _d end,onKey=function(_d,...) -for ad,bd in -pairs(table.pack(...))do if(type(bd)=="function")then _d:registerEvent("key",bd) -_d:registerEvent("char",bd)end end;return _d end,onResize=function(_d,...) -for ad,bd in -pairs(table.pack(...))do if(type(bd)=="function")then -_d:registerEvent("basalt_resize",bd)end end;return _d end,onKeyUp=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then _d:registerEvent("key_up",bd)end end;return _d end,onBackgroundKey=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then -_d:registerEvent("background_key",bd)_d:registerEvent("background_char",bd)end end;return -_d end,onBackgroundKeyUp=function(_d,...) -for ad,bd in -pairs(table.pack(...))do if(type(bd)=="function")then -_d:registerEvent("background_key_up",bd)end end;return _d end,isFocused=function(_d)if( -_d.parent~=nil)then -return _d.parent:getFocusedObject()==_d end;return false end,onGetFocus=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then _d:registerEvent("get_focus",bd)end end;return _d end,onLoseFocus=function(_d,...)for ad,bd in -pairs(table.pack(...))do -if(type(bd)=="function")then _d:registerEvent("lose_focus",bd)end end;return _d end,registerEvent=function(_d,ad,bd)return -cc:registerEvent(ad,bd)end,removeEvent=function(_d,ad,bd)return cc:removeEvent(ad,bd)end,sendEvent=function(_d,ad,...)return -cc:sendEvent(ad,_d,...)end,mouseHandler=function(_d,ad,bd,cd,dd) -local __a,a_a=_d:getAbsolutePosition(_d:getAnchorPosition())local b_a=false -if(a_a-1 ==dd)and(_d:getBorder("top"))then dd=dd+1;b_a=true end -if -(__a<=cd)and(__a+_d.width>cd)and(a_a<=dd)and(a_a+ -_d.height>dd)and(da)then -if(_d.parent~=nil)then _d.parent:setFocusedObject(_d)end;local c_a=cc:sendEvent(ad,_d,ad,bd,cd,dd) -if(c_a~=nil)then return c_a end;return true end;return false end,keyHandler=function(_d,ad,bd) -if -(_d:isFocused())then local cd=cc:sendEvent(ad,_d,ad,bd)if(cd~=nil)then return cd end;return true end;return false end,backgroundKeyHandler=function(_d,ad,bd)local cd=cc:sendEvent( -"background_"..ad,_d,ad,bd) -if(cd~=nil)then return cd end;return true end,valueChangedHandler=function(_d) -cc:sendEvent("value_changed",_d)end,eventHandler=function(_d,ad,bd,cd,dd,__a) -cc:sendEvent("custom_event_handler",_d,ad,bd,cd,dd,__a)end,getFocusHandler=function(_d) -local ad=cc:sendEvent("get_focus",_d)if(ad~=nil)then return ad end;return true end,loseFocusHandler=function(_d) -local ad=cc:sendEvent("lose_focus",_d)if(ad~=nil)then return ad end;return true end}dc.__index=dc;return dc end -end; -project['default']['theme'] = function(...) -return -{basaltBG=colors.lightGray,basaltFG=colors.black,FrameBG=colors.gray,FrameFG=colors.black,ButtonBG=colors.gray,ButtonFG=colors.black,CheckboxBG=colors.gray,CheckboxFG=colors.black,InputBG=colors.gray,InputFG=colors.black,textfieldBG=colors.gray,textfieldFG=colors.black,listBG=colors.gray,listFG=colors.black,dropdownBG=colors.gray,dropdownFG=colors.black,radioBG=colors.gray,radioFG=colors.black,selectionBG=colors.black,selectionFG=colors.lightGray} -end; -local dc=require("basaltEvent")() -local _d=require("Frame")local ad=term.current()local bd=1.1;local cd=true -local dd=fs.getDir(table.pack(...)[2]or"")local __a,a_a,b_a={},{},{}local c_a,d_a,_aa,aaa;local function baa()aaa=false end -local caa={getMainFrame=function()return c_a end,setMainFrame=function(bba) -c_a=bba end,getActiveFrame=function()return d_a end,setActiveFrame=function(bba)d_a=bba end,getFocusedObject=function()return _aa end,setFocusedObject=function(bba)_aa=bba end,getMonitorFrame=function(bba)return -b_a[bba]end,setMonitorFrame=function(bba,cba)b_a[bba]=cba end,getBaseTerm=function()return ad end,stop=baa,newFrame=_d,getDirectory=function() -return dd end} -local function daa()c_a:draw()c_a:drawUpdate()for bba,cba in pairs(b_a)do cba:draw() -cba:drawUpdate()end end -local function _ba(bba,cba,dba,_ca,aca)if -(dc:sendEvent("basaltEventCycle",bba,cba,dba,_ca,aca)==false)then return end -if(c_a~=nil)then -if(bba=="mouse_click")then -c_a:mouseHandler(bba,cba,dba,_ca,aca)d_a=c_a elseif(bba=="mouse_drag")then -c_a:mouseHandler(bba,cba,dba,_ca,aca)d_a=c_a elseif(bba=="mouse_up")then -c_a:mouseHandler(bba,cba,dba,_ca,aca)d_a=c_a elseif(bba=="mouse_scroll")then -c_a:mouseHandler(bba,cba,dba,_ca,aca)d_a=c_a elseif(bba=="monitor_touch")then if(b_a[cba]~=nil)then -b_a[cba]:mouseHandler(bba,cba,dba,_ca,aca)d_a=b_a[cba]end end end;if(bba=="key")or(bba=="char")then d_a:keyHandler(bba,cba) -d_a:backgroundKeyHandler(bba,cba)end -if(bba=="key")then __a[cba]=true end;if(bba=="key_up")then __a[cba]=false end;for bca,cca in pairs(a_a)do -cca:eventHandler(bba,cba,dba,_ca,aca)end;daa()end;local aba={} -aba={setBaseTerm=function(bba)ad=bba end,autoUpdate=function(bba)aaa=bba;if(bba==nil)then aaa=true end;daa()while aaa do -local cba,dba,_ca,aca,bca=os.pullEventRaw()_ba(cba,dba,_ca,aca,bca)end end,update=function(bba,cba,dba,_ca,aca)if( -bba~=nil)then _ba(bba,cba,dba,_ca,aca)end end,stop=baa,isKeyDown=function(bba)if( -__a[bba]==nil)then return false end;return __a[bba]end,getFrame=function(bba)for cba,dba in -pairs(a_a)do if(dba.name==bba)then return dba end end end,getActiveFrame=function()return -d_a end,setActiveFrame=function(bba) -if(bba:getType()=="Frame")then d_a=bba;return true end;return false end,onEvent=function(...) -for bba,cba in -pairs(table.pack(...))do if(type(cba)=="function")then -dc:registerEvent("basaltEventCycle",cba)end end end,createFrame=function(bba)for dba,_ca in -pairs(a_a)do if(_ca.name==bba)then return nil end end;local cba=_d(bba, -nil,nil,caa)table.insert(a_a,cba)return cba end,removeFrame=function(bba)a_a[bba]= -nil end,setProjectDir=function(bba)dd=bba end} - --- Basalt installer beginns here: -local basalt = aba -local projectDir = "Basalt" - -local animTime = 0.2 -local animFrames = 8 - -local function download(url, file) -local httpReq = http.get(url, _G._GIT_API_KEY and {Authorization = "token ".._G._GIT_API_KEY}) - if(httpReq~=nil)then - local content = httpReq.readAll() - if not content then - error("Could not connect to website") - end - local f = fs.open(file, "w") - f.write(content) - f.close() - end -end - -local function createTree(page) -local tree = {} - local request = http.get(page, _G._GIT_API_KEY and {Authorization = "token ".._G._GIT_API_KEY}) - if not(request)then return end - for k,v in pairs(textutils.unserialiseJSON(request.readAll()).tree)do - if(v.type=="blob")then - table.insert(tree, v.path) - elseif(v.type=="tree")then - tree[v.path] = createTree(page.."/"..v.path) - end - end - return tree -end - -local projectFiles = {base={}} - -local w, h = term.getSize() -local main = basalt.createFrame("InstallerFrame"):show() -local anim = main:addAnimation("movingFrameAnimation") -local libFrame = main:addFrame("LibraryFrame"):setBackground(colors.lightGray):setForeground(colors.black):show() -local objFrame = main:addFrame("ObjectFrame"):setBackground(colors.lightGray):setForeground(colors.black):setPosition(w+1,1):show() -local configFrame = main:addFrame("ConfigFrame"):setBackground(colors.lightGray):setForeground(colors.black):setPosition(w+w+1,1):show() -local installFrame = main:addFrame("installFrame"):setBackground(colors.lightGray):setForeground(colors.black):setPosition(w+w+w+1,1):show() - -local fileTreeInfo = main:addLabel("getFileTree"):setText("Downloading file structure..."):setForeground(colors.red):ignoreOffset():setAnchor("bottomLeft"):setPosition(2,1):setZIndex(15):show() - -libFrame:addLabel("setupMessage"):setText("Basalt Libary List:"):setPosition(2, 1):show() -libFrame:addLabel("included"):setText("Included"):setPosition(2, 3):show() -local libInc = libFrame:addList("includedLibList"):setPosition(2,4):setSize(20,11):show() -local libExc = libFrame:addList("exludedLibList"):setPosition(31,4):setSize(20,11):show() -libFrame:addLabel("excluded"):setText("Excluded"):setPosition(43, 3):show() -libFrame:addButton("excludeItem"):setPosition(25,5):setSize(3,1):setText(">"):onClick(function() - local item = libInc:getItem(libInc:getItemIndex()) - if(item~=nil)then - libInc:removeItem(libInc:getItemIndex()) - libExc:addItem(item.text) - end -end):show() -libFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(25,7):onClick(function() - local item = libExc:getItem(libExc:getItemIndex()) - if(item~=nil)then - libExc:removeItem(libExc:getItemIndex()) - libInc:addItem(item.text) - end -end):show() -libFrame:addButton("includeItems"):setSize(5,1):setText("<<<"):setPosition(24,10):onClick(function() - local item = libExc:getItem(libExc:getItemIndex()) - if(item~=nil)then - libExc:removeItem(libExc:getItemIndex()) - libInc:addItem(item.text) - end -end):show() -libFrame:addButton("excludeItems"):setSize(5,1):setText(">>>"):setPosition(24,12):onClick(function() - local item = libExc:getItem(libExc:getItemIndex()) - if(item~=nil)then - libExc:removeItem(libExc:getItemIndex()) - libInc:addItem(item.text) - end -end):show() -libFrame:addButton("nextBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(10,3):setText("Next"):onClick(function() - anim:clear():setObject(main):offset(w,0,animTime,animFrames):play() -end):show() - -objFrame:addLabel("setupMessage"):setText("Basalt Object List:"):setPosition(2, 1):show() -objFrame:addLabel("included"):setText("Included"):setPosition(2, 3):show() -local objInc = objFrame:addList("includedObjList"):setPosition(2,4):setSize(20,11):show() - -local objExc = objFrame:addList("exludedObjList"):setPosition(31,4):setSize(20,11):show() -objFrame:addLabel("excluded"):setText("Excluded"):setPosition(43, 3):show() - -objFrame:addButton("excludeItem"):setPosition(25,5):setSize(3,1):setText(">"):onClick(function() - local item = objInc:getItem(objInc:getItemIndex()) - if(item~=nil)then - objInc:removeItem(objInc:getItemIndex()) - objExc:addItem(item.text) - end -end):show() -objFrame:addButton("includeItem"):setSize(3,1):setText("<"):setPosition(25,7):onClick(function() - local item = objExc:getItem(objExc:getItemIndex()) - if(item~=nil)then - objExc:removeItem(objExc:getItemIndex()) - objInc:addItem(item.text) - end -end):show() - -objFrame:addButton("includeItems"):setSize(5,1):setText("<<<"):setPosition(24,10):onClick(function() - local item = libExc:getItem(libExc:getItemIndex()) - if(item~=nil)then - libExc:removeItem(libExc:getItemIndex()) - libInc:addItem(item.text) - end -end):show() - -objFrame:addButton("excludeItems"):setSize(5,1):setText(">>>"):setPosition(24,12):onClick(function() - local item = libExc:getItem(libExc:getItemIndex()) - if(item~=nil)then - libExc:removeItem(libExc:getItemIndex()) - libInc:addItem(item.text) - end -end):show() - -objFrame:addButton("nextBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(10,3):setText("Next"):onClick(function() - anim:clear():setObject(main):offset(w*2,0,animTime,animFrames):play() -end):show() -objFrame:addButton("backBtn"):setAnchor("bottomLeft"):setPosition(2,-2):setSize(10,3):setText("Back"):onClick(function() - anim:clear():setObject(main):offset(0,0,animTime,animFrames):play() -end):show() - -configFrame:addButton("backBtn"):setAnchor("bottomLeft"):setPosition(2,-2):setSize(10,3):setText("Back"):onClick(function() - anim:clear():setObject(main):offset(w,0,animTime,animFrames):play() -end):show() - - -configFrame:addLabel("configInfo"):setPosition(2,2):setText("Setup the configuration:"):show() -local sOrM = configFrame:addRadio("singleOrMultiFile"):setPosition(2,4):addItem("Single file project",1,1,colors.lightGray,colors.black,true):addItem("Multiple files project",1,3,colors.lightGray,colors.black,false):setSelectedItem(colors.lightGray,colors.black):show() -local minProject = configFrame:addCheckbox("minify"):setPosition(2,8):show() -configFrame:addLabel("minifyInfo"):setPosition(4,8):setText("Minify the project"):show() -configFrame:addLabel("betaInfo"):setPosition(2,11):setText("The Basalt Package Manager is still in alpha!"):setForeground(colors.red):show() -configFrame:addLabel("discord"):setPosition(2,12):setText("Checkout discord.com/invite/yNNnmBVBpE if you get"):setForeground(colors.red):show() -configFrame:addLabel("discord2"):setPosition(2,13):setText("into errors."):setForeground(colors.red):show() - -installFrame:addLabel("installingInfo"):setPosition(2,2):setText("Installing Menu:"):show() -local state = installFrame:addLabel("installStatus"):setAnchor("bottomLeft"):setPosition(2,-1):setText("Currently installing..."):show() -local installLog = installFrame:addList("installLog"):setPosition(2,4):setSize(w-2, 11):show() -local doneButton = installFrame:addButton("doneButton"):setText("Done"):setAnchor("bottomRight"):setPosition(-13,-2):setSize(12, 3):onClick(function() - basalt.stop() - term.clear() -end) -installLog:addItem("Installing Basalt...") - -local function addToInstallLog(text) - installLog:addItem(text) - installLog:setValue(installLog:getItem(installLog:getItemCount())) - if(installLog.getItemCount() > installLog:getHeight())then - installLog:setIndexOffset(installLog:getItemCount() - installLog:getHeight()) - end -end - -local installThread = installFrame:addThread("installingThread") -local function installProject() - fs.makeDir(projectDir) - fs.makeDir(projectDir.."/objects") - fs.makeDir(projectDir.."/libraries") - for _,v in pairs(libInc:getAll())do - download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/libraries/"..v.text, projectDir.."/libraries/"..v.text) - addToInstallLog("Installed: "..projectDir.."/libraries/"..v.text) - end - for _,v in pairs(objInc:getAll())do - download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/objects/"..v.text, projectDir.."/objects/"..v.text) - addToInstallLog("Installed: "..projectDir.."/objects/"..v.text) - end - for _,v in pairs(projectFiles.base)do - download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/Basalt/"..v, projectDir.."/"..v) - addToInstallLog("Installed: "..projectDir.."/"..v) - end - addToInstallLog("Finished downloading!") - if(sOrM:getValue().args[1])then - if(minProject:getValue())then - addToInstallLog("Packaging and minifying project to a single file...") - else - addToInstallLog("Packaging project to a single file...") - end - download("https://raw.githubusercontent.com/Pyroxenium/Basalt/master/basaltPackager.lua", "basaltPackager.lua") - shell.run("basaltPackager.lua "..projectDir.." "..tostring(minProject:getValue())) - fs.delete("basaltPackager.lua") - fs.delete("Basalt") - end - addToInstallLog("Done!") - state:setText("Finished installing!") - doneButton:show() -end - -local installBtn = configFrame:addButton("installBtn"):setAnchor("bottomRight"):setPosition(-11,-2):setSize(11,3):setText("Install"):onClick(function() - installLog:addItem("Creating directory: "..projectDir) - anim:clear():setObject(main):offset(w*3,0,animTime,animFrames):play() - installThread:start(installProject) -end) - - -local function getProjectFileTree() - local projTree = createTree("https://api.github.com/repos/Pyroxenium/Basalt/git/trees/master:Basalt") - if(projTree~=nil)then - for k,v in pairs(projTree)do - if(k=="objects")then - projectFiles.objects = v - elseif(k=="libraries")then - projectFiles.libraries = v - else - table.insert(projectFiles.base, v) - end - end - for _,v in pairs(projectFiles.libraries)do - libInc:addItem(v) - end - for _,v in pairs(projectFiles.objects)do - objInc:addItem(v) - end - fileTreeInfo:hide() - installBtn:show() - else - fileTreeInfo:setText("Error: Unable to download file structure...") - end -end -main:addThread("fileTreeThread"):start(getProjectFileTree) - -basalt.autoUpdate() diff --git a/basaltPackager.lua b/basaltPackager.lua deleted file mode 100644 index 084a610..0000000 --- a/basaltPackager.lua +++ /dev/null @@ -1,507 +0,0 @@ --- This file is able to minify and create a single file out of a project folder --- only works for basalt - - - - --- The minify part is fully made by stravant and can be found here: https://github.com/stravant/LuaMinify/blob/master/RobloxPlugin/Minify.lua --- Thanks to him for his awesome work! - --- --- Minify.lua --- --- A compilation of all of the neccesary code to Minify a source file, all into one single --- script for usage on Roblox. Needed to deal with Roblox' lack of `require`. --- - ---The minify part is also minified, if you're looking for the packaging part, check out the bottom! -function lookupify(cd)for dd,__a in pairs(cd)do cd[__a]=true end;return cd end -function CountTable(cd)local dd=0;for __a in pairs(cd)do dd=dd+1 end;return dd end -function PrintTable(cd,dd)if cd.Print then return cd.Print()end;dd=dd or 0 -local __a=(CountTable(cd)>1)local a_a=string.rep(' ',dd+1) -local b_a="{".. (__a and'\n'or'') -for c_a,d_a in pairs(cd)do -if type(d_a)~='function'then -b_a=b_a.. (__a and a_a or'') -if type(c_a)=='number'then elseif type(c_a)=='string'and -c_a:match("^[A-Za-z_][A-Za-z0-9_]*$")then b_a=b_a..c_a.." = "elseif -type(c_a)=='string'then b_a=b_a.."[\""..c_a.."\"] = "else b_a=b_a.."[".. -tostring(c_a).."] = "end -if type(d_a)=='string'then b_a=b_a.."\""..d_a.."\""elseif type(d_a)== -'number'then b_a=b_a..d_a elseif type(d_a)=='table'then b_a=b_a.. -PrintTable(d_a,dd+ (__a and 1 or 0))else -b_a=b_a..tostring(d_a)end;if next(cd,c_a)then b_a=b_a..","end;if __a then b_a=b_a..'\n'end end end;b_a=b_a.. -(__a and string.rep(' ',dd)or'').."}"return b_a end;local bb=lookupify{' ','\n','\t','\r'} -local cb={['\r']='\\r',['\n']='\\n',['\t']='\\t',['"']='\\"',["'"]="\\'"} -local db=lookupify{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'} -local _c=lookupify{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} -local ac=lookupify{'0','1','2','3','4','5','6','7','8','9'} -local bc=lookupify{'0','1','2','3','4','5','6','7','8','9','A','a','B','b','C','c','D','d','E','e','F','f'} -local cc=lookupify{'+','-','*','/','^','%',',','{','}','[',']','(',')',';','#'} -local dc=lookupify{'and','break','do','else','elseif','end','false','for','function','goto','if','in','local','nil','not','or','repeat','return','then','true','until','while'} -function LexLua(cd)local dd={} -local __a,a_a=pcall(function()local _aa=1;local aaa=1;local baa=1 -local function caa()local cba=cd:sub(_aa,_aa)if cba=='\n'then baa=1 -aaa=aaa+1 else baa=baa+1 end;_aa=_aa+1;return cba end -local function daa(cba)cba=cba or 0;return cd:sub(_aa+cba,_aa+cba)end;local function _ba(cba)local dba=daa() -for i=1,#cba do if dba==cba:sub(i,i)then return caa()end end end;local function aba(cba) -return error(">> :"..aaa..":".. -baa..": "..cba,0)end -local function bba()local cba=_aa -if daa()=='['then local dba=0;while -daa(dba+1)=='='do dba=dba+1 end -if daa(dba+1)=='['then for _=0,dba+1 do caa()end -local _ca=_aa -while true do if daa()==''then -aba("Expected `]"..string.rep('=',dba).."]` near .",3)end;local cca=true;if daa()==']'then for i=1,dba do if daa(i)~='='then -cca=false end end -if daa(dba+1)~=']'then cca=false end else cca=false end;if cca then break else -caa()end end;local aca=cd:sub(_ca,_aa-1)for i=0,dba+1 do caa()end -local bca=cd:sub(cba,_aa-1)return aca,bca else return nil end else return nil end end -while true do local cba='' -while true do local dca=daa() -if bb[dca]then cba=cba..caa()elseif -dca=='-'and daa(1)=='-'then caa()caa()cba=cba..'--'local _da,ada=bba() -if ada then cba=cba..ada else while daa()~='\n'and -daa()~=''do cba=cba..caa()end end else break end end;local dba=aaa;local _ca=baa -local aca=":"..aaa..":"..baa..":> "local bca=daa()local cca=nil -if bca==''then cca={Type='Eof'}elseif -_c[bca]or db[bca]or bca=='_'then local dca=_aa;repeat caa()bca=daa()until not -(_c[bca]or db[bca]or ac[bca]or bca=='_') -local _da=cd:sub(dca,_aa-1) -if dc[_da]then cca={Type='Keyword',Data=_da}else cca={Type='Ident',Data=_da}end elseif ac[bca]or(daa()=='.'and ac[daa(1)])then local dca=_aa -if bca=='0'and -daa(1)=='x'then caa()caa()while bc[daa()]do caa()end;if _ba('Pp')then -_ba('+-')while ac[daa()]do caa()end end else -while ac[daa()]do caa()end;if _ba('.')then while ac[daa()]do caa()end end;if _ba('Ee')then -_ba('+-')while ac[daa()]do caa()end end end;cca={Type='Number',Data=cd:sub(dca,_aa-1)}elseif bca=='\''or bca== -'\"'then local dca=_aa;local _da=caa()local ada=_aa;while true do local dda=caa() -if dda=='\\'then caa()elseif -dda==_da then break elseif dda==''then aba("Unfinished string near ")end end;local bda=cd:sub(ada, -_aa-2)local cda=cd:sub(dca,_aa-1) -cca={Type='String',Data=cda,Constant=bda}elseif bca=='['then local dca,_da=bba() -if _da then cca={Type='String',Data=_da,Constant=dca}else -caa()cca={Type='Symbol',Data='['}end elseif _ba('>=<')then if _ba('=')then cca={Type='Symbol',Data=bca..'='}else -cca={Type='Symbol',Data=bca}end elseif _ba('~')then -if _ba('=')then -cca={Type='Symbol',Data='~='}else aba("Unexpected symbol `~` in source.",2)end elseif _ba('.')then -if _ba('.')then if _ba('.')then cca={Type='Symbol',Data='...'}else -cca={Type='Symbol',Data='..'}end else cca={Type='Symbol',Data='.'}end elseif _ba(':')then if _ba(':')then cca={Type='Symbol',Data='::'}else -cca={Type='Symbol',Data=':'}end elseif cc[bca]then caa() -cca={Type='Symbol',Data=bca}else local dca,_da=bba()if dca then cca={Type='String',Data=_da,Constant=dca}else -aba("Unexpected Symbol `".. -bca.."` in source.",2)end end;cca.LeadingWhite=cba;cca.Line=dba;cca.Char=_ca -cca.Print=function() -return"<".. (cca.Type..string.rep(' ',7 -# -cca.Type)).. -" ".. (cca.Data or'').." >"end;dd[#dd+1]=cca;if cca.Type=='Eof'then break end end end)if not __a then return false,a_a end;local b_a={}local c_a={}local d_a=1 -function b_a:Peek(_aa)_aa=_aa or 0;return dd[math.min( -#dd,d_a+_aa)]end -function b_a:Get()local _aa=dd[d_a]d_a=math.min(d_a+1,#dd)return _aa end;function b_a:Is(_aa)return b_a:Peek().Type==_aa end;function b_a:Save()c_a[ -#c_a+1]=d_a end -function b_a:Commit()c_a[#c_a]=nil end;function b_a:Restore()d_a=c_a[#c_a]c_a[#c_a]=nil end -function b_a:ConsumeSymbol(_aa) -local aaa=self:Peek() -if aaa.Type=='Symbol'then if _aa then -if aaa.Data==_aa then self:Get()return true else return nil end else self:Get()return aaa end else return -nil end end -function b_a:ConsumeKeyword(_aa)local aaa=self:Peek()if -aaa.Type=='Keyword'and aaa.Data==_aa then self:Get()return true else return nil end end;function b_a:IsKeyword(_aa)local aaa=b_a:Peek()return -aaa.Type=='Keyword'and aaa.Data==_aa end -function b_a:IsSymbol(_aa) -local aaa=b_a:Peek()return aaa.Type=='Symbol'and aaa.Data==_aa end -function b_a:IsEof()return b_a:Peek().Type=='Eof'end;return true,b_a end -function ParseLua(cd)local dd,__a=LexLua(cd)if not dd then return false,__a end -local function a_a(ada)local bda=">> :".. - -__a:Peek().Line..":"..__a:Peek().Char..": "..ada.."\n"local cda=0 -for dda in -cd:gmatch("[^\n]*\n?")do if dda:sub(-1,-1)=='\n'then dda=dda:sub(1,-2)end;cda= -cda+1 -if cda==__a:Peek().Line then bda=bda..">> `".. -dda:gsub('\t',' ').."`\n"for i=1,__a:Peek().Char -do local __b=dda:sub(i,i) -if __b=='\t'then bda=bda..' 'else bda=bda..' 'end end -bda=bda.." ^---"break end end;return bda end;local b_a=0;local c_a={}local d_a={'_','a','b','c','d'} -local function _aa(ada)local bda={}bda.Parent=ada -bda.LocalList={}bda.LocalMap={} -function bda:RenameVars() -for cda,dda in pairs(bda.LocalList)do local __b;b_a=0 -repeat b_a=b_a+1;local a_b=b_a -__b=''while a_b>0 do local b_b=a_b%#d_a;a_b=(a_b-b_b)/#d_a -__b=__b..d_a[b_b+1]end until -not c_a[__b]and -not ada:GetLocal(__b)and not bda.LocalMap[__b]dda.Name=__b;bda.LocalMap[__b]=dda end end -function bda:GetLocal(cda)local dda=bda.LocalMap[cda]if dda then return dda end;if bda.Parent then -local __b=bda.Parent:GetLocal(cda)if __b then return __b end end;return nil end -function bda:CreateLocal(cda)local dda={}dda.Scope=bda;dda.Name=cda;dda.CanRename=true;bda.LocalList[# -bda.LocalList+1]=dda -bda.LocalMap[cda]=dda;return dda end;bda.Print=function()return""end;return bda end;local aaa;local baa -local function caa(ada)local bda=_aa(ada)if not __a:ConsumeSymbol('(')then return false, -a_a("`(` expected.")end;local cda={}local dda=false -while not -__a:ConsumeSymbol(')')do -if __a:Is('Ident')then -local c_b=bda:CreateLocal(__a:Get().Data)cda[#cda+1]=c_b;if not __a:ConsumeSymbol(',')then -if -__a:ConsumeSymbol(')')then break else return false,a_a("`)` expected.")end end elseif -__a:ConsumeSymbol('...')then dda=true -if not __a:ConsumeSymbol(')')then return false, -a_a("`...` must be the last argument of a function.")end;break else return false,a_a("Argument name or `...` expected")end end;local __b,a_b=baa(bda)if not __b then return false,a_b end;if not -__a:ConsumeKeyword('end')then -return false,a_a("`end` expected after function body")end;local b_b={} -b_b.AstType='Function'b_b.Scope=bda;b_b.Arguments=cda;b_b.Body=a_b;b_b.VarArg=dda;return true,b_b end -local function daa(ada) -if __a:ConsumeSymbol('(')then local bda,cda=aaa(ada) -if not bda then return false,cda end -if not __a:ConsumeSymbol(')')then return false,a_a("`)` Expected.")end;cda.ParenCount=(cda.ParenCount or 0)+1;return true,cda elseif -__a:Is('Ident')then local bda=__a:Get()local cda=ada:GetLocal(bda.Data)if not cda then -c_a[bda.Data]=true end;local dda={}dda.AstType='VarExpr'dda.Name=bda.Data -dda.Local=cda;return true,dda else return false,a_a("primary expression expected")end end -local function _ba(ada,bda)local cda,dda=daa(ada)if not cda then return false,dda end -while true do -if __a:IsSymbol('.')or -__a:IsSymbol(':')then local __b=__a:Get().Data;if not __a:Is('Ident')then return false, -a_a(" expected.")end;local a_b=__a:Get() -local b_b={}b_b.AstType='MemberExpr'b_b.Base=dda;b_b.Indexer=__b;b_b.Ident=a_b;dda=b_b elseif not -bda and __a:ConsumeSymbol('[')then local __b,a_b=aaa(ada)if not __b then -return false,a_b end;if not __a:ConsumeSymbol(']')then -return false,a_a("`]` expected.")end;local b_b={}b_b.AstType='IndexExpr' -b_b.Base=dda;b_b.Index=a_b;dda=b_b elseif not bda and __a:ConsumeSymbol('(')then local __b={} -while not -__a:ConsumeSymbol(')')do local b_b,c_b=aaa(ada)if not b_b then return false,c_b end -__b[#__b+1]=c_b -if not __a:ConsumeSymbol(',')then if __a:ConsumeSymbol(')')then break else return false, -a_a("`)` Expected.")end end end;local a_b={}a_b.AstType='CallExpr'a_b.Base=dda;a_b.Arguments=__b;dda=a_b elseif not bda and -__a:Is('String')then local __b={}__b.AstType='StringCallExpr'__b.Base=dda -__b.Arguments={__a:Get()}dda=__b elseif not bda and __a:IsSymbol('{')then local __b,a_b=aaa(ada)if not __b then -return false,a_b end;local b_b={}b_b.AstType='TableCallExpr'b_b.Base=dda -b_b.Arguments={a_b}dda=b_b else break end end;return true,dda end -local function aba(ada) -if __a:Is('Number')then local bda={}bda.AstType='NumberExpr'bda.Value=__a:Get()return -true,bda elseif __a:Is('String')then local bda={}bda.AstType='StringExpr' -bda.Value=__a:Get()return true,bda elseif __a:ConsumeKeyword('nil')then local bda={}bda.AstType='NilExpr' -return true,bda elseif __a:IsKeyword('false')or __a:IsKeyword('true')then local bda={} -bda.AstType='BooleanExpr'bda.Value=(__a:Get().Data=='true')return true,bda elseif -__a:ConsumeSymbol('...')then local bda={}bda.AstType='DotsExpr'return true,bda elseif __a:ConsumeSymbol('{')then local bda={} -bda.AstType='ConstructorExpr'bda.EntryList={} -while true do -if __a:IsSymbol('[')then __a:Get()local cda,dda=aaa(ada) -if not cda then return -false,a_a("Key Expression Expected")end -if not __a:ConsumeSymbol(']')then return false,a_a("`]` Expected")end -if not __a:ConsumeSymbol('=')then return false,a_a("`=` Expected")end;local __b,a_b=aaa(ada)if not __b then -return false,a_a("Value Expression Expected")end -bda.EntryList[#bda.EntryList+1]={Type='Key',Key=dda,Value=a_b}elseif __a:Is('Ident')then local cda=__a:Peek(1) -if -cda.Type=='Symbol'and cda.Data=='='then local dda=__a:Get()if not __a:ConsumeSymbol('=')then -return false,a_a("`=` Expected")end;local __b,a_b=aaa(ada)if not __b then return false, -a_a("Value Expression Expected")end -bda.EntryList[ -#bda.EntryList+1]={Type='KeyString',Key=dda.Data,Value=a_b}else local dda,__b=aaa(ada) -if not dda then return false,a_a("Value Exected")end -bda.EntryList[#bda.EntryList+1]={Type='Value',Value=__b}end elseif __a:ConsumeSymbol('}')then break else local cda,dda=aaa(ada) -bda.EntryList[#bda.EntryList+1]={Type='Value',Value=dda}if not cda then return false,a_a("Value Expected")end end -if __a:ConsumeSymbol(';')or __a:ConsumeSymbol(',')then elseif -__a:ConsumeSymbol('}')then break else return false,a_a("`}` or table entry Expected")end end;return true,bda elseif __a:ConsumeKeyword('function')then local bda,cda=caa(ada)if not bda then -return false,cda end;cda.IsLocal=true;return true,cda else return _ba(ada)end end;local bba=lookupify{'-','not','#'}local cba=8 -local dba={['+']={6,6},['-']={6,6},['%']={7,7},['/']={7,7},['*']={7,7},['^']={10,9},['..']={5,4},['==']={3,3},['<']={3,3},['<=']={3,3},['~=']={3,3},['>']={3,3},['>=']={3,3},['and']={2,2},['or']={1,1}} -local function _ca(ada,bda)local cda,dda -if bba[__a:Peek().Data]then local __b=__a:Get().Data -cda,dda=_ca(ada,cba)if not cda then return false,dda end;local a_b={}a_b.AstType='UnopExpr' -a_b.Rhs=dda;a_b.Op=__b;dda=a_b else cda,dda=aba(ada)if not cda then return false,dda end end -while true do local __b=dba[__a:Peek().Data] -if __b and __b[1]>bda then -local a_b=__a:Get().Data;local b_b,c_b=_ca(ada,__b[2])if not b_b then return false,c_b end;local d_b={} -d_b.AstType='BinopExpr'd_b.Lhs=dda;d_b.Op=a_b;d_b.Rhs=c_b;dda=d_b else break end end;return true,dda end;aaa=function(ada)return _ca(ada,0)end -local function aca(ada)local bda=nil -if -__a:ConsumeKeyword('if')then local cda={}cda.AstType='IfStatement'cda.Clauses={} -repeat local dda,__b=aaa(ada)if not dda then -return false,__b end;if not __a:ConsumeKeyword('then')then return false, -a_a("`then` expected.")end -local a_b,b_b=baa(ada)if not a_b then return false,b_b end -cda.Clauses[#cda.Clauses+1]={Condition=__b,Body=b_b}until not __a:ConsumeKeyword('elseif') -if __a:ConsumeKeyword('else')then local dda,__b=baa(ada) -if not dda then return false,__b end;cda.Clauses[#cda.Clauses+1]={Body=__b}end;if not __a:ConsumeKeyword('end')then -return false,a_a("`end` expected.")end;bda=cda elseif __a:ConsumeKeyword('while')then -local cda={}cda.AstType='WhileStatement'local dda,__b=aaa(ada) -if not dda then return false,__b end;if not __a:ConsumeKeyword('do')then -return false,a_a("`do` expected.")end;local a_b,b_b=baa(ada) -if not a_b then return false,b_b end;if not __a:ConsumeKeyword('end')then -return false,a_a("`end` expected.")end;cda.Condition=__b;cda.Body=b_b;bda=cda elseif -__a:ConsumeKeyword('do')then local cda,dda=baa(ada)if not cda then return false,dda end -if not -__a:ConsumeKeyword('end')then return false,a_a("`end` expected.")end;local __b={}__b.AstType='DoStatement'__b.Body=dda;bda=__b elseif -__a:ConsumeKeyword('for')then -if not __a:Is('Ident')then return false,a_a(" expected.")end;local cda=__a:Get() -if __a:ConsumeSymbol('=')then local dda=_aa(ada) -local __b=dda:CreateLocal(cda.Data)local a_b,b_b=aaa(ada)if not a_b then return false,b_b end -if not -__a:ConsumeSymbol(',')then return false,a_a("`,` Expected")end;local c_b,d_b=aaa(ada)if not c_b then return false,d_b end;local _ab,aab -if -__a:ConsumeSymbol(',')then _ab,aab=aaa(ada)if not _ab then return false,aab end end;if not __a:ConsumeKeyword('do')then -return false,a_a("`do` expected")end;local bab,cab=baa(dda) -if not bab then return false,cab end;if not __a:ConsumeKeyword('end')then -return false,a_a("`end` expected")end;local dab={} -dab.AstType='NumericForStatement'dab.Scope=dda;dab.Variable=__b;dab.Start=b_b;dab.End=d_b;dab.Step=aab -dab.Body=cab;bda=dab else local dda=_aa(ada) -local __b={dda:CreateLocal(cda.Data)} -while __a:ConsumeSymbol(',')do if not __a:Is('Ident')then return false, -a_a("for variable expected.")end -__b[#__b+1]=dda:CreateLocal(__a:Get().Data)end;if not __a:ConsumeKeyword('in')then -return false,a_a("`in` expected.")end;local a_b={}local b_b,c_b=aaa(ada)if not b_b then -return false,c_b end;a_b[#a_b+1]=c_b -while __a:ConsumeSymbol(',')do -local bab,cab=aaa(ada)if not bab then return false,cab end;a_b[#a_b+1]=cab end;if not __a:ConsumeKeyword('do')then -return false,a_a("`do` expected.")end;local d_b,_ab=baa(dda) -if not d_b then return false,_ab end;if not __a:ConsumeKeyword('end')then -return false,a_a("`end` expected.")end;local aab={} -aab.AstType='GenericForStatement'aab.Scope=dda;aab.VariableList=__b;aab.Generators=a_b;aab.Body=_ab;bda=aab end elseif __a:ConsumeKeyword('repeat')then local cda,dda=baa(ada) -if not cda then return false,dda end;if not __a:ConsumeKeyword('until')then -return false,a_a("`until` expected.")end;local __b,a_b=aaa(ada) -if not __b then return false,a_b end;local b_b={}b_b.AstType='RepeatStatement'b_b.Condition=a_b;b_b.Body=dda;bda=b_b elseif -__a:ConsumeKeyword('function')then if not __a:Is('Ident')then -return false,a_a("Function name expected")end;local cda,dda=_ba(ada,true)if not cda then -return false,dda end;local __b,a_b=caa(ada)if not __b then return false,a_b end -a_b.IsLocal=false;a_b.Name=dda;bda=a_b elseif __a:ConsumeKeyword('local')then -if __a:Is('Ident')then -local cda={__a:Get().Data}while __a:ConsumeSymbol(',')do if not __a:Is('Ident')then return false, -a_a("local var name expected")end -cda[#cda+1]=__a:Get().Data end;local dda={}if -__a:ConsumeSymbol('=')then -repeat local a_b,b_b=aaa(ada)if not a_b then return false,b_b end -dda[#dda+1]=b_b until not __a:ConsumeSymbol(',')end;for a_b,b_b in -pairs(cda)do cda[a_b]=ada:CreateLocal(b_b)end -local __b={}__b.AstType='LocalStatement'__b.LocalList=cda;__b.InitList=dda;bda=__b elseif -__a:ConsumeKeyword('function')then if not __a:Is('Ident')then -return false,a_a("Function name expected")end;local cda=__a:Get().Data -local dda=ada:CreateLocal(cda)local __b,a_b=caa(ada)if not __b then return false,a_b end;a_b.Name=dda -a_b.IsLocal=true;bda=a_b else -return false,a_a("local var or function def expected")end elseif __a:ConsumeSymbol('::')then if not __a:Is('Ident')then return false, -a_a('Label name expected')end -local cda=__a:Get().Data -if not __a:ConsumeSymbol('::')then return false,a_a("`::` expected")end;local dda={}dda.AstType='LabelStatement'dda.Label=cda;bda=dda elseif -__a:ConsumeKeyword('return')then local cda={} -if not __a:IsKeyword('end')then local __b,a_b=aaa(ada) -if __b then cda[1]=a_b;while -__a:ConsumeSymbol(',')do local b_b,c_b=aaa(ada)if not b_b then return false,c_b end -cda[#cda+1]=c_b end end end;local dda={}dda.AstType='ReturnStatement'dda.Arguments=cda;bda=dda elseif -__a:ConsumeKeyword('break')then local cda={}cda.AstType='BreakStatement'bda=cda elseif __a:IsKeyword('goto')then -if not -__a:Is('Ident')then return false,a_a("Label expected")end;local cda=__a:Get().Data;local dda={}dda.AstType='GotoStatement' -dda.Label=cda;bda=dda else local cda,dda=_ba(ada)if not cda then return false,dda end -if -__a:IsSymbol(',')or __a:IsSymbol('=')then -if(dda.ParenCount or 0)>0 then return false, -a_a("Can not assign to parenthesized expression, is not an lvalue")end;local __b={dda} -while __a:ConsumeSymbol(',')do local _ab,aab=_ba(ada) -if not _ab then return false,aab end;__b[#__b+1]=aab end -if not __a:ConsumeSymbol('=')then return false,a_a("`=` Expected.")end;local a_b={}local b_b,c_b=aaa(ada)if not b_b then return false,c_b end;a_b[1]=c_b;while -__a:ConsumeSymbol(',')do local _ab,aab=aaa(ada)if not _ab then return false,aab end -a_b[#a_b+1]=aab end;local d_b={} -d_b.AstType='AssignmentStatement'd_b.Lhs=__b;d_b.Rhs=a_b;bda=d_b elseif -dda.AstType=='CallExpr'or -dda.AstType=='TableCallExpr'or dda.AstType=='StringCallExpr'then local __b={}__b.AstType='CallStatement'__b.Expression=dda;bda=__b else return false, -a_a("Assignment Statement Expected")end end;bda.HasSemicolon=__a:ConsumeSymbol(';')return true,bda end -local bca=lookupify{'end','else','elseif','until'} -baa=function(ada)local bda={}bda.Scope=_aa(ada)bda.AstType='Statlist'local cda={} -while not -bca[__a:Peek().Data]and not __a:IsEof()do -local dda,__b=aca(bda.Scope)if not dda then return false,__b end;cda[#cda+1]=__b end;bda.Body=cda;return true,bda end;local function cca()local ada=_aa()return baa(ada)end;local dca,_da=cca() -return dca,_da end -local _d=lookupify{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'} -local ad=lookupify{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} -local bd=lookupify{'0','1','2','3','4','5','6','7','8','9'} -function Format_Mini(cd)local dd,__a;local a_a=0 -local function b_a(d_a,_aa,aaa) -if a_a>150 then a_a=0;return d_a.."\n".._aa end;aaa=aaa or' 'local baa,caa=d_a:sub(-1,-1),_aa:sub(1,1) -if -ad[baa]or _d[baa]or baa=='_'then -if not -(ad[caa]or _d[caa]or caa=='_'or bd[caa])then return d_a.._aa elseif caa=='('then -return d_a..aaa.._aa else return d_a..aaa.._aa end elseif bd[baa]then -if caa=='('then return d_a.._aa else return d_a..aaa.._aa end elseif baa==''then return d_a.._aa else -if caa=='('then return d_a..aaa.._aa else return d_a.._aa end end end -__a=function(d_a)local _aa=string.rep('(',d_a.ParenCount or 0) -if -d_a.AstType=='VarExpr'then if d_a.Local then _aa=_aa..d_a.Local.Name else -_aa=_aa..d_a.Name end elseif d_a.AstType=='NumberExpr'then _aa=_aa.. -d_a.Value.Data elseif d_a.AstType=='StringExpr'then -_aa=_aa..d_a.Value.Data elseif d_a.AstType=='BooleanExpr'then _aa=_aa..tostring(d_a.Value)elseif -d_a.AstType=='NilExpr'then _aa=b_a(_aa,"nil")elseif d_a.AstType=='BinopExpr'then -_aa=b_a(_aa,__a(d_a.Lhs))_aa=b_a(_aa,d_a.Op)_aa=b_a(_aa,__a(d_a.Rhs))elseif d_a.AstType== -'UnopExpr'then _aa=b_a(_aa,d_a.Op) -_aa=b_a(_aa,__a(d_a.Rhs))elseif d_a.AstType=='DotsExpr'then _aa=_aa.."..."elseif d_a.AstType=='CallExpr'then _aa=_aa.. -__a(d_a.Base)_aa=_aa.."("for i=1,#d_a.Arguments do _aa=_aa.. -__a(d_a.Arguments[i]) -if i~=#d_a.Arguments then _aa=_aa..","end end;_aa=_aa..")"elseif d_a.AstType== -'TableCallExpr'then _aa=_aa..__a(d_a.Base)_aa=_aa.. -__a(d_a.Arguments[1])elseif d_a.AstType=='StringCallExpr'then -_aa=_aa..__a(d_a.Base)_aa=_aa..d_a.Arguments[1].Data elseif -d_a.AstType=='IndexExpr'then -_aa=_aa..__a(d_a.Base).."["..__a(d_a.Index).."]"elseif d_a.AstType=='MemberExpr'then _aa=_aa..__a(d_a.Base).. -d_a.Indexer..d_a.Ident.Data elseif -d_a.AstType=='Function'then d_a.Scope:RenameVars() -_aa=_aa.."function(" -if#d_a.Arguments>0 then for i=1,#d_a.Arguments do -_aa=_aa..d_a.Arguments[i].Name -if i~=#d_a.Arguments then _aa=_aa..","elseif d_a.VarArg then _aa=_aa..",..."end end elseif -d_a.VarArg then _aa=_aa.."..."end;_aa=_aa..")"_aa=b_a(_aa,dd(d_a.Body)) -_aa=b_a(_aa,"end")elseif d_a.AstType=='ConstructorExpr'then _aa=_aa.."{" -for i=1,#d_a.EntryList do -local aaa=d_a.EntryList[i] -if aaa.Type=='Key'then _aa=_aa.."[".. -__a(aaa.Key).."]="..__a(aaa.Value)elseif aaa.Type== -'Value'then _aa=_aa..__a(aaa.Value)elseif aaa.Type=='KeyString'then -_aa=_aa.. -aaa.Key.."="..__a(aaa.Value)end;if i~=#d_a.EntryList then _aa=_aa..","end end;_aa=_aa.."}"end -_aa=_aa..string.rep(')',d_a.ParenCount or 0)a_a=a_a+#_aa;return _aa end -local c_a=function(d_a)local _aa='' -if d_a.AstType=='AssignmentStatement'then -for i=1,#d_a.Lhs do -_aa=_aa..__a(d_a.Lhs[i])if i~=#d_a.Lhs then _aa=_aa..","end end;if#d_a.Rhs>0 then _aa=_aa.."=" -for i=1,#d_a.Rhs do -_aa=_aa..__a(d_a.Rhs[i])if i~=#d_a.Rhs then _aa=_aa..","end end end elseif -d_a.AstType=='CallStatement'then _aa=__a(d_a.Expression)elseif d_a.AstType=='LocalStatement'then -_aa=_aa.."local " -for i=1,#d_a.LocalList do _aa=_aa..d_a.LocalList[i].Name;if i~=# -d_a.LocalList then _aa=_aa..","end end -if#d_a.InitList>0 then _aa=_aa.."="for i=1,#d_a.InitList do _aa=_aa.. -__a(d_a.InitList[i]) -if i~=#d_a.InitList then _aa=_aa..","end end end elseif d_a.AstType=='IfStatement'then -_aa=b_a("if",__a(d_a.Clauses[1].Condition))_aa=b_a(_aa,"then") -_aa=b_a(_aa,dd(d_a.Clauses[1].Body)) -for i=2,#d_a.Clauses do local aaa=d_a.Clauses[i] -if aaa.Condition then -_aa=b_a(_aa,"elseif")_aa=b_a(_aa,__a(aaa.Condition)) -_aa=b_a(_aa,"then")else _aa=b_a(_aa,"else")end;_aa=b_a(_aa,dd(aaa.Body))end;_aa=b_a(_aa,"end")elseif d_a.AstType=='WhileStatement'then -_aa=b_a("while",__a(d_a.Condition))_aa=b_a(_aa,"do")_aa=b_a(_aa,dd(d_a.Body)) -_aa=b_a(_aa,"end")elseif d_a.AstType=='DoStatement'then _aa=b_a(_aa,"do") -_aa=b_a(_aa,dd(d_a.Body))_aa=b_a(_aa,"end")elseif d_a.AstType=='ReturnStatement'then _aa="return" -for i=1,#d_a.Arguments -do _aa=b_a(_aa,__a(d_a.Arguments[i]))if i~= -#d_a.Arguments then _aa=_aa..","end end elseif d_a.AstType=='BreakStatement'then _aa="break"elseif d_a.AstType=='RepeatStatement'then -_aa="repeat"_aa=b_a(_aa,dd(d_a.Body))_aa=b_a(_aa,"until") -_aa=b_a(_aa,__a(d_a.Condition))elseif d_a.AstType=='Function'then d_a.Scope:RenameVars()if d_a.IsLocal then -_aa="local"end;_aa=b_a(_aa,"function ")if d_a.IsLocal then -_aa=_aa..d_a.Name.Name else _aa=_aa..__a(d_a.Name)end;_aa= -_aa.."(" -if#d_a.Arguments>0 then -for i=1,#d_a.Arguments do _aa=_aa.. -d_a.Arguments[i].Name;if i~=#d_a.Arguments then _aa=_aa..","elseif d_a.VarArg then -_aa=_aa..",..."end end elseif d_a.VarArg then _aa=_aa.."..."end;_aa=_aa..")"_aa=b_a(_aa,dd(d_a.Body)) -_aa=b_a(_aa,"end")elseif d_a.AstType=='GenericForStatement'then d_a.Scope:RenameVars() -_aa="for " -for i=1,#d_a.VariableList do -_aa=_aa..d_a.VariableList[i].Name;if i~=#d_a.VariableList then _aa=_aa..","end end;_aa=_aa.." in" -for i=1,#d_a.Generators do -_aa=b_a(_aa,__a(d_a.Generators[i]))if i~=#d_a.Generators then _aa=b_a(_aa,',')end end;_aa=b_a(_aa,"do")_aa=b_a(_aa,dd(d_a.Body)) -_aa=b_a(_aa,"end")elseif d_a.AstType=='NumericForStatement'then _aa="for "_aa=_aa.. -d_a.Variable.Name.."="_aa=_aa.. -__a(d_a.Start)..","..__a(d_a.End)if d_a.Step then -_aa=_aa..","..__a(d_a.Step)end;_aa=b_a(_aa,"do") -_aa=b_a(_aa,dd(d_a.Body))_aa=b_a(_aa,"end")end;a_a=a_a+#_aa;return _aa end -dd=function(d_a)local _aa=''d_a.Scope:RenameVars()for aaa,baa in pairs(d_a.Body)do -_aa=b_a(_aa,c_a(baa),';')end;return _aa end;cd.Scope:RenameVars()return dd(cd)end -local minify = function(cd)local dd,__a=ParseLua(cd)if not dd then return false,__a end -return true,Format_Mini(__a)end - --- Packaging part: -local args = table.pack(...) -local projectPath = args[1] or "Basalt" -local minifyProject = args[2]=="true" and true or false -local outputFileName = args[3] or "basalt.lua" - -assert(fs.isDir(projectPath), "Unable to find directory: "..projectPath) - -local projectFiles = { - "objects", - "libraries", - "Frame.lua", - "loadObjects.lua", - "Object.lua", - "theme.lua", -} -local subDirs = { - "objects", "libraries" -} -local mainFile = "main.lua" - -local outputFile = io.open(outputFileName, "w") - -if(outputFile==nil)then - error("Can't open file "..outputFileName) -end - -outputFile:write([[ -local project = {} -local packaged = true -local baseRequire = require -local require = function(path) - for _,v in pairs(project)do - for name,b in pairs(v)do - if(name==path)then - return b() - end - end - end - return baseRequire(path); -end -local getProject = function(subDir) - if(subDir~=nil)then - return project[subDir] - end - return project -end -]]) - -for k,v in pairs(subDirs)do - outputFile:write("project['"..v.."'] = {}") -end -outputFile:write("project['default'] = {}") - -local function writeNewPackage(subdir, name, path) - if not(fs.isDir(path))then - outputFile:write("project['"..subdir.."']['"..name.."'] = ".."function(...)") - local file = io.open(path, "r") - local fileData = file:read("*all") - if(minifyProject)then - local success, data = minify(fileData) - if(success)then - outputFile:write(data:gsub("]]", "] ]"):gsub("]]", "] ]").."\n") - else - print("Error: Can't minify "..path) - end - else - outputFile:write(fileData:gsub("]]", "] ]"):gsub("]]", "] ]").."\n") - end - file:close() - outputFile:write("end; \n") - end -end - -for _,v in pairs(projectFiles)do - if(fs.isDir(fs.combine(projectPath, v)))then - for _,b in pairs(fs.list(fs.combine(projectPath, v)))do - writeNewPackage(v, b:gsub(".lua", ""), fs.combine(fs.combine(projectPath, v), b)) - end - else - writeNewPackage("default", v:gsub(".lua", ""), fs.combine(projectPath, v)) - end -end - -local main = io.open(fs.combine(projectPath, mainFile), "r") -local mainData = main:read("*all") -if(minifyProject)then - local success,data = minify(mainData) - if(success)then - outputFile:write(data) - else - print("Error: Can't minify "..fs.combine(projectPath, mainFile).." "..data) - end -else - outputFile:write(mainData) -end -main:close() -outputFile:close() diff --git a/docs/objects/List.md b/docs/objects/List.md index 1a15e3e..4fc1026 100644 --- a/docs/objects/List.md +++ b/docs/objects/List.md @@ -49,7 +49,7 @@ aList:addItem("Item 1") aList:addItem("Item 2", colors.yellow) aList:addItem("Item 3", colors.yellow, colors.green) -aList:onSelect(function(self, item) +aList:onSelect(function(self, event, item) basalt.debug("Selected item: ", item.text) end) ``` diff --git a/examples/basaltPreview.lua b/examples/basaltPreview.lua deleted file mode 100644 index 1018e8d..0000000 --- a/examples/basaltPreview.lua +++ /dev/null @@ -1,79 +0,0 @@ ---Basalt configurated installer -local filePath = "basalt.lua" --here you can change the file path default: basalt -if not(fs.exists(filePath))then - shell.run("pastebin run ESs1mg7P packed true "..filePath:gsub(".lua", "")) -- this is an alternative to the wget command -end -local basalt = require(filePath:gsub(".lua", "")) - -local w, h = term.getSize() - - -local main = basalt.createFrame("mainFrame") -local objFrame = main:addFrame("objectFrame"):setPosition(1,2):setBackground(colors.lightGray):setSize(w, h-1) -local programFrame = main:addFrame("programFrame"):setPosition(1,2):setBackground(colors.lightGray):setSize(w, h-1):hide() -local editorFrame = main:addFrame("editorFrame"):setPosition(1,2):setBackground(colors.lightGray):setSize(w, h-1):hide() - -local menuBar = main:addMenubar("mainMenuBar"):addItem("Object"):addItem("Program"):addItem("Editor"):setBackground(colors.gray):setSize(w, 1):setSpace(5):setScrollable():show() -menuBar:onChange(function(self) - objFrame:hide() - programFrame:hide() - editorFrame:hide() - if(self:getValue().text=="Object")then - objFrame:show() - elseif(self:getValue().text=="Program")then - programFrame:show() - elseif(self:getValue().text=="Editor")then - editorFrame:show() - end -end) - -local function visualButton(btn) - btn:onClick(function(self) btn:setBackground(colors.black) btn:setForeground(colors.lightGray) end) - btn:onClickUp(function(self) btn:setBackground(colors.gray) btn:setForeground(colors.black) end) - btn:onLoseFocus(function(self) btn:setBackground(colors.gray) btn:setForeground(colors.black) end) -end - ---Object Frame: - -visualButton(objFrame:addButton("exampleButton"):setText("Button"):setSize(12,3):setPosition(2,2):onClick(function() end):show()) -local sliderValue = objFrame:addLabel("sliderValueLabel"):setPosition(11,6):setText("1"):show() -objFrame:addSlider("exampleSlider"):setPosition(2,6):onChange(function(self) sliderValue:setText(self:getValue()) end):show() -objFrame:addInput("exampleText"):setPosition(2,8):setSize(16,1):setBackground(colors.black):setForeground(colors.lightGray):setDefaultText("Text Example", colors.gray):show() -objFrame:addInput("exampleNumber"):setPosition(2,10):setSize(16,1):setBackground(colors.black):setForeground(colors.lightGray):setDefaultText("Number Example", colors.gray):setInputType("number"):show() -objFrame:addInput("examplePassword"):setPosition(2,12):setSize(16,1):setBackground(colors.black):setForeground(colors.lightGray):setDefaultText("Password Example", colors.gray):setInputType("password"):show() - -objFrame:addList("exampleList"):setPosition(20,2):addItem("1. Entry"):addItem("2. Entry"):addItem("3. Entry"):addItem("4. Entry"):addItem("5. Entry"):addItem("6. Entry"):addItem("7. Entry"):addItem("8. Entry"):show() -objFrame:addDropdown("exampleDropdown"):setPosition(37,2):addItem("1. Entry"):addItem("2. Entry"):addItem("3. Entry"):addItem("4. Entry"):addItem("5. Entry"):addItem("6. Entry"):addItem("7. Entry"):addItem("8. Entry"):show() -objFrame:addCheckbox("exampleCheckbox1"):setPosition(20,10):show() -objFrame:addLabel("checkbox1Label"):setPosition(22,10):setText("Checkbox 1"):show() -objFrame:addCheckbox("exampleCheckbox2"):setPosition(20,12):show() -objFrame:addLabel("checkbox2Label"):setPosition(22,12):setText("Checkbox 2"):show() - -objFrame:addRadio("exampleRadio"):setPosition(35,10):addItem("", 1, 1):addItem("", 1, 3):addItem("", 1, 5):setSelectedItem(colors.gray, colors.black):show() -objFrame:addLabel("radio1Label"):setPosition(37,10):setText("Radio 1"):show() -objFrame:addLabel("radio2Label"):setPosition(37,12):setText("Radio 2"):show() -objFrame:addLabel("radio3Label"):setPosition(37,14):setText("Radio 3"):show() - -objFrame:addScrollbar("exampleScrollbar"):setPosition(objFrame:getWidth(),1):setMaxValue(objFrame:getHeight()):setSize(1,objFrame:getHeight()):setSymbolSize(3):ignoreOffset():onChange(function(self) objFrame:setOffset(0, (self:getValue()-1)) end):setAnchor("topRight"):show():setZIndex(15) -local prog = objFrame:addProgressbar("exampleProgressbar"):setAnchor("bottomLeft"):setSize(30, 3):setBackground(colors.gray):setPosition(2,3):onProgressDone(function() -basalt.debug("Progress done!") -end):show() - - -local timer = objFrame:addTimer("exampleTimer"):setTime(1, -1):onCall(function() - prog:setProgress(prog:getProgress()+2) -end):start() - ---Program Frame: -local programCount = 1 -visualButton(programFrame:addButton("exampleButton"):setText("Add Shell"):setSize(13,3):setPosition(2,2):onClick(function() - local newProgramWindow = programFrame:addFrame("programFrame"..programCount):setMovable(true):setBar("Console", colors.black, colors.lightGray):showBar():setPosition(3,3):setSize(26,12):show() - local program = newProgramWindow:addProgram("exampleProgram"..programCount):setSize(26,11):setPosition(1,2):setBackground(colors.black):show() - program:execute("rom/programs/shell.lua") - programCount = programCount + 1 -end):show()) - --- Editor Frame: -editorFrame:addTextfield("exampleTextfield"):setPosition(2,2):setBackground(colors.black):setSize(w-2,h-3):setForeground(colors.white):show() - -basalt.autoUpdate() diff --git a/examples/basaltPreview2.lua b/examples/basaltPreview2.lua deleted file mode 100644 index c3b0220..0000000 --- a/examples/basaltPreview2.lua +++ /dev/null @@ -1,167 +0,0 @@ ---Basalt configurated installer -local filePath = "basalt.lua" --here you can change the file path default: basalt -if not(fs.exists(filePath))then - shell.run("pastebin run ESs1mg7P packed true "..filePath:gsub(".lua", "")) -- this is an alternative to the wget command -end -local basalt = require(filePath:gsub(".lua", "")) - -basalt.setVariable("buttonColor", basalt.schedule(function(self) - self:setBackground(colors.black) - self:setForeground(colors.lightGray) - os.sleep(0.1) - self:setBackground(colors.gray) - self:setForeground(colors.black) -end)) - -local main - -basalt.setVariable("ex1", function() - main:addAnimation():setObject(main):setAutoDestroy():offset(0,0,1):play() -end) - -basalt.setVariable("ex1Top", function() - local example1 = main:getDeepObject("example1") - example1:addAnimation():setObject(example1):setAutoDestroy():offset(0,0,1):play() -end) - -basalt.setVariable("ex2", function() - main:addAnimation():setObject(main):setAutoDestroy():offset(main:getWidth(),0,1):play() -end) - -basalt.setVariable("p1", function() - local example2 = main:getDeepObject("example2") - example2:addAnimation():setObject(example2):setAutoDestroy():offset(0,0,1):play() -end) - -basalt.setVariable("p2", function() - local example2 = main:getDeepObject("example2") - example2:addAnimation():setObject(example2):setAutoDestroy():offset(0,example2:getHeight(),1):play() -end) - -basalt.setVariable("p3", function() - local example2 = main:getDeepObject("example2") - example2:addAnimation():setObject(example2):setAutoDestroy():offset(0,example2:getHeight()*2,1):play() -end) - -basalt.setVariable("ex3", function() - main:addAnimation():setObject(main):setAutoDestroy():offset(main:getWidth()*2,0,1):play() -end) - -basalt.setVariable("e1", function() - local example3 = main:getDeepObject("example3") - example3:addAnimation():setObject(example3):setAutoDestroy():offset(0,0,1):play() -end) - -basalt.setVariable("e2", function() - local example3 = main:getDeepObject("example3") - example3:addAnimation():setObject(example3):setAutoDestroy():offset(0,example3:getHeight(),1):play() -end) - -basalt.setVariable("e3", function() - local example3 = main:getDeepObject("example3") - example3:addAnimation():setObject(example3):setAutoDestroy():offset(0,example3:getHeight()*2,1):play() -end) - -basalt.setVariable("ex4", function() - main:addAnimation():setObject(main):setAutoDestroy():offset(main:getWidth()*3,0,1):play() -end) - -basalt.setVariable("progressChange", function(self) - main:getDeepObject("progressLabel"):setText(self:getValue().."%") -end) - -basalt.setVariable("pauseP2", function() - main:getDeepObject("program2"):pause() -end) - -basalt.setVariable("pauseP3", function() - main:getDeepObject("program3"):pause() -end) - -basalt.setVariable("startAnimation", function() - main:getDeepObject("animation1"):play() -end) - -basalt.setVariable("disableStartButton", function() - main:getDeepObject("animationButton"):disable() -end) - -basalt.setVariable("enableStartButton", function() - main:getDeepObject("animationButton"):enable() -end) - -basalt.setVariable("onTextfieldFocus", function() - main:getDeepObject("coolTextfield"):setForeground(colors.lightGray) - main:getDeepObject("textfieldAnimLoseFocus"):cancel() - main:getDeepObject("textfieldAnimFocus"):play() -end) - -basalt.setVariable("onTextfieldLoseFocus", function() - main:getDeepObject("coolTextfield"):setForeground(colors.gray) - main:getDeepObject("textfieldAnimFocus"):cancel() - main:getDeepObject("textfieldAnimLoseFocus"):play() -end) - -basalt.setVariable("makeButtonVisible", function() - main:getDeepObject("showAnimBtn1"):show() - main:getDeepObject("showAnimBtn2"):show() - main:getDeepObject("showAnimBtn3"):show() -end) - -basalt.setVariable("dragPosition", function(ob, ev, bt, x, y, dragStartX, dragStartY, mouseX, mouseY) - ob:setPosition(x, y) -end) - - -local function inject(prog, key) - local events = prog:getQueuedEvents() - table.insert(events, 1, {event="key", args = {key}}) - prog:injectEvents(events) - prog:updateQueuedEvents({}) -end - -basalt.setVariable("p3Up", function() - local program = main:getDeepObject("program3") - inject(program, keys.w) -end) - -basalt.setVariable("p3Down", function() - local program = main:getDeepObject("program3") - inject(program, keys.s) -end) - -basalt.setVariable("p3Left", function() - local program = main:getDeepObject("program3") - inject(program, keys.a) -end) - -basalt.setVariable("p3Right", function() - local program = main:getDeepObject("program3") - inject(program, keys.d) -end) - -basalt.setVariable("noDrag", function(self) - return false -end) - -basalt.setVariable("openSidebar", function(self) - main:addAnimation():setObject(main:getDeepObject("sidebar")):setAutoDestroy():move(-12,1,1):play() -end) -basalt.setVariable("closeSidebar", function(self) - main:addAnimation():setObject(main:getDeepObject("sidebar")):setAutoDestroy():move(2,1,1):play() -end) - -basalt.setVariable("progressTheProgressbar", function() - os.sleep(1) - local progressbar = main:getDeepObject("progressBar") - local progress = 0 - while true do - progressbar:setProgress(progress) - progress = progress+0.25 - os.sleep(1) - end -end) - -main = basalt.createFrame():addLayout("basaltPreview2.xml") - -basalt.autoUpdate() diff --git a/examples/basaltPreview2.xml b/examples/basaltPreview2.xml deleted file mode 100644 index bbcbdfe..0000000 --- a/examples/basaltPreview2.xml +++ /dev/null @@ -1,209 +0,0 @@ - -