The GUI Server !

making it easy to create user interfaces

more:dogwaffle
back


products galleries buy now help download developer about

An easy and convenient way to make special FX filters with user interactions like buttons, menus, sliders...
 

Overview  -  Download  - Reference           |  also:  DogLua - SDK

 


Overview

 
This information is for software developers and mathematically inclined adventurers who want to quickly create plugins with interfaces to Dogwaffle.

The GUI server is there to help you make interactive dialogs for plugins. Any program that supports activeX can use the GUI_Server.

 Lua is one of the first, and it's also extremly simple to use. Therefore, we'll take a look a a few samples in Lua first.

Interested? For more on Lua scripting with Project Dogwaffle, read: 
DogLua

Example of GUI Server usage in Lua scripts:

-- set the caption (any time) to show "Mirror" as the window's title
GUI_SetCaption("Mirror")


-- add a check box for horrizontal mirroring
-- and another for vertical mirroring
-- start with the horizontal one already checked

h1 = GUI_AddControl("Check", "Mirror h", 1)
h2 = GUI_AddControl("Check", "Mirror v", 0)
GUI_OpenPanel()

--event loop.  Repeat until ok or cancel pressed (idx variable -1 or -2)
repeat

   idx, retval, retstr = GUI_WaitOnEvent()
   check1,string=GUI_GetSettings(h1)
   check2,string=GUI_GetSettings(h2)

--optionally respond to events as they happen.
until idx < 0 --repeat until

GUI_ClosePanel()








Here is another updated GUI example with a combo box and comments.
--GUI_Test.lua

--you can set the caption of the panel at any time...
GUI_SetCaption("DogLua Test")

-- begin adding controls.

-- a scroller control for Red, Green & Blue sliders
-- start them at 50 (middle) positions in a range from 0 to 100
h1 = GUI_AddControl("Scroller", "Red", 50, 0, 100)
h2 = GUI_AddControl("Scroller", "Green", 50, 0, 100)
h3 = GUI_AddControl("Scroller", "Blue", 50, 0, 100)

-- add a separator line
h4 = GUI_AddControl("line")

--add a colorbox control (color picker)
h5 = GUI_AddControl("Colorbox", "Black", 00, 0, 000)
h6 = GUI_AddControl("line")
--
h7 = GUI_AddControl("TextLabel", "A label")
--a checkbox control
h8 = GUI_AddControl("Check", "Checked", 1)
--a button control
h9 = GUI_AddControl("Button", "Button...")
--a text control (text entry)
h10 = GUI_AddControl("Text", "Some text")
GUI_SetSettings (h10, 0, "There once was a man named...")
--a number control (numeric entry.  text is blocked)
h11 = GUI_AddControl("Number", "Numbers only", 128)

--setup a combo box
h12 = GUI_AddControl("Combobox", "My Combo")
--set the list in the combo box
GUI_SetList (h12,0,"Dairy goat")
GUI_SetList (h12,1,"Puddle duck")
GUI_SetList (h12,2,"Family dog")
GUI_SetList (h12,3,"Crazy chicken")
--set the current string in the combo box
GUI_SetSettings (h12,0, "Dairy goat")

--when all controls are added, open the panel.

GUI_OpenPanel()

--wait for an event to happen.
--If the returned value is <0 then OK or Cancel was pressed.
--   -1 for OK     and    -2 for Cancel.

repeat
idx, retval, retstr = GUI_WaitOnEvent()
--display the settings in the caption so we can see them.
--this is for testing only.
--GUI_SetCaption (idx)
--GUI_SetCaption (retval)
--GUI_SetCaption (retstr) -- beware setting a null in the caption...
until idx < 0


--example of getting the settings of a specific control
--read any settings before closing the panel
--value, string = GUI_GetSettings(h1)

GUI_ClosePanel()








Here is another Example of Lua Script using the GUI interface options.
the Sunset filter (multiplying your image top-to-bottom by a gradient of 2 colors)
--Sunset.lua
--it's good form to mention the name of this script.
--these two dashes (--) at the mean that these are comments.


--Here is a function that will be called by the main program.
function DoGradient (gr1,gr2)
local r,g,b,r2,g2,b2,r3,g3,b3,r4,g4,b4
local x,y, y2,y3

--we have to unpack the 'packed' hex colors.
r2,g2,b2 = decimal2rgb(gr1)
r3,g3,b3 = decimal2rgb(gr2)

for y = 0, height - 1 do

--setup the gradient colors.
  y2=y/height
  y3= 1-y2
  r4=(r2*y3)+(r3*y2)
  g4=(g2*y3)+(g3*y2)
  b4=(b2*y3)+(b3*y2)
--
  for x = 0, width - 1 do
    r, g, b = get_rgb(x, y)

    --combine the gradient with the image with multiplication.
    r=r*r4
    g=g*g4
    b=b*b4

    set_rgb(x, y, r, g, b)
  end
  progress(y2)
end
progress(0) -- reset the progress bar after usage.
Dog_Refresh()  -- show the updated buffer
end



-----------------------------------------------------------------
-- The main part of the program is where we setup the gui
-- and respond to the user selections and input
-----------------------------------------------------------------

-- start by saving one level of undo
Dog_SaveUndo()

--we are going to open a panel with a couple of controls on it.

--first, lets give the panel (window) a name.
GUI_SetCaption("Sunset filter")

--we will now add a couple of controls for selecting color.

--make use of the "hex" function to convert hex colors into decimal numbers.
--if you're not familiar with colors represented in hex...
--hex (hexadecimal) is a way to represent numbers with 16 digits
--instead of ten (decimal)
--hex numbers are 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f, for 0-15.
--to represent numbers between 0-255, we use two hex numbers.
--00 = 0.  FF = 255.
--to represent 24 bit color, we use 3 sets of hex numbers like...
--FF0000 would be bright blue.  0000FF would be bright red.
-- remember:  RRGGBB

--lets add the conrols.
-- h1 and h2 will be the 'handles' that identify the color boxes
-- we can then later access these to get or set new values
h1 = GUI_AddControl("Colorbox", "", hex("44AAFF"), 0, 0)
h2 = GUI_AddControl("Colorbox", "", hex("FFFFFF") ,0, 0)

-- now that we've added all our controls, we can open the panel.

GUI_OpenPanel()

---------------------------------
--this is our main event loop.
---------------------------------

repeat
idx, retval, retstr = GUI_WaitOnEvent()

-- get the newest values from the color boxes
g1,dummy=GUI_GetSettings(h1)
g2,dummy=GUI_GetSettings(h2)

--update the screen everytime the user clicks a control.
--if idx was -1 we clicked OK, if -2 we clicked CANCEL
if idx >=0 then
  DoGradient(g1,g2)
end

until idx < 0


--example of getting the settings of a specific control
--read any settings before closing the panel
--value, string = GUI_GetSettings(h1)

--if we clicked CANCEL we will want to restore what we
--had before entering the script.

if idx == -2 then
Dog_RestoreUndo()
Dog_GetBuffer()
Dog_Refresh()
end

--always close the panel before exiting or it will stay around.

GUI_ClosePanel()




click me for full-screen image






 Another example, this one using VB:

'VB example:

'first, you have to create a GUI_Server object

Dim GUI_Server As Object 'could dim here, or globally
Set GUI_Server = CreateObject("GUI_Server.GUIServer")

'then you can use its methods.

'lets put a title on the titlebar of the panel we're going to open.
GUI_Server.SetCaption "Test of GUI_Server"

'Lets add some controls
GUI_Server.AddLogo "GUI_Server_Logo_Test2.bmp"
'if you wish to use a logo, it should be added before any
'conrols for proper layout.

'GUI_Server.setpath ("C:\basic")
''0 return app path
'1 return current path
GUI_Server.SetCaption GUI_Server.getpath(1)


'you can optionally set a reletive spacing.
'the default value is 27 pixels.
'this will be that spacing between the top of the conrol that's about to be
added, to the top of the next control.
'it's not the spacing in between controls.
GUI_Server.SetSpacing 25
GUI_Server.AddControl "TextLabel", "Color control...", 0, 0, 0, 0
GUI_Server.AddControl "Colorbox", "", &HFFBB22, 0, 0, 0 'currently there can
be up to 5 of these.
GUI_Server.AddControl "Line", "", 0, 0, 0, 0
GUI_Server.AddControl "TextLabel", "Number and Text controls...", 0, 0, 0, 0
GUI_Server.AddControl "Number", "My number", 8472, 0, 0, 0
Dim index As Long 'we can optionally get the index retuned by the AddControl
method to access our controls later.
index = GUI_Server.AddControl("Text", "My Text", 0, 0, 0, 0) 'the actual
text string can be added at any time...
  GUI_Server.SetSettings index, 0, "Some text goes here"  'text can be added
to a text control after creation.
GUI_Server.AddControl "Line", "", 0, 0, 0, 0
GUI_Server.AddControl "TextLabel", "Scroller controls...", 0, 0, 0, 0
GUI_Server.AddControl "Scroller", "Red", 255, 1, 255, 0
GUI_Server.AddControl "Scroller", "Green", 64, 1, 255, 0
GUI_Server.AddControl "Scroller", "Blue", 0, 1, 255, 0
GUI_Server.AddControl "Line", "", 0, 0, 0, 0
GUI_Server.AddControl "TextLabel", "Check controls...", 0, 0, 0, 0
GUI_Server.AddControl "Check", "Checkbox", 0, 0, 0, 0
GUI_Server.AddControl "Check", "Checked", 1, 0, 0, 0
GUI_Server.AddControl "Line", "", 0, 0, 0, 0
GUI_Server.AddControl "TextLabel", "Button controls...", 0, 0, 0, 0
GUI_Server.AddControl "Button", "Click me", 0, 0, 0, 0
GUI_Server.AddControl "Button", "Another button", 0, 0, 0, 0
GUI_Server.AddControl "Line", "", 0, 0, 0, 0
GUI_Server.AddControl "TextLabel", "Combo control...", 0, 0, 0, 0
index = GUI_Server.AddControl("ComboBox", "A Combo", 0, 0, 0, 0) 'a combo box.
GUI_Server.SetList index, 0, "Dairy goat" 'now add list items.
GUI_Server.SetList index, 1, "Puddle duck"
GUI_Server.SetList index, 2, "Family dog"
GUI_Server.SetList index, 3, "Crazy chicken"
GUI_Server.SetSettings index, 0, "Dairy goat" 'set the default string.
'do this after setting the list.

'open the panel.
GUI_Server.OpenPanel

' a loop to handle events as they happen.

Eventloop:
Dim MyIndex As Long, MyValue As Long, MyString As String, MyMessage As
String

MyIndex = GUI_Server.WaitOnEvent(MyValue, MyString)
MyMessage = "Index = " & MyIndex & " - " & "Value = " & MyValue & " - " &
"String = " & MyString
If MyIndex = 17 Then ChangeStuff 'change stuff if the button was clicked
(control 15)
GUI_Server.SetCaption MyMessage

'if the value returned is -1, the OK button was pressed.  -2 for Cancel.
If MyIndex >= 0 Then GoTo Eventloop


'lets read values for specific controls and print it in a message box.
'the conrol index starts at 0, not 1.
'
'MyIndex = 19 'just pick any of them for this test.
'GUI_Server.GetSettings MyIndex, MyValue, MyString
''print a message showing that you can get the settings.
'MyMessage = "Index = " & MyIndex & Chr$(10) & "Value = " & MyValue &
Chr$(10) & "String = " & MyString


'we're done.  Close up shop.
GUI_Server.ClosePanel







Interested? For more on the general SDK and VB source examples, read:  the SDK








   


Downloads



We now offer an updated download which contains several components all in one simple download:
  1. the GUI Server and test executables
  2. the Lua Broswer
  3. sample Lua Scripts
The download is available in the DogLua section's download area










Reference

   The GUI server's Reference Doc has been moved here >  reference.html