Merge pull request #7 from CalebQ42/gtkUI
Settings, wine download and more!
This commit is contained in:
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
version = "2.0.0.1"
|
version = "2.0.1.0"
|
||||||
defIni = ""
|
defIni = ""
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,7 +19,8 @@ var (
|
|||||||
lin []string
|
lin []string
|
||||||
wine bool
|
wine bool
|
||||||
comEnbld bool
|
comEnbld bool
|
||||||
darkTheme = true
|
wineAvail bool
|
||||||
|
showMsg = true
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
+108
@@ -0,0 +1,108 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/gotk3/gotk3/gtk"
|
||||||
|
)
|
||||||
|
|
||||||
|
func settingsUI() {
|
||||||
|
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
||||||
|
win.SetDefaultSize(600, 300)
|
||||||
|
win.SetPosition(gtk.WIN_POS_CENTER)
|
||||||
|
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")
|
||||||
|
gnrl.Add(wineLbl)
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
gnrl.Add(dlWine)
|
||||||
|
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)
|
||||||
|
com.Add(comScrl)
|
||||||
|
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(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
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
_ "image/png"
|
_ "image/png"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -14,6 +15,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func setup() {
|
func setup() {
|
||||||
|
if _, err := os.Open("PortableApps/LinuxPACom/Wine"); os.IsNotExist(err) {
|
||||||
|
if _, errd := exec.LookPath("wine"); errd == nil {
|
||||||
|
wineAvail = true
|
||||||
|
}
|
||||||
|
} else if err == nil {
|
||||||
|
wineAvail = true
|
||||||
|
}
|
||||||
PortableAppsFold, err := os.Open("PortableApps")
|
PortableAppsFold, err := os.Open("PortableApps")
|
||||||
if PAStat, _ := PortableAppsFold.Stat(); err != nil || !PAStat.IsDir() {
|
if PAStat, _ := PortableAppsFold.Stat(); err != nil || !PAStat.IsDir() {
|
||||||
os.Mkdir("PortableApps", 0777)
|
os.Mkdir("PortableApps", 0777)
|
||||||
@@ -30,28 +38,9 @@ func setup() {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
comEnbld = true
|
comEnbld = true
|
||||||
}
|
}
|
||||||
fi, err := os.Open("PortableApps/LinuxPACom/Info.ini")
|
_, err = os.Open("PortableApps/LinuxPACom/Info.ini")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fi, err = os.Create("PortableApps/LinuxPACom/Info.ini")
|
os.Create("PortableApps/LinuxPACom/Info.ini")
|
||||||
if err == nil {
|
|
||||||
wrt := bufio.NewWriter(fi)
|
|
||||||
wrt.WriteString(defIni)
|
|
||||||
wrt.Flush()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
rdr := bufio.NewReader(fi)
|
|
||||||
for err != nil {
|
|
||||||
ln, _, error := rdr.ReadLine()
|
|
||||||
err = error
|
|
||||||
str := string(ln)
|
|
||||||
if strings.HasPrefix(str, "theme=") {
|
|
||||||
str = strings.TrimPrefix(str, "theme=")
|
|
||||||
if str == "lt" {
|
|
||||||
darkTheme = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
PAFolds, _ := PortableAppsFold.Readdirnames(-1)
|
PAFolds, _ := PortableAppsFold.Readdirnames(-1)
|
||||||
sort.Strings(PAFolds)
|
sort.Strings(PAFolds)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func ui(win *gtk.Window) {
|
|||||||
header.SetSubtitle("PortableApps.com type launcher")
|
header.SetSubtitle("PortableApps.com type launcher")
|
||||||
settings, _ := gtk.ButtonNewFromIconName("applications-system", gtk.ICON_SIZE_SMALL_TOOLBAR)
|
settings, _ := gtk.ButtonNewFromIconName("applications-system", gtk.ICON_SIZE_SMALL_TOOLBAR)
|
||||||
settings.Connect("clicked", func() {
|
settings.Connect("clicked", func() {
|
||||||
//Open Settings window!
|
settingsUI()
|
||||||
})
|
})
|
||||||
settings.SetTooltipText("Settings (Coming Soon!)")
|
settings.SetTooltipText("Settings (Coming Soon!)")
|
||||||
header.PackStart(settings)
|
header.PackStart(settings)
|
||||||
@@ -33,6 +33,7 @@ func ui(win *gtk.Window) {
|
|||||||
txtColumn, _ := gtk.TreeViewColumnNewWithAttribute("", txtRender, "text", 1)
|
txtColumn, _ := gtk.TreeViewColumnNewWithAttribute("", txtRender, "text", 1)
|
||||||
appsList.AppendColumn(pixColumn)
|
appsList.AppendColumn(pixColumn)
|
||||||
appsList.AppendColumn(txtColumn)
|
appsList.AppendColumn(txtColumn)
|
||||||
|
appsList.SetHeadersVisible(false)
|
||||||
catList.SetHExpand(true)
|
catList.SetHExpand(true)
|
||||||
catList.SetVExpand(true)
|
catList.SetVExpand(true)
|
||||||
appsList.SetHExpand(true)
|
appsList.SetHExpand(true)
|
||||||
@@ -43,12 +44,18 @@ func ui(win *gtk.Window) {
|
|||||||
hScrollApp, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0)
|
hScrollApp, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0)
|
||||||
catScrl, _ := gtk.ScrolledWindowNew(hScrollCat, vScrollCat)
|
catScrl, _ := gtk.ScrolledWindowNew(hScrollCat, vScrollCat)
|
||||||
catScrl.Add(catList)
|
catScrl.Add(catList)
|
||||||
|
catScrl.SetSizeRequest(170, 500)
|
||||||
appScrl, _ := gtk.ScrolledWindowNew(hScrollApp, vScrollApp)
|
appScrl, _ := gtk.ScrolledWindowNew(hScrollApp, vScrollApp)
|
||||||
appScrl.Add(appsList)
|
appScrl.Add(appsList)
|
||||||
|
appScrl.SetSizeRequest(300, 500)
|
||||||
lrBox.Add(catScrl)
|
lrBox.Add(catScrl)
|
||||||
lrBox.Add(appScrl)
|
lrBox.Add(appScrl)
|
||||||
botBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 2)
|
botBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 2)
|
||||||
wineCheck, _ := gtk.CheckButtonNewWithLabel("Show Windows apps (Wine)")
|
wineCheck, _ := gtk.CheckButtonNewWithLabel("Show Windows apps (Wine)")
|
||||||
|
if !wineAvail {
|
||||||
|
wineCheck.SetSensitive(false)
|
||||||
|
wineCheck.SetTooltipText("Download wine to run windows apps")
|
||||||
|
}
|
||||||
wineCheck.Connect("toggled", func() {
|
wineCheck.Connect("toggled", func() {
|
||||||
wine = wineCheck.GetActive()
|
wine = wineCheck.GetActive()
|
||||||
for i := range ls {
|
for i := range ls {
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ func downloadUpdate(newVersion string) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func update(win *gtk.Window) {
|
func update(win *gtk.Window) {
|
||||||
updateWin, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
updateWin, _ := gtk.WindowNew(gtk.WINDOW_POPUP)
|
||||||
updateWin.SetTransientFor(win)
|
updateWin.SetTransientFor(win)
|
||||||
topLvl, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
topLvl, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
||||||
spin, _ := gtk.SpinnerNew()
|
spin, _ := gtk.SpinnerNew()
|
||||||
@@ -129,6 +129,7 @@ func update(win *gtk.Window) {
|
|||||||
updateWin.ShowAll()
|
updateWin.ShowAll()
|
||||||
updateWin.Show()
|
updateWin.Show()
|
||||||
go func(win, updateWin *gtk.Window) {
|
go func(win, updateWin *gtk.Window) {
|
||||||
|
defer updateWin.Close()
|
||||||
stat, err := versionDL()
|
stat, err := versionDL()
|
||||||
if stat {
|
if stat {
|
||||||
res := getVersionFileInfo()
|
res := getVersionFileInfo()
|
||||||
@@ -137,7 +138,6 @@ func update(win *gtk.Window) {
|
|||||||
if stat {
|
if stat {
|
||||||
lbl.SetText("Updating!")
|
lbl.SetText("Updating!")
|
||||||
downloadUpdate(res)
|
downloadUpdate(res)
|
||||||
updateWin.Close()
|
|
||||||
win.Close()
|
win.Close()
|
||||||
cmd := exec.Command("./LinuxPA")
|
cmd := exec.Command("./LinuxPA")
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
@@ -145,15 +145,12 @@ func update(win *gtk.Window) {
|
|||||||
cmd.Start()
|
cmd.Start()
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
updateWin.Close()
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("Failed Version File Info")
|
fmt.Println("Failed Version File Info")
|
||||||
updateWin.Close()
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
updateWin.Close()
|
|
||||||
}
|
}
|
||||||
}(win, updateWin)
|
}(win, updateWin)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gotk3/gotk3/gtk"
|
||||||
"github.com/mholt/archiver"
|
"github.com/mholt/archiver"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -12,10 +16,30 @@ const (
|
|||||||
wineURL = "https://www.playonlinux.com/wine/binaries/linux-amd64/PlayOnLinux-wine-2.5-linux-amd64.pol"
|
wineURL = "https://www.playonlinux.com/wine/binaries/linux-amd64/PlayOnLinux-wine-2.5-linux-amd64.pol"
|
||||||
)
|
)
|
||||||
|
|
||||||
func downloadWine() (bool, error) {
|
func downloadWine(parent *gtk.Window, cb chan bool) {
|
||||||
|
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
||||||
|
win.SetTransientFor(parent)
|
||||||
|
spin, _ := gtk.SpinnerNew()
|
||||||
|
spin.Start()
|
||||||
|
txt, _ := gtk.LabelNew("Downloading Wine")
|
||||||
|
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
||||||
|
box.SetMarginBottom(10)
|
||||||
|
box.SetMarginEnd(10)
|
||||||
|
box.SetMarginStart(10)
|
||||||
|
box.SetMarginTop(10)
|
||||||
|
box.Add(spin)
|
||||||
|
box.Add(txt)
|
||||||
|
win.Add(box)
|
||||||
|
win.SetPosition(gtk.WIN_POS_CENTER_ON_PARENT)
|
||||||
|
win.ShowAll()
|
||||||
|
win.Show()
|
||||||
|
go func(win *gtk.Window) {
|
||||||
|
defer win.Close()
|
||||||
wineTar, err := os.Create("PortableApps/LinuxPACom/wine2.5.tar.bz2")
|
wineTar, err := os.Create("PortableApps/LinuxPACom/wine2.5.tar.bz2")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
}
|
}
|
||||||
wineTar.Chmod(0777)
|
wineTar.Chmod(0777)
|
||||||
defer wineTar.Close()
|
defer wineTar.Close()
|
||||||
@@ -27,16 +51,51 @@ func downloadWine() (bool, error) {
|
|||||||
}
|
}
|
||||||
resp, err := check.Get(wineURL)
|
resp, err := check.Get(wineURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
_, err = io.Copy(wineTar, resp.Body)
|
_, err = io.Copy(wineTar, resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
txt.SetText("Extracting Wine")
|
||||||
|
os.RemoveAll("PortableApps/LinuxPACom/Wine")
|
||||||
err = archiver.TarBz2.Open("PortableApps/LinuxPACom/wine2.5.tar.bz2", "PortableApps/LinuxPACom/Wine")
|
err = archiver.TarBz2.Open("PortableApps/LinuxPACom/wine2.5.tar.bz2", "PortableApps/LinuxPACom/Wine")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
}
|
}
|
||||||
return true, nil
|
os.Remove("PortableApps/LinuxPACom/wine2.5.tar.bz2")
|
||||||
|
fil, err := os.Open("PortableApps/LinuxPACom/common.sh")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tmp, err := ioutil.ReadAll(fil)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("Hello")
|
||||||
|
if !strings.Contains(string(tmp), "export PATH=$PWD/PortableApps/LinuxPACom/Wine/wineversion/2.5/bin:$PATH") {
|
||||||
|
tmp = append(tmp, []byte("\nexport PATH=$PWD/PortableApps/LinuxPACom/Wine/wineversion/2.5/bin:$PATH")...)
|
||||||
|
ioutil.WriteFile("PortableApps/LinuxPACom/common.sh", tmp, 0777)
|
||||||
|
fmt.Println("Hello2")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
cb <- false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("HelloT")
|
||||||
|
cb <- true
|
||||||
|
return
|
||||||
|
}(win)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user