// Color picker uses the customAdapter for driving a list func colorPicker(theme gxui.Theme) gxui.Control { layout := theme.CreateLinearLayout() layout.SetDirection(gxui.TopToBottom) label0 := theme.CreateLabel() label0.SetText("Color palette:") layout.AddChild(label0) adapter := &customAdapter{} list := theme.CreateList() list.SetAdapter(adapter) list.SetOrientation(gxui.Horizontal) layout.AddChild(list) label1 := theme.CreateLabel() label1.SetMargin(math.Spacing{T: 30}) label1.SetText("Selected color:") layout.AddChild(label1) selected := theme.CreateImage() selected.SetExplicitSize(math.Size{W: 32, H: 32}) layout.AddChild(selected) list.OnSelectionChanged(func(item gxui.AdapterItem) { if item != nil { control := list.ItemControl(item) selected.SetBackgroundBrush(control.(gxui.Image).BackgroundBrush()) } }) return layout }
// Create implements gxui.TreeNode. func (d directory) Create(theme gxui.Theme) gxui.Control { _, name := filepath.Split(d.path) if name == "" { name = d.path } l := theme.CreateLabel() l.SetText(name) l.SetColor(directoryColor) return l }
func (a *filesAdapter) Create(theme gxui.Theme, index int) gxui.Control { path := a.files[index] _, name := filepath.Split(path) label := theme.CreateLabel() label.SetText(name) if fi, err := os.Stat(path); err == nil && fi.IsDir() { label.SetColor(directoryColor) } else { label.SetColor(fileColor) } return label }
// Create a PanelHolder with a 3 panels func panelHolder(name string, theme gxui.Theme) gxui.PanelHolder { label := func(text string) gxui.Label { label := theme.CreateLabel() label.SetText(text) return label } holder := theme.CreatePanelHolder() holder.AddPanel(label(name+" 0 content"), name+" 0 panel") holder.AddPanel(label(name+" 1 content"), name+" 1 panel") holder.AddPanel(label(name+" 2 content"), name+" 2 panel") return holder }
func (e *editor) CreateLine(theme gxui.Theme, index int) (mixins.TextBoxLine, gxui.Control) { lineNumber := theme.CreateLabel() lineNumber.SetText(fmt.Sprintf("%4d", index+1)) line := &mixins.CodeEditorLine{} line.Init(line, theme, &e.CodeEditor, index) layout := theme.CreateLinearLayout() layout.SetDirection(gxui.LeftToRight) layout.AddChild(lineNumber) layout.AddChild(line) return line, layout }
// mixins.TextBox overrides func (e *CodeEditor) CreateLine(theme gxui.Theme, index int) (TextBoxLine, gxui.Control) { lineNumber := theme.CreateLabel() lineNumber.SetText(fmt.Sprintf("%.4d", index+1)) // Displayed lines start at 1 line := &CodeEditorLine{} line.Init(line, theme, e, index) layout := theme.CreateLinearLayout() layout.SetDirection(gxui.LeftToRight) layout.AddChild(lineNumber) layout.AddChild(line) return line, layout }
func newCommandBox(driver gxui.Driver, theme gxui.Theme, controller Controller) *commandBox { box := &commandBox{ driver: driver, controller: controller, } box.label = theme.CreateLabel() box.label.SetColor(cmdColor) box.LinearLayout.Init(box, theme) box.SetDirection(gxui.LeftToRight) box.AddChild(box.label) box.Clear() return box }
// Create implements gxui.TreeNode. func (n *node) Create(theme gxui.Theme) gxui.Control { layout := theme.CreateLinearLayout() layout.SetDirection(gxui.LeftToRight) label := theme.CreateLabel() label.SetText(n.name) textbox := theme.CreateTextBox() textbox.SetText(n.name) textbox.SetPadding(math.ZeroSpacing) textbox.SetMargin(math.ZeroSpacing) addButton := theme.CreateButton() addButton.SetText("+") addButton.OnClick(func(gxui.MouseEvent) { n.add("<new>") }) edit := func() { layout.RemoveAll() layout.AddChild(textbox) layout.AddChild(addButton) gxui.SetFocus(textbox) } commit := func() { n.name = textbox.Text() label.SetText(n.name) layout.RemoveAll() layout.AddChild(label) layout.AddChild(addButton) } // When the user clicks the label, replace it with an editable text-box label.OnClick(func(gxui.MouseEvent) { edit() }) // When the text-box loses focus, replace it with a label again. textbox.OnLostFocus(commit) layout.AddChild(label) layout.AddChild(addButton) return layout }
// Number picker uses the gxui.DefaultAdapter for driving a list func numberPicker(theme gxui.Theme, overlay gxui.BubbleOverlay) gxui.Control { items := []string{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty", } adapter := gxui.CreateDefaultAdapter() adapter.SetItems(items) layout := theme.CreateLinearLayout() layout.SetDirection(gxui.TopToBottom) label0 := theme.CreateLabel() label0.SetText("Numbers:") layout.AddChild(label0) dropList := theme.CreateDropDownList() dropList.SetAdapter(adapter) dropList.SetBubbleOverlay(overlay) layout.AddChild(dropList) list := theme.CreateList() list.SetAdapter(adapter) list.SetOrientation(gxui.Vertical) layout.AddChild(list) label1 := theme.CreateLabel() label1.SetMargin(math.Spacing{T: 30}) label1.SetText("Selected number:") layout.AddChild(label1) selected := theme.CreateLabel() layout.AddChild(selected) dropList.OnSelectionChanged(func(item gxui.AdapterItem) { if list.Selected() != item { list.Select(item) } }) list.OnSelectionChanged(func(item gxui.AdapterItem) { if dropList.Selected() != item { dropList.Select(item) } selected.SetText(fmt.Sprintf("%s - %d", item, adapter.ItemIndex(item))) }) return layout }
func (a *fsAdapter) create(theme gxui.Theme, path string) gxui.Label { label := theme.CreateLabel() label.SetText(filepath.Base(path)) return label }
// Override directory.Create so that the full root is shown, unaltered. func (a directoryAdapter) Create(theme gxui.Theme, index int) gxui.Control { l := theme.CreateLabel() l.SetText(a.subdirs[index]) l.SetColor(directoryColor) return l }