From 2a0d53db095a2f103482b1c29d99ac6d7fbbb262 Mon Sep 17 00:00:00 2001 From: Belac Darkstorm Date: Tue, 11 Apr 2017 00:18:00 -0500 Subject: [PATCH] Edit and some bugs --- app.go | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 4 +- setup.go | 12 +++--- ui.go | 74 ++++++++++++++++++++++++++------ 4 files changed, 196 insertions(+), 22 deletions(-) diff --git a/app.go b/app.go index f941b72..bde1302 100644 --- a/app.go +++ b/app.go @@ -1,6 +1,8 @@ package main import ( + "bufio" + "fmt" "os" "os/exec" "strings" @@ -151,3 +153,129 @@ func (a *app) launchSub(sub int) { cmd.Start() } } + +func (a *app) edit(parent *gtk.Window, reload func()) { + tmp := *a + parent.SetSensitive(false) + win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL) + win.Connect("destroy", func() { + master = make(map[string][]app) + linmaster = make(map[string][]app) + cats = make([]string, 0) + lin = make([]string, 0) + setup() + reload() + parent.SetSensitive(true) + }) + win.SetDefaultSize(400, 135) + topLvl, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5) + topLvl.SetMarginStart(10) + topLvl.SetMarginEnd(10) + topLvl.SetMarginTop(10) + topLvl.SetMarginBottom(10) + top, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 5) + img, _ := gtk.ImageNewFromPixbuf(a.icon) + imgBut, _ := gtk.ButtonNew() + imgBut.SetImage(img) + imgBut.SetSizeRequest(100, 100) + imgBut.Connect("clicked", func() { + fil, _ := gtk.FileChooserDialogNewWith2Buttons("Select Icon", win, gtk.FILE_CHOOSER_ACTION_OPEN, "Cancel", gtk.RESPONSE_CANCEL, "Open", gtk.RESPONSE_ACCEPT) + filter, _ := gtk.FileFilterNew() + filter.AddPixbufFormats() + filter.SetName("Supported Pictures") + fil.AddFilter(filter) + resp := fil.Run() + if resp == int(gtk.RESPONSE_ACCEPT) { + filename := fil.GetFilename() + _, err := os.Open(filename) + if err != nil { + fmt.Println(err) + return + } + pix, _ := gdk.PixbufNewFromFileAtSize(filename, 32, 32) + tmp.icon = pix + img.SetFromPixbuf(pix) + fil.Close() + } + }) + topRt, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5) + nameLbl, _ := gtk.LabelNew("Name:") + nameLbl.SetHAlign(gtk.ALIGN_START) + txtgtbl, _ := gtk.TextTagTableNew() + txtBuf, _ := gtk.TextBufferNew(txtgtbl) + nameTxt, _ := gtk.TextViewNewWithBuffer(txtBuf) + nameTxt.SetAcceptsTab(false) + nameTxt.SetWrapMode(gtk.WRAP_CHAR) + nameTxt.SetPixelsBelowLines(5) + nameTxt.SetHExpand(true) + nameTxt.SetVExpand(false) + nameTxt.SetBorderWindowSize(gtk.TEXT_WINDOW_BOTTOM, 5) + txtBuf.SetText(tmp.name) + vScrollName, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0) + hScrollName, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0) + nameScr, _ := gtk.ScrolledWindowNew(hScrollName, vScrollName) + nameScr.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) + nameScr.SetSizeRequest(300, 25) + nameScr.SetVExpand(false) + nameScr.Add(nameTxt) + catLbl, _ := gtk.LabelNew("Category:") + catLbl.SetHAlign(gtk.ALIGN_START) + catTbl, _ := gtk.TextTagTableNew() + catBuf, _ := gtk.TextBufferNew(catTbl) + catTxt, _ := gtk.TextViewNewWithBuffer(catBuf) + catBuf.SetText(tmp.cat) + catTxt.SetAcceptsTab(false) + catTxt.SetWrapMode(gtk.WRAP_CHAR) + catTxt.SetPixelsBelowLines(5) + catTxt.SetHExpand(true) + catTxt.SetVExpand(false) + catTxt.SetBorderWindowSize(gtk.TEXT_WINDOW_BOTTOM, 5) + vScrollCat, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0) + hScrollCat, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0) + catScr, _ := gtk.ScrolledWindowNew(hScrollCat, vScrollCat) + catScr.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) + catScr.SetSizeRequest(300, 25) + catScr.SetVExpand(false) + catScr.Add(catTxt) + topRt.Add(nameLbl) + topRt.Add(nameScr) + topRt.Add(catLbl) + topRt.Add(catScr) + top.Add(imgBut) + top.Add(topRt) + bot, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 5) + sv, _ := gtk.ButtonNewWithLabel("Save") + sv.Connect("clicked", func() { + tmp.name, _ = txtBuf.GetText(txtBuf.GetStartIter(), txtBuf.GetEndIter(), true) + tmp.cat, _ = catBuf.GetText(catBuf.GetStartIter(), catBuf.GetEndIter(), true) + tmp.makeIni() + os.Remove(a.dir + "/appicon.png") + tmp.icon.SavePNG(a.dir+"/appicon.png", 0) + win.Close() + }) + cnl, _ := gtk.ButtonNewWithLabel("Cancel") + cnl.Connect("clicked", func() { + win.Close() + }) + bot.PackEnd(sv, false, false, 0) + bot.PackEnd(cnl, false, false, 0) + topLvl.Add(top) + topLvl.Add(bot) + win.Add(topLvl) + win.ShowAll() + win.Show() +} + +func (a *app) makeIni() { + os.Remove(a.dir + "/appinfo.ini") + fil, err := os.Create(a.dir + "/appinfo.ini") + if err != nil { + return + } + ini := "[General]\n" + ini += "Category=" + a.cat + "\n" + ini += "Name=" + a.name + "\n" + wrt := bufio.NewWriter(fil) + wrt.WriteString(ini) + wrt.Flush() +} diff --git a/main.go b/main.go index 85ebbb5..581a550 100644 --- a/main.go +++ b/main.go @@ -4,13 +4,12 @@ import ( "encoding/gob" "fmt" "os" - "runtime" "github.com/gotk3/gotk3/gtk" ) const ( - version = "2.0.1.0" + version = "2.1.0.0" defIni = "" ) @@ -25,7 +24,6 @@ var ( ) func main() { - runtime.GOMAXPROCS(4) os.MkdirAll("PortableApps/LinuxPACom", 0777) master = make(map[string][]app) linmaster = make(map[string][]app) diff --git a/setup.go b/setup.go index 2676c3c..ff4efbc 100644 --- a/setup.go +++ b/setup.go @@ -148,7 +148,9 @@ func getName(ini *os.File) string { func getIcon(fold string) *gdk.Pixbuf { var pic string - if folder, err := os.Open(fold + "/App/AppInfo"); err == nil { + if _, err := os.Open(fold + "/appicon.png"); err == nil { + pic = fold + "/appicon.png" + } else if folder, err := os.Open(fold + "/App/AppInfo"); err == nil { fis, _ := folder.Readdir(-1) var pics []string for _, v := range fis { @@ -166,8 +168,6 @@ func getIcon(fold string) *gdk.Pixbuf { } pic = fold + "/App/AppInfo/" + pics[ind] } - } else if _, err := os.Open(fold + "/appicon.png"); err == nil { - pic = fold + "/appicon.png" } else { img, _ := gtk.ImageNewFromIconName("application-x-executable", gtk.ICON_SIZE_BUTTON) buf := img.GetPixbuf() @@ -179,6 +179,9 @@ func getIcon(fold string) *gdk.Pixbuf { } func findInfo(fold string) *os.File { + if fi, err := os.Open(fold + "/appinfo.ini"); err == nil { + return fi + } tmp, err := os.Open(fold + "/App/AppInfo") if err == nil { fis, _ := tmp.Readdirnames(-1) @@ -189,8 +192,5 @@ func findInfo(fold string) *os.File { } } } - if fi, err := os.Open(fold + "/appinfo.ini"); err == nil { - return fi - } return nil } diff --git a/ui.go b/ui.go index 7bf3ab4..61dc453 100644 --- a/ui.go +++ b/ui.go @@ -1,8 +1,6 @@ package main import ( - "fmt" - "github.com/CalebQ42/LinuxPA/appimg" "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" @@ -55,6 +53,10 @@ func ui(win *gtk.Window) { lrBox.Add(catScrl) lrBox.Add(appScrl) botBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 2) + botBox.SetMarginStart(10) + botBox.SetMarginEnd(10) + botBox.SetMarginTop(10) + botBox.SetMarginBottom(10) wineCheck, _ := gtk.CheckButtonNewWithLabel("Show Windows apps (Wine)") if !wineAvail { wineCheck.SetSensitive(false) @@ -63,8 +65,8 @@ func ui(win *gtk.Window) { wineCheck.SetActive(wine) wineCheck.Connect("toggled", func() { wine = wineCheck.GetActive() + store.Clear() for i := range ls { - fmt.Println(len(ls) - i) catList.Remove(catList.GetRowAtIndex(len(ls) - i - 1)) } ls = getCatRows() @@ -73,7 +75,44 @@ func ui(win *gtk.Window) { } catList.ShowAll() }) + edit, _ := gtk.ButtonNewWithLabel("Edit App..") + edit.Connect("clicked", func() { + selec, _ := appsList.GetSelection() + _, it, ok := selec.GetSelected() + if ok { + pth, _ := store.GetPath(it) + ind := pth.GetIndices() + if wine { + appLnch := master[cats[catList.GetSelectedRow().GetIndex()]][ind[0]] + appLnch.edit(win, func() { + store.Clear() + for i := range ls { + catList.Remove(catList.GetRowAtIndex(len(ls) - i - 1)) + } + ls = getCatRows() + for i, v := range ls { + catList.Insert(v, i) + } + catList.ShowAll() + }) + } else { + appLnch := linmaster[lin[catList.GetSelectedRow().GetIndex()]][ind[0]] + appLnch.edit(win, func() { + store.Clear() + for i := range ls { + catList.Remove(catList.GetRowAtIndex(len(ls) - i - 1)) + } + ls = getCatRows() + for i, v := range ls { + catList.Insert(v, i) + } + catList.ShowAll() + }) + } + } + }) botBox.Add(wineCheck) + botBox.PackEnd(edit, false, false, 0) topLvl.Add(lrBox) topLvl.PackEnd(botBox, false, true, 0) win.Add(topLvl) @@ -105,30 +144,39 @@ func ui(win *gtk.Window) { ind := pth.GetIndices() if len(ind) == 1 { if wine { - app := master[cats[catList.GetSelectedRow().GetIndex()]][ind[0]] - app.launch() + appLnch := master[cats[catList.GetSelectedRow().GetIndex()]][ind[0]] + appLnch.launch() } else { - app := linmaster[lin[catList.GetSelectedRow().GetIndex()]][ind[0]] - app.launch() + appLnch := linmaster[lin[catList.GetSelectedRow().GetIndex()]][ind[0]] + appLnch.launch() } } else if len(ind) == 2 { if wine { - app := master[cats[catList.GetSelectedRow().GetIndex()]][ind[0]] - app.launchSub(ind[1]) + appLnch := master[cats[catList.GetSelectedRow().GetIndex()]][ind[0]] + appLnch.launchSub(ind[1]) } else { - app := linmaster[lin[catList.GetSelectedRow().GetIndex()]][ind[0]] - app.launchSub(ind[1]) + appLnch := linmaster[lin[catList.GetSelectedRow().GetIndex()]][ind[0]] + appLnch.launchSub(ind[1]) } } } }) dnl.Connect("clicked", func() { appimg.ShowUI(func() { + master = make(map[string][]app) + linmaster = make(map[string][]app) + cats = make([]string, 0) + lin = make([]string, 0) + setup() store.Clear() + for i := range ls { + catList.Remove(catList.GetRowAtIndex(len(ls) - i - 1)) + } ls = getCatRows() - for _, v := range ls { - catList.Add(v) + for i, v := range ls { + catList.Insert(v, i) } + catList.ShowAll() }) }) }