diff options
Diffstat (limited to 'toolkit/widget.go')
| -rw-r--r-- | toolkit/widget.go | 163 |
1 files changed, 143 insertions, 20 deletions
diff --git a/toolkit/widget.go b/toolkit/widget.go index 30169ba..450cd8b 100644 --- a/toolkit/widget.go +++ b/toolkit/widget.go @@ -1,18 +1,24 @@ package toolkit +type WidgetType int +type ActionType int + // passes information between the toolkit library (plugin) // // All Toolkit interactions should be done via a channel or Queue() -// TODO: FIND THIS NOTE AND FIGURE OUT HOW TO IMPLEMENT IT +// TODO: FIGURE OUT HOW TO IMPLEMENT THIS // // This is the only thing that is passed between the toolkit plugin // // what names should be used? This is not part of [[Graphical Widget]] -// Event() seems like a good name. +// Event() seems like a good name. +// Event is used too much: web dev, cloud, etc +// I'm using "Action". Maybe it should really be +// "Interaction" as per wikipedia [[User interface]] // Could a protobuf be used here? (Can functions be passed?) type Widget struct { Name string - Action string // "New", "Delete", "Set", aka something to do + // Action string // "New", "Delete", "Set", aka something to do Type WidgetType // This function is how you interact with the toolkit @@ -20,6 +26,7 @@ type Widget struct { // Hopefully this will be the barrier between the goroutines // TODO: move this interaction to channels Custom func() + Callback func() // re-adding an id to test channels id int @@ -48,26 +55,88 @@ type Widget struct { Expand bool } -type WidgetType int +type Action struct { + Type ActionType + + // this should be the widget + // if the action is New, Hide, Enable, etc + Widget *Widget + + // this is the widget + // where the other one should be put on New, Move, etc + Where *Widget + + // This is how the values are passed back and forth + // values from things like checkboxes & dropdown's + // The string is also used to set the button name + B bool + I int + // maybe safe if there is correctly working Custom() between goroutines? + // (still probably not, almost certainly not. not possible. layer violation?) + S string // not safe to have 'S' + + // This GUI is intended for simple things + // We are not laying out PDF's here + // This is used for things like a slider(0,100) + Width int + Height int + X int + Y int + + // Put space around elements to improve look & feel + Margin bool + + // Make widgets fill up the space available + Expand bool +} + // https://ieftimov.com/post/golang-datastructures-trees/ +// TODO: protobuf ? const ( Unknown WidgetType = iota Window - Tab - Group - Frame + Tab // internally, this should be a window (?) + Frame // should windows and tab's be frames (?) + Grid // a grid of frames ? + Group // internally, this should be a grid (?) + Box // internally, this should be a grid (?) Button Checkbox Dropdown - Combobox + Combobox // dropdown with edit=true (?) Label - Textbox + Textbox // is this a Label with edit=true? Slider Spinner - Grid - Box Image + Area + Form + Font + Color + Dialog +) + +const ( + Add ActionType = iota + Delete + Get + Set + SetFlag + GetText + SetText + AddText + Show + Hide + Enable + Disable + Margin + Unmargin + Pad + Unpad + Append + Move + Dump Flag ) @@ -77,10 +146,14 @@ func (s WidgetType) String() string { return "Window" case Tab: return "Tab" - case Group: - return "Group" case Frame: return "Frame" + case Grid: + return "Grid" + case Group: + return "Group" + case Box: + return "Box" case Button: return "Button" case Checkbox: @@ -97,18 +170,68 @@ func (s WidgetType) String() string { return "Slider" case Spinner: return "Spinner" - case Grid: - return "Grid" - case Box: - return "Box" case Image: return "Image" - case Flag: - return "Flag" + case Area: + return "Area" + case Form: + return "Form" + case Font: + return "Font" + case Color: + return "Color" + case Dialog: + return "Dialog" case Unknown: return "Unknown" } - return "GuiToolkitTUndefinedType" + return "Widget.Type.String() Error" +} + +func (s ActionType) String() string { + switch s { + case Add: + return "Add" + case Delete: + return "Delete" + case Get: + return "Get" + case Set: + return "Set" + case SetFlag: + return "SetFlag" + case GetText: + return "GetText" + case SetText: + return "SetText" + case AddText: + return "AddText" + case Show: + return "Show" + case Hide: + return "Hide" + case Enable: + return "Enable" + case Disable: + return "Disable" + case Margin: + return "Margin" + case Unmargin: + return "Unmargin" + case Pad: + return "Pad" + case Unpad: + return "Unpad" + case Append: + return "Append" + case Move: + return "Move" + case Flag: + return "Flag" + case Dump: + return "Dump" + } + return "Action.Type.String() Error" } // this is hopefully just used in a very few places for |
