summaryrefslogtreecommitdiff
path: root/prev/proposals
diff options
context:
space:
mode:
Diffstat (limited to 'prev/proposals')
-rw-r--r--prev/proposals/sidebar.md32
-rw-r--r--prev/proposals/tree.md35
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
+```