From e5bc39a6f77e45f4f89cc73a18782f4027b8121e Mon Sep 17 00:00:00 2001 From: Samkist Date: Mon, 30 May 2022 02:23:40 -0400 Subject: [PATCH] updated docs --- docs/Animation.md | 53 -- docs/Basalt.md | 78 --- docs/Button.md | 24 - ...ors-on-buttons-while-user-is-holding-it.md | 41 -- docs/Checkbox.md | 13 - docs/Design.md | 53 -- docs/Dropdown.md | 178 ------- docs/Executing-own-logic.md | 56 -- docs/Frame.md | 227 -------- docs/Image.md | 36 -- docs/Input.md | 13 - docs/Label.md | 34 -- docs/List.md | 151 ------ docs/Menubar.md | 1 - docs/Object.md | 247 --------- docs/Pane.md | 16 - docs/Program.md | 103 ---- docs/README.md | 21 - docs/Radio.md | 122 ----- docs/Scrollbar.md | 48 -- docs/Slider.md | 42 -- docs/Textfield.md | 72 --- docs/Thread.md | 47 -- docs/Timer.md | 49 -- docs/_media/logo.png | Bin 0 -> 257500 bytes docs/_navbar.md | 4 +- docs/_sidebar.md | 58 +- docs/{ => home}/Quick-Start.md | 0 docs/objects/Animation.md | 106 ++-- docs/objects/Basalt.md | 158 +++--- docs/objects/Button.md | 49 +- docs/objects/Checkbox.md | 27 +- docs/objects/Dropdown.md | 356 +++++++------ docs/objects/Frame.md | 386 ++++++++------ docs/objects/Image.md | 73 ++- docs/objects/Input.md | 28 +- docs/{ => objects}/Installer.md | 0 docs/objects/Label.md | 51 +- docs/objects/List.md | 302 ++++++----- docs/objects/Menubar.md | 2 - docs/objects/Object.md | 494 +++++++++--------- docs/objects/Pane.md | 32 +- docs/objects/Program.md | 207 ++++---- docs/objects/Radio.md | 244 +++++---- docs/objects/Scrollbar.md | 101 ++-- docs/objects/Slider.md | 84 +-- docs/objects/Textfield.md | 144 +++-- docs/objects/Thread.md | 94 ++-- docs/objects/Timer.md | 100 ++-- docs/tips/buttons.md | 82 +-- docs/tips/logic.md | 113 ++-- 51 files changed, 1673 insertions(+), 3347 deletions(-) delete mode 100644 docs/Animation.md delete mode 100644 docs/Basalt.md delete mode 100644 docs/Button.md delete mode 100644 docs/Change-colors-on-buttons-while-user-is-holding-it.md delete mode 100644 docs/Checkbox.md delete mode 100644 docs/Design.md delete mode 100644 docs/Dropdown.md delete mode 100644 docs/Executing-own-logic.md delete mode 100644 docs/Frame.md delete mode 100644 docs/Image.md delete mode 100644 docs/Input.md delete mode 100644 docs/Label.md delete mode 100644 docs/List.md delete mode 100644 docs/Menubar.md delete mode 100644 docs/Object.md delete mode 100644 docs/Pane.md delete mode 100644 docs/Program.md delete mode 100644 docs/README.md delete mode 100644 docs/Radio.md delete mode 100644 docs/Scrollbar.md delete mode 100644 docs/Slider.md delete mode 100644 docs/Textfield.md delete mode 100644 docs/Thread.md delete mode 100644 docs/Timer.md create mode 100644 docs/_media/logo.png rename docs/{ => home}/Quick-Start.md (100%) rename docs/{ => objects}/Installer.md (100%) diff --git a/docs/Animation.md b/docs/Animation.md deleted file mode 100644 index dcd9376..0000000 --- a/docs/Animation.md +++ /dev/null @@ -1,53 +0,0 @@ -With animations you can create a beautiful experience for users while interacting with objects.
-For now the animation class is very basic, i will expand it in the future, but i have to say already now you can do almost everything you can imagine! - -Right now animation is a class which makes use of the timer event
-Here are all possible functions available for animations: - -## add -adds a new function to your animation -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setPosition(3,3) end):wait(1):add(function() testButton:setPosition(1,1,"r") end):wait(2):add(function() testButton:setPosition(1,1,"r") end) - -aAnimation:play() -- this will set the button position to 3,3, waits 1 sec., sets it to 4,4, waits 2 sec. and then sets the position to 5,5 -```` -**parameters:** function
-**returns:** self
- -## wait -sets a wait timer for the next function after the previous function got executed, no wait timer calls the next function immediatly -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setPosition(3,3) end):wait(1):add(function() testButton:setPosition(1,1,"r") end):wait(2):add(function() testButton:setPosition(1,1,"r") end) - -aAnimation:play() -- this will set the button position to 3,3, waits 1 sec., sets it to 4,4, waits 2 sec. and then sets the position to 5,5 -```` -**parameters:** timer - how long we should wait to call the next function
-**returns:** self
- -## play -starts to play the animation -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setBackground(colors.black) end):wait(1):add(function() testButton:setBackground(colors.gray) end):wait(1):add(function() testButton:setBackground(colors.lightGray) end) - -aAnimation:play() -- changes the background color of that button from black to gray and then to lightGray -```` -**parameters:** [endlessloop] - bool if it should loop forever - will change that to loopcount in the future
-**returns:** self
- -## cancel -cancels the animation -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setBackground(colors.black) end):wait(1):add(function() aAnimation:cancel() end):wait(1):add(function() testButton:setBackground(colors.lightGray) end) - -aAnimation:play() -```` -**parameters:** -
-**returns:** self
\ No newline at end of file diff --git a/docs/Basalt.md b/docs/Basalt.md deleted file mode 100644 index a213f87..0000000 --- a/docs/Basalt.md +++ /dev/null @@ -1,78 +0,0 @@ -Basalt is managing all the things. - -To start using Basalt you have to do the following line of code: - -`local basalt = dofile("basalt.lua")` - -remember you need the basalt.lua file on your computer! - -Now you are able to call all these functions: - -## basalt.createFrame -create a frame without a parent -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -```` -**parameters:** string name
-**returns:** new frame object
- -## basalt.removeFrame -removes a frame (only possible for non-parent frames) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.removeFrame("myFirstFrame") -```` -**parameters:** string name
-**returns:**-
- -## basalt.getFrame -With that function you can get frames, but only frames without a parent! -````lua -basalt.createFrame("myFirstFrame") -basalt.getFrame("myFirstFrame"):show() -```` -**parameters:** string name
-**returns:** frame object
- -## basalt.getActiveFrame -returns the currently active (without a parent) frame -````lua -basalt.createFrame("myFirstFrame"):show() -basalt.debug(basalt.getActiveFrame():getName()) -- returns myFirstFrame -```` -**parameters:** -
-**returns:** frame object
- -## basalt.autoUpdate -starts the draw and event handler until you use basalt.stopUpdate -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.autoUpdate() -```` -**parameters:** -
-**returns:**-
- -## basalt.update -calls the draw and event handler method once -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.autoUpdate() -```` -**parameters:** string event, ... (you can use some paramters here. you dont have to pass any paramters )
-**returns:**-
- -## basalt.stopUpdate -stops the draw and event handler -````lua -basalt.stopUpdate() -```` -**parameters:** -
-**returns:**-
- -## basalt.debug -creates a label with some information on the main frame on the bottom left, if you click on that label it will open a log view for you see it as the new print for debugging -````lua -basalt.debug("Hi i am cute") -```` -**parameters:** ... (multiple parameters are possible, like print does)
-**returns:**-
diff --git a/docs/Button.md b/docs/Button.md deleted file mode 100644 index 29f4b7c..0000000 --- a/docs/Button.md +++ /dev/null @@ -1,24 +0,0 @@ -Buttons are objects, which execute function by clicking on them - -The following list is only available to buttons:
-Remember button also inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): - -## setText -Sets the displayed button text -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setText("Click"):show() -- you could also use :setValue() instead of :setText() - no difference -```` -**Arguments:** string text
-**returns:** self
- -# Examples -Add a onClick event: -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setText("Click"):onClick(function(self,event,button,x,y) -if(event=="mouse_click")and(button==1)then -basalt.debug("Left mousebutton got clicked!") -end -end):show() -```` \ No newline at end of file diff --git a/docs/Change-colors-on-buttons-while-user-is-holding-it.md b/docs/Change-colors-on-buttons-while-user-is-holding-it.md deleted file mode 100644 index 32131e8..0000000 --- a/docs/Change-colors-on-buttons-while-user-is-holding-it.md +++ /dev/null @@ -1,41 +0,0 @@ -Here I want to explain to you how you would create a button with the default color gray, and as long as the user is clicking on the button it will change its color to black (the default frame-background is lightGray). - -To make this possible the button needs 1 onClick event, 1 onClickUp event and 1 onLoseFocus event. - -Very interesting sidetip: events can hold multiple functions!
-**Example snippet:** -````lua -local function buttonColoring() --- here you can add some coloring for your button -end -local function buttonLogic() --- here you can add some logic for your button -end -local button = mainFrame:addButton("ExampleButton"):show() -button:onClick(buttonColoring):onClick(buttonLogic) -- yes this would work, if not its a bug! -```` - -This means you can create a function wich handles only the coloring side of your button, and if your button also needs some logic you just create your own unique function for that and add it to your button. - -With this knowledge we create now a function where we pass a button-object as parameter and this will setup the coloring of our button: - -**Example snippet:** -````lua -local basalt = dofile("basalt.lua") -local mainFrame = basalt.createFrame("mainFrame"):show() -local button = mainFrame:addButton("firstButton"):setPosition(3,3):setSize(12,3):setText("Click me"):setBackground(colors.gray):setForeground(colors.black):show() - -local button2 = mainFrame:addButton("secondButton"):setPosition(25,3):setSize(16,3):setText("Another Btn"):setBackground(colors.gray):setForeground(colors.black):show() - -local function setupButtonColoring(btn) -btn:onClick(function() btn:setBackground(colors.black) btn:setForeground(colors.lightGray) end) -btn:onClickUp(function() btn:setBackground(colors.gray) btn:setForeground(colors.black) end) -btn:onLoseFocus(function() btn:setBackground(colors.gray) btn:setForeground(colors.black) end) -end -setupButtonColoring(button) -setupButtonColoring(button2) - -basalt.autoUpdate() -```` - -Now you've got a function which sets your buttons up. \ No newline at end of file diff --git a/docs/Checkbox.md b/docs/Checkbox.md deleted file mode 100644 index 82049bc..0000000 --- a/docs/Checkbox.md +++ /dev/null @@ -1,13 +0,0 @@ -With checkbox, the user can set a bool to true or false - -Here are all possible functions available for checkbox: - Remember checkbox inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): - - -Create a onChange event: -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):onChange(function(self) basalt.debug("The value got changed into "..self:getValue()) end):show() - -```` - diff --git a/docs/Design.md b/docs/Design.md deleted file mode 100644 index 732b3b5..0000000 --- a/docs/Design.md +++ /dev/null @@ -1,53 +0,0 @@ -Hi! Here i will give you some tips on how to create cool designs with NyoUI - -First of all, you have to check out animations, because animations are very important for creating cool designs - -Let us begin with simple things: - -# Recolor objects - -Let us create the Button:
-````lua -local NyoUI = dofile("NyoUI.lua") -local mainFrame = NyoUI.createFrame("myFirstFrame"):setBackground(colors.black):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):setText("Beautiful"):setBackground(colors.gray):show() -```` - -Here lets make use of the event system:
-````lua -local function changeButtonColor(self,event,typ,x,y) - if(event=="mouse_click")then - self:setBackground(colors.lightGray) - end - if(event=="mouse_up")then - self:setBackground(colors.gray) - end -end - -local function buttonLogic() - -- here you can do some logic when button gets the mouse_up event -end - -aButton:onClick(changeButtonColor) -- button color change on click -aButton:onClickUp(changeButtonColor) -- button color change on click up -aButton:onClickUp(buttonLogic) -- button logic on click up -aButton:onLoseFocus(function(self) self:setBackground(colors.gray) end) -- if user is clicking on the button and dragging out of button size this event will change the bg color back to gray -```` - -# fade in/out objects -instead of recoloring we are also able to slowly reposition the button, something like fade in:
-````lua -local buttonAnimation = mainFrame:addAnimation("buttonFadeAnim") -local function fadeButtonIn(btn) - if(btn.x < 5)then - btn:setPosition(1,0,"r") - else - buttonAnimation:cancel() -- here you cancel the loop - end -end - -buttonAnimation:wait(0.1):add(function() fadeButtonIn(aButton) end):play(true) -- with play(true) you will create a infinite loop -```` -This is also possible with entire frames and its children objects. So keep that in mind if you want to create something like a bigger panel to the right or a menu bar - -WIP \ No newline at end of file diff --git a/docs/Dropdown.md b/docs/Dropdown.md deleted file mode 100644 index 6325181..0000000 --- a/docs/Dropdown.md +++ /dev/null @@ -1,178 +0,0 @@ -Dropdowns are objects where you can create endless entrys the user can click on a button and it opens a "list" where the user can choose a entry - -Here is a example of how to create a standard dropdown: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -```` - -Here are all possible functions available for dropdowns:
-Remember dropdown inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): - -## addItem -Adds a item to the dropdown - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -```` -**parameters:** string text, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
-**returns:** self
- -## removeItem -Removes a item from the dropdown - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:removeItem(2) -```` -**parameters:** number index
-**returns:** self
- -## editItem -Edits a item on the dropdown - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:editItem(3,"3. Edited Entry",colors.yellow,colors.green) -```` -**parameters:** number index, string text, number bgcolor, number fgcolor, any ...
-**returns:** self
- -## setScrollable -Makes the dropdown scrollable - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setScrollable(true) -```` -**parameters:** boolean isScrollable
-**returns:** self
- -## selectItem -selects a item in the dropdown (same as a player would click on a item) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:selectItem(1) -```` -**parameters:** number index
-**returns:** self
- -## clear -clears the entire list (dropdown) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:clear() -```` -**parameters:** -
-**returns:** self
- -## getItemIndex -returns the item index of the currently selected item - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getItemIndex() -```` -**parameters:** -
-**returns:** number index
- -## setSelectedItem -Sets the background of the item which is currently selected - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setSelectedItem(colors.green, colors.blue) -```` -**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
-**returns:** self
- -## setOffset -sets the dropdown offset (will automatically change if scrolling is active) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setOffset(3) -```` -**parameters:** number offsetValue
-**returns:** self
- -## getOffset -returns the current offset - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getOffset() -```` -**parameters:** -
-**returns:** number offsetValue
- -## getOffset -returns the current offset - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getOffset() -```` -**parameters:** -
-**returns:** number offsetValue
- -## setDropdownSize -sets the dropdown size (if you click on the button) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setDropdownSize(12, 4) -```` -**parameters:** number width, number height
-**returns:** self
\ No newline at end of file diff --git a/docs/Executing-own-logic.md b/docs/Executing-own-logic.md deleted file mode 100644 index 80a5b6d..0000000 --- a/docs/Executing-own-logic.md +++ /dev/null @@ -1,56 +0,0 @@ -You question yourself how you can execute your own logic while basalt is also active? There are multiple ways of doing that: - -## Method 1: -Using parallel.waitForAll - -````lua -local basalt = dofile("basalt.lua") - -local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame and a button without functionality -mainFrame:addButton("aButton"):onClick(function() end):show() - -local function yourCustomHandler() - while true do - -- add your logic here - os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell - end -end - -parallel.waitForAll(basalt.autoUpdate, yourCustomHandler) -- here it will handle your function (yourCustomHandler) and basalts handlers at the time -```` -You can read [here](http://www.computercraft.info/wiki/Parallel_(API)) what exactly parallel.waitForAll() does - -## Method 2: -Using threads - -````lua -local basalt = dofile("basalt.lua") - -local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a thread -mainFrame:addButton("aButton"):onClick(function() end):show() -local thread = mainFrame:addThread("customHandlerExecutingThread") - -local function yourCustomHandler() - while true do - -- add your logic here - os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell - end -end -thread:start(yourCustomHandler) -- this will create a coroutine and starts the coroutine, os.sleep does the rest, so you just have to call start once. -```` - -## Method 3: -Using timers - -````lua -local basalt = dofile("basalt.lua") - -local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a timer -mainFrame:addButton("aButton"):onClick(function() end):show() -local timer = mainFrame:addTimer("customHandlerExecutingTimer") - -local function yourCustomHandler() - -- add your logic here -end -timer:onCall(yourCustomHandler):setTime(1, -1):start() -- this will call your function every second until you :cancel() the timer -```` \ No newline at end of file diff --git a/docs/Frame.md b/docs/Frame.md deleted file mode 100644 index d2b35ab..0000000 --- a/docs/Frame.md +++ /dev/null @@ -1,227 +0,0 @@ - - -Frames are like containers, but are also normal objects. -In other words, you can add other objects _(even frames)_ to a frame; if the frame itself is visible -all sub-objects _(if they are set as visible)_ are also visible. A better description will follow. - -## basalt.createFrame -Creates a new non-parent frame - in most cases it is the first thing you'll need. - -#### Parameters: -1. `string` name (should be unique) - -#### Returns: -1. `frame | nil` The frame created by createFrame, or `nil` if there is already a frame with the given name. - -#### Usage: -* Create a frame with an id "myFirstFrame", stored in a variable named frame -````lua -local myFrame = basalt.createFrame("myFirstFrame") -```` - -## addFrame -Creates a child frame on the frame, the same as [basalt.createFrame](https://github.com/Pyroxenium/Basalt/wiki/Frame#basaltcreateframe) except the frames are given a parent-child relationship automatically - -#### Parameters: -1. `string` name (should be unique) - -#### Returns: -1. `frame | nil` The frame created by addFrame, or `nil` if there is already a child frame with the given name.
- -#### Usage: -* Create a frame with id "myFirstFrame" then create a child of that frame, named "myFirstSubFrame" -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local myFrame = mainFrame:addFrame("myFirstSubFrame") -```` - -## setBar -Sets the text, background, and foreground of the upper bar of the frame, accordingly. - -#### Parameters: -1. `string` The text to set the bar to -2. `number` The background color -2. `number` The foreground color - -#### Returns: -1. `frame` The frame being used - -#### Usage: -* Set the title to "My first frame!", with a background of gray and a foreground of light gray. -````lua -frame:setBar("My first Frame!", colors.gray, colors.lightGray) -```` -* Store the frame, use the named frame variable after assigning. -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local myFrame = MainFrame:addFrame("myFirstSubFrame") -myFrame:setBar("My first Frame!") -```` -* This abuses the call-chaining that Basalt uses. -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local myFrame = mainFrame:addFrame("myFirstSubFrame"):setBar("My first Frame!") -```` - -## setBarTextAlign -Sets the frame's bar-text alignment - -#### Parameters: -1. `string` Can be supplied with "left", "center", or "right" -#### Returns: -1. `frame` The frame being used -#### Usage: -* Set the title of myFrame to "My first frame!", and align it to the right. -````lua -local mainFrame = myFrame:setBar("My first Frame!"):setBarTextAlign("right") -```` - -## showBar -Toggles the frame's upper bar -#### Parameters: -1. `boolean | nil` Whether the frame's bar is visible or if supplied `nil`, is automatically visible -#### Returns: -1. `frame` The frame being used -#### Usage: -* Sets myFrame to have a bar titled "Hello World!" and subsequently displays it. -````lua -local mainFrame = myFrame:setBar("Hello World!"):showBar() -```` - -## ~~isModifierActive~~ -### _Disabled, this function is a WIP_ -Returns true if the user is currently holding the respective key down - -#### Parameters: -1. `number | string` - Any os.queueEvent("key") key, or you can use the following strings: "shift", "ctrl", "alt" -#### Returns: -1. `boolean` - Whether the user is holding the key down -#### Usage: -* Checks if the "shift" modifier is active on the myFrame frame -````lua -local isActive = myFrame:isModifierActive("shift") -```` -* Creates a label, changing the text to "Shift is inactive oh no :(" and "Shift is active yay!", accordingly. -````lua -local aLabel = myFrame:addLabel("myFirstLabel"):setText("Shift is inactive oh no :(") -myFrame:addButton("myFirstButton"):setText("Click"):onClick( - function() - if myFrame:isModifierActive("shift") then - aLabel:setText("Shift is active yay!") - else - aLabel:setText("Shift is inactive oh no :(") - end - end -) -```` - -## getObject -Returns a child object of the frame - -#### Parameters: -1. `string` The name of the child object -#### Returns: -1. `object | nil` The object with the supplied name, or `nil` if there is no object present with the given name -#### Usage: -* Adds a button with id "myFirstButton", then retrieves it again through the frame object -````lua -myFrame:addButton("myFirstButton") -local aButton = myFrame:getObject("myFirstButton") -```` - -## removeObject -Removes a child object from the frame -#### Parameters: -1. `string` The name of the child object -#### Returns: -1. `boolean` Whether the object with the given name was properly removed -#### Usage: -* Adds a button with the id "myFirstButton", then removes it with the aforementioned id -````lua -myFrame:addButton("myFirstButton") -myFrame:removeObject("myFirstButton") -```` - -## setFocusedObject -Sets the currently focused object - -#### Parameters: -1. `object` The child object to focus on -#### Returns: -1. `frame` The frame being used -#### Usage: -* Creates button with id "myFirstButton", sets the focused object to the previously mentioned button -````lua -local aButton = myFrame:addButton("myFirstButton") -myFrame:setFocusedObject(aButton) -```` -## removeFocusedObject -Removes the focus of the supplied object -#### Parameters: -1. `object` The child object to remove focus from -#### Returns: -1. `frame` The frame being used -#### Usage: -* Creates a button with id "myFirstButton", then removes the focus from that button -````lua -local aButton = myFrame:addButton("myFirstButton") -myFrame:removeFocusedObject(aButton) -```` - -## getFocusedObject -Gets the currently focused object -#### Parameters: -#### Returns: -1. `object` The currently focused object -#### Usage: -* Gets the currently focused object from the frame, storing it in a variable -````lua -local focusedObject = myFrame:getFocusedObject() -```` -## setMovable - -Sets whether the frame can be moved. _In order to move the frame click and drag the upper bar of the frame_ -#### Parameters: -1. `boolean` Whether the object is movable -#### Returns: -1. `frame` The frame being used -#### Usage: -* Creates a frame with id "myFirstFrame" and makes it movable -````lua -local myFrame = basalt.createFrame("myFirstFrame"):setMovable(true) -```` - -## ~~setMoveable~~ -### _Deprecated in favor of setMovable_ - -Sets whether the frame can be moved. _In order to move the frame use the upper bar of the frame_ -#### Parameters: -1. `boolean` Whether the object is movable -#### Returns: -1. `frame` The frame being used -#### Usage: -* Creates a frame with id "myFirstFrame" and makes it movable -````lua -local myFrame = basalt.createFrame("myFirstFrame"):setMoveable(true) -```` - -## setOffset -Sets the frame's coordinate offset. The frame's child objects will receive the frame's coordinate offset. For example, when using the scrollbar, if you use its value to add an offset to a frame, you will get a scrollable frame. -Objects are also able to ignore the offset by using :ignoreOffset() (For example, you may want to ignore the offset on the scrollbar itself) - -The function can be supplied negative offsets - -#### Parameters: -1. `number` The x direction offset (+/-) -2. `number` The y direction offset (+/-) -#### Returns: -1. `frame` The frame being used -#### Usage: -* Creates "myFirstFrame" with an x offset of 5 and a y offset of 3 -````lua -local myFrame = basalt.createFrame("myFirstFrame"):setOffset(5, 3) -```` -* Creates "myFirstFrame" with an x offset of 5 and a y offset of -5 (Meaning if you added a button with y position 5, it would be at y position 0) -````lua -local myFrame = basalt.createFrame("myFirstFrame"):setOffset(5, -5) -```` \ No newline at end of file diff --git a/docs/Image.md b/docs/Image.md deleted file mode 100644 index 38c34f9..0000000 --- a/docs/Image.md +++ /dev/null @@ -1,36 +0,0 @@ -The image object is for adding more advanced backgrounds. -It also provides a :shrink() function, where you can shrink the images to smaller ones. This functionallity is fully provided by the blittle library created by Bomb Bloke. I did not ask for permission to add it into the framework. If the creator wants me to remove the blittle part, just text me on discord! - -Here are all possible functions available for image: -Remember image inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): - - -## loadImage -loads a image into the memory. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aImage = mainFrame:addImage("myFirstImage"):loadImage("randomImage.nfp"):show() -```` -**Arguments:** string path
-**returns:** self
- - -## loadBlittleImage -- not finished yet -loads a blittle image into the memory. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aImage = mainFrame:addImage("myFirstImage"):loadBlittleImage("blittleImage.blt"):show() -```` -**Arguments:** string path
-**returns:** self
- -## shrink -If you were loading a normal (paint) image into the memory, this function would shrink it to a -blittle image and immediatly draws it (if it's visible) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aImage = mainFrame:addImage("myFirstImage"):loadBlittleImage("randomImage.nfp"):shrink():show() -```` -**Arguments:** -
-**returns:** self
- diff --git a/docs/Input.md b/docs/Input.md deleted file mode 100644 index f3d0ef1..0000000 --- a/docs/Input.md +++ /dev/null @@ -1,13 +0,0 @@ -With input's you are able to create a object where the user can type something in.
- -Here are all possible functions available for inputs:
-Remember input inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): - -## setInputType -changes the input type -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aInput = mainFrame:addInput("myFirstInput"):setInputType("password"):show() -```` -**parameters:** string value ("text", "password", "number")
-**returns:** self
diff --git a/docs/Label.md b/docs/Label.md deleted file mode 100644 index a82bc54..0000000 --- a/docs/Label.md +++ /dev/null @@ -1,34 +0,0 @@ -With the Label object you are able to add some text. - -By default label's width is auto sizing based on the length of the text. If you change the size with setSize it will automatically stop autosizing the width. - -Here are all possible functions available for labels.
-Remember label inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): - -## setText -sets the text which gets displayed. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello lovely basalt community!"):show() -```` -**arguments:** string text
-**returns:** self
- -## setFontSize -sets the font size of that text. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello"):setFontSize(2):show() -```` -**arguments:** number size (1 = default, 2 = big, 3 = bigger, 4 = huge)
-**returns:** self
- -## getFontSize -returns the fontsize -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello"):setFontSize(2):show() -basalt.debug(aInput:getFontSize()) -- returns 2 -```` -**arguments:**
-**returns:** number
diff --git a/docs/List.md b/docs/List.md deleted file mode 100644 index 5995770..0000000 --- a/docs/List.md +++ /dev/null @@ -1,151 +0,0 @@ -Lists are objects where you can create endless entrys and the user can choose one of them - -Here is a example of how to create a standard list: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -```` - -This will create a default list with the size 8 width and 5 height on position 1 1 (relative to its parent frame), the default background is colors.lightGray, the default text color is colors.black and the default zIndex is 5. The default horizontal text align is "center", default symbol is ">" - -Here are all possible functions available for lists. Remember list inherit from [object](https://github.com/NoryiE/basalt/wiki/Object): - -## addItem -Adds a item into the list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -```` -**parameters:** string text, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
-**returns:** self
- -## removeItem -Removes a item from the list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:removeItem(2) -```` -**parameters:** number index
-**returns:** self
- -## editItem -Edits a item on the list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:editItem(3,"3. Edited Entry",colors.yellow,colors.green) -```` -**parameters:** number index, string text, number bgcolor, number fgcolor, any ...
-**returns:** self
- -## setScrollable -Makes the list scrollable - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:setScrollable(true) -```` -**parameters:** boolean isScrollable
-**returns:** self
- -## selectItem -selects a item in the list (same as a player would click on a item) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:selectItem(1) -```` -**parameters:** number index
-**returns:** self
- -## clear -clears the entire list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:clear() -```` -**parameters:** -
-**returns:** self
- -## getItemIndex -returns the item index of the currently selected item - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getItemIndex() -```` -**parameters:** -
-**returns:** number index
- -## setSelectedItem -Sets the background of the item which is currently selected - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:setSelectedItem(colors.green, colors.blue) -```` -**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
-**returns:** self
- -## setOffset -sets the list offset (will automatically change if scrolling is active) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:setOffset(3) -```` -**parameters:** number offsetValue
-**returns:** self
- -## getOffset -returns the current offset - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:getOffset() -```` -**parameters:** -
-**returns:** number offsetValue
\ No newline at end of file diff --git a/docs/Menubar.md b/docs/Menubar.md deleted file mode 100644 index 6d3f665..0000000 --- a/docs/Menubar.md +++ /dev/null @@ -1 +0,0 @@ -WIP \ No newline at end of file diff --git a/docs/Object.md b/docs/Object.md deleted file mode 100644 index 2c1ea71..0000000 --- a/docs/Object.md +++ /dev/null @@ -1,247 +0,0 @@ -This is the base class of all visual objects. This means, if you create a button, label, frame or something else visual (no timers, threads or animations) the following list can be used: - -## show -shows the object (only if the parent frame is already visible) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local button = mainFrame:addButton("myFirstButton") -button:show() -```` -**parameters:** -
-**returns:** self
- -## hide -hides the object -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local button = mainFrame:addButton("myFirstButton"):setText("Close"):onClick(function() mainFrame:hide() end) -button:show() -```` -**parameters:** -
-**returns:** self
- -## setPosition -Changes the position relative to its parent frame -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setPosition(2,3) -```` -**parameters:** number x, number y[, boolean relative], if relative is set to true it will add/remove instead of set x, y
-**returns:** self
- - - -## setBackground -Changes the object background color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setBackground(colors.lightGray) -```` -**parameters:** number color
-**returns:** self
- -## setForeground -Changes the object text color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setForeground(colors.black) -```` -**parameters:** number color
-**returns:** self
- -## setSize -Changes the object size -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setSize(15,5) -```` -**parameters:** number width, number length
-**returns:** self
- -## setFocus -sets the object to be the focused object. -If you click on a object, it's normaly automatically the focused object. As example, if you :show() a frame and you want this particular frame to be in -the foreground, you have to use :setFocus() -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setFocus():show() -```` -**parameters:** -
-**returns:** self
- -## setZIndex -changes the z index (higher z index do have higher draw/event priority) 10 is more important than 5 or 1. You are also able to add multiple objects to the same z index, which means if you create a couple of buttons, you set their z index to 10, everything below 10 is less important, everything above 10 is more important. On the same z index: the last object which gets created is the most important one. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setZIndex(1):show() -```` -**parameters:** number index
-**returns:** self
- -## setParent -changes the frame parent of that object -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRandomFrame = basalt.createFrame("aRandomFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):onClick(function() aRandomFrame:setParent(mainFrame) end):show() -```` -**parameters:** frame object
-**returns:** self
- -## isFocused -returns if the object is currently the focused object of the parent frame - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):show() -basalt.debug(aButton:isFocused()) -- shows true or false as a debug message -```` -**parameters:** -
-**returns:** boolean
- -## getAnchorPosition -converts the x,y coordinates into the anchor coordinates of that object - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setSize(15,15):show() -local aButton = mainFrame:addButton("myFirstButton"):setAnchor("right","bottom"):setSize(8,1):setPosition(1,1):show() -basalt.debug(aButton:getAnchorPosition()) -- returns 7,14 (framesize - own size) instead of 1,1 -```` -**parameters:** number x, number y - or nothing (if nothing it uses the object's x, y)
-**returns:** number x, number y (converted)
- -## setAnchor -sets the anchor of that object - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setAnchor("right"):show() -local aButton = mainFrame:addButton("myFirstButton"):setAnchor("bottom","right"):setSize(8,1):setPosition(1,1):show() -```` -**parameters:** string sides - ("left", "right", "top", "bottom") you can stack positions like so ..:setAnchor("right", "bottom")
-**returns:** self
- -## getAbsolutePosition -converts the relative coordinates into absolute coordinates -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setPosition(3,3):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(8,1):setPosition(4,2):show() -basalt.debug(aButton:getAbsolutePosition()) -- returns 7,5 (frame coords + own coords) instead of 4,2 -```` -**parameters:** number x, number y - or nothing (if nothing it uses the object's x, y)
-**returns:** self
- -## setTextAlign -sets the text align of the object (for example buttons) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(12,3):setTextAlign("right", "center"):setText("Dont't..."):show() -```` -**parameters:** string horizontal, string vertical - ("left", "center", "right")
-**returns:** self
- -## setValue -sets the value of that object (input, label, checkbox, textfield, scrollbar,...) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):setValue(true):show() -```` -**parameters:** any value
-**returns:** self
- -## getValue -returns the currently saved value -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):setValue(true):show() -basalt.debug(aCheckbox:getValue()) -- returns true -```` -**parameters:**-
-**returns:** any value
- -## getHeight/getWidth -returns the height or width -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(5,8):show() -basalt.debug(aButton:getHeight()) -- returns 8 -```` -**parameters:**-
-**returns:** number height/width
- -## isVisible -returns if the object is currently visible -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(5,8):show() -basalt.debug(aButton:isVisible()) -- returns true -```` -**parameters:**-
-**returns:** boolean
- -## getName -returns the given name of that object -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.debug(mainFrame:getName()) -- returns myFirstFrame -```` -**parameters:**-
-**returns:** string name
- -# Object Events -These object events are available for all objects, if a object got some unique events, you can see them in their own category - -## onClick -creates a mouse_click event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClick(function(self,event,button,x,y) basalt.debug("Hellooww UwU") end):show() -```` -**parameters:** function func
-**returns:** self
- -## onClickUp -creates a click_up event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClickUp(function(self,event,button,x,y) basalt.debug("Byeeeee UwU") end):show() -```` -**parameters:** function func
-**returns:** self
- -## onMouseDrag -creates a mouse_drag event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClickUp(function(self,event,button,x,y) basalt.debug("Byeeeee UwU") end):show() -```` -**parameters:** function func
-**returns:** self
- -## onChange -creates a change event (fires as soon as the value gets changed) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):onChange(function(self) basalt.debug("i got changed into "..self:getValue()) end):show() -```` -**parameters:** function func
-**returns:** self
- -## onKey -creates a key(board) - event can be key or char -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):onKey(function(self,event,key) basalt.debug("you clicked "..key) end):show() -```` -**parameters:** function func
-**returns:** self
- -## onLoseFocus -creates a lose focus event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):onLoseFocus(function(self) basalt.debug("please come back..") end):show() -```` -**parameters:** function func
-**returns:** self
- -## onGetFocus -creates a get focus event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):onGetFocus(function(self) basalt.debug("thanks!") end):show() -```` -**parameters:** function func
-**returns:** self
\ No newline at end of file diff --git a/docs/Pane.md b/docs/Pane.md deleted file mode 100644 index e2652e1..0000000 --- a/docs/Pane.md +++ /dev/null @@ -1,16 +0,0 @@ -Panes are very simple sizeable background objects. - -The following list is only available to panes:
-Remember pane also inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): - -Pane doesn't have any custom functionallity. If you want to change the color/position or size, just check out the [object](https://github.com/NoryiE/basalt/wiki/Object) wikipage. - -## Example: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aPane = mainFrame:addPane("myFirstBackground") -aPane:setSize(30, 10) -aPane:setBackground(colors.yellow) -aPane:show() -```` \ No newline at end of file diff --git a/docs/Program.md b/docs/Program.md deleted file mode 100644 index 59a28d9..0000000 --- a/docs/Program.md +++ /dev/null @@ -1,103 +0,0 @@ -With a program object you are able to open programs like shell or worm or any custom program you've made. There is only 1 thing you have to remember: the program needs at least one os.sleep() or coroutine.yield() somewhere. -
-Here is a list of all available functions for programs:
-Remember program inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): - -## getStatus -returns the current status -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):show() -basalt.debug(aProgram:getStatus()) -- returns "running", "normal", "suspended" or "dead" -```` -**parameters:**-
-**returns:** string "running" - if its running, "normal" - is active but not running (waiting for a event), "suspended" - is suspended or not started, "dead" - has finished or stopped with an error
- -## execute -executes the given path (-program) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):show() -aProgram:execute("rom/programs/fun/worm.lua") -- executes worm -```` -**parameters:** string filepath - (the path to the program you want to execute)
-**returns:** self
- -## stop -gives a terminate event to the program, which means if you are running a shell, and the shell executes a program by itself you have to call stop 2 times to entirely close the running program -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("close"):onClick(function() aProgram:stop() end):show() - -```` -**parameters:**-
-**returns:** self
- -## pause -pauses the program (prevents the program from receiving events) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("close"):onClick(function() aProgram:pause(true) end):show() - -```` -**parameters:** boolean pause
-**returns:** self
- -## isPaused -returns if the program is currently paused -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("pause"):onClick(function() basalt.debug(aProgram:isPaused()) end):show() - -```` -**parameters:** -
-**returns:** boolean isPaused
- -## injectEvent -injects a event into the program manually -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("inject"):onClick(function() aProgram:injectEvent("char", "w") end):show() - -```` -**parameters:** string event, any parameter, any parameter, any parameter, any parameter, boolean ignorePause
-**returns:** self
- -## injectEvents -injects a event table into the program manually -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() ---example will follow - -```` -**parameters:** string event, any parameter, any parameter, any parameter, any parameter, boolean ignorePause
-**returns:** self
- -## getQueuedEvents -returns a table of all currently queued events (while pause is active incomming events will go into a queueEvents table) as soon as the program gets unpaused -it will inject these events -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("inject"):onClick(function() basalt.debug(aProgram:getQueuedEvents()) end):show() - -```` -**parameters:** -
-**returns:** table queuedEvents
- -## updateQueuedEvents -here you can manipulate the queuedEvents table with your own events table -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() ---example will follow - -```` -**parameters:** table queuedEvents
-**returns:** self
- diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index c5c39c4..0000000 --- a/docs/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Welcome to The Basalt Wiki! -*Note: The Basalt Wiki is a work in progress, now also just migrated away from github wiki. Please treat Wiki errors the same as bugs and report them accordingly.* - -Here you can find information about how to use Basalt as well as examples of functional Basalt code. The aim of Basalt is to improve user interaction through visual display. - -On the left side of this page you can find a Wiki Navigation, where you can find a more detailed list of Basalt's features - -## About Basalt - -Basalt is intended to be an easy-to-understand UI Framework designed for CC:Tweaked (AKA Computer Craft: Tweaked) - a popular minecraft mod. For more information about CC:Tweaked, checkout the project's home page. - -## Quick Demo -![Preview](https://media0.giphy.com/media/fvmNPshXKeU7FFA9iA/giphy.gif) - -## Questions & Bugs - -Obviously NyoriE has implemented some easter eggs, _some people_ call them "bugs". If you happen to discover one of these just make a new issue. - -Additionally, if you have questions about Basalt or how to make use of it, feel free to create a new discussion on Basalt's Discussion Board. - -You may also join the Discord: https://discord.gg/yNNnmBVBpE \ No newline at end of file diff --git a/docs/Radio.md b/docs/Radio.md deleted file mode 100644 index cc21e58..0000000 --- a/docs/Radio.md +++ /dev/null @@ -1,122 +0,0 @@ -Radios are objects where you can create endless entrys the user can click on a button and it opens a "list" where the user can choose a entry - -Here is a example of how to create a standard radio: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -```` - -Here are all possible functions available for radios:
-Remember radio inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): - -## addItem -Adds a item to the radio - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -```` -**parameters:** string text, number x, number y, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
-**returns:** self
- -## removeItem -Removes a item from the radio - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:removeItem(2) -```` -**parameters:** number index
-**returns:** self
- -## editItem -Edits a item on the radio - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:editItem(3,"3. Edited Entry",3,6,colors.yellow,colors.green) -```` -**parameters:** number index, string text, number x, number y, number bgcolor, number fgcolor, any ...
-**returns:** self
- -## setScrollable -Makes the radio scrollable - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:setScrollable(true) -```` -**parameters:** boolean isScrollable
-**returns:** self
- -## selectItem -selects a item in the radio (same as a player would click on a item) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:selectItem(1) -```` -**parameters:** number index
-**returns:** self
- -## clear -clears the entire list (radio) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:clear() -```` -**parameters:** -
-**returns:** self
- -## getItemIndex -returns the item index of the currently selected item - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:getItemIndex() -```` -**parameters:** -
-**returns:** number index
- -## setSelectedItem -Sets the background of the item which is currently selected - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:setSelectedItem(colors.green, colors.blue) -```` -**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
-**returns:** self
\ No newline at end of file diff --git a/docs/Scrollbar.md b/docs/Scrollbar.md deleted file mode 100644 index 6fd1925..0000000 --- a/docs/Scrollbar.md +++ /dev/null @@ -1,48 +0,0 @@ -Scrollbars are objects, the user can scroll vertically or horizontally, this can change the value.
-Here is a example of how to create a standard scrollbar: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):show() -```` -Here are all possible functions available for scrollbars. Remember scrollbar inherit from [object](https://github.com/NoryiE/Basalt/wiki/Object): - -## setSymbol -Changes the symbol - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setSymbol("X"):show() -```` -**parameters:** char symbol
-**returns:** self
- -## setBackgroundSymbol -Changes the background symbol color - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setSymbol("X"):setBackgroundSymbol(colors.green):show() -```` -**parameters:** number symbolcolor
-**returns:** self
- -## setBarType -If the bar goes vertically or horizontally - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setBarType("horizontal"):show() -```` -**parameters:** string value ("vertical" or "horizontal")
-**returns:** self
- -## setMaxValue -the default max value is always the width (if horizontal) or height (if vertical), if you change the max value the bar will always calculate the value based on its width or height - example: you set the max value to 100, the height is 10 and it is a vertical bar, this means if the bar is on top, the value is 10, if the bar goes one below, it is 20 and so on. - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setMaxValue(123):show() -```` -**parameters:** any number
-**returns:** self
diff --git a/docs/Slider.md b/docs/Slider.md deleted file mode 100644 index 4e4e065..0000000 --- a/docs/Slider.md +++ /dev/null @@ -1,42 +0,0 @@ -With sliders you can add a object where the user can change a number value.

- -Here are all possible functions available for sliders:
-Remember slider also inherits from [object](https://github.com/NoryiE/Basalt/wiki/Object) - -## setSymbol -this will change the foreground symbol -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setSymbol("X"):show() -```` -**parameters:** char symbol
-**returns:** self
- -## setBackgroundSymbol -this will change the symbol background color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setBackgroundSymbol(colors.yellow):show() -```` -**parameters:** number color
-**returns:** self
- -## setSymbolColor -this will change the symbol color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setSymbolColor(colors.red):show() -```` -**parameters:** number color
-**returns:** self
- -## setBarType -this will change the bar to vertical/horizontal (default is horizontal) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setBarType("vertical"):show() -```` -**parameters:** string value ("vertical", "horizontal"
-**returns:** self
- - diff --git a/docs/Textfield.md b/docs/Textfield.md deleted file mode 100644 index bdfd028..0000000 --- a/docs/Textfield.md +++ /dev/null @@ -1,72 +0,0 @@ -Textfields are objects, where the user can write something on multiple lines. it act's like the default edit script (without coloring)
-Here is a example of how to create a default textfield: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -```` - -This will create a default textfield with the size 10 width and 4 height on position 1 1 (relative to its parent frame), the default background is colors.gray, the default text color is colors.black and the default zIndex is 5. - -A list of all possible functions available for textfields. Remember textfield inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): - - -## getLines -returns all lines -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -basalt.debug(aTextfield:getLines()) -```` -**parameters:** -
-**returns:** table lines
- -## getLine -returns the line on index position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -basalt.debug(aTextfield:getLine(2)) -```` -**parameters:** number index
-**returns:** string line
- -## editLine -edits line on index position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -aTextfield:editLine(2, "hellow") -```` -**parameters:** number index, string text
-**returns:** self
- -## addLine -adds a line on index position (if index is nil it just adds the line on the bottom) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -aTextfield:addLine("hellow") -```` -**parameters:** string text, number index
-**returns:** self
- -## removeLine -removes the line on index position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -aTextfield:removeLine(1) -```` -**parameters:** number index
-**returns:** self
- -## getTextCursor -returns the cursor position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -basalt.debug(aTextfield:getTextCursor()) -```` -**parameters:** -
-**returns:** number x, number y
\ No newline at end of file diff --git a/docs/Thread.md b/docs/Thread.md deleted file mode 100644 index 292e5fa..0000000 --- a/docs/Thread.md +++ /dev/null @@ -1,47 +0,0 @@ -Threads are "functions" you can execute simultaneously. Ofc the reality is, i am just using coroutine for that. But it works pretty good AND is very easy to use. -
-Here is a list of all available functions for threads:
- -## start -starts a new thread and executes the function -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aThread = mainFrame:addThread("myFirstThread"):show() -local function randomThreadFunction() - while true do - basalt.debug("Thread is active") - os.sleep(1) -- a sleep/coroutine.yield() or pullEvent is required otherwise we will never come back to the main program (error) - end -end -aThread:start(randomThreadfunction) -```` -**parameters:**function func
-**returns:** self
- -## getStatus -gets the thread status -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aThread = mainFrame:addThread("myFirstThread"):show() -basalt.debug(aThread:getStatus()) -- returns "running", "normal", "suspended" or "dead" -```` -**parameters:** -
-**returns:** string "running" - if its running, "normal" - is active but not running (waiting for a event), "suspended" - is suspended
- -## stop -stops the thread -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aThread = mainFrame:addThread("myFirstThread"):show() -local function randomThreadFunction() - while true do - basalt.debug("Thread is active") - os.sleep(1) -- a sleep/coroutine.yield() or pullEvent is required otherwise we will never come back to the main program (error) - end -end -aThread:start(randomThreadfunction) -local aButton = mainFrame:addButton("myFirstButton"):setText("Stop Thread"):onClick(function() aThread:stop() end):show() - -```` -**parameters:** -
-**returns:** self
\ No newline at end of file diff --git a/docs/Timer.md b/docs/Timer.md deleted file mode 100644 index c5cf577..0000000 --- a/docs/Timer.md +++ /dev/null @@ -1,49 +0,0 @@ -With timers you can call delayed functions. -
-Here is a list of all available functions for timers:
- -## setTime -sets the time the timer should wait after calling your function -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5) -```` -**parameters:**number time[, number repeats] - (time in seconds, if repeats is -1 it will call the function infinitly (every x seconds)
-**returns:** self
- -## start -starts the timer -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5):start() -```` -**parameters:** -
-**returns:** self
- -## cancel -stops/cancels the timer -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5):start() -aTimer:cancel() -```` -**parameters:** -
-**returns:** self
- - -## onCall -adds a function to the timer -````lua -local function timerCall(self) - basalt.debug("i got called!") -end -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5):onCall(timerCall):start() - -```` -**parameters:** function func
-**returns:** self
diff --git a/docs/_media/logo.png b/docs/_media/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd35584199226b7beadd80d47b0a5e91f9f814f GIT binary patch literal 257500 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 z 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

yp~Iw5QgWbQH)IW9%t7H2qEUz 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

  • Xi8DxYgV=z12 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 -For now the animation class is very basic, i will expand it in the future, but i have to say already now you can do almost everything you can imagine! - -Right now animation is a class which makes use of the timer event
    -Here are all possible functions available for animations: - -## add -adds a new function to your animation -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setPosition(3,3) end):wait(1):add(function() testButton:setPosition(1,1,"r") end):wait(2):add(function() testButton:setPosition(1,1,"r") end) - -aAnimation:play() -- this will set the button position to 3,3, waits 1 sec., sets it to 4,4, waits 2 sec. and then sets the position to 5,5 -```` -**parameters:** function
    -**returns:** self
    - -## wait -sets a wait timer for the next function after the previous function got executed, no wait timer calls the next function immediatly -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setPosition(3,3) end):wait(1):add(function() testButton:setPosition(1,1,"r") end):wait(2):add(function() testButton:setPosition(1,1,"r") end) - -aAnimation:play() -- this will set the button position to 3,3, waits 1 sec., sets it to 4,4, waits 2 sec. and then sets the position to 5,5 -```` -**parameters:** timer - how long we should wait to call the next function
    -**returns:** self
    - -## play -starts to play the animation -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setBackground(colors.black) end):wait(1):add(function() testButton:setBackground(colors.gray) end):wait(1):add(function() testButton:setBackground(colors.lightGray) end) - -aAnimation:play() -- changes the background color of that button from black to gray and then to lightGray -```` -**parameters:** [endlessloop] - bool if it should loop forever - will change that to loopcount in the future
    -**returns:** self
    - -## cancel -cancels the animation -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local testButton = mainFrame:addButton("myTestButton"):show() -local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setBackground(colors.black) end):wait(1):add(function() aAnimation:cancel() end):wait(1):add(function() testButton:setBackground(colors.lightGray) end) - -aAnimation:play() -```` -**parameters:** -
    +With animations you can create a beautiful experience for users while interacting with objects.
    +For now the animation class is very basic, i will expand it in the future, but i have to say already now you can do almost everything you can imagine! + +Right now animation is a class which makes use of the timer event
    +Here are all possible functions available for animations: + +## add +adds a new function to your animation +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local testButton = mainFrame:addButton("myTestButton"):show() +local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setPosition(3,3) end):wait(1):add(function() testButton:setPosition(1,1,"r") end):wait(2):add(function() testButton:setPosition(1,1,"r") end) + +aAnimation:play() -- this will set the button position to 3,3, waits 1 sec., sets it to 4,4, waits 2 sec. and then sets the position to 5,5 +```` +**parameters:** function
    +**returns:** self
    + +## wait +sets a wait timer for the next function after the previous function got executed, no wait timer calls the next function immediatly +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local testButton = mainFrame:addButton("myTestButton"):show() +local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setPosition(3,3) end):wait(1):add(function() testButton:setPosition(1,1,"r") end):wait(2):add(function() testButton:setPosition(1,1,"r") end) + +aAnimation:play() -- this will set the button position to 3,3, waits 1 sec., sets it to 4,4, waits 2 sec. and then sets the position to 5,5 +```` +**parameters:** timer - how long we should wait to call the next function
    +**returns:** self
    + +## play +starts to play the animation +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local testButton = mainFrame:addButton("myTestButton"):show() +local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setBackground(colors.black) end):wait(1):add(function() testButton:setBackground(colors.gray) end):wait(1):add(function() testButton:setBackground(colors.lightGray) end) + +aAnimation:play() -- changes the background color of that button from black to gray and then to lightGray +```` +**parameters:** [endlessloop] - bool if it should loop forever - will change that to loopcount in the future
    +**returns:** self
    + +## cancel +cancels the animation +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local testButton = mainFrame:addButton("myTestButton"):show() +local aAnimation = mainFrame:addAnimation("anim1"):add(function() testButton:setBackground(colors.black) end):wait(1):add(function() aAnimation:cancel() end):wait(1):add(function() testButton:setBackground(colors.lightGray) end) + +aAnimation:play() +```` +**parameters:** -
    **returns:** self
    \ No newline at end of file diff --git a/docs/objects/Basalt.md b/docs/objects/Basalt.md index ab727d7..a213f87 100644 --- a/docs/objects/Basalt.md +++ b/docs/objects/Basalt.md @@ -1,80 +1,78 @@ -# Basalt - -Basalt is managing all the things. - -To start using Basalt you have to do the following line of code: - -`local basalt = dofile("basalt.lua")` - -remember you need the basalt.lua file on your computer! - -Now you are able to call all these functions: - -## basalt.createFrame -create a frame without a parent -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -```` -**parameters:** string name
    -**returns:** new frame object
    - -## basalt.removeFrame -removes a frame (only possible for non-parent frames) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.removeFrame("myFirstFrame") -```` -**parameters:** string name
    -**returns:**-
    - -## basalt.getFrame -With that function you can get frames, but only frames without a parent! -````lua -basalt.createFrame("myFirstFrame") -basalt.getFrame("myFirstFrame"):show() -```` -**parameters:** string name
    -**returns:** frame object
    - -## basalt.getActiveFrame -returns the currently active (without a parent) frame -````lua -basalt.createFrame("myFirstFrame"):show() -basalt.debug(basalt.getActiveFrame():getName()) -- returns myFirstFrame -```` -**parameters:** -
    -**returns:** frame object
    - -## basalt.autoUpdate -starts the draw and event handler until you use basalt.stopUpdate -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.autoUpdate() -```` -**parameters:** -
    -**returns:**-
    - -## basalt.update -calls the draw and event handler method once -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.autoUpdate() -```` -**parameters:** string event, ... (you can use some paramters here. you dont have to pass any paramters )
    -**returns:**-
    - -## basalt.stopUpdate -stops the draw and event handler -````lua -basalt.stopUpdate() -```` -**parameters:** -
    -**returns:**-
    - -## basalt.debug -creates a label with some information on the main frame on the bottom left, if you click on that label it will open a log view for you see it as the new print for debugging -````lua -basalt.debug("Hi i am cute") -```` -**parameters:** ... (multiple parameters are possible, like print does)
    -**returns:**-
    \ No newline at end of file +Basalt is managing all the things. + +To start using Basalt you have to do the following line of code: + +`local basalt = dofile("basalt.lua")` + +remember you need the basalt.lua file on your computer! + +Now you are able to call all these functions: + +## basalt.createFrame +create a frame without a parent +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +```` +**parameters:** string name
    +**returns:** new frame object
    + +## basalt.removeFrame +removes a frame (only possible for non-parent frames) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +basalt.removeFrame("myFirstFrame") +```` +**parameters:** string name
    +**returns:**-
    + +## basalt.getFrame +With that function you can get frames, but only frames without a parent! +````lua +basalt.createFrame("myFirstFrame") +basalt.getFrame("myFirstFrame"):show() +```` +**parameters:** string name
    +**returns:** frame object
    + +## basalt.getActiveFrame +returns the currently active (without a parent) frame +````lua +basalt.createFrame("myFirstFrame"):show() +basalt.debug(basalt.getActiveFrame():getName()) -- returns myFirstFrame +```` +**parameters:** -
    +**returns:** frame object
    + +## basalt.autoUpdate +starts the draw and event handler until you use basalt.stopUpdate +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +basalt.autoUpdate() +```` +**parameters:** -
    +**returns:**-
    + +## basalt.update +calls the draw and event handler method once +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +basalt.autoUpdate() +```` +**parameters:** string event, ... (you can use some paramters here. you dont have to pass any paramters )
    +**returns:**-
    + +## basalt.stopUpdate +stops the draw and event handler +````lua +basalt.stopUpdate() +```` +**parameters:** -
    +**returns:**-
    + +## basalt.debug +creates a label with some information on the main frame on the bottom left, if you click on that label it will open a log view for you see it as the new print for debugging +````lua +basalt.debug("Hi i am cute") +```` +**parameters:** ... (multiple parameters are possible, like print does)
    +**returns:**-
    diff --git a/docs/objects/Button.md b/docs/objects/Button.md index a4c9066..29f4b7c 100644 --- a/docs/objects/Button.md +++ b/docs/objects/Button.md @@ -1,25 +1,24 @@ -# Button - -Buttons are objects, which execute function by clicking on them - -The following list is only available to buttons:
    -Remember button also inherits from [object](/objects/Object): - -## setText -Sets the displayed button text -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setText("Click"):show() -- you could also use :setValue() instead of :setText() - no difference -```` -**Arguments:** string text
    -**returns:** self
    - -## Examples -Add a onClick event: -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setText("Click"):onClick(function(self,event,button,x,y) -if(event=="mouse_click")and(button==1)then -basalt.debug("Left mousebutton got clicked!") -end -end):show() \ No newline at end of file +Buttons are objects, which execute function by clicking on them + +The following list is only available to buttons:
    +Remember button also inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): + +## setText +Sets the displayed button text +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setText("Click"):show() -- you could also use :setValue() instead of :setText() - no difference +```` +**Arguments:** string text
    +**returns:** self
    + +# Examples +Add a onClick event: +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setText("Click"):onClick(function(self,event,button,x,y) +if(event=="mouse_click")and(button==1)then +basalt.debug("Left mousebutton got clicked!") +end +end):show() +```` \ No newline at end of file diff --git a/docs/objects/Checkbox.md b/docs/objects/Checkbox.md index 8896900..82049bc 100644 --- a/docs/objects/Checkbox.md +++ b/docs/objects/Checkbox.md @@ -1,14 +1,13 @@ -# Checkbox - -With checkbox, the user can set a bool to true or false - -Here are all possible functions available for checkbox: - Remember checkbox inherits from [object](/objects/Object): - - -Create a onChange event: -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):onChange(function(self) basalt.debug("The value got changed into "..self:getValue()) end):show() - -```` \ No newline at end of file +With checkbox, the user can set a bool to true or false + +Here are all possible functions available for checkbox: + Remember checkbox inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): + + +Create a onChange event: +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):onChange(function(self) basalt.debug("The value got changed into "..self:getValue()) end):show() + +```` + diff --git a/docs/objects/Dropdown.md b/docs/objects/Dropdown.md index b4b0b6c..6325181 100644 --- a/docs/objects/Dropdown.md +++ b/docs/objects/Dropdown.md @@ -1,180 +1,178 @@ -# Dropdown - -Dropdowns are objects where you can create endless entrys the user can click on a button and it opens a "list" where the user can choose a entry - -Here is a example of how to create a standard dropdown: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -```` - -Here are all possible functions available for dropdowns:
    -Remember dropdown inherits from [object](/objects/Object): - -## addItem -Adds a item to the dropdown - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -```` -**parameters:** string text, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
    -**returns:** self
    - -## removeItem -Removes a item from the dropdown - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:removeItem(2) -```` -**parameters:** number index
    -**returns:** self
    - -## editItem -Edits a item on the dropdown - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:editItem(3,"3. Edited Entry",colors.yellow,colors.green) -```` -**parameters:** number index, string text, number bgcolor, number fgcolor, any ...
    -**returns:** self
    - -## setScrollable -Makes the dropdown scrollable - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setScrollable(true) -```` -**parameters:** boolean isScrollable
    -**returns:** self
    - -## selectItem -selects a item in the dropdown (same as a player would click on a item) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:selectItem(1) -```` -**parameters:** number index
    -**returns:** self
    - -## clear -clears the entire list (dropdown) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:clear() -```` -**parameters:** -
    -**returns:** self
    - -## getItemIndex -returns the item index of the currently selected item - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getItemIndex() -```` -**parameters:** -
    -**returns:** number index
    - -## setSelectedItem -Sets the background of the item which is currently selected - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setSelectedItem(colors.green, colors.blue) -```` -**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
    -**returns:** self
    - -## setOffset -sets the dropdown offset (will automatically change if scrolling is active) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setOffset(3) -```` -**parameters:** number offsetValue
    -**returns:** self
    - -## getOffset -returns the current offset - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getOffset() -```` -**parameters:** -
    -**returns:** number offsetValue
    - -## getOffset -returns the current offset - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getOffset() -```` -**parameters:** -
    -**returns:** number offsetValue
    - -## setDropdownSize -sets the dropdown size (if you click on the button) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:setDropdownSize(12, 4) -```` -**parameters:** number width, number height
    +Dropdowns are objects where you can create endless entrys the user can click on a button and it opens a "list" where the user can choose a entry + +Here is a example of how to create a standard dropdown: + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +```` + +Here are all possible functions available for dropdowns:
    +Remember dropdown inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): + +## addItem +Adds a item to the dropdown + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +```` +**parameters:** string text, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
    +**returns:** self
    + +## removeItem +Removes a item from the dropdown + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:removeItem(2) +```` +**parameters:** number index
    +**returns:** self
    + +## editItem +Edits a item on the dropdown + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:editItem(3,"3. Edited Entry",colors.yellow,colors.green) +```` +**parameters:** number index, string text, number bgcolor, number fgcolor, any ...
    +**returns:** self
    + +## setScrollable +Makes the dropdown scrollable + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:setScrollable(true) +```` +**parameters:** boolean isScrollable
    +**returns:** self
    + +## selectItem +selects a item in the dropdown (same as a player would click on a item) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:selectItem(1) +```` +**parameters:** number index
    +**returns:** self
    + +## clear +clears the entire list (dropdown) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:clear() +```` +**parameters:** -
    +**returns:** self
    + +## getItemIndex +returns the item index of the currently selected item + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:getItemIndex() +```` +**parameters:** -
    +**returns:** number index
    + +## setSelectedItem +Sets the background of the item which is currently selected + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:setSelectedItem(colors.green, colors.blue) +```` +**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
    +**returns:** self
    + +## setOffset +sets the dropdown offset (will automatically change if scrolling is active) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:setOffset(3) +```` +**parameters:** number offsetValue
    +**returns:** self
    + +## getOffset +returns the current offset + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:getOffset() +```` +**parameters:** -
    +**returns:** number offsetValue
    + +## getOffset +returns the current offset + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:getOffset() +```` +**parameters:** -
    +**returns:** number offsetValue
    + +## setDropdownSize +sets the dropdown size (if you click on the button) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:setDropdownSize(12, 4) +```` +**parameters:** number width, number height
    **returns:** self
    \ No newline at end of file diff --git a/docs/objects/Frame.md b/docs/objects/Frame.md index 174f0fc..d2b35ab 100644 --- a/docs/objects/Frame.md +++ b/docs/objects/Frame.md @@ -1,159 +1,227 @@ -# Frames - -
    - -Frames are like containers, but are also normal objects. -In other words, you can add other objects _(even frames)_ to a frame; if the frame itself is visible -all sub-objects _(if they are set as visible)_ are also visible. A better description will follow. - -## basalt.createFrame -Creates a new non-parent frame - in most cases it is the first thing you need. - -````lua -local myFirstFrame = basalt.createFrame("myFirstFrame") -```` -**Parameters:**
    -1. string name (should be unique)
    -**returns:** new frame object
    - -## addFrame -The same as basalt.createFrame, but it will have a parent frame -````lua -frame:addFrame("myFirstFrame") -```` -**Parameters:** string name (should be unique)
    -**returns:** new frame object
    -Example: -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local aFrame = mainFrame:addFrame("myFirstSubFrame") -```` -## setBar -Changes the frame bar -````lua -frame:setBar("My first Frame!", colors.gray, colors.lightGray) -```` -**Parameters:** string text, number bgcolor, number fgcolor
    -**returns:** self
    -Example: -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local aFrame = MainFrame:addFrame("myFirstSubFrame") -aFrame:setBar("My first Frame!") -```` -or: -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local aFrame = mainFrame:addFrame("myFirstSubFrame"):setBar("My first Frame!") -```` - -## setBarTextAlign -Sets the bar text alignment -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setBar("My first Frame!"):setBarTextAlign("right") -```` -**Parameters:** string value - ("left", "center", "right"))
    -**returns:** self
    - - - -## showBar -shows/hides the bar on top where you will see the title if its active -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setBar("Hello World!"):showBar() -```` -**Parameters:** bool visible (no Parameters = true)
    -**returns:** self
    - -## isModifierActive -- DISABLED this function will work very soon -returns true if user is currently holding a key down -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):isModifierActive("shift") -```` -**Parameters:** int or string - int can be any os.queueEvent("key") key, or instead of int you can use the following strings: "shift", "ctrl", "alt"
    -**returns:** boolean - if the user is holding the key down
    - -**Example:** -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setSize(20,8):show() -local aLabel = mainFrame:addLabel("myFirstLabel"):setText("shift inactive") -mainFrame:addButton("myFirstButton"):setText("Click"):onClick(function() -if(mainFrame:isModifierActive("shift")then - aLabel:setText("shift is active yay") -else - aLabel:setText("shift is not active ohno") -end) -```` - -## getObject -returns a children object -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -mainFrame:addButton("myFirstButton") -local aButton = mainFrame:getObject("myFirstButton") -```` -**Parameters:** string name (has to be a children)
    -**returns:** any object
    - -## removeObject -removes the object -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -mainFrame:addButton("myFirstButton") -mainFrame:removeObject("myFirstButton") -```` -**Parameters:** string name (has to be a children)
    -**returns:** any object
    - -## setFocusedObject -changes the currently focused object -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local aButton = mainFrame:addButton("myFirstButton") -mainFrame:setFocusedObject(aButton) -```` -**Parameters:** any object (has to be a children)
    -**returns:** self
    -## removeFocusedObject -removes the focus of the currently focused object -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local aButton = mainFrame:addButton("myFirstButton") -mainFrame:removeFocusedObject(aButton) -```` -**Parameters:** any object (has to be a children)
    -**returns:** self
    - -## getFocusedObject -gets the currently focused object -````lua -local mainFrame = basalt.createFrame("myFirstFrame") -local aButton = mainFrame:addButton("myFirstButton") -local focusedObject = mainFrame:getFocusedObject() -```` -**Parameters:** -
    -**returns:** object
    - -## setMovable - - -## setMoveable -##### _Deprecated in favor of setMovable_ - -sets if the frame should be moveable or not (to move the frame you need to drag it on the top bar) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setMoveable(true) -```` -**Parameters:** bool moveable
    -**returns:** self
    - -## setOffset -sets the frame's coordinate offset, they will get added to their children objects. For example, if you use the scrollbar and you use its value to add a offset to a frame, you will get a scrollable frame. -objects are also able to ignore the offset by using :ignoreOffset() (maybe your scrollbar if its a children of the frame should ignore offset) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setOffset(5, 3) -```` -**Parameters:** number x, number y (offset in x direction and offset in y direction, also doesn't matter if its a negative value or positive
    -**returns:** self
    + + +Frames are like containers, but are also normal objects. +In other words, you can add other objects _(even frames)_ to a frame; if the frame itself is visible +all sub-objects _(if they are set as visible)_ are also visible. A better description will follow. + +## basalt.createFrame +Creates a new non-parent frame - in most cases it is the first thing you'll need. + +#### Parameters: +1. `string` name (should be unique) + +#### Returns: +1. `frame | nil` The frame created by createFrame, or `nil` if there is already a frame with the given name. + +#### Usage: +* Create a frame with an id "myFirstFrame", stored in a variable named frame +````lua +local myFrame = basalt.createFrame("myFirstFrame") +```` + +## addFrame +Creates a child frame on the frame, the same as [basalt.createFrame](https://github.com/Pyroxenium/Basalt/wiki/Frame#basaltcreateframe) except the frames are given a parent-child relationship automatically + +#### Parameters: +1. `string` name (should be unique) + +#### Returns: +1. `frame | nil` The frame created by addFrame, or `nil` if there is already a child frame with the given name.
    + +#### Usage: +* Create a frame with id "myFirstFrame" then create a child of that frame, named "myFirstSubFrame" +````lua +local mainFrame = basalt.createFrame("myFirstFrame") +local myFrame = mainFrame:addFrame("myFirstSubFrame") +```` + +## setBar +Sets the text, background, and foreground of the upper bar of the frame, accordingly. + +#### Parameters: +1. `string` The text to set the bar to +2. `number` The background color +2. `number` The foreground color + +#### Returns: +1. `frame` The frame being used + +#### Usage: +* Set the title to "My first frame!", with a background of gray and a foreground of light gray. +````lua +frame:setBar("My first Frame!", colors.gray, colors.lightGray) +```` +* Store the frame, use the named frame variable after assigning. +````lua +local mainFrame = basalt.createFrame("myFirstFrame") +local myFrame = MainFrame:addFrame("myFirstSubFrame") +myFrame:setBar("My first Frame!") +```` +* This abuses the call-chaining that Basalt uses. +````lua +local mainFrame = basalt.createFrame("myFirstFrame") +local myFrame = mainFrame:addFrame("myFirstSubFrame"):setBar("My first Frame!") +```` + +## setBarTextAlign +Sets the frame's bar-text alignment + +#### Parameters: +1. `string` Can be supplied with "left", "center", or "right" +#### Returns: +1. `frame` The frame being used +#### Usage: +* Set the title of myFrame to "My first frame!", and align it to the right. +````lua +local mainFrame = myFrame:setBar("My first Frame!"):setBarTextAlign("right") +```` + +## showBar +Toggles the frame's upper bar +#### Parameters: +1. `boolean | nil` Whether the frame's bar is visible or if supplied `nil`, is automatically visible +#### Returns: +1. `frame` The frame being used +#### Usage: +* Sets myFrame to have a bar titled "Hello World!" and subsequently displays it. +````lua +local mainFrame = myFrame:setBar("Hello World!"):showBar() +```` + +## ~~isModifierActive~~ +### _Disabled, this function is a WIP_ +Returns true if the user is currently holding the respective key down + +#### Parameters: +1. `number | string` - Any os.queueEvent("key") key, or you can use the following strings: "shift", "ctrl", "alt" +#### Returns: +1. `boolean` - Whether the user is holding the key down +#### Usage: +* Checks if the "shift" modifier is active on the myFrame frame +````lua +local isActive = myFrame:isModifierActive("shift") +```` +* Creates a label, changing the text to "Shift is inactive oh no :(" and "Shift is active yay!", accordingly. +````lua +local aLabel = myFrame:addLabel("myFirstLabel"):setText("Shift is inactive oh no :(") +myFrame:addButton("myFirstButton"):setText("Click"):onClick( + function() + if myFrame:isModifierActive("shift") then + aLabel:setText("Shift is active yay!") + else + aLabel:setText("Shift is inactive oh no :(") + end + end +) +```` + +## getObject +Returns a child object of the frame + +#### Parameters: +1. `string` The name of the child object +#### Returns: +1. `object | nil` The object with the supplied name, or `nil` if there is no object present with the given name +#### Usage: +* Adds a button with id "myFirstButton", then retrieves it again through the frame object +````lua +myFrame:addButton("myFirstButton") +local aButton = myFrame:getObject("myFirstButton") +```` + +## removeObject +Removes a child object from the frame +#### Parameters: +1. `string` The name of the child object +#### Returns: +1. `boolean` Whether the object with the given name was properly removed +#### Usage: +* Adds a button with the id "myFirstButton", then removes it with the aforementioned id +````lua +myFrame:addButton("myFirstButton") +myFrame:removeObject("myFirstButton") +```` + +## setFocusedObject +Sets the currently focused object + +#### Parameters: +1. `object` The child object to focus on +#### Returns: +1. `frame` The frame being used +#### Usage: +* Creates button with id "myFirstButton", sets the focused object to the previously mentioned button +````lua +local aButton = myFrame:addButton("myFirstButton") +myFrame:setFocusedObject(aButton) +```` +## removeFocusedObject +Removes the focus of the supplied object +#### Parameters: +1. `object` The child object to remove focus from +#### Returns: +1. `frame` The frame being used +#### Usage: +* Creates a button with id "myFirstButton", then removes the focus from that button +````lua +local aButton = myFrame:addButton("myFirstButton") +myFrame:removeFocusedObject(aButton) +```` + +## getFocusedObject +Gets the currently focused object +#### Parameters: +#### Returns: +1. `object` The currently focused object +#### Usage: +* Gets the currently focused object from the frame, storing it in a variable +````lua +local focusedObject = myFrame:getFocusedObject() +```` +## setMovable + +Sets whether the frame can be moved. _In order to move the frame click and drag the upper bar of the frame_ +#### Parameters: +1. `boolean` Whether the object is movable +#### Returns: +1. `frame` The frame being used +#### Usage: +* Creates a frame with id "myFirstFrame" and makes it movable +````lua +local myFrame = basalt.createFrame("myFirstFrame"):setMovable(true) +```` + +## ~~setMoveable~~ +### _Deprecated in favor of setMovable_ + +Sets whether the frame can be moved. _In order to move the frame use the upper bar of the frame_ +#### Parameters: +1. `boolean` Whether the object is movable +#### Returns: +1. `frame` The frame being used +#### Usage: +* Creates a frame with id "myFirstFrame" and makes it movable +````lua +local myFrame = basalt.createFrame("myFirstFrame"):setMoveable(true) +```` + +## setOffset +Sets the frame's coordinate offset. The frame's child objects will receive the frame's coordinate offset. For example, when using the scrollbar, if you use its value to add an offset to a frame, you will get a scrollable frame. +Objects are also able to ignore the offset by using :ignoreOffset() (For example, you may want to ignore the offset on the scrollbar itself) + +The function can be supplied negative offsets + +#### Parameters: +1. `number` The x direction offset (+/-) +2. `number` The y direction offset (+/-) +#### Returns: +1. `frame` The frame being used +#### Usage: +* Creates "myFirstFrame" with an x offset of 5 and a y offset of 3 +````lua +local myFrame = basalt.createFrame("myFirstFrame"):setOffset(5, 3) +```` +* Creates "myFirstFrame" with an x offset of 5 and a y offset of -5 (Meaning if you added a button with y position 5, it would be at y position 0) +````lua +local myFrame = basalt.createFrame("myFirstFrame"):setOffset(5, -5) +```` \ No newline at end of file diff --git a/docs/objects/Image.md b/docs/objects/Image.md index a63e0f6..38c34f9 100644 --- a/docs/objects/Image.md +++ b/docs/objects/Image.md @@ -1,37 +1,36 @@ -# Image - -The image object is for adding more advanced backgrounds. -It also provides a :shrink() function, where you can shrink the images to smaller ones. This functionallity is fully provided by the blittle library created by Bomb Bloke. I did not ask for permission to add it into the framework. If the creator wants me to remove the blittle part, just text me on discord! - -Here are all possible functions available for image: -Remember image inherits from [object](/objects/Object): - - -## loadImage -loads a image into the memory. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aImage = mainFrame:addImage("myFirstImage"):loadImage("randomImage.nfp"):show() -```` -**Arguments:** string path
    -**returns:** self
    - - -## loadBlittleImage -- not finished yet -loads a blittle image into the memory. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aImage = mainFrame:addImage("myFirstImage"):loadBlittleImage("blittleImage.blt"):show() -```` -**Arguments:** string path
    -**returns:** self
    - -## shrink -If you were loading a normal (paint) image into the memory, this function would shrink it to a -blittle image and immediatly draws it (if it's visible) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aImage = mainFrame:addImage("myFirstImage"):loadBlittleImage("randomImage.nfp"):shrink():show() -```` -**Arguments:** -
    -**returns:** self
    \ No newline at end of file +The image object is for adding more advanced backgrounds. +It also provides a :shrink() function, where you can shrink the images to smaller ones. This functionallity is fully provided by the blittle library created by Bomb Bloke. I did not ask for permission to add it into the framework. If the creator wants me to remove the blittle part, just text me on discord! + +Here are all possible functions available for image: +Remember image inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): + + +## loadImage +loads a image into the memory. +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aImage = mainFrame:addImage("myFirstImage"):loadImage("randomImage.nfp"):show() +```` +**Arguments:** string path
    +**returns:** self
    + + +## loadBlittleImage -- not finished yet +loads a blittle image into the memory. +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aImage = mainFrame:addImage("myFirstImage"):loadBlittleImage("blittleImage.blt"):show() +```` +**Arguments:** string path
    +**returns:** self
    + +## shrink +If you were loading a normal (paint) image into the memory, this function would shrink it to a +blittle image and immediatly draws it (if it's visible) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aImage = mainFrame:addImage("myFirstImage"):loadBlittleImage("randomImage.nfp"):shrink():show() +```` +**Arguments:** -
    +**returns:** self
    + diff --git a/docs/objects/Input.md b/docs/objects/Input.md index 83d5e82..f3d0ef1 100644 --- a/docs/objects/Input.md +++ b/docs/objects/Input.md @@ -1,15 +1,13 @@ -# Input - -With input's you are able to create a object where the user can type something in.
    - -Here are all possible functions available for inputs:
    -Remember input inherits from [object](/objects/Object): - -## setInputType -changes the input type -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aInput = mainFrame:addInput("myFirstInput"):setInputType("password"):show() -```` -**parameters:** string value ("text", "password", "number")
    -**returns:** self
    \ No newline at end of file +With input's you are able to create a object where the user can type something in.
    + +Here are all possible functions available for inputs:
    +Remember input inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): + +## setInputType +changes the input type +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aInput = mainFrame:addInput("myFirstInput"):setInputType("password"):show() +```` +**parameters:** string value ("text", "password", "number")
    +**returns:** self
    diff --git a/docs/Installer.md b/docs/objects/Installer.md similarity index 100% rename from docs/Installer.md rename to docs/objects/Installer.md diff --git a/docs/objects/Label.md b/docs/objects/Label.md index 09f6093..a82bc54 100644 --- a/docs/objects/Label.md +++ b/docs/objects/Label.md @@ -1,17 +1,34 @@ -# Label - -With the Label object you are able to add some text. - -By default label's width is auto sizing based on the length of the text. If you change the size with setSize it will automatically stop autosizing the width. - -Here are all possible functions available for labels.
    -Remember label inherits from [object](/objects/Object): - -## setText -sets the text which gets displayed. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello lovely basalt community!"):show() -```` -**arguments:** string text
    -**returns:** self
    \ No newline at end of file +With the Label object you are able to add some text. + +By default label's width is auto sizing based on the length of the text. If you change the size with setSize it will automatically stop autosizing the width. + +Here are all possible functions available for labels.
    +Remember label inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): + +## setText +sets the text which gets displayed. +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello lovely basalt community!"):show() +```` +**arguments:** string text
    +**returns:** self
    + +## setFontSize +sets the font size of that text. +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello"):setFontSize(2):show() +```` +**arguments:** number size (1 = default, 2 = big, 3 = bigger, 4 = huge)
    +**returns:** self
    + +## getFontSize +returns the fontsize +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aInput = mainFrame:addLabel("myFirstLabel"):setText("Hello"):setFontSize(2):show() +basalt.debug(aInput:getFontSize()) -- returns 2 +```` +**arguments:**
    +**returns:** number
    diff --git a/docs/objects/List.md b/docs/objects/List.md index 4aed420..5995770 100644 --- a/docs/objects/List.md +++ b/docs/objects/List.md @@ -1,153 +1,151 @@ -# List - -Lists are objects where you can create endless entrys and the user can choose one of them - -Here is a example of how to create a standard list: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -```` - -This will create a default list with the size 8 width and 5 height on position 1 1 (relative to its parent frame), the default background is colors.lightGray, the default text color is colors.black and the default zIndex is 5. The default horizontal text align is "center", default symbol is ">" - -Here are all possible functions available for lists. Remember list inherit from [object](/objects/Object): - -## addItem -Adds a item to the list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -```` -**parameters:** string text, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
    -**returns:** self
    - -## removeItem -Removes a item from the list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:removeItem(2) -```` -**parameters:** number index
    -**returns:** self
    - -## editItem -Edits a item on the list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:editItem(3,"3. Edited Entry",colors.yellow,colors.green) -```` -**parameters:** number index, string text, number bgcolor, number fgcolor, any ...
    -**returns:** self
    - -## setScrollable -Makes the list scrollable - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:setScrollable(true) -```` -**parameters:** boolean isScrollable
    -**returns:** self
    - -## selectItem -selects a item in the list (same as a player would click on a item) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:selectItem(1) -```` -**parameters:** number index
    -**returns:** self
    - -## clear -clears the entire list - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:clear() -```` -**parameters:** -
    -**returns:** self
    - -## getItemIndex -returns the item index of the currently selected item - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() -aDropdown:addItem("1. Entry") -aDropdown:addItem("2. Entry",colors.yellow) -aDropdown:addItem("3. Entry",colors.yellow,colors.green) -aDropdown:getItemIndex() -```` -**parameters:** -
    -**returns:** number index
    - -## setSelectedItem -Sets the background of the item which is currently selected - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:setSelectedItem(colors.green, colors.blue) -```` -**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
    -**returns:** self
    - -## setOffset -sets the list offset (will automatically change if scrolling is active) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:setOffset(3) -```` -**parameters:** number offsetValue
    -**returns:** self
    - -## getOffset -returns the current offset - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aList = mainFrame:addList("myFirstList"):show() -aList:addItem("1. Entry") -aList:addItem("2. Entry",colors.yellow) -aList:addItem("3. Entry",colors.yellow,colors.green) -aList:getOffset() -```` -**parameters:** -
    +Lists are objects where you can create endless entrys and the user can choose one of them + +Here is a example of how to create a standard list: + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +```` + +This will create a default list with the size 8 width and 5 height on position 1 1 (relative to its parent frame), the default background is colors.lightGray, the default text color is colors.black and the default zIndex is 5. The default horizontal text align is "center", default symbol is ">" + +Here are all possible functions available for lists. Remember list inherit from [object](https://github.com/NoryiE/basalt/wiki/Object): + +## addItem +Adds a item into the list + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +```` +**parameters:** string text, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
    +**returns:** self
    + +## removeItem +Removes a item from the list + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:removeItem(2) +```` +**parameters:** number index
    +**returns:** self
    + +## editItem +Edits a item on the list + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:editItem(3,"3. Edited Entry",colors.yellow,colors.green) +```` +**parameters:** number index, string text, number bgcolor, number fgcolor, any ...
    +**returns:** self
    + +## setScrollable +Makes the list scrollable + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:setScrollable(true) +```` +**parameters:** boolean isScrollable
    +**returns:** self
    + +## selectItem +selects a item in the list (same as a player would click on a item) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:selectItem(1) +```` +**parameters:** number index
    +**returns:** self
    + +## clear +clears the entire list + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:clear() +```` +**parameters:** -
    +**returns:** self
    + +## getItemIndex +returns the item index of the currently selected item + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aDropdown = mainFrame:addDropdown("myFirstDropdown"):show() +aDropdown:addItem("1. Entry") +aDropdown:addItem("2. Entry",colors.yellow) +aDropdown:addItem("3. Entry",colors.yellow,colors.green) +aDropdown:getItemIndex() +```` +**parameters:** -
    +**returns:** number index
    + +## setSelectedItem +Sets the background of the item which is currently selected + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:setSelectedItem(colors.green, colors.blue) +```` +**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
    +**returns:** self
    + +## setOffset +sets the list offset (will automatically change if scrolling is active) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:setOffset(3) +```` +**parameters:** number offsetValue
    +**returns:** self
    + +## getOffset +returns the current offset + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aList = mainFrame:addList("myFirstList"):show() +aList:addItem("1. Entry") +aList:addItem("2. Entry",colors.yellow) +aList:addItem("3. Entry",colors.yellow,colors.green) +aList:getOffset() +```` +**parameters:** -
    **returns:** number offsetValue
    \ No newline at end of file diff --git a/docs/objects/Menubar.md b/docs/objects/Menubar.md index 55be638..6d3f665 100644 --- a/docs/objects/Menubar.md +++ b/docs/objects/Menubar.md @@ -1,3 +1 @@ -# Menubar - WIP \ No newline at end of file diff --git a/docs/objects/Object.md b/docs/objects/Object.md index aa9704e..2c1ea71 100644 --- a/docs/objects/Object.md +++ b/docs/objects/Object.md @@ -1,249 +1,247 @@ -# Objects - -This is the base class of all visual objects. This means, if you create a button, label, frame or something else visual (no timers, threads or animations) the following list can be used: - -## show -shows the object (only if the parent frame is already visible) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local button = mainFrame:addButton("myFirstButton") -button:show() -```` -**parameters:** -
    -**returns:** self
    - -## hide -hides the object -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local button = mainFrame:addButton("myFirstButton"):setText("Close"):onClick(function() mainFrame:hide() end) -button:show() -```` -**parameters:** -
    -**returns:** self
    - -## setPosition -Changes the position relative to its parent frame -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setPosition(2,3) -```` -**parameters:** number x, number y[, boolean relative], if relative is set to true it will add/remove instead of set x, y
    -**returns:** self
    - - - -## setBackground -Changes the object background color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setBackground(colors.lightGray) -```` -**parameters:** number color
    -**returns:** self
    - -## setForeground -Changes the object text color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setForeground(colors.black) -```` -**parameters:** number color
    -**returns:** self
    - -## setSize -Changes the object size -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setSize(15,5) -```` -**parameters:** number width, number length
    -**returns:** self
    - -## setFocus -sets the object to be the focused object. -If you click on a object, it's normaly automatically the focused object. As example, if you :show() a frame and you want this particular frame to be in -the foreground, you have to use :setFocus() -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setFocus():show() -```` -**parameters:** -
    -**returns:** self
    - -## setZIndex -changes the z index (higher z index do have higher draw/event priority) 10 is more important than 5 or 1. You are also able to add multiple objects to the same z index, which means if you create a couple of buttons, you set their z index to 10, everything below 10 is less important, everything above 10 is more important. On the same z index: the last object which gets created is the most important one. -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setZIndex(1):show() -```` -**parameters:** number index
    -**returns:** self
    - -## setParent -changes the frame parent of that object -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRandomFrame = basalt.createFrame("aRandomFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):onClick(function() aRandomFrame:setParent(mainFrame) end):show() -```` -**parameters:** frame object
    -**returns:** self
    - -## isFocused -returns if the object is currently the focused object of the parent frame - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):show() -basalt.debug(aButton:isFocused()) -- shows true or false as a debug message -```` -**parameters:** -
    -**returns:** boolean
    - -## getAnchorPosition -converts the x,y coordinates into the anchor coordinates of that object - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setSize(15,15):show() -local aButton = mainFrame:addButton("myFirstButton"):setAnchor("right","bottom"):setSize(8,1):setPosition(1,1):show() -basalt.debug(aButton:getAnchorPosition()) -- returns 7,14 (framesize - own size) instead of 1,1 -```` -**parameters:** number x, number y - or nothing (if nothing it uses the object's x, y)
    -**returns:** number x, number y (converted)
    - -## setAnchor -sets the anchor of that object - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setAnchor("right"):show() -local aButton = mainFrame:addButton("myFirstButton"):setAnchor("bottom","right"):setSize(8,1):setPosition(1,1):show() -```` -**parameters:** string sides - ("left", "right", "top", "bottom") you can stack positions like so ..:setAnchor("right", "bottom")
    -**returns:** self
    - -## getAbsolutePosition -converts the relative coordinates into absolute coordinates -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):setPosition(3,3):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(8,1):setPosition(4,2):show() -basalt.debug(aButton:getAbsolutePosition()) -- returns 7,5 (frame coords + own coords) instead of 4,2 -```` -**parameters:** number x, number y - or nothing (if nothing it uses the object's x, y)
    -**returns:** self
    - -## setTextAlign -sets the text align of the object (for example buttons) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(12,3):setTextAlign("right", "center"):setText("Dont't..."):show() -```` -**parameters:** string horizontal, string vertical - ("left", "center", "right")
    -**returns:** self
    - -## setValue -sets the value of that object (input, label, checkbox, textfield, scrollbar,...) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):setValue(true):show() -```` -**parameters:** any value
    -**returns:** self
    - -## getValue -returns the currently saved value -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):setValue(true):show() -basalt.debug(aCheckbox:getValue()) -- returns true -```` -**parameters:**-
    -**returns:** any value
    - -## getHeight/getWidth -returns the height or width -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(5,8):show() -basalt.debug(aButton:getHeight()) -- returns 8 -```` -**parameters:**-
    -**returns:** number height/width
    - -## isVisible -returns if the object is currently visible -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(5,8):show() -basalt.debug(aButton:isVisible()) -- returns true -```` -**parameters:**-
    -**returns:** boolean
    - -## getName -returns the given name of that object -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -basalt.debug(mainFrame:getName()) -- returns myFirstFrame -```` -**parameters:**-
    -**returns:** string name
    - -# Object Events -These object events are available for all objects, if a object got some unique events, you can see them in their own category - -## onClick -creates a mouse_click event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClick(function(self,event,button,x,y) basalt.debug("Hellooww UwU") end):show() -```` -**parameters:** function func
    -**returns:** self
    - -## onClickUp -creates a click_up event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClickUp(function(self,event,button,x,y) basalt.debug("Byeeeee UwU") end):show() -```` -**parameters:** function func
    -**returns:** self
    - -## onMouseDrag -creates a mouse_drag event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClickUp(function(self,event,button,x,y) basalt.debug("Byeeeee UwU") end):show() -```` -**parameters:** function func
    -**returns:** self
    - -## onChange -creates a change event (fires as soon as the value gets changed) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):onChange(function(self) basalt.debug("i got changed into "..self:getValue()) end):show() -```` -**parameters:** function func
    -**returns:** self
    - -## onKey -creates a key(board) - event can be key or char -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):onKey(function(self,event,key) basalt.debug("you clicked "..key) end):show() -```` -**parameters:** function func
    -**returns:** self
    - -## onLoseFocus -creates a lose focus event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):onLoseFocus(function(self) basalt.debug("please come back..") end):show() -```` -**parameters:** function func
    -**returns:** self
    - -## onGetFocus -creates a get focus event -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):onGetFocus(function(self) basalt.debug("thanks!") end):show() -```` -**parameters:** function func
    +This is the base class of all visual objects. This means, if you create a button, label, frame or something else visual (no timers, threads or animations) the following list can be used: + +## show +shows the object (only if the parent frame is already visible) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local button = mainFrame:addButton("myFirstButton") +button:show() +```` +**parameters:** -
    +**returns:** self
    + +## hide +hides the object +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local button = mainFrame:addButton("myFirstButton"):setText("Close"):onClick(function() mainFrame:hide() end) +button:show() +```` +**parameters:** -
    +**returns:** self
    + +## setPosition +Changes the position relative to its parent frame +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setPosition(2,3) +```` +**parameters:** number x, number y[, boolean relative], if relative is set to true it will add/remove instead of set x, y
    +**returns:** self
    + + + +## setBackground +Changes the object background color +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setBackground(colors.lightGray) +```` +**parameters:** number color
    +**returns:** self
    + +## setForeground +Changes the object text color +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setForeground(colors.black) +```` +**parameters:** number color
    +**returns:** self
    + +## setSize +Changes the object size +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setSize(15,5) +```` +**parameters:** number width, number length
    +**returns:** self
    + +## setFocus +sets the object to be the focused object. +If you click on a object, it's normaly automatically the focused object. As example, if you :show() a frame and you want this particular frame to be in +the foreground, you have to use :setFocus() +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setFocus():show() +```` +**parameters:** -
    +**returns:** self
    + +## setZIndex +changes the z index (higher z index do have higher draw/event priority) 10 is more important than 5 or 1. You are also able to add multiple objects to the same z index, which means if you create a couple of buttons, you set their z index to 10, everything below 10 is less important, everything above 10 is more important. On the same z index: the last object which gets created is the most important one. +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setZIndex(1):show() +```` +**parameters:** number index
    +**returns:** self
    + +## setParent +changes the frame parent of that object +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRandomFrame = basalt.createFrame("aRandomFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):onClick(function() aRandomFrame:setParent(mainFrame) end):show() +```` +**parameters:** frame object
    +**returns:** self
    + +## isFocused +returns if the object is currently the focused object of the parent frame + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):show() +basalt.debug(aButton:isFocused()) -- shows true or false as a debug message +```` +**parameters:** -
    +**returns:** boolean
    + +## getAnchorPosition +converts the x,y coordinates into the anchor coordinates of that object + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setSize(15,15):show() +local aButton = mainFrame:addButton("myFirstButton"):setAnchor("right","bottom"):setSize(8,1):setPosition(1,1):show() +basalt.debug(aButton:getAnchorPosition()) -- returns 7,14 (framesize - own size) instead of 1,1 +```` +**parameters:** number x, number y - or nothing (if nothing it uses the object's x, y)
    +**returns:** number x, number y (converted)
    + +## setAnchor +sets the anchor of that object + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setAnchor("right"):show() +local aButton = mainFrame:addButton("myFirstButton"):setAnchor("bottom","right"):setSize(8,1):setPosition(1,1):show() +```` +**parameters:** string sides - ("left", "right", "top", "bottom") you can stack positions like so ..:setAnchor("right", "bottom")
    +**returns:** self
    + +## getAbsolutePosition +converts the relative coordinates into absolute coordinates +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):setPosition(3,3):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(8,1):setPosition(4,2):show() +basalt.debug(aButton:getAbsolutePosition()) -- returns 7,5 (frame coords + own coords) instead of 4,2 +```` +**parameters:** number x, number y - or nothing (if nothing it uses the object's x, y)
    +**returns:** self
    + +## setTextAlign +sets the text align of the object (for example buttons) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(12,3):setTextAlign("right", "center"):setText("Dont't..."):show() +```` +**parameters:** string horizontal, string vertical - ("left", "center", "right")
    +**returns:** self
    + +## setValue +sets the value of that object (input, label, checkbox, textfield, scrollbar,...) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):setValue(true):show() +```` +**parameters:** any value
    +**returns:** self
    + +## getValue +returns the currently saved value +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):setValue(true):show() +basalt.debug(aCheckbox:getValue()) -- returns true +```` +**parameters:**-
    +**returns:** any value
    + +## getHeight/getWidth +returns the height or width +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(5,8):show() +basalt.debug(aButton:getHeight()) -- returns 8 +```` +**parameters:**-
    +**returns:** number height/width
    + +## isVisible +returns if the object is currently visible +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(5,8):show() +basalt.debug(aButton:isVisible()) -- returns true +```` +**parameters:**-
    +**returns:** boolean
    + +## getName +returns the given name of that object +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +basalt.debug(mainFrame:getName()) -- returns myFirstFrame +```` +**parameters:**-
    +**returns:** string name
    + +# Object Events +These object events are available for all objects, if a object got some unique events, you can see them in their own category + +## onClick +creates a mouse_click event +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClick(function(self,event,button,x,y) basalt.debug("Hellooww UwU") end):show() +```` +**parameters:** function func
    +**returns:** self
    + +## onClickUp +creates a click_up event +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClickUp(function(self,event,button,x,y) basalt.debug("Byeeeee UwU") end):show() +```` +**parameters:** function func
    +**returns:** self
    + +## onMouseDrag +creates a mouse_drag event +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aButton = mainFrame:addButton("myFirstButton"):setSize(10,3):onClickUp(function(self,event,button,x,y) basalt.debug("Byeeeee UwU") end):show() +```` +**parameters:** function func
    +**returns:** self
    + +## onChange +creates a change event (fires as soon as the value gets changed) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aCheckbox = mainFrame:addCheckbox("myFirstCheckbox"):onChange(function(self) basalt.debug("i got changed into "..self:getValue()) end):show() +```` +**parameters:** function func
    +**returns:** self
    + +## onKey +creates a key(board) - event can be key or char +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):onKey(function(self,event,key) basalt.debug("you clicked "..key) end):show() +```` +**parameters:** function func
    +**returns:** self
    + +## onLoseFocus +creates a lose focus event +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):onLoseFocus(function(self) basalt.debug("please come back..") end):show() +```` +**parameters:** function func
    +**returns:** self
    + +## onGetFocus +creates a get focus event +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):onGetFocus(function(self) basalt.debug("thanks!") end):show() +```` +**parameters:** function func
    **returns:** self
    \ No newline at end of file diff --git a/docs/objects/Pane.md b/docs/objects/Pane.md index 4399fbb..e2652e1 100644 --- a/docs/objects/Pane.md +++ b/docs/objects/Pane.md @@ -1,18 +1,16 @@ -# Pane - -Panes are very simple sizeable background objects. - -The following list is only available to panes:
    -Remember pane also inherits from [object](/objects/Object): - -Pane doesn't have any custom functionallity. If you want to change the color/position or size, just check out the [object](/objects/Object) wikipage. - -## Example: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aPane = mainFrame:addPane("myFirstBackground") -aPane:setSize(30, 10) -aPane:setBackground(colors.yellow) -aPane:show() +Panes are very simple sizeable background objects. + +The following list is only available to panes:
    +Remember pane also inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): + +Pane doesn't have any custom functionallity. If you want to change the color/position or size, just check out the [object](https://github.com/NoryiE/basalt/wiki/Object) wikipage. + +## Example: + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aPane = mainFrame:addPane("myFirstBackground") +aPane:setSize(30, 10) +aPane:setBackground(colors.yellow) +aPane:show() ```` \ No newline at end of file diff --git a/docs/objects/Program.md b/docs/objects/Program.md index c4760ac..59a28d9 100644 --- a/docs/objects/Program.md +++ b/docs/objects/Program.md @@ -1,104 +1,103 @@ -# Program - -With a program object you are able to open programs like shell or worm or any custom program you've made. There is only 1 thing you have to remember: the program needs at least one os.sleep() or coroutine.yield() somewhere. -
    -Here is a list of all available functions for programs:
    -Remember program inherits from [object](/objects/Object): - -## getStatus -returns the current status -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):show() -basalt.debug(aProgram:getStatus()) -- returns "running", "normal", "suspended" or "dead" -```` -**parameters:**-
    -**returns:** string "running" - if its running, "normal" - is active but not running (waiting for a event), "suspended" - is suspended or not started, "dead" - has finished or stopped with an error
    - -## execute -executes the given path (-program) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):show() -aProgram:execute("rom/programs/fun/worm.lua") -- executes worm -```` -**parameters:** string filepath - (the path to the program you want to execute)
    -**returns:** self
    - -## stop -gives a terminate event to the program, which means if you are running a shell, and the shell executes a program by itself you have to call stop 2 times to entirely close the running program -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("close"):onClick(function() aProgram:stop() end):show() - -```` -**parameters:**-
    -**returns:** self
    - -## pause -pauses the program (prevents the program from receiving events) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("close"):onClick(function() aProgram:pause(true) end):show() - -```` -**parameters:** boolean pause
    -**returns:** self
    - -## isPaused -returns if the program is currently paused -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("pause"):onClick(function() basalt.debug(aProgram:isPaused()) end):show() - -```` -**parameters:** -
    -**returns:** boolean isPaused
    - -## injectEvent -injects a event into the program manually -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("inject"):onClick(function() aProgram:injectEvent("char", "w") end):show() - -```` -**parameters:** string event, any parameter, any parameter, any parameter, any parameter, boolean ignorePause
    -**returns:** self
    - -## injectEvents -injects a event table into the program manually -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() ---example will follow - -```` -**parameters:** string event, any parameter, any parameter, any parameter, any parameter, boolean ignorePause
    -**returns:** self
    - -## getQueuedEvents -returns a table of all currently queued events (while pause is active incomming events will go into a queueEvents table) as soon as the program gets unpaused -it will inject these events -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() -mainFrame:addButton("myFirstButton"):setText("inject"):onClick(function() basalt.debug(aProgram:getQueuedEvents()) end):show() - -```` -**parameters:** -
    -**returns:** table queuedEvents
    - -## updateQueuedEvents -here you can manipulate the queuedEvents table with your own events table -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() ---example will follow - -```` -**parameters:** table queuedEvents
    -**returns:** self
    \ No newline at end of file +With a program object you are able to open programs like shell or worm or any custom program you've made. There is only 1 thing you have to remember: the program needs at least one os.sleep() or coroutine.yield() somewhere. +
    +Here is a list of all available functions for programs:
    +Remember program inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): + +## getStatus +returns the current status +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):show() +basalt.debug(aProgram:getStatus()) -- returns "running", "normal", "suspended" or "dead" +```` +**parameters:**-
    +**returns:** string "running" - if its running, "normal" - is active but not running (waiting for a event), "suspended" - is suspended or not started, "dead" - has finished or stopped with an error
    + +## execute +executes the given path (-program) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):show() +aProgram:execute("rom/programs/fun/worm.lua") -- executes worm +```` +**parameters:** string filepath - (the path to the program you want to execute)
    +**returns:** self
    + +## stop +gives a terminate event to the program, which means if you are running a shell, and the shell executes a program by itself you have to call stop 2 times to entirely close the running program +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +mainFrame:addButton("myFirstButton"):setText("close"):onClick(function() aProgram:stop() end):show() + +```` +**parameters:**-
    +**returns:** self
    + +## pause +pauses the program (prevents the program from receiving events) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +mainFrame:addButton("myFirstButton"):setText("close"):onClick(function() aProgram:pause(true) end):show() + +```` +**parameters:** boolean pause
    +**returns:** self
    + +## isPaused +returns if the program is currently paused +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +mainFrame:addButton("myFirstButton"):setText("pause"):onClick(function() basalt.debug(aProgram:isPaused()) end):show() + +```` +**parameters:** -
    +**returns:** boolean isPaused
    + +## injectEvent +injects a event into the program manually +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +mainFrame:addButton("myFirstButton"):setText("inject"):onClick(function() aProgram:injectEvent("char", "w") end):show() + +```` +**parameters:** string event, any parameter, any parameter, any parameter, any parameter, boolean ignorePause
    +**returns:** self
    + +## injectEvents +injects a event table into the program manually +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +--example will follow + +```` +**parameters:** string event, any parameter, any parameter, any parameter, any parameter, boolean ignorePause
    +**returns:** self
    + +## getQueuedEvents +returns a table of all currently queued events (while pause is active incomming events will go into a queueEvents table) as soon as the program gets unpaused +it will inject these events +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +mainFrame:addButton("myFirstButton"):setText("inject"):onClick(function() basalt.debug(aProgram:getQueuedEvents()) end):show() + +```` +**parameters:** -
    +**returns:** table queuedEvents
    + +## updateQueuedEvents +here you can manipulate the queuedEvents table with your own events table +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aProgram = mainFrame:addProgram("myFirstProgram"):execute("rom/programs/shell.lua"):show() +--example will follow + +```` +**parameters:** table queuedEvents
    +**returns:** self
    + diff --git a/docs/objects/Radio.md b/docs/objects/Radio.md index 04875b3..cc21e58 100644 --- a/docs/objects/Radio.md +++ b/docs/objects/Radio.md @@ -1,124 +1,122 @@ -# Radio - -Radios are objects where you can create endless entrys the user can click on a button and it opens a "list" where the user can choose a entry - -Here is a example of how to create a standard radio: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -```` - -Here are all possible functions available for radios:
    -Remember radio inherits from [object](/objects/Object): - -## addItem -Adds a item to the radio - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -```` -**parameters:** string text, number x, number y, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
    -**returns:** self
    - -## removeItem -Removes a item from the radio - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:removeItem(2) -```` -**parameters:** number index
    -**returns:** self
    - -## editItem -Edits a item on the radio - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:editItem(3,"3. Edited Entry",3,6,colors.yellow,colors.green) -```` -**parameters:** number index, string text, number x, number y, number bgcolor, number fgcolor, any ...
    -**returns:** self
    - -## setScrollable -Makes the radio scrollable - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:setScrollable(true) -```` -**parameters:** boolean isScrollable
    -**returns:** self
    - -## selectItem -selects a item in the radio (same as a player would click on a item) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:selectItem(1) -```` -**parameters:** number index
    -**returns:** self
    - -## clear -clears the entire list (radio) - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:clear() -```` -**parameters:** -
    -**returns:** self
    - -## getItemIndex -returns the item index of the currently selected item - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:getItemIndex() -```` -**parameters:** -
    -**returns:** number index
    - -## setSelectedItem -Sets the background of the item which is currently selected - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aRadio = mainFrame:addRadio("myFirstRadio"):show() -aRadio:addItem("1. Entry",3,4) -aRadio:addItem("2. Entry",3,5,colors.yellow) -aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) -aRadio:setSelectedItem(colors.green, colors.blue) -```` -**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
    +Radios are objects where you can create endless entrys the user can click on a button and it opens a "list" where the user can choose a entry + +Here is a example of how to create a standard radio: + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +```` + +Here are all possible functions available for radios:
    +Remember radio inherits from [object](https://github.com/NoryiE/basalt/wiki/Object): + +## addItem +Adds a item to the radio + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +```` +**parameters:** string text, number x, number y, number bgcolor, number fgcolor, any ... - (text is the displayed text, bgcolor and fgcolors the colors of background/text and args (...) is something dynamic, you wont see them but if you require some more information per item you can use that)
    +**returns:** self
    + +## removeItem +Removes a item from the radio + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:removeItem(2) +```` +**parameters:** number index
    +**returns:** self
    + +## editItem +Edits a item on the radio + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:editItem(3,"3. Edited Entry",3,6,colors.yellow,colors.green) +```` +**parameters:** number index, string text, number x, number y, number bgcolor, number fgcolor, any ...
    +**returns:** self
    + +## setScrollable +Makes the radio scrollable + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:setScrollable(true) +```` +**parameters:** boolean isScrollable
    +**returns:** self
    + +## selectItem +selects a item in the radio (same as a player would click on a item) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:selectItem(1) +```` +**parameters:** number index
    +**returns:** self
    + +## clear +clears the entire list (radio) + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:clear() +```` +**parameters:** -
    +**returns:** self
    + +## getItemIndex +returns the item index of the currently selected item + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:getItemIndex() +```` +**parameters:** -
    +**returns:** number index
    + +## setSelectedItem +Sets the background of the item which is currently selected + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aRadio = mainFrame:addRadio("myFirstRadio"):show() +aRadio:addItem("1. Entry",3,4) +aRadio:addItem("2. Entry",3,5,colors.yellow) +aRadio:addItem("3. Entry",3,6,colors.yellow,colors.green) +aRadio:setSelectedItem(colors.green, colors.blue) +```` +**parameters:** number bgcolor, number fgcolor, boolean isActive (isActive means if different colors for selected item should be used)
    **returns:** self
    \ No newline at end of file diff --git a/docs/objects/Scrollbar.md b/docs/objects/Scrollbar.md index 14350a4..6fd1925 100644 --- a/docs/objects/Scrollbar.md +++ b/docs/objects/Scrollbar.md @@ -1,53 +1,48 @@ -# Scrollbar - -Scrollbars are objects, the user can scroll vertically or horizontally, this can change the value.
    -Here is a example of how to create a standard scrollbar: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):show() -```` - -This will create a default label with a size 5 width and 1 height on position 1 1 (relative to its parent frame), the default background is colors.gray, the default text color is colors.black. the default bar type is vertical, the default symbol is " " and the default symbol color is colors.lightGray. The default zIndex is 5. - -Here are all possible functions available for scrollbars. Remember scrollbar inherit from [object](/objects/Object): - -## setSymbol -Changes the symbol - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setSymbol("X"):show() -```` -**parameters:** char symbol
    -**returns:** self
    - -## setBackgroundSymbol -Changes the background symbol color - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setSymbol("X"):setBackgroundSymbol(colors.green):show() -```` -**parameters:** number symbolcolor
    -**returns:** self
    - -## setBarType -If the bar goes vertically or horizontally - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setBarType("horizontal"):show() -```` -**parameters:** string value ("vertical" or "horizontal")
    -**returns:** self
    - -## setMaxValue -the default max value is always the width (if vertical) or height (if horizontal), if you change the max value the bar will always calculate the value based on its width or height - example: you set the max value to 100, the height is 10 and it is a vertical bar, this means if the bar is on top, the value is 10, if the bar goes one below, it is 20 and so on. - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setMaxValue(123):show() -```` -**parameters:** any number
    -**returns:** self
    \ No newline at end of file +Scrollbars are objects, the user can scroll vertically or horizontally, this can change the value.
    +Here is a example of how to create a standard scrollbar: + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):show() +```` +Here are all possible functions available for scrollbars. Remember scrollbar inherit from [object](https://github.com/NoryiE/Basalt/wiki/Object): + +## setSymbol +Changes the symbol + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setSymbol("X"):show() +```` +**parameters:** char symbol
    +**returns:** self
    + +## setBackgroundSymbol +Changes the background symbol color + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setSymbol("X"):setBackgroundSymbol(colors.green):show() +```` +**parameters:** number symbolcolor
    +**returns:** self
    + +## setBarType +If the bar goes vertically or horizontally + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setBarType("horizontal"):show() +```` +**parameters:** string value ("vertical" or "horizontal")
    +**returns:** self
    + +## setMaxValue +the default max value is always the width (if horizontal) or height (if vertical), if you change the max value the bar will always calculate the value based on its width or height - example: you set the max value to 100, the height is 10 and it is a vertical bar, this means if the bar is on top, the value is 10, if the bar goes one below, it is 20 and so on. + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aScrollbar = mainFrame:addScrollbar("myFirstScrollbar"):setMaxValue(123):show() +```` +**parameters:** any number
    +**returns:** self
    diff --git a/docs/objects/Slider.md b/docs/objects/Slider.md index 627f661..4e4e065 100644 --- a/docs/objects/Slider.md +++ b/docs/objects/Slider.md @@ -1,42 +1,42 @@ -# Slider - -With sliders you can add a object where the user can change a number value.

    - -Here are all possible functions available for sliders:
    -Remember slider also inherits from [object](/objects/Object) - -## setSymbol -this will change the foreground symbol -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setSymbol("X"):show() -```` -**parameters:** char symbol
    -**returns:** self
    - -## setBackgroundSymbol -this will change the symbol background color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setBackgroundSymbol(colors.yellow):show() -```` -**parameters:** number color
    -**returns:** self
    - -## setSymbolColor -this will change the symbol color -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setSymbolColor(colors.red):show() -```` -**parameters:** number color
    -**returns:** self
    - -## setBarType -this will change the bar to vertical/horizontal (default is horizontal) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aSlider = mainFrame:addSlider("myFirstSlider"):setBarType("vertical"):show() -```` -**parameters:** string value ("vertical", "horizontal"
    -**returns:** self
    \ No newline at end of file +With sliders you can add a object where the user can change a number value.

    + +Here are all possible functions available for sliders:
    +Remember slider also inherits from [object](https://github.com/NoryiE/Basalt/wiki/Object) + +## setSymbol +this will change the foreground symbol +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aSlider = mainFrame:addSlider("myFirstSlider"):setSymbol("X"):show() +```` +**parameters:** char symbol
    +**returns:** self
    + +## setBackgroundSymbol +this will change the symbol background color +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aSlider = mainFrame:addSlider("myFirstSlider"):setBackgroundSymbol(colors.yellow):show() +```` +**parameters:** number color
    +**returns:** self
    + +## setSymbolColor +this will change the symbol color +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aSlider = mainFrame:addSlider("myFirstSlider"):setSymbolColor(colors.red):show() +```` +**parameters:** number color
    +**returns:** self
    + +## setBarType +this will change the bar to vertical/horizontal (default is horizontal) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aSlider = mainFrame:addSlider("myFirstSlider"):setBarType("vertical"):show() +```` +**parameters:** string value ("vertical", "horizontal"
    +**returns:** self
    + + diff --git a/docs/objects/Textfield.md b/docs/objects/Textfield.md index 2819d97..bdfd028 100644 --- a/docs/objects/Textfield.md +++ b/docs/objects/Textfield.md @@ -1,74 +1,72 @@ -# Textfield - -Textfields are objects, where the user can write something on multiple lines. it act's like the default edit script (without coloring)
    -Here is a example of how to create a default textfield: - -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -```` - -This will create a default textfield with the size 10 width and 4 height on position 1 1 (relative to its parent frame), the default background is colors.gray, the default text color is colors.black and the default zIndex is 5. - -A list of all possible functions available for textfields. Remember textfield inherits from [object](/objects/Object): - - -## getLines -returns all lines -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -basalt.debug(aTextfield:getLines()) -```` -**parameters:** -
    -**returns:** table lines
    - -## getLine -returns the line on index position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -basalt.debug(aTextfield:getLine(2)) -```` -**parameters:** number index
    -**returns:** string line
    - -## editLine -edits line on index position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -aTextfield:editLine(2, "hellow") -```` -**parameters:** number index, string text
    -**returns:** self
    - -## addLine -adds a line on index position (if index is nil it just adds the line on the bottom) -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -aTextfield:addLine("hellow") -```` -**parameters:** string text, number index
    -**returns:** self
    - -## removeLine -removes the line on index position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -aTextfield:removeLine(1) -```` -**parameters:** number index
    -**returns:** self
    - -## getTextCursor -returns the cursor position -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() -basalt.debug(aTextfield:getTextCursor()) -```` -**parameters:** -
    +Textfields are objects, where the user can write something on multiple lines. it act's like the default edit script (without coloring)
    +Here is a example of how to create a default textfield: + +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +```` + +This will create a default textfield with the size 10 width and 4 height on position 1 1 (relative to its parent frame), the default background is colors.gray, the default text color is colors.black and the default zIndex is 5. + +A list of all possible functions available for textfields. Remember textfield inherits from [object](https://github.com/NoryiE/NyoUI/wiki/Object): + + +## getLines +returns all lines +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +basalt.debug(aTextfield:getLines()) +```` +**parameters:** -
    +**returns:** table lines
    + +## getLine +returns the line on index position +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +basalt.debug(aTextfield:getLine(2)) +```` +**parameters:** number index
    +**returns:** string line
    + +## editLine +edits line on index position +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +aTextfield:editLine(2, "hellow") +```` +**parameters:** number index, string text
    +**returns:** self
    + +## addLine +adds a line on index position (if index is nil it just adds the line on the bottom) +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +aTextfield:addLine("hellow") +```` +**parameters:** string text, number index
    +**returns:** self
    + +## removeLine +removes the line on index position +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +aTextfield:removeLine(1) +```` +**parameters:** number index
    +**returns:** self
    + +## getTextCursor +returns the cursor position +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTextfield = mainFrame:addTextfield("myFirstTextfield"):show() +basalt.debug(aTextfield:getTextCursor()) +```` +**parameters:** -
    **returns:** number x, number y
    \ No newline at end of file diff --git a/docs/objects/Thread.md b/docs/objects/Thread.md index ea38899..292e5fa 100644 --- a/docs/objects/Thread.md +++ b/docs/objects/Thread.md @@ -1,49 +1,47 @@ -# Thread - -Threads are "functions" you can execute simultaneously. Ofc the reality is, i am just using coroutine for that. But it works pretty good AND is very easy to use. -
    -Here is a list of all available functions for threads:
    - -## start -starts a new thread and executes the function -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aThread = mainFrame:addThread("myFirstThread"):show() -local function randomThreadFunction() - while true do - basalt.debug("Thread is active") - os.sleep(1) -- a sleep/coroutine.yield() or pullEvent is required otherwise we will never come back to the main program (error) - end -end -aThread:start(randomThreadfunction) -```` -**parameters:**function func
    -**returns:** self
    - -## getStatus -gets the thread status -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aThread = mainFrame:addThread("myFirstThread"):show() -basalt.debug(aThread:getStatus()) -- returns "running", "normal", "suspended" or "dead" -```` -**parameters:** -
    -**returns:** string "running" - if its running, "normal" - is active but not running (waiting for a event), "suspended" - is suspended
    - -## stop -stops the thread -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aThread = mainFrame:addThread("myFirstThread"):show() -local function randomThreadFunction() - while true do - basalt.debug("Thread is active") - os.sleep(1) -- a sleep/coroutine.yield() or pullEvent is required otherwise we will never come back to the main program (error) - end -end -aThread:start(randomThreadfunction) -local aButton = mainFrame:addButton("myFirstButton"):setText("Stop Thread"):onClick(function() aThread:stop() end):show() - -```` -**parameters:** -
    +Threads are "functions" you can execute simultaneously. Ofc the reality is, i am just using coroutine for that. But it works pretty good AND is very easy to use. +
    +Here is a list of all available functions for threads:
    + +## start +starts a new thread and executes the function +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aThread = mainFrame:addThread("myFirstThread"):show() +local function randomThreadFunction() + while true do + basalt.debug("Thread is active") + os.sleep(1) -- a sleep/coroutine.yield() or pullEvent is required otherwise we will never come back to the main program (error) + end +end +aThread:start(randomThreadfunction) +```` +**parameters:**function func
    +**returns:** self
    + +## getStatus +gets the thread status +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aThread = mainFrame:addThread("myFirstThread"):show() +basalt.debug(aThread:getStatus()) -- returns "running", "normal", "suspended" or "dead" +```` +**parameters:** -
    +**returns:** string "running" - if its running, "normal" - is active but not running (waiting for a event), "suspended" - is suspended
    + +## stop +stops the thread +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aThread = mainFrame:addThread("myFirstThread"):show() +local function randomThreadFunction() + while true do + basalt.debug("Thread is active") + os.sleep(1) -- a sleep/coroutine.yield() or pullEvent is required otherwise we will never come back to the main program (error) + end +end +aThread:start(randomThreadfunction) +local aButton = mainFrame:addButton("myFirstButton"):setText("Stop Thread"):onClick(function() aThread:stop() end):show() + +```` +**parameters:** -
    **returns:** self
    \ No newline at end of file diff --git a/docs/objects/Timer.md b/docs/objects/Timer.md index 4598def..c5cf577 100644 --- a/docs/objects/Timer.md +++ b/docs/objects/Timer.md @@ -1,51 +1,49 @@ -# Timer - -With timers you can call delayed functions. -
    -Here is a list of all available functions for timers:
    - -## setTime -sets the time the timer should wait after calling your function -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5) -```` -**parameters:**number time[, number repeats] - (time in seconds, if repeats is -1 it will call the function infinitly (every x seconds)
    -**returns:** self
    - -## start -starts the timer -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5):start() -```` -**parameters:** -
    -**returns:** self
    - -## cancel -stops/cancels the timer -````lua -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5):start() -aTimer:cancel() -```` -**parameters:** -
    -**returns:** self
    - - -## onCall -adds a function to the timer -````lua -local function timerCall(self) - basalt.debug("i got called!") -end -local mainFrame = basalt.createFrame("myFirstFrame"):show() -local aTimer = mainFrame:addTimer("myFirstTimer") -aTimer:setTime(5):onCall(timerCall):start() - -```` -**parameters:** function func
    -**returns:** self
    \ No newline at end of file +With timers you can call delayed functions. +
    +Here is a list of all available functions for timers:
    + +## setTime +sets the time the timer should wait after calling your function +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTimer = mainFrame:addTimer("myFirstTimer") +aTimer:setTime(5) +```` +**parameters:**number time[, number repeats] - (time in seconds, if repeats is -1 it will call the function infinitly (every x seconds)
    +**returns:** self
    + +## start +starts the timer +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTimer = mainFrame:addTimer("myFirstTimer") +aTimer:setTime(5):start() +```` +**parameters:** -
    +**returns:** self
    + +## cancel +stops/cancels the timer +````lua +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTimer = mainFrame:addTimer("myFirstTimer") +aTimer:setTime(5):start() +aTimer:cancel() +```` +**parameters:** -
    +**returns:** self
    + + +## onCall +adds a function to the timer +````lua +local function timerCall(self) + basalt.debug("i got called!") +end +local mainFrame = basalt.createFrame("myFirstFrame"):show() +local aTimer = mainFrame:addTimer("myFirstTimer") +aTimer:setTime(5):onCall(timerCall):start() + +```` +**parameters:** function func
    +**returns:** self
    diff --git a/docs/tips/buttons.md b/docs/tips/buttons.md index 52fb3b2..32131e8 100644 --- a/docs/tips/buttons.md +++ b/docs/tips/buttons.md @@ -1,41 +1,41 @@ -# Changing button colors - -Here i want to explain to you how you would create a button with the default color gray, and as long as the user is clicking on the button it will change its color to black (the default frame-background is lightGray). - -To make this possible the button needs 1 onClick event, 1 onClickUp event and 1 onLoseFocus event. - -Very interesting sidetip: events can hold multiple functions!
    -**Example snippet:** -````lua -local function buttonColoring() --- here you can add some coloring for your button -end -local function buttonLogic() --- here you can add some logic for your button -end -local button = mainFrame:addButton("ExampleButton"):show() -button:onClick(buttonColoring):onClick(buttonLogic) -- yes this would work, if not its a bug! -```` - -This means you can create a function wich handles only the coloring side of your button, and if your button also needs some logic you just create your own unique function for that and add it to your button. - -With this knowledge we create now a function where we pass a button-object as parameter and this will setup the coloring of our button: - -**Example snippet:** -````lua -local basalt = dofile("basalt.lua") -local mainFrame = basalt.createFrame("mainFrame"):show() -local button = mainFrame:addButton("firstButton"):setPosition(3,3):setSize(12,3):setText("Click me"):setBackground(colors.gray):setForeground(colors.black):show() - -local button2 = mainFrame:addButton("secondButton"):setPosition(25,3):setSize(16,3):setText("Another Btn"):setBackground(colors.gray):setForeground(colors.black):show() - -local function setupButtonColoring(btn) -btn:onClick(function() btn:setBackground(colors.black) btn:setForeground(colors.lightGray) end) -btn:onClickUp(function() btn:setBackground(colors.gray) btn:setForeground(colors.black) end) -btn:onLoseFocus(function() btn:setBackground(colors.gray) btn:setForeground(colors.black) end) -end -setupButtonColoring(button) -setupButtonColoring(button2) - -basalt.autoUpdate() -```` \ No newline at end of file +Here I want to explain to you how you would create a button with the default color gray, and as long as the user is clicking on the button it will change its color to black (the default frame-background is lightGray). + +To make this possible the button needs 1 onClick event, 1 onClickUp event and 1 onLoseFocus event. + +Very interesting sidetip: events can hold multiple functions!
    +**Example snippet:** +````lua +local function buttonColoring() +-- here you can add some coloring for your button +end +local function buttonLogic() +-- here you can add some logic for your button +end +local button = mainFrame:addButton("ExampleButton"):show() +button:onClick(buttonColoring):onClick(buttonLogic) -- yes this would work, if not its a bug! +```` + +This means you can create a function wich handles only the coloring side of your button, and if your button also needs some logic you just create your own unique function for that and add it to your button. + +With this knowledge we create now a function where we pass a button-object as parameter and this will setup the coloring of our button: + +**Example snippet:** +````lua +local basalt = dofile("basalt.lua") +local mainFrame = basalt.createFrame("mainFrame"):show() +local button = mainFrame:addButton("firstButton"):setPosition(3,3):setSize(12,3):setText("Click me"):setBackground(colors.gray):setForeground(colors.black):show() + +local button2 = mainFrame:addButton("secondButton"):setPosition(25,3):setSize(16,3):setText("Another Btn"):setBackground(colors.gray):setForeground(colors.black):show() + +local function setupButtonColoring(btn) +btn:onClick(function() btn:setBackground(colors.black) btn:setForeground(colors.lightGray) end) +btn:onClickUp(function() btn:setBackground(colors.gray) btn:setForeground(colors.black) end) +btn:onLoseFocus(function() btn:setBackground(colors.gray) btn:setForeground(colors.black) end) +end +setupButtonColoring(button) +setupButtonColoring(button2) + +basalt.autoUpdate() +```` + +Now you've got a function which sets your buttons up. \ No newline at end of file diff --git a/docs/tips/logic.md b/docs/tips/logic.md index 9c44441..80a5b6d 100644 --- a/docs/tips/logic.md +++ b/docs/tips/logic.md @@ -1,57 +1,56 @@ -# Executing your own logic - -You question yourself how you can execute your own logic while basalt is also active? There are multiple ways of doing that: - -## Number 1: -Using parallel.waitForAll - -````lua -local basalt = dofile("basalt.lua") - -local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame and a button without functionality -mainFrame:addButton("aButton"):onClick(function() end):show() - -local function yourCustomHandler() - while true do - -- add your logic here - os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell - end -end - -parallel.waitForAll(basalt.autoUpdate, yourCustomHandler) -- here it will handle your function (yourCustomHandler) and basalts handlers at the time -```` -You can read [here](http://www.computercraft.info/wiki/Parallel_(API)) what exactly parallel.waitForAll() does - -## Number 2: -Using threads - -````lua -local basalt = dofile("basalt.lua") - -local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a thread -mainFrame:addButton("aButton"):onClick(function() end):show() -local thread = mainFrame:addThread("customHandlerExecutingThread") - -local function yourCustomHandler() - while true do - -- add your logic here - os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell - end -end -thread:start(yourCustomHandler) -- this will create a coroutine and starts the coroutine, os.sleep does the rest, so you just have to call start once. -```` - -## Number 3: -Using timers - -````lua -local basalt = dofile("basalt.lua") - -local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a timer -mainFrame:addButton("aButton"):onClick(function() end):show() -local timer = mainFrame:addTimer("customHandlerExecutingTimer") - -local function yourCustomHandler() - -- add your logic here -end -timer:onCall(yourCustomHandler):setTime(1, -1):start() -- this will call your function every second until you :cancel() the timer \ No newline at end of file +You question yourself how you can execute your own logic while basalt is also active? There are multiple ways of doing that: + +## Method 1: +Using parallel.waitForAll + +````lua +local basalt = dofile("basalt.lua") + +local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame and a button without functionality +mainFrame:addButton("aButton"):onClick(function() end):show() + +local function yourCustomHandler() + while true do + -- add your logic here + os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell + end +end + +parallel.waitForAll(basalt.autoUpdate, yourCustomHandler) -- here it will handle your function (yourCustomHandler) and basalts handlers at the time +```` +You can read [here](http://www.computercraft.info/wiki/Parallel_(API)) what exactly parallel.waitForAll() does + +## Method 2: +Using threads + +````lua +local basalt = dofile("basalt.lua") + +local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a thread +mainFrame:addButton("aButton"):onClick(function() end):show() +local thread = mainFrame:addThread("customHandlerExecutingThread") + +local function yourCustomHandler() + while true do + -- add your logic here + os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell + end +end +thread:start(yourCustomHandler) -- this will create a coroutine and starts the coroutine, os.sleep does the rest, so you just have to call start once. +```` + +## Method 3: +Using timers + +````lua +local basalt = dofile("basalt.lua") + +local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a timer +mainFrame:addButton("aButton"):onClick(function() end):show() +local timer = mainFrame:addTimer("customHandlerExecutingTimer") + +local function yourCustomHandler() + -- add your logic here +end +timer:onCall(yourCustomHandler):setTime(1, -1):start() -- this will call your function every second until you :cancel() the timer +```` \ No newline at end of file