Browse Source

Added Save Directory setting in about

  This should later be moved to a more proper settings dialog but till
then it's in About.

  I have it so it updates when we recieve it's new value when you change
it from the folder open dialog (which is opened by clicking on the
path).
Apollo 2 years ago
parent
commit
82afba3bc5
1 changed files with 92 additions and 1 deletions
  1. 92 1
      gui.go

+ 92 - 1
gui.go

@@ -6,19 +6,67 @@ import (
 	"fyne.io/fyne/v2"
 	"fyne.io/fyne/v2/app"
 	"fyne.io/fyne/v2/container"
+	"fyne.io/fyne/v2/data/binding"
 	"fyne.io/fyne/v2/dialog"
 	"fyne.io/fyne/v2/driver/desktop"
+	"fyne.io/fyne/v2/storage"
 	"fyne.io/fyne/v2/widget"
 )
 
 var APP fyne.App
 var HOME fyne.Window
+var NEED_SAVEDIR bool
+var SAVEDIR string
+var SAVEBIND binding.String
 
 func SetupApp() {
 	APP = app.NewWithID("apollox.endless-edit")
 	HOME = APP.NewWindow("Endless Edit")
 	HOME.CenterOnScreen()
-	HOME.Resize(fyne.NewSize(1000, 800))
+	HOME.Resize(fyne.NewSize(1200, 900))
+
+	pref := APP.Preferences()
+	SAVEDIR = pref.StringWithFallback("save_dir", "")
+	SAVEBIND = binding.BindString(&SAVEDIR)
+	if SAVEDIR == "" {
+		NEED_SAVEDIR = true
+		SetSaveDir()
+	}
+}
+
+func SetSaveDir() {
+	pref := APP.Preferences()
+	d := dialog.NewFolderOpen(func(lu fyne.ListableURI, err error) {
+		if err != nil {
+			d1 := dialog.NewError(fmt.Errorf("newfolderopen.err %v", err), HOME)
+			d1.Show()
+			return
+		}
+		if lu == nil {
+			return
+		}
+		pref.SetString("save_dir", lu.Path())
+		SAVEBIND.Set(lu.Path())
+		if NEED_SAVEDIR {
+			NEED_SAVEDIR = false
+		}
+	}, HOME)
+	if !NEED_SAVEDIR {
+		uri, err := storage.ParseURI("file://" + pref.String("save_dir"))
+		if err != nil {
+			d1 := dialog.NewError(fmt.Errorf("parseuri.err %v", err), HOME)
+			d1.Show()
+			return
+		}
+		dir, err := storage.ListerForURI(uri)
+		if err != nil {
+			d1 := dialog.NewError(fmt.Errorf("listerforuri.err %v", err), HOME)
+			d1.Show()
+			return
+		}
+		d.SetLocation(dir)
+	}
+	d.Show()
 }
 
 func SetupHome() {
@@ -26,6 +74,7 @@ func SetupHome() {
 		return
 	}
 	meta := APP.Metadata()
+	pref := APP.Preferences()
 
 	// Assign short cuts
 	new_short := &desktop.CustomShortcut{
@@ -48,26 +97,51 @@ func SetupHome() {
 		fyne.KeyQ,
 		fyne.KeyModifierControl,
 	}
+	var about_save_btn *widget.Button
 
 	// For now most stuff just prints out into the terminal/console what we clicked (except about and quit)
 	file_new := fyne.NewMenuItem("New", func() { // CTRL + N
 		fmt.Println("File>New")
+		if NEED_SAVEDIR {
+			SetSaveDir()
+		}
 	})
 	file_new.Shortcut = new_short
 	file_open := fyne.NewMenuItem("Open", func() { // CTRL + O
 		fmt.Println("File>Open")
+		if NEED_SAVEDIR {
+			SetSaveDir()
+		}
 	})
 	file_open.Shortcut = open_short
 	file_save := fyne.NewMenuItem("Save", func() { // CTRL + S
 		fmt.Println("File>Save")
+		if NEED_SAVEDIR {
+			SetSaveDir()
+		}
 	})
 	file_save.Shortcut = save_short
 
+	about_save_btn = widget.NewButton(pref.StringWithFallback("save_dir", "Needs to be set"), func() {
+		SetSaveDir()
+	})
+	SAVEBIND.AddListener(binding.NewDataListener(func() { // Use a binding to update based on the preference change (More of a signal/slot to say hey update)
+		val, err := SAVEBIND.Get()
+		if err != nil {
+			d1 := dialog.NewError(fmt.Errorf("savebind.err %v", err), HOME)
+			d1.Show()
+			return
+		}
+		about_save_btn.Text = val
+		about_save_btn.Refresh()
+	}))
+
 	showing_about := false
 	about := func() {
 		d := dialog.NewCustom("About - Endless Edit", "Close", container.NewVBox(
 			container.NewGridWithColumns(2,
 				widget.NewLabel("Endless Edit"), widget.NewLabel(meta.Version),
+				widget.NewLabel("Save Directory"), about_save_btn,
 				widget.NewLabel("Apollo"), widget.NewLabel("© 2022"),
 			),
 		), HOME)
@@ -75,6 +149,8 @@ func SetupHome() {
 			if showing_about {
 				showing_about = false
 			}
+			about_save_btn.Text = pref.StringWithFallback("save_dir", "Needs to be set")
+			about_save_btn.Refresh()
 		})
 		if !showing_about {
 			showing_about = true
@@ -99,15 +175,30 @@ func SetupHome() {
 
 	HOME.Canvas().AddShortcut(new_short, func(shortcut fyne.Shortcut) {
 		fmt.Println("File>New (Via Shortcut)")
+		if NEED_SAVEDIR {
+			SetSaveDir()
+			about_save_btn.Text = pref.StringWithFallback("save_dir", "Needs to be set")
+			about_save_btn.Refresh()
+		}
 	})
 	HOME.Canvas().AddShortcut(quit_short, func(shortcut fyne.Shortcut) {
 		APP.Quit()
 	})
 	HOME.Canvas().AddShortcut(open_short, func(shortcut fyne.Shortcut) {
 		fmt.Println("File>Open (Via Shortcut)")
+		if NEED_SAVEDIR {
+			SetSaveDir()
+			about_save_btn.Text = pref.StringWithFallback("save_dir", "Needs to be set")
+			about_save_btn.Refresh()
+		}
 	})
 	HOME.Canvas().AddShortcut(save_short, func(shortcut fyne.Shortcut) {
 		fmt.Println("File>Save (Via Shortcut)")
+		if NEED_SAVEDIR {
+			SetSaveDir()
+			about_save_btn.Text = pref.StringWithFallback("save_dir", "Needs to be set")
+			about_save_btn.Refresh()
+		}
 	})
 	HOME.Canvas().AddShortcut(about_short, func(shortcut fyne.Shortcut) {
 		about()