mirror of
https://github.com/clockworkpi/LauncherGoDev.git
synced 2025-12-12 07:58:51 +01:00
add ButtonsLayout
This commit is contained in:
parent
dac6b17fd3
commit
52364924b7
@ -1,8 +1,5 @@
|
||||
package Airplane
|
||||
|
||||
/*
|
||||
* sysgo.BackLight
|
||||
*/
|
||||
import (
|
||||
/*
|
||||
"github.com/veandco/go-sdl2/ttf"
|
||||
|
||||
376
Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go
Normal file
376
Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go
Normal file
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
39
Menu/GameShell/10_Settings/ButtonsLayout/plugin_init.go
Normal file
39
Menu/GameShell/10_Settings/ButtonsLayout/plugin_init.go
Normal file
@ -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
|
||||
@ -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},
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user