From 1e4e718e0c17827a2494dde61096451de26da09b Mon Sep 17 00:00:00 2001 From: Lerking Date: Sat, 17 Dec 2022 15:53:29 +0100 Subject: [PATCH] 0.1.1 Refactoring almost done. /JL --- canvas.go | 23 +++- color.go | 15 +++ main.go | 303 +++++++++++++++++++++++++++----------------------- pallette.go | 11 +- properties.go | 17 +++ 5 files changed, 223 insertions(+), 146 deletions(-) diff --git a/canvas.go b/canvas.go index 158d0b1..eefe338 100644 --- a/canvas.go +++ b/canvas.go @@ -1,6 +1,10 @@ package main -import "github.com/lxn/walk" +import ( + "log" + + "github.com/lxn/walk" +) type ( Canvas struct { @@ -8,6 +12,19 @@ type ( } ) -func NewCanvas() *Canvas { - return new(Canvas) +func CreateCanvasGroup(mw *MyMainWindow) { + log.Println("Creating canvas group...") + cg, _ := walk.NewGroupBox(mw.content) + cg.SetTitle("Canvas") + cg.SetAlignment(walk.AlignHNearVNear) + cg.SetLayout(walk.NewVBoxLayout()) + log.Println("Creating canvas...") + mw.canvasScroll, _ = walk.NewScrollView(cg) + vb := walk.NewVBoxLayout() + mw.canvasScroll.SetLayout(vb) + mw.canvasScroll.SetAlignment(walk.AlignHNearVNear) + //vb.SetMargins(walk.Margins{0, 0, 0, 0}) + //dw, _ := walk.NewCustomWidgetPixels(mw.canvasScroll, 0, mw.drawStuff) + //dw.SetClearsBackground(true) + //dw.SetInvalidatesOnResize(true) } diff --git a/color.go b/color.go index fd3be24..60ae7f6 100644 --- a/color.go +++ b/color.go @@ -28,6 +28,21 @@ type ( } ) +func CreateBeadsGroup(mw *MyMainWindow) { + gb, _ := walk.NewGroupBox(mw.leftPanel) + gb.SetTitle("Beads") + gb.SetLayout(walk.NewVBoxLayout()) + btn, _ := walk.NewPushButton(gb) + btn.SetText("Select all colors") + btn.Clicked().Attach(func() { + for _, bead := range mw.beads { + bead.Checkbox.SetChecked(true) + } + }) + mw.colors, _ = walk.NewScrollView(gb) + mw.colors.SetLayout(walk.NewVBoxLayout()) +} + func LoadBeads(mw *MyMainWindow) { for _, brand := range mw.pallette.Brands.Brand { if brand.BrandName == mw.brand_combo.Text() { diff --git a/main.go b/main.go index 32b8497..96c3e58 100644 --- a/main.go +++ b/main.go @@ -6,12 +6,13 @@ import ( "os/user" "github.com/lxn/walk" - . "github.com/lxn/walk/declarative" ) type MyMainWindow struct { - *walk.MainWindow + MainWindow *walk.MainWindow + content *walk.Composite leftPanel *walk.Composite + rightPanel *walk.Composite colors *walk.ScrollView canvasScroll *walk.ScrollView drawWidget *walk.CustomWidget @@ -29,7 +30,7 @@ type MyMainWindow struct { const ( AppName string = "BeadImager" - Version string = "0.1.0" + Version string = "0.1.1" CopyRight string = "©2022 Jan Lerking" STD_MESS string = "Ready" LogFile string = "BeadImager.log" @@ -48,6 +49,20 @@ var ( ConfigBackgroundColor string ) +func SetupMainWindow(mw *MyMainWindow) { + mw.MainWindow, _ = walk.NewMainWindow() + mw.MainWindow.SetTitle(AppName + " " + Version) + mw.MainWindow.SetMinMaxSize(walk.Size{Width: 800, Height: 600}, walk.Size{Width: math.MaxInt32, Height: math.MaxInt32}) + //mw.MainWindow.SetSize(walk.Size{Width: 800, Height: 600}) + vb := walk.NewVBoxLayout() + mw.MainWindow.SetLayout(vb) + vb.SetMargins(walk.Margins{5, 0, 5, 5}) + mw.content, _ = walk.NewComposite(mw.MainWindow) + hb := walk.NewHBoxLayout() + mw.content.SetLayout(hb) + hb.SetMargins(walk.Margins{0, 0, 0, 0}) +} + func main() { // Get current user currentUser, err := user.Current() @@ -74,167 +89,173 @@ func main() { walk.ValidationErrorEffect, _ = walk.NewBorderGlowEffect(walk.RGB(255, 0, 0)) }) mw := &MyMainWindow{} + SetupMainWindow(mw) log.Println("MainWindow created") CreatePallette(mw) log.Println("Pallette created: ", mw.pallette) mw.brand_model = CreateBrandsList(mw) - brand_trigged := false - serie_trigged := false - pegboard_trigged := false - settings_trigged := false + CreatePalletteGroup(mw) + CreateBeadsGroup(mw) + CreateCanvasGroup(mw) + CreateSettingsGroup(mw) + LoadBeads(mw) - DD_Pallette := GroupBox{ - Title: "Pallette", - Layout: VBox{}, - Children: []Widget{ - Composite{ - Layout: HBox{MarginsZero: true}, - Children: []Widget{ - Label{ - Text: "Brand:", + /* + DD_Pallette := GroupBox{ + Title: "Pallette", + Layout: VBox{}, + Children: []Widget{ + Composite{ + Layout: HBox{MarginsZero: true}, + Children: []Widget{ + Label{ + Text: "Brand:", + }, + ComboBox{ + Alignment: AlignHFarVCenter, + AssignTo: &mw.brand_combo, + Model: mw.brand_model, + Value: ConfigBrand, + OnCurrentIndexChanged: func() { + if !brand_trigged { + log.Println("Brand changed to: ", mw.brand_combo.Text()) + mw.serie_model = CreateSeriesList(mw) + mw.serie_combo.SetModel(mw.serie_model) + mw.serie_combo.SetEnabled(true) + mw.serie_combo.SetText(ConfigSerie) + } + brand_trigged = true + }, + }, }, - ComboBox{ - Alignment: AlignHFarVCenter, - AssignTo: &mw.brand_combo, - Model: mw.brand_model, - Value: ConfigBrand, - OnCurrentIndexChanged: func() { - if !brand_trigged { - log.Println("Brand changed to: ", mw.brand_combo.Text()) - mw.serie_model = CreateSeriesList(mw) - mw.serie_combo.SetModel(mw.serie_model) - mw.serie_combo.SetEnabled(true) - mw.serie_combo.SetText(ConfigSerie) - } - brand_trigged = true + }, + Composite{ + Layout: HBox{MarginsZero: true}, + Children: []Widget{ + Label{ + Text: "Serie:", + }, + ComboBox{ + Alignment: AlignHFarVCenter, + AssignTo: &mw.serie_combo, + Enabled: false, + OnCurrentIndexChanged: func() { + if !serie_trigged { + log.Println("Serie changed to: ", mw.serie_combo.Text()) + LoadBeads(mw) + log.Println("Beads loaded: ", mw.beads) + mw.pegboard_model = CreatePegboardsList(mw) + mw.pegboard_combo.SetModel(mw.pegboard_model) + mw.pegboard_combo.SetEnabled(true) + } + serie_trigged = true + }, + }, + }, + }, + Composite{ + Layout: HBox{MarginsZero: true}, + Children: []Widget{ + Label{ + Text: "Pegboard:", + }, + ComboBox{ + Alignment: AlignHFarVCenter, + AssignTo: &mw.pegboard_combo, + Enabled: false, + OnCurrentIndexChanged: func() { + if !pegboard_trigged { + log.Println("Pegboard changed to: ", mw.pegboard_combo.Text()) + } + pegboard_trigged = true + }, }, }, }, }, - Composite{ - Layout: HBox{MarginsZero: true}, - Children: []Widget{ - Label{ - Text: "Serie:", - }, - ComboBox{ - Alignment: AlignHFarVCenter, - AssignTo: &mw.serie_combo, - Enabled: false, - OnCurrentIndexChanged: func() { - if !serie_trigged { - log.Println("Serie changed to: ", mw.serie_combo.Text()) - LoadBeads(mw) - log.Println("Beads loaded: ", mw.beads) - mw.pegboard_model = CreatePegboardsList(mw) - mw.pegboard_combo.SetModel(mw.pegboard_model) - mw.pegboard_combo.SetEnabled(true) - } - serie_trigged = true - }, - }, - }, - }, - Composite{ - Layout: HBox{MarginsZero: true}, - Children: []Widget{ - Label{ - Text: "Pegboard:", - }, - ComboBox{ - Alignment: AlignHFarVCenter, - AssignTo: &mw.pegboard_combo, - Enabled: false, - OnCurrentIndexChanged: func() { - if !pegboard_trigged { - log.Println("Pegboard changed to: ", mw.pegboard_combo.Text()) - } - pegboard_trigged = true - }, - }, - }, - }, - }, - } + } - DD_Beads := GroupBox{ - Title: "Beads", - Layout: VBox{}, - Children: []Widget{ - PushButton{ - Text: "Select all colors", - OnClicked: func() { - for _, c := range mw.beads { - c.Checkbox.SetChecked(true) + DD_Beads := GroupBox{ + Title: "Beads", + Layout: VBox{}, + Children: []Widget{ + PushButton{ + Text: "Select all colors", + OnClicked: func() { + for _, c := range mw.beads { + c.Checkbox.SetChecked(true) + } + }, + }, + ScrollView{ + AssignTo: &mw.colors, + Layout: VBox{MarginsZero: true}, + }, + }, + } + + if _, err := (MainWindow{ + AssignTo: &mw.MainWindow, + Title: AppName + " " + Version, + MinSize: Size{800, 600}, + OnSizeChanged: func() { + if !settings_trigged { + ShowProperties(mw) + settings_trigged = true } }, - }, - ScrollView{ - AssignTo: &mw.colors, - Layout: VBox{MarginsZero: true}, - }, - }, - } - - if _, err := (MainWindow{ - AssignTo: &mw.MainWindow, - Title: AppName + " " + Version, - MinSize: Size{800, 600}, - OnSizeChanged: func() { - if !settings_trigged { - ShowProperties(mw) - settings_trigged = true - } - }, - Layout: VBox{MarginsZero: true}, - Children: []Widget{ - Composite{ - AssignTo: &mw.leftPanel, - Layout: HBox{}, + Layout: VBox{MarginsZero: true}, Children: []Widget{ Composite{ - Layout: VBox{MarginsZero: true}, - MaxSize: Size{280, 0}, + AssignTo: &mw.leftPanel, + Layout: HBox{}, Children: []Widget{ - DD_Pallette, - DD_Beads, - }, - }, - GroupBox{ - Title: "Canvas", - Layout: VBox{}, - Children: []Widget{ - ScrollView{ - AssignTo: &mw.canvasScroll, - Layout: VBox{MarginsZero: true}, + Composite{ + Layout: VBox{MarginsZero: true}, + MaxSize: Size{280, 0}, Children: []Widget{ - CustomWidget{ - AssignTo: &mw.drawWidget, - ClearsBackground: true, - InvalidatesOnResize: true, - Paint: mw.drawStuff, + DD_Pallette, + DD_Beads, + }, + }, + GroupBox{ + Title: "Canvas", + Layout: VBox{}, + Children: []Widget{ + ScrollView{ + AssignTo: &mw.canvasScroll, + Layout: VBox{MarginsZero: true}, + Children: []Widget{ + CustomWidget{ + AssignTo: &mw.drawWidget, + ClearsBackground: true, + InvalidatesOnResize: true, + Paint: mw.drawStuff, + }, + }, + }, + }, + }, + GroupBox{ + Title: "Settings", + Layout: VBox{}, + MaxSize: Size{220, 0}, + Children: []Widget{ + ScrollView{ + AssignTo: &mw.propScroll, + Layout: VBox{MarginsZero: true}, }, }, }, }, }, - GroupBox{ - Title: "Settings", - Layout: VBox{}, - MaxSize: Size{220, 0}, - Children: []Widget{ - ScrollView{ - AssignTo: &mw.propScroll, - Layout: VBox{MarginsZero: true}, - }, - }, - }, }, - }, - }, - }.Run()); err != nil { - log.Fatal(err) - } + }.Run()); err != nil { + log.Fatal(err) + } + */ + mw.MainWindow.Show() + mw.MainWindow.Run() } func (mv *MyMainWindow) clearBackground(canvas *walk.Canvas, updateBounds walk.Rectangle) error { diff --git a/pallette.go b/pallette.go index dce5fe9..7f49f32 100644 --- a/pallette.go +++ b/pallette.go @@ -76,11 +76,18 @@ type ( ) func CreatePalletteGroup(mw *MyMainWindow) *walk.GroupBox { + mw.leftPanel, _ = walk.NewComposite(mw.content) + vb := walk.NewVBoxLayout() + mw.leftPanel.SetLayout(vb) + vb.SetMargins(walk.Margins{0, 0, 0, 0}) + mw.leftPanel.SetMinMaxSize(walk.Size{Width: 280, Height: 0}, walk.Size{Width: 280, Height: 0}) pallette_group, _ := walk.NewGroupBox(mw.leftPanel) pallette_group.SetTitle("Pallette") - pallette_group.SetLayout(walk.NewVBoxLayout()) + vb = walk.NewVBoxLayout() + pallette_group.SetLayout(vb) comp, _ := walk.NewComposite(pallette_group) - comp.SetLayout(walk.NewHBoxLayout()) + hb := walk.NewHBoxLayout() + comp.SetLayout(hb) comp.Layout().SetMargins(walk.Margins{0, 0, 0, 0}) lbl, _ := walk.NewLabel(comp) lbl.SetText("Brand:") diff --git a/properties.go b/properties.go index 18ae677..a5bbfc1 100644 --- a/properties.go +++ b/properties.go @@ -29,6 +29,23 @@ type ( } ) +func CreateSettingsGroup(mw *MyMainWindow) { + log.Println("Setting up settings...") + mw.rightPanel, _ = walk.NewComposite(mw.content) + vb := walk.NewVBoxLayout() + mw.rightPanel.SetLayout(vb) + vb.SetMargins(walk.Margins{0, 0, 0, 0}) + mw.rightPanel.SetMinMaxSize(walk.Size{Width: 220, Height: 0}, walk.Size{Width: 220, Height: 0}) + sg, _ := walk.NewGroupBox(mw.rightPanel) + sg.SetTitle("Settings") + sg.SetAlignment(walk.AlignHNearVNear) + vb = walk.NewVBoxLayout() + sg.SetLayout(vb) + vb.SetMargins(walk.Margins{0, 0, 0, 0}) + mw.propScroll, _ = walk.NewScrollView(sg) + ShowProperties(mw) +} + func ShowProperties(mw *MyMainWindow) { log.Println("Showing properties") mw.properties = new(properties)