mirror of
https://github.com/clockworkpi/LauncherGoDev.git
synced 2025-12-12 16:08:52 +01:00
add ButtonsLayout
This commit is contained in:
parent
dac6b17fd3
commit
52364924b7
@ -1,8 +1,5 @@
|
|||||||
package Airplane
|
package Airplane
|
||||||
|
|
||||||
/*
|
|
||||||
* sysgo.BackLight
|
|
||||||
*/
|
|
||||||
import (
|
import (
|
||||||
/*
|
/*
|
||||||
"github.com/veandco/go-sdl2/ttf"
|
"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/PowerOFF"
|
||||||
"github.com/cuu/LauncherGoDev/Menu/GameShell/10_Settings/PowerOptions"
|
"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/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,"", "Update", "Update", &Update.APIOBJ},
|
||||||
&UI.UIPlugin{0,"", "About", "About", &About.APIOBJ},
|
&UI.UIPlugin{0,"", "About", "About", &About.APIOBJ},
|
||||||
&UI.UIPlugin{0,"", "PowerOFF", "Power off", &PowerOFF.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},
|
&UI.UIPlugin{1,"", "LauncherPy", "Switch to Launcher", &LauncherPy.APIOBJ},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user