From 52364924b74dbd43521f7fcc941e6b6fc0dbc14c Mon Sep 17 00:00:00 2001 From: cuu Date: Fri, 21 Dec 2018 21:31:38 +0800 Subject: [PATCH] add ButtonsLayout --- .../10_Settings/Airplane/plugin_init.go | 3 - .../ButtonsLayout/buttons_layout_page.go | 376 ++++++++++++++++++ .../10_Settings/ButtonsLayout/plugin_init.go | 39 ++ Menu/GameShell/10_Settings/Settings.go | 3 + 4 files changed, 418 insertions(+), 3 deletions(-) create mode 100644 Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go create mode 100644 Menu/GameShell/10_Settings/ButtonsLayout/plugin_init.go diff --git a/Menu/GameShell/10_Settings/Airplane/plugin_init.go b/Menu/GameShell/10_Settings/Airplane/plugin_init.go index 600a2d1..d21da00 100644 --- a/Menu/GameShell/10_Settings/Airplane/plugin_init.go +++ b/Menu/GameShell/10_Settings/Airplane/plugin_init.go @@ -1,8 +1,5 @@ package Airplane -/* - * sysgo.BackLight - */ import ( /* "github.com/veandco/go-sdl2/ttf" diff --git a/Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go b/Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go new file mode 100644 index 0000000..1ae3d44 --- /dev/null +++ b/Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go @@ -0,0 +1,376 @@ +package ButtonsLayout + +import ( + "fmt" + "io/ioutil" + "os/exec" + //"path/filepath" + "strings" + + "github.com/veandco/go-sdl2/ttf" + + + //"github.com/cuu/gogame/draw" + "github.com/cuu/gogame/rect" + "github.com/cuu/gogame/surface" + "github.com/cuu/gogame/color" + "github.com/cuu/gogame/event" + //"github.com/cuu/gogame/time" + + //"github.com/cuu/LauncherGoDev/sysgo" + + "github.com/cuu/LauncherGoDev/sysgo/UI" + +) + +type UpdateConfirmPage struct { + UI.ConfirmPage + + RetroArchConf string + + LayoutMode string + +} + +func NewUpdateConfirmPage() *UpdateConfirmPage { + + p := &UpdateConfirmPage{} + + p.ListFont = UI.MyLangManager.TrFont("veramono20") + + p.FootMsg = [5]string{"Nav","","","Cancel","Yes"} + + p.ConfirmText = "Apply to RetroArch?" + p.RetroArchConf = "/home/cpi/.config/retroarch/retroarch.cfg" + p.LayoutMode = "Unknown" + + return p +} + +func (self *UpdateConfirmPage) ModifyRetroArchConf( keys []string ) string { + + if UI.FileExists(self.RetroArchConf) { + + confarr,err := UI.ReadLines(self.RetroArchConf) + var bka = false + var bkb = false + var bkx = false + var bky = false + + if err == nil { + for i,ln := range confarr { + parts := strings.Split(ln,"=") + if len(parts) < 1 { + fmt.Println("retroarch.cfg cannot parse.") + return "retroarch.cfg cannot parse." + } + lnk := strings.Trim(parts[0],"\r\n ") + if lnk == "input_player1_a" { + confarr[i] = "input_player1_a = \"" + keys[0] + "\"\n" + bka=true + } + if lnk == "input_player1_b" { + confarr[i] = "input_player1_b = \"" + keys[1] + "\"\n" + bkb = true + } + if lnk == "input_player1_x" { + confarr[i] = "input_player1_x = \"" + keys[2] + "\"\n" + bkx = true + } + + if lnk == "input_player1_y" { + confarr[i] = "input_player1_y = \"" + keys[3] + "\"\n" + bky = true + } + } + + if bka == false || bkb == false || bkx == false || bky == false { + fmt.Println("retroarch.cfg validation error.") + return "retroarch.cfg validation error." + } + } + + err = UI.WriteLines(confarr,self.RetroArchConf) + if err != nil { + fmt.Println(err) + return "retroarch.cfg cannot write." + } + + } + + fmt.Println( "Completed! Your RA keymap: " + strings.ToUpper(self.LayoutMode) ) + return "Completed! Your RA keymap: " + strings.ToUpper(self.LayoutMode) +} + +func (self *UpdateConfirmPage) finalizeWithDialog(msg string) { + self.Screen.MsgBox.SetText(msg) + self.Screen.MsgBox.Draw() + self.Screen.SwapAndShow() + return +} + +func (self *UpdateConfirmPage) KeyDown(ev *event.Event) { + + if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] { + self.ReturnToUpLevelPage() + self.Screen.Draw() + self.Screen.SwapAndShow() + } + + if ev.Data["Key"] == UI.CurKeys["B"] { + + keymap := []string{"j","k","u","i"} + + if self.LayoutMode == "xbox" { + + keymap = []string{"j","k","u","i"} + + }else if self.LayoutMode == "snes" { + + keymap = []string{ "k","j","i","u" } + + }else { + self.finalizeWithDialog("Internal error.") + return + } + + fmt.Println( "mode: ",self.LayoutMode) + + if UI.IsAFile(self.RetroArchConf) == false { + self.finalizeWithDialog("retroarch.cfg was not found.") + return + } + + cpCmd := exec.Command("cp", "-rf", self.RetroArchConf,self.RetroArchConf+".blbak") + err := cpCmd.Run() + if err != nil { + fmt.Println(err) + self.finalizeWithDialog("Cannot create .blbak") + return + } + + self.finalizeWithDialog(self.ModifyRetroArchConf(keymap)) + return + } +} + +func (self *UpdateConfirmPage) OnReturnBackCb() { + self.ReturnToUpLevelPage() + self.Screen.Draw() + self.Screen.SwapAndShow() +} + +func (self *UpdateConfirmPage) Draw() { + self.ClearCanvas() + self.DrawBG() + for _,v := range self.MyList { + v.Draw() + } + + self.Reset() +} + +type ButtonsLayoutPage struct { + + UI.Page + ListFontObj *ttf.Font + BGwidth int + BGheight int + + DrawOnce bool + Scrolled int + Scroller *UI.ListScroller + ConfirmPage *UpdateConfirmPage + + dialog_index int + Icons map[string]UI.IconItemInterface + + ConfigFilename string +} + + +func NewButtonsLayoutPage() *ButtonsLayoutPage { + p := &ButtonsLayoutPage{} + p.PageIconMargin = 20 + p.SelectedIconTopOffset = 20 + p.EasingDur = 10 + + p.Align = UI.ALIGN["SLeft"] + + p.FootMsg = [5]string{"Nav","UpdateRetroArch","","Back","Toggle"} + p.Icons = make( map[string]UI.IconItemInterface ) + + p.BGwidth = UI.Width + p.BGheight = UI.Height - 24 -20 + + p.ConfigFilename = "sysgo/.buttonslayout" + + return p + +} + +func (self *ButtonsLayoutPage) Init() { + + if self.Screen != nil { + if self.Screen.CanvasHWND != nil && self.CanvasHWND == nil { + self.HWND = self.Screen.CanvasHWND + self.CanvasHWND = surface.Surface(self.Screen.Width,self.Screen.Height) + } + } + + self.PosX = self.Index*self.Screen.Width + self.Width = self.Screen.Width + self.Height = self.Screen.Height + + + DialogBoxs := UI.NewMultiIconItem() + DialogBoxs.ImgSurf = UI.MyIconPool.GetImgSurf("buttonslayout") + DialogBoxs.MyType = UI.ICON_TYPES["STAT"] + DialogBoxs.Parent = self + DialogBoxs.IconWidth = 300 + DialogBoxs.IconHeight = 150 + DialogBoxs.Adjust(0,0,134,372,0) + self.Icons["DialogBoxs"] = DialogBoxs + + self.Scroller = UI.NewListScroller() + self.Scroller.Parent = self + self.Scroller.PosX = self.Width - 10 + self.Scroller.PosY = 2 + self.Scroller.Init() + self.Scroller.SetCanvasHWND(self.HWND) + + + self.ConfirmPage = NewUpdateConfirmPage() + self.ConfirmPage.LayoutMode = self.GetButtonsLayoutMode() + self.ConfirmPage.Screen = self.Screen + self.ConfirmPage.Name = "Overwrite RA conf" + self.ConfirmPage.Init() + +} + +func (self *ButtonsLayoutPage) ScrollUp() { + dis := 10 + + if self.PosY < 0 { + self.PosY += dis + self.Scrolled += dis + } +} + +func (self *ButtonsLayoutPage) ScrollDown() { + dis := 10 + + if UI.Abs(self.Scrolled) < (self.BGheight - self.Height) / 2 + 0 { + self.PosY -= dis + self.Scrolled -=dis + } +} + + +func (self *ButtonsLayoutPage) GetButtonsLayoutMode() string { + lm := "xbox" + + lm_bytes,err := ioutil.ReadFile(self.ConfigFilename) + + if err == nil { + + for _,v := range []string{"xbox","snes"} { + if v == string(lm_bytes) { + lm = string(lm_bytes) + break + } + } + } + + return lm +} + +func (self *ButtonsLayoutPage) ToggleMode() { + + + if self.GetButtonsLayoutMode() == "xbox" { + d := []byte("snes") + err := ioutil.WriteFile(self.ConfigFilename,d,0644) + if err != nil { + fmt.Println(err) + } + + self.dialog_index = 1 + self.Screen.Draw() + self.Screen.SwapAndShow() + + }else { + d := []byte("xbox") + err := ioutil.WriteFile(self.ConfigFilename,d,0644) + if err != nil { + fmt.Println(err) + } + + self.dialog_index = 0 + self.Screen.Draw() + self.Screen.SwapAndShow() + + } +} + +func (self *ButtonsLayoutPage) OnLoadCb() { + + self.Scrolled = 0 + self.PosY = 0 + self.DrawOnce = false + + + if self.GetButtonsLayoutMode() == "xbox" { + self.dialog_index = 0 + }else { + self.dialog_index = 1 + } +} + +func (self *ButtonsLayoutPage) OnReturnBackCb() { + + self.ReturnToUpLevelPage() + self.Screen.Draw() + self.Screen.SwapAndShow() + +} + + +func (self *ButtonsLayoutPage) KeyDown(ev *event.Event) { + + if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] { + self.ReturnToUpLevelPage() + self.Screen.Draw() + self.Screen.SwapAndShow() + } + + if ev.Data["Key"] == UI.CurKeys["B"] { + self.ToggleMode() + } + + if ev.Data["Key"] == UI.CurKeys["X"] { + self.ConfirmPage.LayoutMode = self.GetButtonsLayoutMode() + self.Screen.PushPage(self.ConfirmPage) + self.Screen.Draw() + self.Screen.SwapAndShow() + } + +} + +func (self *ButtonsLayoutPage) Draw() { + + self.ClearCanvas() + + self.Icons["DialogBoxs"].NewCoord(0,30) + + self.Icons["DialogBoxs"].SetIconIndex(self.dialog_index) + self.Icons["DialogBoxs"].DrawTopLeft() + + if self.HWND != nil { + surface.Fill(self.HWND, &color.Color{255,255,255,255}) + rect_ := rect.Rect(self.PosX,self.PosY,self.Width,self.Height) + surface.Blit(self.HWND,self.CanvasHWND,&rect_,nil) + } +} + + diff --git a/Menu/GameShell/10_Settings/ButtonsLayout/plugin_init.go b/Menu/GameShell/10_Settings/ButtonsLayout/plugin_init.go new file mode 100644 index 0000000..9b1c01d --- /dev/null +++ b/Menu/GameShell/10_Settings/ButtonsLayout/plugin_init.go @@ -0,0 +1,39 @@ +package ButtonsLayout + +import ( +/* + "github.com/veandco/go-sdl2/ttf" + + "github.com/cuu/gogame/surface" + "github.com/cuu/gogame/event" + "github.com/cuu/gogame/rect" + "github.com/cuu/gogame/color" +*/ + "github.com/cuu/LauncherGoDev/sysgo/UI" + //"github.com/cuu/LauncherGoDev/sysgo/DBUS" +) + +/******************************************************************************/ +type ButtonsLayoutPlugin struct { + UI.Plugin + ButtonsLayoutPage *ButtonsLayoutPage +} + + +func (self *ButtonsLayoutPlugin) Init( main_screen *UI.MainScreen ) { + self.ButtonsLayoutPage = NewButtonsLayoutPage() + self.ButtonsLayoutPage.SetScreen( main_screen) + self.ButtonsLayoutPage.SetName("Buttons Layout") + self.ButtonsLayoutPage.Init() +} + +func (self *ButtonsLayoutPlugin) Run( main_screen *UI.MainScreen ) { + if main_screen != nil { + main_screen.PushCurPage() + main_screen.SetCurPage(self.ButtonsLayoutPage) + main_screen.Draw() + main_screen.SwapAndShow() + } +} + +var APIOBJ ButtonsLayoutPlugin diff --git a/Menu/GameShell/10_Settings/Settings.go b/Menu/GameShell/10_Settings/Settings.go index a75bb66..91ab865 100644 --- a/Menu/GameShell/10_Settings/Settings.go +++ b/Menu/GameShell/10_Settings/Settings.go @@ -27,6 +27,8 @@ import ( "github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings/PowerOFF" "github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings/PowerOptions" "github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings/Airplane" + "github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings/ButtonsLayout" + ) @@ -109,6 +111,7 @@ func (self *SettingsPage) GenList() []*UI.UIPlugin { &UI.UIPlugin{0,"", "Update", "Update", &Update.APIOBJ}, &UI.UIPlugin{0,"", "About", "About", &About.APIOBJ}, &UI.UIPlugin{0,"", "PowerOFF", "Power off", &PowerOFF.APIOBJ}, + &UI.UIPlugin{0,"", "ButtonsLayout", "Buttons Layout", &ButtonsLayout.APIOBJ}, &UI.UIPlugin{1,"", "LauncherPy", "Switch to Launcher", &LauncherPy.APIOBJ}, }