mirror of
https://github.com/clockworkpi/launcher.git
synced 2025-12-14 02:38:51 +01:00
Merge pull request #57 from 4k1/feature/forum#571_sync_ra_config
forum#571/Implemented to sync keymap for RetroArch
This commit is contained in:
commit
76b411388b
@ -1,7 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import pygame
|
import pygame
|
||||||
import commands
|
import commands
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
|
||||||
from libs.roundrects import aa_round_rect
|
from libs.roundrects import aa_round_rect
|
||||||
from UI.constants import Width,Height,ICON_TYPES
|
from UI.constants import Width,Height,ICON_TYPES
|
||||||
@ -15,9 +17,138 @@ from UI.icon_pool import MyIconPool
|
|||||||
from UI.icon_item import IconItem
|
from UI.icon_item import IconItem
|
||||||
from UI.multi_icon_item import MultiIconItem
|
from UI.multi_icon_item import MultiIconItem
|
||||||
from UI.multilabel import MultiLabel
|
from UI.multilabel import MultiLabel
|
||||||
|
from UI.confirm_page import ConfirmPage
|
||||||
|
|
||||||
|
class UpdateConfirmPage(ConfirmPage):
|
||||||
|
_ConfirmText = "Apply to RetroArch?"
|
||||||
|
_RetroArchConf = "/home/cpi/.config/retroarch/retroarch.cfg"
|
||||||
|
_LayoutMode = "Unknown"
|
||||||
|
|
||||||
|
_DownloadPage = None
|
||||||
|
|
||||||
|
_URL = ""
|
||||||
|
_MD5 = ""
|
||||||
|
_Version = ""
|
||||||
|
_GIT = False
|
||||||
|
|
||||||
|
def ModifyRetroArchConf(self,keys):
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(self._RetroArchConf, mode="r") as f:
|
||||||
|
confarr = f.readlines()
|
||||||
|
except:
|
||||||
|
return "retroarch.cfg cannot open."
|
||||||
|
|
||||||
|
bka = bkb = bkx = bky = False
|
||||||
|
try:
|
||||||
|
for i, ln in enumerate(confarr):
|
||||||
|
lnk = ln.split("=")[0].strip()
|
||||||
|
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
|
||||||
|
except:
|
||||||
|
return "retroarch.cfg cannot parse."
|
||||||
|
|
||||||
|
if bka and bkb and bkx and bky:
|
||||||
|
None
|
||||||
|
else:
|
||||||
|
return "retroarch.cfg validation error."
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(self._RetroArchConf, mode="w") as f:
|
||||||
|
confarr = f.writelines(confarr)
|
||||||
|
except:
|
||||||
|
return "retroarch.cfg cannot write."
|
||||||
|
|
||||||
|
return "Completed! Your RA keymap: " + self._LayoutMode.upper()
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
|
||||||
|
def finalizeWithDialog(msg):
|
||||||
|
self._Screen._MsgBox.SetText(msg)
|
||||||
|
self._Screen._MsgBox.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
return
|
||||||
|
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["B"]:
|
||||||
|
|
||||||
|
if self._LayoutMode == "xbox":
|
||||||
|
keymap = ["j","k","u","i"]
|
||||||
|
elif self._LayoutMode == "snes":
|
||||||
|
keymap = ["k","j","i","u"]
|
||||||
|
else:
|
||||||
|
return "Internal error."
|
||||||
|
print("mode: " + self._LayoutMode)
|
||||||
|
|
||||||
|
if not os.path.isfile(self._RetroArchConf):
|
||||||
|
finalizeWithDialog("retroarch.cfg was not found.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
shutil.copyfile(self._RetroArchConf, self._RetroArchConf + ".blbak")
|
||||||
|
except:
|
||||||
|
finalizeWithDialog("Cannot create .blbak")
|
||||||
|
return
|
||||||
|
|
||||||
|
finalizeWithDialog(self.ModifyRetroArchConf(keymap))
|
||||||
|
return
|
||||||
|
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
return
|
||||||
|
if self._GIT == True:
|
||||||
|
cmdpath = "feh --bg-center /home/cpi/apps/launcher/sys.py/gameshell/wallpaper/updating.png; cd /home/cpi/apps/launcher ;git pull; git reset --hard %s ; feh --bg-center /home/cpi/apps/launcher/sys.py/gameshell/wallpaper/loading.png " % self._Version
|
||||||
|
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
|
||||||
|
self._GIT = False
|
||||||
|
return
|
||||||
|
|
||||||
|
if self._DownloadPage == None:
|
||||||
|
self._DownloadPage = UpdateDownloadPage()
|
||||||
|
self._DownloadPage._Screen = self._Screen
|
||||||
|
self._DownloadPage._Name = "Downloading..."
|
||||||
|
self._DownloadPage.Init()
|
||||||
|
|
||||||
|
self._DownloadPage._MD5 = self._MD5
|
||||||
|
self._Screen.PushPage(self._DownloadPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if self._URL != None and validators.url(self._URL):
|
||||||
|
self._DownloadPage.StartDownload(self._URL, "/tmp")
|
||||||
|
else:
|
||||||
|
print "error url %s " % self._URL
|
||||||
|
|
||||||
|
|
||||||
|
def OnReturnBackCb(self):
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.DrawBG()
|
||||||
|
for i in self._MyList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
self.Reset()
|
||||||
|
|
||||||
class ButtonsLayoutPage(Page):
|
class ButtonsLayoutPage(Page):
|
||||||
_FootMsg = ["Nav.","","","Back","Toggle"]
|
_FootMsg = ["Nav.","UpdateRetroArch","","Back","Toggle"]
|
||||||
_MyList = []
|
_MyList = []
|
||||||
_ListFontObj = fonts["varela13"]
|
_ListFontObj = fonts["varela13"]
|
||||||
|
|
||||||
@ -30,6 +161,7 @@ class ButtonsLayoutPage(Page):
|
|||||||
|
|
||||||
_DrawOnce = False
|
_DrawOnce = False
|
||||||
_Scroller = None
|
_Scroller = None
|
||||||
|
_ConfirmPage = None
|
||||||
|
|
||||||
_EasingDur = 30
|
_EasingDur = 30
|
||||||
|
|
||||||
@ -72,6 +204,14 @@ class ButtonsLayoutPage(Page):
|
|||||||
self._Scroller.Init()
|
self._Scroller.Init()
|
||||||
self._Scroller.SetCanvasHWND(self._HWND)
|
self._Scroller.SetCanvasHWND(self._HWND)
|
||||||
|
|
||||||
|
self._ConfirmPage = UpdateConfirmPage()
|
||||||
|
self._ConfirmPage._LayoutMode = self.GetButtonsLayoutMode()
|
||||||
|
self._ConfirmPage._Screen = self._Screen
|
||||||
|
self._ConfirmPage._Name = "Overwrite RA conf"
|
||||||
|
self._ConfirmPage._Parent = self
|
||||||
|
self._ConfirmPage.Init()
|
||||||
|
|
||||||
|
|
||||||
def ScrollDown(self):
|
def ScrollDown(self):
|
||||||
dis = 10
|
dis = 10
|
||||||
if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 0:
|
if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 0:
|
||||||
@ -137,6 +277,12 @@ class ButtonsLayoutPage(Page):
|
|||||||
|
|
||||||
if event.key == CurKeys["B"]:
|
if event.key == CurKeys["B"]:
|
||||||
self.ToggleMode()
|
self.ToggleMode()
|
||||||
|
|
||||||
|
if event.key == CurKeys["X"]:
|
||||||
|
self._ConfirmPage._LayoutMode = self.GetButtonsLayoutMode()
|
||||||
|
self._Screen.PushPage(self._ConfirmPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
def Draw(self):
|
def Draw(self):
|
||||||
self.ClearCanvas()
|
self.ClearCanvas()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user