UI Emulator

This commit is contained in:
cuu 2018-12-12 13:09:27 +08:00
parent babe981c68
commit 8746a98d3b
12 changed files with 293 additions and 111 deletions

View File

@ -1,7 +1,9 @@
ROM=/home/cpi/games/MAME {
ROM_SO=/home/cpi/apps/emulators/mame2003_plus_libretro.so "ROM":"/home/cpi/games/MAME",
EXT=zip "ROM_SO":"/home/cpi/apps/emulators/mame2003_plus_libretro.so",
LAUNCHER=retroarch -L "EXT":["zip"],
TITLE=MAME Roms "LAUNCHER":"retroarch -L",
SO_URL=http://buildbot.libretro.com/nightly/linux/armhf/latest/mame2003_plus_libretro.so.zip "TITLE":"MAME Roms",
RETRO_CONFIG=/home/cpi/apps/launcher/Menu/GameShell/20_Retro\ Games/MAME/retroarch.cfg "EXCLUDE":["neogeo.zip"],
"SO_URL":"http://buildbot.libretro.com/nightly/linux/armhf/latest/mame2003_plus_libretro.so.zip"
}

View File

@ -1,6 +1,8 @@
ROM=/home/cpi/games/MGBA {
ROM_SO=/home/cpi/apps/emulators/mgba_libretro.so "ROM":"/home/cpi/games/MGBA",
EXT=gba,gbx "ROM_SO":"/home/cpi/apps/emulators/mgba_libretro.so",
LAUNCHER=retroarch -L "EXT":["gba","gbx"],
TITLE=MGBA Roms "LAUNCHER":"retroarch -L",
SO_URL=http://buildbot.libretro.com/nightly/linux/armhf/latest/mgba_libretro.so.zip "TITLE":"MGBA Roms",
"SO_URL":"http://buildbot.libretro.com/nightly/linux/armhf/latest/mgba_libretro.so.zip"
}

View File

@ -1,7 +1,9 @@
ROM=/home/cpi/games/NESTOPIA {
ROM_SO=/home/cpi/apps/emulators/nestopia_libretro.so "ROM":"/home/cpi/games/NESTOPIA",
EXT=zip "ROM_SO":"/home/cpi/apps/emulators/nestopia_libretro.so",
LAUNCHER=retroarch -L "EXT":["zip"],
TITLE=NESTOPIA Roms "LAUNCHER":"retroarch -L",
SO_URL=http://buildbot.libretro.com/nightly/linux/armhf/latest/nestopia_libretro.so.zip "TITLE":"NESTOPIA Roms",
"SO_URL":"http://buildbot.libretro.com/nightly/linux/armhf/latest/nestopia_libretro.so.zip"
}

View File

@ -13,6 +13,7 @@ import (
"encoding/json" "encoding/json"
"github.com/cuu/LauncherGoDev/sysgo/UI" "github.com/cuu/LauncherGoDev/sysgo/UI"
"github.com/cuu/LauncherGoDev/sysgo/UI/Emulator"
"github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings" "github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings"
) )
@ -101,7 +102,33 @@ func ReadTheDirIntoPages(self *UI.MainScreen, _dir string, pglevel int, cur_page
} }
} }
//Init it //Init it
}else { }else if self.IsEmulatorPackage(_dir+"/"+f.Name()) {
a_c := Emulator.ActionConfig{}
dat, err := ioutil.ReadFile(_dir+"/"+f.Name()+"/" +UI.Emulator_flag)
UI.ShowErr(err)
err = json.Unmarshal(dat, &a_c)
if err == nil {
if UI.FileExists(filepath.Join(_dir,f.Name(),"retroarch-local.cfg")) {
a_c.RETRO_CONFIG = UI.CmdClean( filepath.Join(_dir,f.Name(),"retroarch-local.cfg") )
fmt.Println("a local retroarch cfg: ",a_c.RETRO_CONFIG)
}
em := Emulator.NewMyEmulator()
em.EmulatorConfig = &a_c
em.Init(self)
iconitem.CmdInvoke = em
if iconitem.CmdInvoke != nil {
iconitem.MyType = UI.ICON_TYPES["Emulator"]
iconitem.CmdPath = f.Name()
cur_page.AppendIcon(iconitem)
}
}else {
fmt.Println("ReadTheDirIntoPages EmulatorConfig ",err)
}
}else {
iconitem.MyType = UI.ICON_TYPES["DIR"] iconitem.MyType = UI.ICON_TYPES["DIR"]
linkpage := UI.NewPage() linkpage := UI.NewPage()
linkpage.Name = i2 linkpage.Name = i2

View File

@ -2,7 +2,7 @@ package Emulator
import ( import (
"sync" "sync"
"github.com/cuu/LauncherGoDev/sysgo/UI" //"github.com/cuu/LauncherGoDev/sysgo/UI"
) )

View File

@ -29,6 +29,8 @@ type MyEmulator struct { // as leader of RomListPage and FavListPage, it's a Plu
Name string Name string
RomPage *RomListPage RomPage *RomListPage
FavPage *FavListPage FavPage *FavListPage
DeleteConfirmPage *UI.DeleteConfirmPage
EmulatorConfig *ActionConfig
} }
func NewMyEmulator() *MyEmulator{ func NewMyEmulator() *MyEmulator{
@ -42,11 +44,36 @@ func (self *MyEmulator) GetName() string {
} }
func (self *MyEmulator) Init(main_screen *UI.MainScreen) { func (self *MyEmulator) Init(main_screen *UI.MainScreen) {
self.DeleteConfirmPage = UI.NewDeleteConfirmPage()
self.DeleteConfirmPage.Screen = main_screen
self.DeleteConfirmPage.Name = "Delete Confirm"
self.DeleteConfirmPage.Init()
self.RomPage = NewRomListPage()
self.RomPage.Screen = main_screen
self.RomPage.Name = self.EmulatorConfig.TITLE
self.RomPage.EmulatorConfig = self.EmulatorConfig
self.RomPage.Leader = self
self.RomPage.Init()
self.FavPage = NewFavListPage()
self.FavPage.Screen = main_screen
self.FavPage.Name = "FavouriteGames"
self.FavPage.EmulatorConfig = self.EmulatorConfig
self.FavPage.Leader = self
self.FavPage.Init()
} }
func (self *MyEmulator) API(main_screen *UI.MainScreen) { func (self *MyEmulator) Run(main_screen *UI.MainScreen) {
if main_screen != nil {
main_screen.PushCurPage()
main_screen.SetCurPage(self.RomPage)
main_screen.Draw()
main_screen.SwapAndShow()
}
} }

View File

@ -1,11 +1,18 @@
package Emulator package Emulator
import ( import (
"fmt"
"os"
"strings"
"path/filepath" "path/filepath"
"errors"
"github.com/veandco/go-sdl2/ttf"
"github.com/cuu/gogame/event"
"github.com/cuu/gogame/color" "github.com/cuu/gogame/color"
"github.com/cuu/gogame/surface" "github.com/cuu/gogame/time"
"github.com/cuu/LauncherGoDev/sysgo/UI" "github.com/cuu/LauncherGoDev/sysgo/UI"
) )
@ -21,8 +28,9 @@ type FavListPage struct {
MyList []*EmulatorListItem MyList []*EmulatorListItem
BGwidth int BGwidth int
BGheight 70 BGheight int //70
Scroller *UI.ListScroller
Scrolled int
Leader *MyEmulator Leader *MyEmulator
} }
@ -33,7 +41,7 @@ func NewFavListPage() *FavListPage {
p.SelectedIconTopOffset = 20 p.SelectedIconTopOffset = 20
p.EasingDur = 10 p.EasingDur = 10
p.Align = ALIGN["SLeft"] p.Align = UI.ALIGN["SLeft"]
p.FootMsg = [5]string{ "Nav","Scan","Remove","","Run" } p.FootMsg = [5]string{ "Nav","Scan","Remove","","Run" }
@ -47,11 +55,17 @@ func NewFavListPage() *FavListPage {
return p return p
} }
func (self *FavListPage) GetMapIcons() map[string]UI.IconItemInterface {
return self.Icons
}
func (self *FavListPage) GetEmulatorConfig() *ActionConfig {
return self.EmulatorConfig
}
func (self *FavListPage) GeneratePathList(path string) []map[string]string { func (self *FavListPage) GeneratePathList(path string) ([]map[string]string,error) {
if UI.IsDirectory(path) == false { if UI.IsDirectory(path) == false {
return nil return nil,errors.New("Path is not a folder")
} }
dirmap := make(map[string]string) dirmap := make(map[string]string)
var ret []map[string]string var ret []map[string]string
@ -59,10 +73,10 @@ func (self *FavListPage) GeneratePathList(path string) []map[string]string {
file_paths,err := filepath.Glob(path+"/*")//sorted file_paths,err := filepath.Glob(path+"/*")//sorted
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return false return ret,err
} }
for i,v := range file_paths { for _,v := range file_paths {
if UI.IsDirectory(v) && self.EmulatorConfig.FILETYPE == "dir" { // like DOSBOX if UI.IsDirectory(v) && self.EmulatorConfig.FILETYPE == "dir" { // like DOSBOX
gameshell_bat := self.EmulatorConfig.EXT[0] gameshell_bat := self.EmulatorConfig.EXT[0]
if UI.GetGid(v) != FavGID { //only favs if UI.GetGid(v) != FavGID { //only favs
@ -75,7 +89,7 @@ func (self *FavListPage) GeneratePathList(path string) []map[string]string {
} }
} }
if UI.IsFile(v) && self.EmulatorConfig.FILETYPE == "file" { if UI.IsAFile(v) && self.EmulatorConfig.FILETYPE == "file" {
if UI.GetGid(v) != FavGID { //only favs if UI.GetGid(v) != FavGID { //only favs
continue continue
} }
@ -97,16 +111,16 @@ func (self *FavListPage) GeneratePathList(path string) []map[string]string {
} }
} }
return ret return ret,nil
} }
func (self *FavListPage) SyncList( path string ) { func (self *FavListPage) SyncList( path string ) {
alist := self.GeneratePathList(path) alist,err := self.GeneratePathList(path)
if alist == nil { if err != nil {
fmt.Println("listfiles return false") fmt.Println(err)
return return
} }
@ -139,7 +153,7 @@ func (self *FavListPage) SyncList( path string ) {
li.Fonts["normal"] = self.ListFont li.Fonts["normal"] = self.ListFont
li.MyType = UI.ICON_TYPES["FILE"] li.MyType = UI.ICON_TYPES["FILE"]
init_val = "NoName" init_val := "NoName"
if val, ok := v["directory"]; ok { if val, ok := v["directory"]; ok {
li.MyType = UI.ICON_TYPES["DIR"] li.MyType = UI.ICON_TYPES["DIR"]
@ -165,7 +179,7 @@ func (self *FavListPage) Init() {
self.Width = self.Screen.Width self.Width = self.Screen.Width
self.Height = self.Screen.Height self.Height = self.Screen.Height
sefl.CanvasHWND = self.Screen.CanvasHWND self.CanvasHWND = self.Screen.CanvasHWND
ps := UI.NewInfoPageSelector() ps := UI.NewInfoPageSelector()
ps.Width = UI.Width - 12 ps.Width = UI.Width - 12
@ -193,16 +207,16 @@ func (self *FavListPage) Init() {
bgpng.MyType = UI.ICON_TYPES["STAT"] bgpng.MyType = UI.ICON_TYPES["STAT"]
bgpng.Parent = self bgpng.Parent = self
bgpng.AddLabel("my favourites games",UI.Fonts["varela22"]) bgpng.AddLabel("my favourites games",UI.Fonts["varela22"])
bgpng.SetLableColor(&color.Color{204,204,204,255} ) bgpng.SetLabelColor(&color.Color{204,204,204,255} )
bgpng.Adjust(0,0,self.BGwidth,self.BGheight,0) bgpng.Adjust(0,0,self.BGwidth,self.BGheight,0)
self.Icons["bg"] = bgpng self.Icons["bg"] = bgpng
self._Scroller = UI.NewListScroller() self.Scroller = UI.NewListScroller()
self._Scroller.Parent = self self.Scroller.Parent = self
self._Scroller.PosX = self.Width - 10 self.Scroller.PosX = self.Width - 10
self._Scroller.PosY = 2 self.Scroller.PosY = 2
self._Scroller.Init() self.Scroller.Init()
rom_so_confirm_page := NewRomSoConfirmPage() rom_so_confirm_page := NewRomSoConfirmPage()
rom_so_confirm_page.Screen = self.Screen rom_so_confirm_page.Screen = self.Screen
@ -272,9 +286,9 @@ func (self *FavListPage) SyncScroll() {
self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height
} }
} }
} if self.Scrolled < 0 { }else if self.Scrolled < 0 {
if cur_li.PosY + cur_li.Height > self.Height{ if cur_li.PosY + cur_li.Height > self.Height {
for i,_ := range self.MyList{ for i,_ := range self.MyList {
self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height
} }
} }
@ -299,7 +313,7 @@ func (self *FavListPage) Click() {
cur_li := self.MyList[self.PsIndex] cur_li := self.MyList[self.PsIndex]
if cur_li.MyType == UI.ICON_TYPES["DIR"] { if cur_li.MyType == UI.ICON_TYPES["DIR"] {
if cur_li.Path = "[..]"{ if cur_li.Path == "[..]" {
self.MyStack.Pop() self.MyStack.Pop()
self.SyncList(self.MyStack.Last()) self.SyncList(self.MyStack.Last())
self.PsIndex = 0 self.PsIndex = 0
@ -332,7 +346,7 @@ func (self *FavListPage) Click() {
custom_config := "" custom_config := ""
if self.EmulatorConfig.RETRO_CONFIG != "" && len(self.EmulatorConfig.RETRO_CONFIG) 5 { if self.EmulatorConfig.RETRO_CONFIG != "" && len(self.EmulatorConfig.RETRO_CONFIG) > 5 {
custom_config = " -c " + self.EmulatorConfig.RETRO_CONFIG custom_config = " -c " + self.EmulatorConfig.RETRO_CONFIG
} }
@ -341,11 +355,11 @@ func (self *FavListPage) Click() {
cmdpath := strings.Join( partsofpath," ") cmdpath := strings.Join( partsofpath," ")
if self.EmulatorConfig.ROM_SO =="" { //empty means No needs for rom so if self.EmulatorConfig.ROM_SO =="" { //empty means No needs for rom so
event.POST(UI.RUNEVT,cmdpath) event.Post(UI.RUNEVT,cmdpath)
}else{ }else{
if UI.FileExists(self.EmulatorConfig.ROM_SO) == true { if UI.FileExists(self.EmulatorConfig.ROM_SO) == true {
event.POST(UI.RUNEVT,cmdpath) event.Post(UI.RUNEVT,cmdpath)
} else { } else {
self.Screen.PushCurPage() self.Screen.PushCurPage()
self.Screen.SetCurPage( self.RomSoConfirmDownloadPage) self.Screen.SetCurPage( self.RomSoConfirmDownloadPage)
@ -456,13 +470,14 @@ func (self *FavListPage) Draw() {
self.Icons["bg"].NewCoord(self.Width/2,self.Height/2) self.Icons["bg"].NewCoord(self.Width/2,self.Height/2)
self.Icons["bg"].Draw() self.Icons["bg"].Draw()
}else{ }else{
_,h := self.Ps.Size()
if len(self.MyList) * HierListItemDefaultHeight > self.Height { if len(self.MyList) * HierListItemDefaultHeight > self.Height {
self.Ps.Width = self.Width - 10
self.Ps.NewSize(self.Width - 10, h)
self.Ps.Draw() self.Ps.Draw()
for i,v := range self.MyList { for _,v := range self.MyList {
if v.PosY > self.Height + self.Height/2 { if v.PosY > self.Height + self.Height/2 {
break break
} }
@ -480,7 +495,7 @@ func (self *FavListPage) Draw() {
}else { }else {
self.Ps.Width = self.Width self.Ps.NewSize(self.Width,h)
self.Ps.Draw() self.Ps.Draw()
for _,v := range self.MyList { for _,v := range self.MyList {
v.Draw() v.Draw()

View File

@ -1,21 +1,32 @@
package Emulator package Emulator
import ( import (
"fmt"
"strings"
"io/ioutil"
"path/filepath" "path/filepath"
"github.com/veandco/go-sdl2/ttf"
//"github.com/veandco/go-sdl2/sdl"
"github.com/cuu/gogame/surface" "github.com/cuu/gogame/surface"
"github.com/cuu/gogame/rect"
"github.com/cuu/gogame/color"
"github.com/cuu/gogame/draw"
"github.com/cuu/LauncherGoDev/sysgo/UI" "github.com/cuu/LauncherGoDev/sysgo/UI"
) )
type EmulatorPageInterface { type EmulatorPageInterface interface {
UI.PageInterface UI.PageInterface
GetIcons() map[string]UI.IconItemInterface GetMapIcons() map[string]UI.IconItemInterface
GetEmulatorConfig() *ActionConfig
} }
type ListItemIcon struct { type ListItemIcon struct {
UI.IconItem UI.IconItem
} }
@ -36,7 +47,7 @@ func (self *ListItemIcon) Draw() {
rect_ := rect.Rect(self.PosX,self.PosY+(h-self.Height)/2,self.Width,self.Height) rect_ := rect.Rect(self.PosX,self.PosY+(h-self.Height)/2,self.Width,self.Height)
surface.Blit(self.CanvasHWND, self.ImgSurf,&rect_,nil) surface.Blit(self.Parent.GetCanvasHWND(), self.ImgSurf,&rect_,nil)
} }
/// [..] [.] /// [..] [.]
@ -52,8 +63,8 @@ var HierListItemDefaultHeight = 32
func NewHierListItem() *HierListItem { func NewHierListItem() *HierListItem {
p := &HierListItem{} p := &HierListItem{}
p.Labels = make(map[string]LabelInterface) p.Labels = make(map[string]UI.LabelInterface)
p.Icons = make( map[string]IconItemInterface) p.Icons = make( map[string]UI.IconItemInterface)
p.Fonts = make(map[string]*ttf.Font) p.Fonts = make(map[string]*ttf.Font)
p.MyType = UI.ICON_TYPES["EXE"] p.MyType = UI.ICON_TYPES["EXE"]
@ -107,9 +118,9 @@ func (self *HierListItem) Init(text string) {
} }
if self.IsDir() == true { if self.IsDir() == true {
l.Init(label_text, self.Fonts["normal"]) l.Init(label_text, self.Fonts["normal"],nil)
}else { }else {
l.Init(label_text,self.Fonts["normal"]) l.Init(label_text,self.Fonts["normal"],nil)
} }
self.Labels["Text"] = l self.Labels["Text"] = l
@ -161,8 +172,8 @@ type EmulatorListItem struct {
func NewEmulatorListItem() *EmulatorListItem { func NewEmulatorListItem() *EmulatorListItem {
p := &EmulatorListItem{} p := &EmulatorListItem{}
p.Labels = make(map[string]LabelInterface) p.Labels = make(map[string]UI.LabelInterface)
p.Icons = make( map[string]IconItemInterface) p.Icons = make( map[string]UI.IconItemInterface)
p.Fonts = make(map[string]*ttf.Font) p.Fonts = make(map[string]*ttf.Font)
p.MyType = UI.ICON_TYPES["EXE"] p.MyType = UI.ICON_TYPES["EXE"]
@ -187,17 +198,17 @@ func (self *EmulatorListItem) Draw() {
self.Labels["Text"].Draw() self.Labels["Text"].Draw()
parent_icons := self.Parent.GetIcons() parent_icons := self.Parent.GetMapIcons()
w,h := parent_cons["sys"].Size() _,h = parent_icons["sys"].Size()
if self.IsDir() == true && self.Path != "[..]" { if self.IsDir() == true && self.Path != "[..]" {
parent_icons["sys"].IconIndex = 0 parent_icons["sys"].SetIconIndex (0)
parent_icons["sys"].NewCoord(self.PosX+12,self.PosY+(self.Height-h)/2+h/2) parent_icons["sys"].NewCoord(self.PosX+12,self.PosY+(self.Height-h)/2+h/2)
parent_icons["sys"].Draw() parent_icons["sys"].Draw()
} }
if self.IsFile() == true { if self.IsFile() == true {
parent_icons["sys"].IconIndex = 1 parent_icons["sys"].SetIconIndex(1)
parent_icons["sys"].NewCoord(self.PosX+12,self.PosY+(self.Height-h)/2+h/2) parent_icons["sys"].NewCoord(self.PosX+12,self.PosY+(self.Height-h)/2+h/2)
parent_icons["sys"].Draw() parent_icons["sys"].Draw()
} }

View File

@ -1,11 +1,18 @@
package Emulator package Emulator
import ( import (
"fmt"
"os"
"strings"
"regexp"
"path/filepath" "path/filepath"
"os/exec"
"errors"
"github.com/veandco/go-sdl2/ttf"
"github.com/cuu/gogame/time"
"github.com/cuu/gogame/color" "github.com/cuu/gogame/color"
"github.com/cuu/gogame/surface" "github.com/cuu/gogame/event"
"github.com/cuu/LauncherGoDev/sysgo/UI" "github.com/cuu/LauncherGoDev/sysgo/UI"
) )
@ -21,7 +28,9 @@ type RomListPage struct {
MyList []*EmulatorListItem MyList []*EmulatorListItem
BGwidth int BGwidth int
BGheight 70 BGheight int //70
Scroller *UI.ListScroller
Scrolled int
Leader *MyEmulator Leader *MyEmulator
@ -33,7 +42,7 @@ func NewRomListPage() *RomListPage {
p.SelectedIconTopOffset = 20 p.SelectedIconTopOffset = 20
p.EasingDur = 10 p.EasingDur = 10
p.Align = ALIGN["SLeft"] p.Align = UI.ALIGN["SLeft"]
p.FootMsg = [5]string{ "Nav","Scan","Del","AddFav","Run" } p.FootMsg = [5]string{ "Nav","Scan","Del","AddFav","Run" }
@ -48,10 +57,18 @@ func NewRomListPage() *RomListPage {
return p return p
} }
func (self *RomListPage) GetMapIcons() map[string]UI.IconItemInterface {
return self.Icons
}
func (self *RomListPage) GeneratePathList(path string) []map[string]string { func (self *RomListPage) GetEmulatorConfig() *ActionConfig {
return self.EmulatorConfig
}
func (self *RomListPage) GeneratePathList(path string) ([]map[string]string,error) {
if UI.IsDirectory(path) == false { if UI.IsDirectory(path) == false {
return nil return nil,errors.New("Path is not a folder")
} }
dirmap := make(map[string]string) dirmap := make(map[string]string)
var ret []map[string]string var ret []map[string]string
@ -59,10 +76,10 @@ func (self *RomListPage) GeneratePathList(path string) []map[string]string {
file_paths,err := filepath.Glob(path+"/*")//sorted file_paths,err := filepath.Glob(path+"/*")//sorted
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return false return ret,err
} }
for i,v := range file_paths { for _,v := range file_paths {
if UI.IsDirectory(v) && self.EmulatorConfig.FILETYPE == "dir" { // like DOSBOX if UI.IsDirectory(v) && self.EmulatorConfig.FILETYPE == "dir" { // like DOSBOX
gameshell_bat := self.EmulatorConfig.EXT[0] gameshell_bat := self.EmulatorConfig.EXT[0]
if UI.GetGid(v) == FavGID { // skip fav roms if UI.GetGid(v) == FavGID { // skip fav roms
@ -75,7 +92,7 @@ func (self *RomListPage) GeneratePathList(path string) []map[string]string {
} }
} }
if UI.IsFile(v) && self.EmulatorConfig.FILETYPE == "file" { if UI.IsAFile(v) && self.EmulatorConfig.FILETYPE == "file" {
if UI.GetGid(v) == FavGID { if UI.GetGid(v) == FavGID {
continue continue
} }
@ -109,16 +126,16 @@ func (self *RomListPage) GeneratePathList(path string) []map[string]string {
} }
} }
return ret return ret,nil
} }
func (self *RomListPage) SyncList( path string ) { func (self *RomListPage) SyncList( path string ) {
alist := self.GeneratePathList(path) alist,err := self.GeneratePathList(path)
if alist == nil { if err != nil {
fmt.Println("listfiles return false") fmt.Println(err)
return return
} }
@ -151,7 +168,7 @@ func (self *RomListPage) SyncList( path string ) {
li.Fonts["normal"] = self.ListFont li.Fonts["normal"] = self.ListFont
li.MyType = UI.ICON_TYPES["FILE"] li.MyType = UI.ICON_TYPES["FILE"]
init_val = "NoName" init_val := "NoName"
if val, ok := v["directory"]; ok { if val, ok := v["directory"]; ok {
li.MyType = UI.ICON_TYPES["DIR"] li.MyType = UI.ICON_TYPES["DIR"]
@ -177,7 +194,7 @@ func (self *RomListPage) Init() {
self.Width = self.Screen.Width self.Width = self.Screen.Width
self.Height = self.Screen.Height self.Height = self.Screen.Height
sefl.CanvasHWND = self.Screen.CanvasHWND self.CanvasHWND = self.Screen.CanvasHWND
ps := UI.NewInfoPageSelector() ps := UI.NewInfoPageSelector()
ps.Width = UI.Width - 12 ps.Width = UI.Width - 12
@ -215,16 +232,16 @@ func (self *RomListPage) Init() {
bgpng.MyType = UI.ICON_TYPES["STAT"] bgpng.MyType = UI.ICON_TYPES["STAT"]
bgpng.Parent = self bgpng.Parent = self
bgpng.AddLabel("Please upload data over Wi-Fi",UI.Fonts["varela22"]) bgpng.AddLabel("Please upload data over Wi-Fi",UI.Fonts["varela22"])
bgpng.SetLableColor(&color.Color{204,204,204,255} ) bgpng.SetLabelColor(&color.Color{204,204,204,255} )
bgpng.Adjust(0,0,self.BGwidth,self.BGheight,0) bgpng.Adjust(0,0,self.BGwidth,self.BGheight,0)
self.Icons["bg"] = bgpng self.Icons["bg"] = bgpng
self._Scroller = UI.NewListScroller() self.Scroller = UI.NewListScroller()
self._Scroller.Parent = self self.Scroller.Parent = self
self._Scroller.PosX = self.Width - 10 self.Scroller.PosX = self.Width - 10
self._Scroller.PosY = 2 self.Scroller.PosY = 2
self._Scroller.Init() self.Scroller.Init()
rom_so_confirm_page := NewRomSoConfirmPage() rom_so_confirm_page := NewRomSoConfirmPage()
rom_so_confirm_page.Screen = self.Screen rom_so_confirm_page.Screen = self.Screen
@ -294,7 +311,7 @@ func (self *RomListPage) SyncScroll() {
self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height
} }
} }
} if self.Scrolled < 0 { }else if self.Scrolled < 0 {
if cur_li.PosY + cur_li.Height > self.Height{ if cur_li.PosY + cur_li.Height > self.Height{
for i,_ := range self.MyList{ for i,_ := range self.MyList{
self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height self.MyList[i].PosY += self.Scrolled*self.MyList[i].Height
@ -307,7 +324,6 @@ func (self *RomListPage) SyncScroll() {
func (self *RomListPage) Click() { func (self *RomListPage) Click() {
if len(self.MyList) == 0 { if len(self.MyList) == 0 {
return return
} }
@ -321,7 +337,7 @@ func (self *RomListPage) Click() {
cur_li := self.MyList[self.PsIndex] cur_li := self.MyList[self.PsIndex]
if cur_li.MyType == UI.ICON_TYPES["DIR"] { if cur_li.MyType == UI.ICON_TYPES["DIR"] {
if cur_li.Path = "[..]"{ if cur_li.Path == "[..]"{
self.MyStack.Pop() self.MyStack.Pop()
self.SyncList(self.MyStack.Last()) self.SyncList(self.MyStack.Last())
self.PsIndex = 0 self.PsIndex = 0
@ -354,7 +370,7 @@ func (self *RomListPage) Click() {
custom_config := "" custom_config := ""
if self.EmulatorConfig.RETRO_CONFIG != "" && len(self.EmulatorConfig.RETRO_CONFIG) 5 { if self.EmulatorConfig.RETRO_CONFIG != "" && len(self.EmulatorConfig.RETRO_CONFIG) > 5 {
custom_config = " -c " + self.EmulatorConfig.RETRO_CONFIG custom_config = " -c " + self.EmulatorConfig.RETRO_CONFIG
} }
@ -363,11 +379,11 @@ func (self *RomListPage) Click() {
cmdpath := strings.Join( partsofpath," ") cmdpath := strings.Join( partsofpath," ")
if self.EmulatorConfig.ROM_SO =="" { //empty means No needs for rom so if self.EmulatorConfig.ROM_SO =="" { //empty means No needs for rom so
event.POST(UI.RUNEVT,cmdpath) event.Post(UI.RUNEVT,cmdpath)
}else{ }else{
if UI.FileExists(self.EmulatorConfig.ROM_SO) == true { if UI.FileExists(self.EmulatorConfig.ROM_SO) == true {
event.POST(UI.RUNEVT,cmdpath) event.Post(UI.RUNEVT,cmdpath)
} else { } else {
self.Screen.PushCurPage() self.Screen.PushCurPage()
self.Screen.SetCurPage( self.RomSoConfirmDownloadPage) self.Screen.SetCurPage( self.RomSoConfirmDownloadPage)
@ -429,7 +445,8 @@ func (self *RomListPage) KeyDown(ev *event.Event) {
self.Screen.SetCurPage(self.Leader.FavPage) self.Screen.SetCurPage(self.Leader.FavPage)
self.Screen.Draw() self.Screen.Draw()
self.Screen.SwapAndShow() self.Screen.SwapAndShow()
}
if ev.Data["Key"] == UI.CurKeys["Up"]{ if ev.Data["Key"] == UI.CurKeys["Up"]{
self.ScrollUp() self.ScrollUp()
self.Screen.Draw() self.Screen.Draw()
@ -503,13 +520,13 @@ func (self *RomListPage) Draw() {
self.Icons["bg"].NewCoord(self.Width/2,self.Height/2) self.Icons["bg"].NewCoord(self.Width/2,self.Height/2)
self.Icons["bg"].Draw() self.Icons["bg"].Draw()
}else{ }else{
_,h := self.Ps.Size()
if len(self.MyList) * HierListItemDefaultHeight > self.Height { if len(self.MyList) * HierListItemDefaultHeight > self.Height {
self.Ps.Width = self.Width - 10 self.Ps.NewSize(self.Width - 10,h)
self.Ps.Draw() self.Ps.Draw()
for i,v := range self.MyList { for _,v := range self.MyList {
if v.PosY > self.Height + self.Height/2 { if v.PosY > self.Height + self.Height/2 {
break break
} }
@ -527,7 +544,7 @@ func (self *RomListPage) Draw() {
}else { }else {
self.Ps.Width = self.Width self.Ps.NewSize(self.Width,h)
self.Ps.Draw() self.Ps.Draw()
for _,v := range self.MyList { for _,v := range self.MyList {
v.Draw() v.Draw()

View File

@ -1,12 +1,13 @@
package Emulator package Emulator
import ( import (
"strconv" "fmt"
//"strconv"
"strings" "strings"
"path/filepath" "path/filepath"
"github.com/cuu/gogame/surface" "github.com/cuu/gogame/event"
"github.com/cuu/LauncherGoDev/sysgo" "github.com/cuu/LauncherGoDev/sysgo"
"github.com/cuu/LauncherGoDev/sysgo/UI" "github.com/cuu/LauncherGoDev/sysgo/UI"
@ -14,7 +15,7 @@ import (
type RomSoConfirmPage struct { type RomSoConfirmPage struct {
UI.ConfirmPage UI.ConfirmPage
Parent EmulatorPageInterface
DownloadPage *UI.DownloadProcessPage DownloadPage *UI.DownloadProcessPage
} }
@ -24,7 +25,7 @@ func NewRomSoConfirmPage() *RomSoConfirmPage {
p.PageIconMargin = 20 p.PageIconMargin = 20
p.SelectedIconTopOffset = 20 p.SelectedIconTopOffset = 20
p.EasingDur = 10 p.EasingDur = 10
p.Align = ALIGN["SLeft"] p.Align = UI.ALIGN["SLeft"]
p.ListFont = UI.Fonts["veramono18"] p.ListFont = UI.Fonts["veramono18"]
p.FootMsg = [5]string{"Nav","","","Cancel","Yes"} p.FootMsg = [5]string{"Nav","","","Cancel","Yes"}
@ -44,7 +45,7 @@ func (self *RomSoConfirmPage) Init() {
li := UI.NewMultiLabel() li := UI.NewMultiLabel()
li.SetCanvasHWND(self.CanvasHWND) li.SetCanvasHWND(self.CanvasHWND)
li.Width = 160 li.Width = 160
li.Init(self.ConfirmText,self.ListFont) li.Init(self.ConfirmText,self.ListFont,nil)
li.PosX = (self.Width - li.Width)/2 li.PosX = (self.Width - li.Width)/2
li.PosY = (self.Height - li.Height)/2 li.PosY = (self.Height - li.Height)/2
@ -94,16 +95,17 @@ func (self *RomSoConfirmPage) KeyDown(ev *event.Event) {
self.Screen.PushPage(self.DownloadPage) self.Screen.PushPage(self.DownloadPage)
self.Screen.Draw() self.Screen.Draw()
self.Screen.SwapAndShow() self.Screen.SwapAndShow()
ec := self.Parent.GetEmulatorConfig()
if sysgo.CurKeySet == "PC" { if sysgo.CurKeySet == "PC" {
so_url := self.Parent.EmulatorConfig.SO_URL
so_url := ec.SO_URL
so_url = strings.Replace(so_url,"armhf","x86_64",-1) so_url = strings.Replace(so_url,"armhf","x86_64",-1)
fmt.Println(so_url) fmt.Println(so_url)
self.DownloadPage.StartDownload(so_url,filepath.Dir(self.Parent.EmulatorConfig.ROM_SO)) self.DownloadPage.StartDownload(so_url,filepath.Dir(ec.ROM_SO))
}else{ }else{
so_url := self.Parent.EmulatorConfig.SO_URL so_url := ec.SO_URL
self.DownloadPage.StartDownload(so_url,filepath.Dir(self.Parent.EmulatorConfig.ROM_SO)) self.DownloadPage.StartDownload(so_url,filepath.Dir(ec.ROM_SO))
} }
} }
} }

View File

@ -0,0 +1,77 @@
package UI
import(
"fmt"
"os"
"path/filepath"
"strings"
"github.com/cuu/gogame/event"
"github.com/cuu/gogame/time"
)
type DeleteConfirmPage struct {
ConfirmPage
}
func NewDeleteConfirmPage() *DeleteConfirmPage {
p := &DeleteConfirmPage{}
p.ListFont = Fonts["veramono20"]
p.FootMsg = [5]string{"Nav","","","Cancel","Yes"}
p.ConfirmText ="Confirm Delete ?"
return p
}
func (self *DeleteConfirmPage) SetTrashDir(d string) {
self.TrashDir = d
if IsDirectory(self.TrashDir)== false {
panic("DeleteConfirmPage SetTrashDir errors")
}
}
func (self *DeleteConfirmPage) SetFileName(fn string) {
self.FileName = fn
}
func (self *DeleteConfirmPage) KeyDown(ev *event.Event) {
if ev.Data["Key"] == CurKeys["A"] || ev.Data["Key"] == CurKeys["Menu"] {
self.ReturnToUpLevelPage()
self.Screen.Draw()
self.Screen.SwapAndShow()
}
if ev.Data["Key"] == CurKeys["B"] {
err := os.Remove(filepath.Join(self.TrashDir, filepath.Base(self.FileName)))
if err != nil {
fmt.Println("DeleteConfirmPage os.Remove errors :",err)
}
err = os.Rename(filepath.Base(self.FileName), filepath.Join(self.TrashDir, filepath.Base(self.FileName)))
if err != nil {
if strings.Contains(err.Error(),"exists" ) {
self.Screen.MsgBox.SetText("Already Existed")
} else {
self.Screen.MsgBox.SetText("Error")
}
self.Screen.MsgBox.Draw()
self.Screen.SwapAndShow()
} else {
self.SnapMsg("Deleting")
self.Screen.Draw()
self.Screen.SwapAndShow()
self.Reset()
time.BlockDelay(300)
self.ReturnToUpLevelPage()
self.Screen.Draw()
self.Screen.SwapAndShow()
}
fmt.Println(self.FileName)
}
}

View File

@ -807,7 +807,7 @@ func (self *Page) IconClick() {
return return
} }
if cur_icon.GetMyType() == ICON_TYPES["FUNC"] { if cur_icon.GetMyType() == ICON_TYPES["FUNC"] || cur_icon.GetMyType() == ICON_TYPES["Emulator"] {
invoker := cur_icon.GetCmdInvoke() invoker := cur_icon.GetCmdInvoke()
if invoker != nil { if invoker != nil {
invoker.Run(self.Screen) invoker.Run(self.Screen)