func buildMoon(theme gxui.Theme, center math.Point, radius float32) gxui.Image { c := 40 p := make(gxui.Polygon, c*2) for i := 0; i < c; i++ { frac := float32(i) / float32(c) α := math.Lerpf(math.Pi*1.2, math.Pi*-0.2, frac) p[i] = gxui.PolygonVertex{ Position: math.Point{ X: center.X + int(radius*math.Sinf(α)), Y: center.Y + int(radius*math.Cosf(α)), }, RoundedRadius: 0, } } for i := 0; i < c; i++ { frac := float32(i) / float32(c) α := math.Lerpf(math.Pi*-0.2, math.Pi*1.2, frac) r := math.Lerpf(radius, radius*0.5, math.Sinf(frac*math.Pi)) p[i+c] = gxui.PolygonVertex{ Position: math.Point{ X: center.X + int(r*math.Sinf(α)), Y: center.Y + int(r*math.Cosf(α)), }, RoundedRadius: 0, } } image := theme.CreateImage() image.SetPolygon(p, gxui.CreatePen(3, gxui.Gray80), gxui.CreateBrush(gxui.Gray40)) return image }
func (l *DropDownList) Init(outer DropDownListOuter, theme gxui.Theme) { l.outer = outer l.Container.Init(outer, theme) l.BackgroundBorderPainter.Init(outer) l.Focusable.Init(outer) l.theme = theme l.list = theme.CreateList() l.list.OnSelectionChanged(func(item gxui.AdapterItem) { l.outer.RemoveAll() adapter := l.list.Adapter() if item != nil && adapter != nil { l.selected = l.AddChild(adapter.Create(l.theme, adapter.ItemIndex(item))) } else { l.selected = nil } l.Relayout() }) l.list.OnItemClicked(func(gxui.MouseEvent, gxui.AdapterItem) { l.HideList() }) l.list.OnKeyPress(func(ev gxui.KeyboardEvent) { switch ev.Key { case gxui.KeyEnter, gxui.KeyEscape: l.HideList() } }) l.list.OnLostFocus(l.HideList) l.OnDetach(l.HideList) l.SetMouseEventTarget(true) // Interface compliance test _ = gxui.DropDownList(l) }
func (defaultTreeControlCreator) Create(theme gxui.Theme, control gxui.Control, node *TreeToListNode) gxui.Control { ll := theme.CreateLinearLayout() ll.SetDirection(gxui.LeftToRight) btn := theme.CreateButton() btn.SetBackgroundBrush(gxui.TransparentBrush) btn.SetBorderPen(gxui.CreatePen(1, gxui.Gray30)) btn.SetMargin(math.Spacing{L: 2, R: 2, T: 1, B: 1}) btn.OnClick(func(ev gxui.MouseEvent) { if ev.Button == gxui.MouseButtonLeft { node.ToggleExpanded() } }) update := func() { btn.SetVisible(!node.IsLeaf()) if node.IsExpanded() { btn.SetText("-") } else { btn.SetText("+") } } update() gxui.WhileAttached(btn, node.OnChange, update) ll.AddChild(btn) ll.AddChild(control) ll.SetPadding(math.Spacing{L: 16 * node.Depth()}) return ll }
func (t *Tree) CreateExpandButton(theme gxui.Theme, node *TreeInternalNode) gxui.Button { btn := theme.CreateButton() btn.SetMargin(math.Spacing{L: 2, R: 2, T: 1, B: 1}) btn.OnClick(func(ev gxui.MouseEvent) { if ev.Button == gxui.MouseButtonLeft { if node.IsExpanded() { node.Collapse() } else { node.Expand() } } }) node.OnExpandedChanged(func(e bool) { if e { btn.SetText("-") } else { btn.SetText("+") } }) if node.IsExpanded() { btn.SetText("-") } else { btn.SetText("+") } return btn }
func (a *customAdapter) Create(theme gxui.Theme, index int) gxui.Control { phase := float32(index) / 1000 c := gxui.Color{ R: 0.5 + 0.5*math.Sinf(math.TwoPi*(phase+0.000)), G: 0.5 + 0.5*math.Sinf(math.TwoPi*(phase+0.333)), B: 0.5 + 0.5*math.Sinf(math.TwoPi*(phase+0.666)), A: 1.0, } i := theme.CreateImage() i.SetBackgroundBrush(gxui.CreateBrush(c)) i.SetMargin(math.Spacing{L: 3, T: 3, R: 3, B: 3}) i.OnMouseEnter(func(ev gxui.MouseEvent) { i.SetBorderPen(gxui.CreatePen(2, gxui.Gray80)) }) i.OnMouseExit(func(ev gxui.MouseEvent) { i.SetBorderPen(gxui.TransparentPen) }) i.OnMouseDown(func(ev gxui.MouseEvent) { i.SetBackgroundBrush(gxui.CreateBrush(c.MulRGB(0.7))) }) i.OnMouseUp(func(ev gxui.MouseEvent) { i.SetBackgroundBrush(gxui.CreateBrush(c)) }) return i }
//画行走路线 func drawWalkPath(window gxui.Window, theme gxui.Theme, driver gxui.Driver, x1, y1, x2, y2 int64) { ps, isWalk := nm.FindPath(nmastar, x1, y1, x2, y2) if !isWalk { return } canvas := driver.CreateCanvas(math.Size{W: int(nmj.Width), H: int(nmj.Heigth)}) var polys []gxui.PolygonVertex for i := 0; i < len(ps); i++ { polys = append(polys, gxui.PolygonVertex{ Position: math.Point{ int(ps[i].X), int(ps[i].Y), }}) } canvas.DrawLines(polys, gxui.CreatePen(2, gxui.Green)) canvas.Complete() image := theme.CreateImage() image.SetCanvas(canvas) window.AddChild(image) }
// 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 }
func (d *DrawPaint) Init(outer DrawPaintOuter, theme gxui.Theme) { d.outer = outer d.driver = theme.Driver() if debugVerifyDetachOnGC { runtime.SetFinalizer(d.outer, verifyDetach) } }
func Createsebaris(Theme gxui.Theme, S data.Setoran) UISetoran { var TB UISetoran TB.TBJumlah = Theme.CreateTextBox() TB.TBCatatan = Theme.CreateTextBox() TB.TBJumlah.SetText(strconv.Itoa(S.Jumlah)) TB.TBCatatan.SetText(S.Catatan) return TB }
func (d directory) Create(theme gxui.Theme, index int) gxui.Control { path := d.subdirs[index] _, name := filepath.Split(path) l := theme.CreateLabel() l.SetText(name) l.SetColor(directoryColor) return l }
func Createsebaris(Theme gxui.Theme, Data data.Anakkost) UISewa { var TB UISewa TB.TBNama = Theme.CreateTextBox() TB.TBSewa = Theme.CreateTextBox() TB.TBCatatan = Theme.CreateTextBox() TB.TBNama.SetText(Data.Nama) TB.TBSewa.SetText(strconv.Itoa(Data.Sewa)) TB.TBCatatan.SetText(Data.Catatan) return TB }
// 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 }
// mixins.TextBox overrides func (t *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, t, index) layout := theme.CreateLinearLayout() layout.SetDirection(gxui.LeftToRight) layout.AddChild(lineNumber) layout.AddChild(line) return line, layout }
func (d *DrawPaint) Init(outer DrawPaintOuter, theme gxui.Theme) { d.outer = outer d.driver = theme.Driver() outer.OnDetach(func() { if d.canvas != nil { d.canvas.Release() d.canvas = nil } }) if debugVerifyDetachOnGC { runtime.SetFinalizer(d.outer, verifyDetach) } }
// 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+" Tout"), name+" Tous mes fichiers") holder.AddPanel(label(name+" Cours"), name+" Mes cours") holder.AddPanel(label(name+" Musique"), name+" Ma musique") holder.AddPanel(label(name+" Photos"), name+" Mes photos") holder.AddPanel(label(name+" Vidéos"), name+" Mes vidéos") return holder }
func (p *PanelHolder) Init(outer PanelHolderOuter, theme gxui.Theme) { p.Container.Init(outer, theme) p.outer = outer p.theme = theme p.tabLayout = theme.CreateLinearLayout() p.tabLayout.SetDirection(gxui.LeftToRight) p.Container.AddChild(p.tabLayout) p.SetMargin(math.Spacing{L: 1, T: 2, R: 1, B: 1}) p.SetMouseEventTarget(true) // For drag-drop targets // Interface compliance test _ = gxui.PanelHolder(p) }
// CreateIcon is create icon control func CreateIcon(theme gxui.Theme, icon rune, size int) gxui.Label { if theme == nil || size < 0 { return nil } control := theme.CreateLabel() font, ok := MaterialIconFonts[size] if !ok { var err error font, err = theme.Driver().CreateFont(MaterialIcon, size) if err != nil { return nil } MaterialIconFonts[size] = font } control.SetFont(font) control.SetText(string(icon)) return control }
func buildStar(theme gxui.Theme, center math.Point, radius, rotation float32, points int) gxui.Image { p := make(gxui.Polygon, points*2) for i := 0; i < points*2; i++ { frac := float32(i) / float32(points*2) α := frac*math.TwoPi + rotation r := []float32{radius, radius / 2}[i&1] p[i] = gxui.PolygonVertex{ Position: math.Point{ X: center.X + int(r*math.Cosf(α)), Y: center.Y + int(r*math.Sinf(α)), }, RoundedRadius: []float32{0, 50}[i&1], } } image := theme.CreateImage() image.SetPolygon(p, gxui.CreatePen(3, gxui.Red), gxui.CreateBrush(gxui.Yellow)) return image }
func (a TreeToListAdapter) Create(theme gxui.Theme, index int) gxui.Control { n, i, d := a.root.FindByIndex(index) child := n.Child(i) toggle := a.createExpandButton(theme, child) toggle.SetVisible(!child.IsLeaf()) child.OnExpandedChanged(func(e bool) { a.DataChanged() }) control := n.node.Create(theme, i) layout := theme.CreateLinearLayout() layout.SetPadding(math.Spacing{L: d * 16}) layout.SetDirection(gxui.LeftToRight) layout.AddChild(toggle) layout.AddChild(control) return layout }
func (l *ScrollLayout) Init(outer ScrollLayoutOuter, theme gxui.Theme) { l.Container.Init(outer, theme) l.BackgroundBorderPainter.Init(outer) l.outer = outer l.theme = theme l.canScrollX = true l.canScrollY = true scrollBarX := theme.CreateScrollBar() scrollBarX.SetOrientation(gxui.Horizontal) scrollBarX.OnScroll(func(from, to int) { l.SetScrollOffset(math.Point{X: from, Y: l.scrollOffset.Y}) }) scrollBarY := theme.CreateScrollBar() scrollBarY.SetOrientation(gxui.Vertical) scrollBarY.OnScroll(func(from, to int) { l.SetScrollOffset(math.Point{X: l.scrollOffset.X, Y: from}) }) l.scrollBarX = l.AddChild(scrollBarX) l.scrollBarY = l.AddChild(scrollBarY) l.SetMouseEventTarget(true) // Interface compliance test _ = gxui.ScrollLayout(l) }
func (l *List) Init(outer ListOuter, theme gxui.Theme) { l.outer = outer l.Container.Init(outer, theme) l.BackgroundBorderPainter.Init(outer) l.Focusable.Init(outer) l.theme = theme l.scrollBar = theme.CreateScrollBar() l.scrollBarChild = l.AddChild(l.scrollBar) l.scrollBarEnabled = true l.scrollBar.OnScroll(func(from, to int) { l.SetScrollOffset(from) }) l.SetOrientation(gxui.Vertical) l.SetBackgroundBrush(gxui.TransparentBrush) l.SetMouseEventTarget(true) l.details = make(map[gxui.AdapterItem]itemDetails) // Interface compliance test _ = gxui.List(l) }
func makeDataField(theme gxui.Theme, label string) *dataField { df := new(dataField) df.label = theme.CreateLabel() df.label.SetText(label) df.input = theme.CreateTextBox() df.err = theme.CreateLabel() df.err.SetColor(gxui.Red) df.layout = theme.CreateLinearLayout() df.layout.SetDirection(gxui.LeftToRight) df.layout.AddChild(df.label) df.layout.AddChild(df.input) df.layout.AddChild(df.err) return df }
func (treeControlCreator) Create(theme gxui.Theme, control gxui.Control, node *mixins.TreeToListNode) gxui.Control { img := theme.CreateImage() imgSize := math.Size{W: 10, H: 10} ll := theme.CreateLinearLayout() ll.SetDirection(gxui.LeftToRight) btn := theme.CreateButton() btn.SetBackgroundBrush(gxui.TransparentBrush) btn.SetBorderPen(gxui.CreatePen(1, gxui.Gray30)) btn.SetMargin(math.Spacing{L: 1, R: 1, T: 1, B: 1}) btn.OnClick(func(ev gxui.MouseEvent) { if ev.Button == gxui.MouseButtonLeft { node.ToggleExpanded() } }) btn.AddChild(img) update := func() { expanded := node.IsExpanded() canvas := theme.Driver().CreateCanvas(imgSize) btn.SetVisible(!node.IsLeaf()) switch { case !btn.IsMouseDown(gxui.MouseButtonLeft) && expanded: canvas.DrawPolygon(expandedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray70)) case !btn.IsMouseDown(gxui.MouseButtonLeft) && !expanded: canvas.DrawPolygon(collapsedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray70)) case expanded: canvas.DrawPolygon(expandedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray30)) case !expanded: canvas.DrawPolygon(collapsedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray30)) } canvas.Complete() img.SetCanvas(canvas) } btn.OnMouseDown(func(gxui.MouseEvent) { update() }) btn.OnMouseUp(func(gxui.MouseEvent) { update() }) update() gxui.WhileAttached(btn, node.OnChange, update) ll.AddChild(btn) ll.AddChild(control) ll.SetPadding(math.Spacing{L: 16 * node.Depth()}) return ll }
func receive(theme gxui.Theme) gxui.Control { layout := theme.CreateLinearLayout() font := theme.DefaultFont() label := theme.CreateLabel() label.SetFont(font) label.SetText("receive") layout.AddChild(label) return layout }
func transactions(theme gxui.Theme) gxui.Control { layout := theme.CreateLinearLayout() font := theme.DefaultFont() label := theme.CreateLabel() label.SetFont(font) label.SetText("Transactions") layout.AddChild(label) return layout }
// 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 }
func (t *Tree) CreateExpandButton(theme gxui.Theme, node *mixins.TreeInternalNode) gxui.Button { img := theme.CreateImage() imgSize := math.Size{W: 10, H: 10} btn := theme.CreateButton() btn.SetBackgroundBrush(gxui.TransparentBrush) btn.SetBorderPen(gxui.CreatePen(1, gxui.Gray30)) btn.SetMargin(math.Spacing{L: 1, R: 1, T: 1, B: 1}) btn.OnClick(func(ev gxui.MouseEvent) { if ev.Button == gxui.MouseButtonLeft { if node.IsExpanded() { node.Collapse() } else { node.Expand() } } }) btn.AddChild(img) updateStyle := func() { canvas := theme.Driver().CreateCanvas(imgSize) switch { case !btn.IsMouseDown(gxui.MouseButtonLeft) && node.IsExpanded(): canvas.DrawPolygon(expandedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray70)) case !btn.IsMouseDown(gxui.MouseButtonLeft) && !node.IsExpanded(): canvas.DrawPolygon(collapsedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray70)) case node.IsExpanded(): canvas.DrawPolygon(expandedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray30)) case !node.IsExpanded(): canvas.DrawPolygon(collapsedPoly, gxui.TransparentPen, gxui.CreateBrush(gxui.Gray30)) } canvas.Complete() img.SetCanvas(canvas) } btn.OnMouseDown(func(gxui.MouseEvent) { updateStyle() }) btn.OnMouseUp(func(gxui.MouseEvent) { updateStyle() }) node.OnExpandedChanged(func(e bool) { updateStyle() }) updateStyle() return btn }
func Createwinsetoran(Theme gxui.Theme, arrdata []data.Setoran) Winsetoran { var hasil Winsetoran hasil.Window = Theme.CreateWindow(500, 500, "SETORAN") layoutbase := Theme.CreateLinearLayout() layoutbutton := Theme.CreateLinearLayout() layoutbutton.SetDirection(gxui.LeftToRight) layoutjumlah := Theme.CreateLinearLayout() layoutjumlah.SetDirection(gxui.LeftToRight) hasil.buttonsave = Theme.CreateButton() hasil.buttonsave.SetText("SAVE") var buttonsaveclick = func(e gxui.MouseEvent) { Save(hasil) } hasil.buttonsave.OnClick(buttonsaveclick) hasil.Daftarsetoran = Semuabaris(Theme, arrdata) layoutbutton.AddChild(hasil.buttonsave) layoutbase.AddChild(layoutbutton) layouttabel := Theme.CreateTableLayout() row := len(hasil.Daftarsetoran) layouttabel.SetGrid(2, row+1) tbjumlah = Theme.CreateTextBox() buttonjumlah := Theme.CreateButton() buttonjumlah.SetText("JUMLAHKAN") buttonjumlah.OnClick(jumlahonclick) labelcatatan := Theme.CreateLabel() labelcatatan.SetText("CATATAN") labeljumlah := Theme.CreateLabel() labeljumlah.SetText("JUMLAH") labelhasiljumlah := Theme.CreateLabel() labelhasiljumlah.SetText("JUMLAH:") layoutjumlah.AddChild(buttonjumlah) layoutjumlah.AddChild(labelhasiljumlah) layoutjumlah.AddChild(tbjumlah) layouttabel.SetChildAt(0, 0, 1, 1, labelcatatan) layouttabel.SetChildAt(1, 0, 1, 1, labeljumlah) for i := 0; i < len(hasil.Daftarsetoran); i++ { layouttabel.SetChildAt(0, i+1, 1, 1, hasil.Daftarsetoran[i].TBCatatan) layouttabel.SetChildAt(1, i+1, 1, 1, hasil.Daftarsetoran[i].TBJumlah) } layoutbase.AddChild(layoutjumlah) layoutbase.AddChild(layouttabel) hasil.Window.AddChild(layoutbase) return hasil }