diff options
Diffstat (limited to 'prev/proposals')
| -rw-r--r-- | prev/proposals/sidebar.md | 32 | ||||
| -rw-r--r-- | prev/proposals/tree.md | 35 |
2 files changed, 67 insertions, 0 deletions
diff --git a/prev/proposals/sidebar.md b/prev/proposals/sidebar.md new file mode 100644 index 0000000..fa23392 --- /dev/null +++ b/prev/proposals/sidebar.md @@ -0,0 +1,32 @@ +# Sidebar Control + +```go +type Sidebar interface { + Control + + AppendCategory(text string) + DeleteCategory(index int) + + AppendItem(category int, name string) + DeleteItem(category int, index int) + + Selection() (category int, index int) // or Selected()? + Select(category int, index int) + + OnSelected(func()) +} +``` + +Simple two-level sidebars. + +Could have images on each item in the future. + +## Mac OS X +Source List NSTableView (need to see how this will work) + +## GTK+ +GTK_STYLE_CLASS_SIDEBAR (available in 3.4); see how GtkPlacesSidebar implements this + - other programs that do: Rhythmbox + +## Windows +???? diff --git a/prev/proposals/tree.md b/prev/proposals/tree.md new file mode 100644 index 0000000..a4752f6 --- /dev/null +++ b/prev/proposals/tree.md @@ -0,0 +1,35 @@ +# Tree + +Unlike Table, Tree can only store a set of a single data type. (Blame Windows.) + +```go +type TreeData struct { + Checked bool + Image ImageIndex + Text string + Children []TreeData // TODO does this need to be *[]TreeData? +} +``` + +(the facilities for Images has yet to be designed) + +Tree itself will operate similarly to Table: + +```go +type Tree struct { + Control + sync.Locker // with Unlock() refreshing the view + Data() *[]TreeData + SetHasCheckboxes(bool) + SetHasImages(bool) +} +``` + +By default, a Tree only shows the Text field. + +A Tree path is just an `[]int` with each element set to the consecutive index in Children. For example: + +```go +i := []int{3, 4, 5} +value := tree.Data()[i[0]].Children[i[1]].Children[i[2]].Text +``` |
