Compare commits

..

6 Commits

Author SHA1 Message Date
Jeff Carr 642929aca1 add missing widget Actions 2025-03-03 00:13:13 -06:00
Jeff Carr a7cc6fa5d3 stub in widgetpb 2025-03-02 20:06:07 -06:00
Jeff Carr 59f97be98c subbed in tables 2025-02-13 20:11:32 -06:00
Jeff Carr d4b7cd32d4 goimport lint 2025-02-02 15:04:07 -06:00
Jeff Carr ad6bb0f1c1 notes to trigger build to downgrade golang to 1.20 2024-12-02 09:00:51 -06:00
Jeff Carr 73a1babad4 suggesting from the golang uber people 2024-02-27 23:49:08 -06:00
10 changed files with 87 additions and 61 deletions

View File

@ -1,4 +1,4 @@
all: all: goimports vet
@echo @echo
@echo This defines the primitive widgets @echo This defines the primitive widgets
@echo @echo
@ -19,3 +19,7 @@ redomod:
rm -f go.* rm -f go.*
GO111MODULE= go mod init GO111MODULE= go mod init
GO111MODULE= go mod tidy GO111MODULE= go mod tidy
vet:
@GO111MODULE=off go vet
@echo this go library builds okay

View File

@ -8,6 +8,7 @@ Principles:
* Make code using this package simple to use * Make code using this package simple to use
* Widget names should try to match [Wikipedia Graphical widget] * Widget names should try to match [Wikipedia Graphical widget]
* It's ok to guess. Try to do something sensible. * It's ok to guess. Try to do something sensible.
* TODO: use protobuf
``` ```
### Links ### Links

View File

@ -7,13 +7,13 @@ type Action struct {
WidgetId int WidgetId int
ParentId int ParentId int
State State State State
// Text string // what is visable to the user // Text string // what is visable to the user
ProgName string // a name useful for programming ProgName string // a name useful for programming
// most primitive widgets just store a single thing // most primitive widgets just store a single thing
Value any Value any
// how to arrange widgets // how to arrange widgets
Direction Orientation Direction Orientation
@ -23,31 +23,34 @@ type Action struct {
// These must be unique // These must be unique
Strings []string Strings []string
Range RangeType Range RangeType
// RETHINK / REDO EVERYTHING BELOW HERE // RETHINK / REDO EVERYTHING BELOW HERE
// This is used for things like a slider(0,100) // This is used for things like a slider(0,100)
X int X int
Y int Y int
// This is for the grid size & widget position // This is for the grid size & widget position
W int W int
H int H int
AtW int AtW int
AtH int AtH int
// Put space around elements to improve look & feel // Put space around elements to improve look & feel
// Margin bool avoided due to use of action types // Margin bool avoided due to use of action types
// Pad bool // Pad bool
// Make widgets fill up the space available // Make widgets fill up the space available
Expand bool Expand bool
TablePB []byte // a table protobuf
WidgetPB []byte // a tree of widgets
} }
type ActionType int // Add, SetText, Click, Hide, Append, Delete, etc type ActionType int // Add, SetText, Click, Hide, Append, Delete, etc
const ( const (
Add ActionType = iota Add ActionType = iota + 1
Delete Delete
SetText SetText
AddText AddText
@ -66,14 +69,14 @@ const (
Append Append
Move Move
Dump Dump
User // the user did something (mouse, keyboard, etc) User // the user did something (mouse, keyboard, etc)
ToolkitLoad // attempts to load a new toolkit ToolkitLoad // attempts to load a new toolkit
ToolkitInit // initializes the toolkit ToolkitInit // initializes the toolkit
ToolkitClose // closes the toolkit ToolkitClose // closes the toolkit
ToolkitPanic ToolkitPanic
Heartbeat Heartbeat
CloseWindow CloseWindow
UserQuit // the user closed the GUI UserQuit // the user closed the GUI
EnableDebug // open the debugging window EnableDebug // open the debugging window
) )
@ -109,6 +112,22 @@ func (s ActionType) String() string {
return "Move" return "Move"
case Dump: case Dump:
return "Dump" return "Dump"
case User:
return "User"
case ToolkitLoad:
return "ToolkitLoad"
case ToolkitInit:
return "ToolkitInit"
case ToolkitClose:
return "ToolkitClose"
case ToolkitPanic:
return "ToolkitPanic"
case Heartbeat:
return "Heartbeat"
case UserQuit:
return "UserQuit"
case EnableDebug:
return "EnableDebug"
} }
return "ActionType.String() Error" return "gui ActionType.String() Error. must be missing something in the code here"
} }

2
doc.go
View File

@ -5,7 +5,6 @@ There are lots of issues when supporting multiple toolkit plugin
geometries. The geometries vary widely especially between the geometries. The geometries vary widely especially between the
graphical displays and the serial console ones. [Graphical Widget](http://en.wikipedia.org/Graphical_Widget) graphical displays and the serial console ones. [Graphical Widget](http://en.wikipedia.org/Graphical_Widget)
To simplyfy this, we stick to using the concepts: To simplyfy this, we stick to using the concepts:
------------------------------ ^ ------------------------------ ^
@ -44,6 +43,7 @@ Horizontal means layout widgets like books on a bookshelf
--------------------------------- ---------------------------------
Vertical means layout widgets like books in a stack Vertical means layout widgets like books in a stack
---------- ----------
| Widget | | Widget |
---------- ----------

10
geom.go
View File

@ -1,14 +1,14 @@
package widget package widget
type Geom struct { type Geom struct {
Left any Left any
Right any Right any
Top any Top any
Bottom any Bottom any
} }
type Size struct { type Size struct {
Width any Width any
Height any Height any
} }
@ -25,6 +25,7 @@ Horizontal means layout widgets like books on a bookshelf
--------------------------------- ---------------------------------
Vertical means layout widgets like books in a stack Vertical means layout widgets like books in a stack
---------- ----------
| Widget | | Widget |
---------- ----------
@ -51,5 +52,4 @@ func (s Orientation) String() string {
default: default:
return "Horizontal" return "Horizontal"
} }
return "Horizontal"
} }

View File

@ -31,7 +31,7 @@ package widget
// -------------------------------------- // --------------------------------------
type GridSize struct { type GridSize struct {
Width int Width int
Height int Height int
} }

View File

@ -5,6 +5,6 @@ package widget
// seem to be a good idea to use 'type any' here as it // seem to be a good idea to use 'type any' here as it
// just makes things more complicated for no good reason // just makes things more complicated for no good reason
type RangeType struct { type RangeType struct {
Low int Low int
High int High int
} }

View File

@ -56,7 +56,6 @@ func GetString(A any) string {
// log.Warn("getString uknown kind", k, "value =", A) // log.Warn("getString uknown kind", k, "value =", A)
return "" return ""
} }
return ""
} }
// work like unix os.Exec() ? everything other than 0 is false // work like unix os.Exec() ? everything other than 0 is false
@ -89,7 +88,6 @@ func GetBool(A any) bool {
// log.Warn("getString uknown kind", k, "value =", A) // log.Warn("getString uknown kind", k, "value =", A)
return false return false
} }
return false
} }
// work like unix? everything other than 0 is false // work like unix? everything other than 0 is false
@ -121,5 +119,4 @@ func GetInt(A any) int {
// log.Warn("getString uknown kind", k, "value =", A) // log.Warn("getString uknown kind", k, "value =", A)
return -1 return -1
} }
return -1
} }

View File

@ -1,5 +1,7 @@
package widget package widget
// TODO: redo this with protocol buffers
// This is the state of the widget // This is the state of the widget
// The whole state of the widget is sent // The whole state of the widget is sent
@ -11,14 +13,14 @@ package widget
// just makes things more complicated for no good reason // just makes things more complicated for no good reason
type State struct { type State struct {
// This is a unmodifiable string that is displayed to the user. // This is a unmodifiable string that is displayed to the user.
Label string Label string
// most primitive widgets just store a single thing // most primitive widgets just store a single thing
// it is the default value // it is the default value
DefaultS string DefaultS string
CurrentS string CurrentS string
CurrentI int CurrentI int
NewString string NewString string
// most primitive widgets just store a single thing // most primitive widgets just store a single thing
// it is the default value // it is the default value
@ -64,19 +66,19 @@ type State struct {
Strings []string Strings []string
// for widgets that use a range // for widgets that use a range
Range RangeType Range RangeType
Geom Geom Geom Geom
Size Size Size Size
GridSize GridSize GridSize GridSize
GridOffset GridOffset GridOffset GridOffset
// This is for the grid size & widget position // This is for the grid size & widget position
W int W int
H int H int
AtW int AtW int
AtH int AtH int
// a name useful for programming and the debugger. // a name useful for programming and the debugger.
// It is not intended to be displayed to the user // It is not intended to be displayed to the user

View File

@ -16,31 +16,32 @@ package widget
type WidgetType int // Button, Menu, Checkbox, etc. type WidgetType int // Button, Menu, Checkbox, etc.
const ( const (
Unknown WidgetType = iota Unknown WidgetType = iota + 1
Root // the master 'root' node of the binary tree Root // the master 'root' node of the binary tree
Flag // used to send configuration values to plugins Flag // used to send configuration values to plugins
Window // in certain gui's (ncurses), these are tabs Window // in certain gui's (ncurses), these are tabs
Tab // internally, this is a window Tab // internally, this is a window
Frame // deprecate? Frame // deprecate?
Grid // like drawers in a chest Grid // like drawers in a chest
Group // like the 'Appetizers' section on a menu Group // like the 'Appetizers' section on a menu
Box // a vertical or horizontal stack of widgets Box // a vertical or horizontal stack of widgets
Button Button
Checkbox // select 'on' or 'off' Checkbox // select 'on' or 'off'
Dropdown Dropdown
Combobox // dropdown with edit=true Combobox // dropdown with edit=true
Label Label
Textbox // is this a Label with edit=true Textbox // is this a Label with edit=true
Slider // like a progress bar Slider // like a progress bar
Spinner // like setting the oven temperature Spinner // like setting the oven temperature
Table // a full window & table
Separator // TODO Separator // TODO
Image // TODO Image // TODO
Area // TODO Area // TODO
Form // TODO Form // TODO
Font // TODO Font // TODO
Color // TODO Color // TODO
Dialog // TODO Dialog // TODO
Stdout // can be used to capture and display log output Stdout // can be used to capture and display log output
) )
func (s WidgetType) String() string { func (s WidgetType) String() string {
@ -79,6 +80,8 @@ func (s WidgetType) String() string {
return "Spinner" return "Spinner"
case Separator: case Separator:
return "Separator" return "Separator"
case Table:
return "Table"
case Image: case Image:
return "Image" return "Image"
case Area: case Area: