From baa835dfbd0bd20039c48e192bf4bd4d1f1eef4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Tue, 1 Feb 2022 22:01:30 +0100 Subject: Control for setting the subdir --- gui.go | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++-------------- types.go | 11 +++++++--- 2 files changed, 67 insertions(+), 19 deletions(-) diff --git a/gui.go b/gui.go index fff4fd6..ea26fbc 100644 --- a/gui.go +++ b/gui.go @@ -3,9 +3,11 @@ package main import ( "bytes" _ "embed" + "fmt" "image" _ "image/png" "os" + "path/filepath" "strconv" "time" @@ -23,14 +25,28 @@ var icon []byte var icomoon []byte var icomoonFI *g.FontInfo -const comboSize = 120 - type entryCfg struct { - inputFile string - outputDir string - gender Gender - ageGroup AgeGroup - weapon Weapon + inputFile string + target string + manualTarget bool + gender Gender + ageGroup AgeGroup + weapon Weapon +} + +func (entry *entryCfg) buildTarget() { + if entry.manualTarget { + return + } + + entry.target = fmt.Sprintf("%s_%s%s", + header.name, entry.gender.ShortString(), entry.weapon.ShortString()) +} + +func newEntry() entryCfg { + e := entryCfg{} + e.buildTarget() + return e } var ( @@ -99,6 +115,9 @@ func PopID() g.Widget { return g.Custom(imgui.PopID) } +const comboSize = 120 +const chooseStr = "Wähle..." + func buildEntry(idx int) g.Widget { entry := &entries[idx] @@ -110,19 +129,39 @@ func buildEntry(idx int) g.Widget { Grid( Line("Waffe", g.Combo("", entry.weapon.String(), WeaponStrings, (*int32)(&entry.weapon)). - Size(comboSize)), + Size(comboSize).OnChange(entry.buildTarget)), Line("Geschlecht", g.Combo("", entry.gender.String(), GenderStrings, (*int32)(&entry.gender)). - Size(comboSize)), + Size(comboSize).OnChange(entry.buildTarget)), Line("Altersklasse", g.Combo("", entry.ageGroup.String(), AgeGroupStrings, (*int32)(&entry.ageGroup)). Size(comboSize)), + Line("Unterverzeichnis", g.Row( + g.InputText(&entry.target).OnChange(func() { + if entry.target == "" { + entry.manualTarget = false + entry.buildTarget() + } else { + entry.manualTarget = true + } + }), + g.Button(chooseStr).OnClick(func() { + dir, err := zenity.SelectFile( + zenity.Directory(), + zenity.Filename(filepath.Join(header.targetDir, entry.target)+string(filepath.Separator))) + if err == nil && dir != "" { + entry.target = dir + entry.manualTarget = true + } + }))), Line("Ophardt-Export", g.Row( g.InputText(&entry.inputFile), - g.Button("Wähle...").OnClick(func() { - file, err := zenity.SelectFile(zenity.FileFilters{ - {Name: "CSV Files", Patterns: []string{"*.csv"}}, - }) + g.Button(chooseStr).OnClick(func() { + file, err := zenity.SelectFile( + zenity.Filename(entry.inputFile), + zenity.FileFilters{ + {Name: "CSV Files", Patterns: []string{"*.csv"}}, + }) if err == nil && file != "" { entry.inputFile = file } @@ -153,14 +192,18 @@ func loop() { g.Align(g.AlignCenter).To(g.Label("Engarde Importer")), g.Spacing(), Grid( - Line("Name", g.InputText(&header.name)), + Line("Name", g.InputText(&header.name).OnChange(func() { + for i := range entries { + entries[i].buildTarget() + } + })), Line("Beschreibung", g.InputText(&header.description)), Line("Wettkampftag", g.DatePicker("##date", &header.date). Format("02.01.2006").StartOfWeek(time.Monday). Size(comboSize)), Line("Zielverzeichnis", g.Row( g.InputText(&header.targetDir), - g.Button("Wähle...").OnClick(func() { + g.Button(chooseStr).OnClick(func() { dir, err := zenity.SelectFile(zenity.Directory(), zenity.Filename(header.targetDir+"/")) if err == nil && dir != "" { header.targetDir = dir @@ -170,7 +213,7 @@ func loop() { entryBuilder(), g.Style().SetFont(icomoonFI).To( g.Button("\ue900").OnClick(func() { - entries = append(entries, entryCfg{}) + entries = append(entries, newEntry()) })), g.Align(g.AlignCenter).To(g.Button("Quit").OnClick(shouldQuit)), ) diff --git a/types.go b/types.go index d16ef10..eb459c9 100644 --- a/types.go +++ b/types.go @@ -10,11 +10,16 @@ const ( ) var GenderStrings = []string{"Herren", "Damen"} +var GenderStringsShort = []string{"H", "D"} func (g Gender) String() string { return GenderStrings[g] } +func (g Gender) ShortString() string { + return GenderStringsShort[g] +} + func (g Gender) Engarde() (string, error) { switch g { case GenderM: @@ -49,11 +54,11 @@ func (g *Gender) UnmarshalCSV(content []byte) error { type AgeGroup int32 const ( - AgeVeteran AgeGroup = iota - AgeSenior + AgeSenior AgeGroup = iota + AgeVeteran ) -var AgeGroupStrings = []string{"Veteranen", "Senioren"} +var AgeGroupStrings = []string{"Senioren", "Veteranen"} func (a AgeGroup) String() string { return AgeGroupStrings[a] -- cgit v1.2.3