func (l *DropDownList) HideList() { if l.listShowing { l.listShowing = false l.overlay.Hide() if l.Attached() { gxui.SetFocus(l) } if l.onHideList != nil { l.onHideList.Fire() } } }
func (l *DropDownList) ShowList() bool { if l.listShowing || l.overlay == nil { return false } l.listShowing = true s := l.Size() at := math.Point{X: s.W / 2, Y: s.H} l.overlay.Show(l.list, gxui.TransformCoordinate(at, l.outer, l.overlay)) gxui.SetFocus(l.list) if l.onShowList != nil { l.onShowList.Fire() } return true }
// 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 }