package main import ( "io/ioutil" "os" "github.com/gotk3/gotk3/gtk" ) func settingsUI(parent *gtk.Window, onExit func()) { win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL) win.SetTransientFor(parent) parent.SetSensitive(false) win.SetDefaultSize(600, 300) win.SetPosition(gtk.WIN_POS_CENTER_ON_PARENT) win.Connect("destroy", func() { parent.SetSensitive(true) onExit() }) comTagTbl, _ := gtk.TextTagTableNew() comBuf, _ := gtk.TextBufferNew(comTagTbl) ntbk, _ := gtk.NotebookNew() gnrl, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5) gnrl.SetMarginStart(10) gnrl.SetMarginEnd(10) gnrl.SetMarginTop(10) gnrl.SetMarginBottom(10) dlWine, _ := gtk.ButtonNewWithLabel("Download Wine") wineLbl, _ := gtk.LabelNew("PortableApps/LinuxPACom/Wine present") dlWine.Connect("clicked", func() { cb := make(chan bool) downloadWine(win, cb) go func() { v := <-cb if v { setupTxt(comBuf) wineLbl.Show() } }() }) if !comEnbld { dlWine.SetSensitive(false) dlWine.SetTooltipText("common.sh needed") } pthdCheck, _ := gtk.CheckButtonNewWithLabel("Hide \"Portable\" from app name") pthdCheck.Connect("toggled", func() { portableHide = pthdCheck.GetActive() master = make(map[string][]app) linmaster = make(map[string][]app) cats = make([]string, 0) lin = make([]string, 0) setup() }) wineCheck, _ := gtk.CheckButtonNewWithLabel("Show Windows apps (Wine)") if !wineAvail { wineCheck.SetSensitive(false) wineCheck.SetTooltipText("Download wine to run windows apps") } wineCheck.SetActive(wine) wineCheck.Connect("toggled", func() { wine = wineCheck.GetActive() }) pthdCheck.SetActive(portableHide) gnrl.Add(wineLbl) gnrl.Add(dlWine) gnrl.Add(pthdCheck) gnrl.Add(wineCheck) ntbk.AppendPage(gnrl, getLabel("General")) com, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5) com.SetMarginStart(10) com.SetMarginEnd(10) com.SetMarginTop(10) com.SetMarginBottom(10) comEdit, _ := gtk.TextViewNewWithBuffer(comBuf) comEdit.SetVExpand(true) comEdit.SetHExpand(true) vScroll, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0) hScroll, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0) comScrl, _ := gtk.ScrolledWindowNew(hScroll, vScroll) comScrl.Add(comEdit) svBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 5) sv, _ := gtk.ButtonNewWithLabel("Save") sv.Connect("clicked", func() { beg, end := comBuf.GetBounds() txt, _ := comBuf.GetText(beg, end, true) ioutil.WriteFile("PortableApps/LinuxPACom/common.sh", []byte(txt), 0777) }) cnl, _ := gtk.ButtonNewWithLabel("Cancel") cnl.Connect("clicked", func() { setupTxt(comBuf) }) svBox.Add(sv) svBox.Add(cnl) com.Add(comScrl) com.Add(svBox) ntbk.AppendPage(com, getLabel("common.sh")) win.Add(ntbk) win.ShowAll() if !comEnbld { comScrl.Hide() svBox.Hide() mkCom, _ := gtk.ButtonNewWithLabel("Create common.sh") mkCom.Connect("clicked", func() { err := ioutil.WriteFile("PortableApps/LinuxPACom/common.sh", []byte("export HOME=$PWD/PortableApps/LinuxPACom/Home"), 0777) if err == nil { mkCom.Hide() comScrl.Show() svBox.Show() setupTxt(comBuf) comEnbld = true dlWine.SetSensitive(true) dlWine.SetTooltipText("") } }) mkCom.Show() com.Add(mkCom) } else { setupTxt(comBuf) } if _, err := os.Open("PortableApps/LinuxPACom/Wine"); err != nil && os.IsNotExist(err) { wineLbl.Hide() } win.Show() } func setupTxt(buf *gtk.TextBuffer) { fil, _ := os.Open("PortableApps/LinuxPACom/common.sh") btys, _ := ioutil.ReadAll(fil) buf.SetText(string(btys)) } func getLabel(name string) *gtk.Label { lbl, _ := gtk.LabelNew(name) return lbl }