├── .cpirc ├── .gitignore ├── .gitmodules ├── .twm ├── Bach ├── Escher ├── Linux64 ├── am ├── amule ├── close ├── ff ├── fullsize ├── iconify ├── moose ├── mozilla ├── resize ├── torrent ├── tv └── xlogo32 ├── .twmrc ├── .xinitrc ├── .xorg.conf ├── .xorg_lima.conf ├── LICENSE ├── Menu └── GameShell │ ├── 10_Settings │ ├── About │ │ └── __init__.py │ ├── Airplane │ │ └── __init__.py │ ├── Bluetooth │ │ ├── __init__.py │ │ ├── agent.py │ │ └── net_item.py │ ├── Brightness │ │ ├── __init__.py │ │ ├── brightness_page.py │ │ ├── myvars.py │ │ └── pages.py │ ├── ButtonsLayout │ │ └── __init__.py │ ├── Cores │ │ └── __init__.py │ ├── GateWay │ │ └── __init__.py │ ├── Languages │ │ └── __init__.py │ ├── LauncherGo │ │ └── __init__.py │ ├── Lima │ │ └── __init__.py │ ├── Notification │ │ └── __init__.py │ ├── PowerOFF │ │ └── __init__.py │ ├── PowerOptions │ │ └── __init__.py │ ├── Skins │ │ └── __init__.py │ ├── Sound │ │ ├── __init__.py │ │ ├── myvars.py │ │ ├── pages.py │ │ └── sound_page.py │ ├── Storage │ │ └── __init__.py │ ├── Time │ │ ├── __init__.py │ │ ├── list_item.py │ │ ├── logger.py │ │ ├── myvars.py │ │ ├── pages.py │ │ └── timezone_lib_list_page.py │ ├── Update │ │ └── __init__.py │ ├── Wifi │ │ ├── __init__.py │ │ ├── myvars.py │ │ ├── net_item.py │ │ ├── pages.py │ │ └── wifi_list.py │ ├── __init__.py │ ├── list_item.py │ ├── list_page.py │ ├── myvars.py │ └── pages.py │ ├── 21_Warehouse │ └── __init__.py │ ├── 30_RetroArch.sh │ ├── 31_CaveStory.sh │ ├── 32_ChocoDM │ └── action.config │ ├── 50_PICO-8 │ ├── PICO-8.sh │ ├── Post-Up.sh │ ├── compkginfo.json │ └── pico-8 │ │ ├── config.txt │ │ ├── log.txt │ │ └── sdl_controllers.txt │ ├── 90_Reload UI.sh │ ├── 97_Music Player │ ├── __init__.py │ ├── list_item.py │ ├── mpd_spectrum_page.py │ ├── music_lib_list_page.py │ ├── myvars.py │ ├── pages.py │ └── play_list_page.py │ ├── 98_TinyCloud │ └── __init__.py │ └── 99_PowerOFF │ └── __init__.py ├── README.md ├── aria2.conf ├── aria2c ├── awesome ├── rc.lua └── themes │ └── default │ ├── README │ ├── background.png │ ├── background_white.png │ ├── layouts │ ├── cornerne.png │ ├── cornernew.png │ ├── cornernw.png │ ├── cornernww.png │ ├── cornerse.png │ ├── cornersew.png │ ├── cornersw.png │ ├── cornersww.png │ ├── dwindle.png │ ├── dwindlew.png │ ├── fairh.png │ ├── fairhw.png │ ├── fairv.png │ ├── fairvw.png │ ├── floating.png │ ├── floatingw.png │ ├── fullscreen.png │ ├── fullscreenw.png │ ├── magnifier.png │ ├── magnifierw.png │ ├── max.png │ ├── maxw.png │ ├── spiral.png │ ├── spiralw.png │ ├── tile.png │ ├── tilebottom.png │ ├── tilebottomw.png │ ├── tileleft.png │ ├── tileleftw.png │ ├── tiletop.png │ ├── tiletopw.png │ └── tilew.png │ ├── submenu.png │ ├── taglist │ ├── squarefw.png │ └── squarew.png │ ├── theme.lua │ └── titlebar │ ├── close_focus.png │ ├── close_normal.png │ ├── floating_focus_active.png │ ├── floating_focus_inactive.png │ ├── floating_normal_active.png │ ├── floating_normal_inactive.png │ ├── maximized_focus_active.png │ ├── maximized_focus_inactive.png │ ├── maximized_normal_active.png │ ├── maximized_normal_inactive.png │ ├── minimize_focus.png │ ├── minimize_normal.png │ ├── ontop_focus_active.png │ ├── ontop_focus_inactive.png │ ├── ontop_normal_active.png │ ├── ontop_normal_inactive.png │ ├── sticky_focus_active.png │ ├── sticky_focus_inactive.png │ ├── sticky_normal_active.png │ └── sticky_normal_inactive.png ├── bluetooth_firmware.sh ├── dwm-mod ├── launcher.sublime-project ├── load.sh ├── requirements.txt ├── skin └── default │ ├── Menu │ └── GameShell │ │ ├── 20_Retro Games │ │ ├── Coleco.png │ │ ├── Fuse.png │ │ ├── GGEAR.png │ │ ├── GPSP.png │ │ ├── LYNX.png │ │ ├── MAME.png │ │ ├── MGBA.png │ │ ├── NESTOPIA.png │ │ ├── Pcsx+.png │ │ ├── PicoDrive+.png │ │ ├── PocketSNES+.png │ │ ├── SFC9X.png │ │ ├── UAE+.png │ │ ├── gpSP+.png │ │ └── mupen64+.png │ │ ├── 21_Indie Games │ │ ├── 2048.png │ │ ├── Hurrican.png │ │ ├── No.909.png │ │ ├── NyanCat.png │ │ └── Planet-Busters.png │ │ ├── CaveStory.png │ │ ├── ChocoDM.png │ │ ├── Indie Games.png │ │ ├── Love2D.png │ │ ├── Music Player.png │ │ ├── PICO-8.png │ │ ├── PowerOFF.png │ │ ├── Reload UI.png │ │ ├── Retro Games.png │ │ ├── RetroArch.png │ │ ├── Settings.png │ │ ├── Sleep.png │ │ ├── TIC-80.png │ │ ├── TinyCloud.png │ │ ├── Utils.png │ │ ├── Warehouse.png │ │ └── freeDM.png │ ├── sys.py │ └── gameshell │ │ ├── blank.png │ │ ├── footbar_icons │ │ └── footbar.png │ │ ├── icons │ │ ├── DialogBoxs.png │ │ ├── GS.png │ │ ├── _L.png │ │ ├── _R.png │ │ ├── about_bg.png │ │ ├── add.png │ │ ├── airwire.png │ │ ├── app.png │ │ ├── appdling.png │ │ ├── blackheart.png │ │ ├── blueselector.png │ │ ├── buttonslayout.png │ │ ├── done.png │ │ ├── empty.png │ │ ├── heart.png │ │ ├── icon_sd.png │ │ ├── light.png │ │ ├── lock.png │ │ ├── needwifi_bg.png │ │ ├── online.png │ │ ├── pico8_md5_err.png │ │ ├── pico8_notfound.png │ │ ├── rom_download.png │ │ ├── roundcorners.png │ │ ├── scale.png │ │ ├── sheep_bg.png │ │ ├── sheep_body.png │ │ ├── sheep_head.png │ │ ├── star.png │ │ ├── sys.png │ │ ├── tape.png │ │ ├── vol.png │ │ └── ware.png │ │ └── titlebar_icons │ │ ├── battery_unknown.png │ │ ├── bluetooth.png │ │ ├── dlstatus18.png │ │ ├── soundvolume.png │ │ ├── wifi.png │ │ ├── withcharging.png │ │ └── without_charging.png │ └── truetype │ ├── NotoSansCJK-Regular.ttf │ ├── NotoSansMono-Regular.ttf │ ├── VarelaRound-Regular.ttf │ └── VeraMono.ttf ├── sys.py ├── UI │ ├── CommercialSoftwarePackage │ │ └── __init__.py │ ├── Emulator │ │ ├── __init__.py │ │ ├── fav_list_page.py │ │ ├── list_item.py │ │ ├── rom_list_page.py │ │ └── rom_so_confirm_page.py │ ├── __init__.py │ ├── above_all_patch.py │ ├── confirm_page.py │ ├── constants.py │ ├── counter_screen.py │ ├── createby_clockworkpi.py │ ├── createby_screen.py │ ├── delete_confirm_page.py │ ├── download.py │ ├── download_process_page.py │ ├── foot_bar.py │ ├── full_screen.py │ ├── icon_item.py │ ├── icon_pool.py │ ├── info_page_list_item.py │ ├── info_page_selector.py │ ├── keyboard.py │ ├── keyboard_keys.layout │ ├── keys_def.py │ ├── label.py │ ├── lang_manager.py │ ├── main_screen.py │ ├── multi_icon_item.py │ ├── multilabel.py │ ├── page.py │ ├── scroller.py │ ├── simple_name_space.py │ ├── skin_manager.py │ ├── slider.py │ ├── text_bulletinboard.py │ ├── text_item.py │ ├── textarea.py │ ├── title_bar.py │ ├── untitled_icon.py │ ├── util_funcs.py │ ├── widget.py │ └── yes_cancel_confirm_page.py ├── appinstaller.py ├── config.py ├── gameshell │ └── wallpaper │ │ ├── desktopbg.jpg │ │ ├── gameover.png │ │ ├── loading.png │ │ ├── seeyou.png │ │ └── updating.png ├── gsnotify │ ├── Jobs │ │ ├── .gitkeep │ │ ├── 00_lowpower.alias │ │ └── 00_lowpower.sh │ ├── gsnotify-arm │ └── md5sum ├── langs │ ├── 00_English.ini │ ├── 01_日本語.ini │ ├── 02_한국어.ini │ ├── 03_简体中文.ini │ ├── 04_繁体中文.ini │ ├── 05_Spanish.ini │ ├── 06_French.ini │ ├── 07_Deutsch.ini │ ├── 08_Bulgarian.ini │ └── 09_Russian.ini ├── libs │ ├── DBUS │ │ └── __init__.py │ ├── MPD │ │ ├── __init__.py │ │ └── poller.py │ ├── __init__.py │ ├── bluezutils │ │ └── __init__.py │ ├── easing.py │ ├── roundrects │ │ ├── __init__.py │ │ └── roundrects.py │ └── websocket │ │ ├── __init__.py │ │ ├── _abnf.py │ │ ├── _app.py │ │ ├── _cookiejar.py │ │ ├── _core.py │ │ ├── _exceptions.py │ │ ├── _handshake.py │ │ ├── _http.py │ │ ├── _logging.py │ │ ├── _socket.py │ │ ├── _ssl_compat.py │ │ ├── _url.py │ │ └── _utils.py ├── patches │ └── mame2003_plus_libretro.so.zip │ │ └── Run.sh └── run.py └── update.sh /.cpirc: -------------------------------------------------------------------------------- 1 | SCREEN=`cat /sys/class/graphics/fb0/modes` 2 | 3 | XORG_CONF="~/launcher/.xorg.conf" 4 | if [ -f /home/cpi/.lima ] 5 | then 6 | XORG_CONF="~/launcher/.xorg_lima.conf" 7 | fi 8 | 9 | if [ -f /tmp/autologin ] 10 | then 11 | rm -f /tmp/autologin 12 | mpd ~/.mpd.conf 13 | if [[ $SCREEN =~ .*320.* ]] 14 | then 15 | while : 16 | do 17 | startx /home/cpi/launcher/.xinitrc -- -xf86config $XORG_CONF -nocursor > /tmp/x.log 2>&1 18 | sleep 1 19 | done 20 | else 21 | while : 22 | do 23 | startx /home/cpi/launcher/.xinitrc hdmi -- -xf86config $XORG_CONF > /tmp/x.log 2>&1 24 | sleep 1 25 | done 26 | fi 27 | fi 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | retroarch-core-options.cfg 2 | *.lpl 3 | *.swp 4 | .bsv 5 | *.pyc 6 | sys.py/.powerlevel 7 | sys.py/.buttonslayout 8 | sys.py/.lang 9 | *.cfg 10 | **/Jobs/* 11 | !**/Jobs/.gitkeep 12 | !**/Jobs/00_lowpower.sh 13 | !**/Jobs/00_lowpower.alias 14 | .done 15 | bios 16 | bios/* 17 | screenshots 18 | screenshots/* 19 | .pcsx 20 | .pcsx/* 21 | *.log 22 | .DS_Store 23 | sys.py/.* 24 | sys.py/*.db 25 | launcher.sublime-workspace 26 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "sys.py/pyaria2_rpc"] 2 | path = sys.py/pyaria2_rpc 3 | url = https://github.com/cuu/pyaria2_rpc.git 4 | -------------------------------------------------------------------------------- /.twm/Bach: -------------------------------------------------------------------------------- 1 | #define Bach_width 51 2 | #define Bach_height 60 3 | static unsigned char Bach_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfe, 6 | 0xf3, 0x07, 0x00, 0xf8, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00, 0xf8, 0x00, 7 | 0xe0, 0xff, 0xff, 0x3f, 0x00, 0xf8, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00, 8 | 0xf8, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0xf8, 0xff, 0xff, 9 | 0xff, 0x01, 0xf8, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x01, 0xf8, 0x00, 0xfe, 10 | 0xff, 0xff, 0xff, 0x03, 0xf8, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x07, 0xf8, 11 | 0x00, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf8, 0x80, 0xff, 0xff, 0xff, 0xbf, 12 | 0x07, 0xf8, 0x80, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0xf8, 0x80, 0xff, 0xff, 13 | 0xff, 0x3f, 0x0f, 0xf8, 0xc0, 0xff, 0xff, 0xff, 0x3f, 0x06, 0xf8, 0xc0, 14 | 0xff, 0xff, 0xff, 0x3f, 0x0e, 0xf8, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0x1e, 15 | 0xf8, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0x1c, 0xf8, 0xc0, 0xff, 0xff, 0xff, 16 | 0x7f, 0x3c, 0xf8, 0xc0, 0xff, 0xff, 0xff, 0x1f, 0x3c, 0xf8, 0xc0, 0xff, 17 | 0xff, 0xf8, 0x0f, 0x38, 0xf8, 0xc0, 0xff, 0xff, 0xc7, 0x23, 0x38, 0xf8, 18 | 0xe0, 0xff, 0xff, 0xc3, 0x01, 0x38, 0xf8, 0xe0, 0xff, 0xff, 0xf9, 0x03, 19 | 0x38, 0xf8, 0xe0, 0xff, 0xff, 0xff, 0x3b, 0x18, 0xf8, 0xc0, 0xff, 0xfb, 20 | 0xff, 0x33, 0x00, 0xf8, 0xc0, 0xff, 0xff, 0xff, 0xf7, 0x30, 0xf8, 0xe0, 21 | 0xff, 0xfd, 0xff, 0xe7, 0x00, 0xf8, 0xe0, 0xff, 0xfd, 0xff, 0x6f, 0x30, 22 | 0xf8, 0xc0, 0xff, 0xfc, 0xff, 0x67, 0x00, 0xf8, 0x80, 0xff, 0xfc, 0x7f, 23 | 0xc0, 0x00, 0xf8, 0xc0, 0xff, 0xf8, 0xff, 0x41, 0x00, 0xf8, 0xc0, 0xff, 24 | 0xf8, 0xff, 0x03, 0x00, 0xf8, 0x80, 0x7c, 0xf8, 0xff, 0x07, 0x00, 0xf8, 25 | 0x00, 0x7e, 0xf8, 0xff, 0x43, 0x00, 0xf8, 0x00, 0x7e, 0xf8, 0x0f, 0x00, 26 | 0x00, 0xf8, 0x00, 0x37, 0xf0, 0xff, 0x07, 0x00, 0xf8, 0x00, 0x63, 0xf0, 27 | 0xff, 0x01, 0x00, 0xf8, 0x00, 0x27, 0xf0, 0xff, 0x07, 0x00, 0xf8, 0x00, 28 | 0x06, 0xe0, 0xff, 0x0f, 0x00, 0xf8, 0x00, 0x02, 0x40, 0xff, 0x0f, 0x00, 29 | 0xf8, 0x00, 0x00, 0x90, 0xf1, 0x07, 0x00, 0xf8, 0x00, 0x00, 0x30, 0xff, 30 | 0x01, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x7e, 0x00, 0x00, 0xf8, 0x00, 0x00, 31 | 0xf0, 0x7b, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf8, 32 | 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xe0, 0xff, 0x01, 33 | 0x00, 0xf8, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0xf8, 0x00, 0x00, 0xc0, 34 | 0xff, 0x0f, 0x00, 0xf8, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00, 0xf8, 0x00, 35 | 0x00, 0x80, 0xff, 0x03, 0x00, 0xf8, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 36 | 0xf8, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7f, 37 | 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0xf8, 0x00, 0x00, 38 | 0x00, 0x1f, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0xf8}; 39 | -------------------------------------------------------------------------------- /.twm/Linux64: -------------------------------------------------------------------------------- 1 | #define Linux64_width 64 2 | #define Linux64_height 64 3 | static unsigned char Linux64_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 7 | 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 8 | 0x00, 0x00, 0xf8, 0x1f, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 9 | 0xc0, 0xff, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xfe, 0x01, 0x00, 10 | 0x00, 0xc0, 0x1f, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 11 | 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xc0, 0x1f, 0x00, 12 | 0x00, 0xf8, 0x01, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0xfc, 0x01, 0x00, 13 | 0x00, 0x80, 0x7f, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 14 | 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 15 | 0x00, 0x00, 0xfe, 0x01, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 16 | 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xc0, 0x7f, 0x00, 0x00, 17 | 0x00, 0x00, 0xfc, 0x07, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 18 | 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0xe0, 0x3f, 0x00, 0x00, 19 | 0x00, 0x00, 0xf8, 0x0f, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 20 | 0xf0, 0x3f, 0x00, 0x00, 0xe0, 0x01, 0xf0, 0x1f, 0xf0, 0x3f, 0xe0, 0x00, 21 | 0xf8, 0x01, 0xf0, 0x1f, 0xf0, 0x3f, 0xf0, 0x01, 0xfc, 0x03, 0xf0, 0x1f, 22 | 0xf0, 0x3f, 0xf8, 0x03, 0xfe, 0x03, 0xf0, 0x1f, 0xf8, 0x7f, 0x18, 0x07, 23 | 0x0f, 0x07, 0xf0, 0x3f, 0xf8, 0x7f, 0x08, 0x07, 0x47, 0x0e, 0xf0, 0x3f, 24 | 0xf8, 0x7f, 0x08, 0x06, 0x07, 0x0e, 0xf0, 0x3f, 0xf8, 0x7f, 0x88, 0x06, 25 | 0x07, 0x0e, 0xf0, 0x3f, 0xf8, 0x7f, 0x08, 0x06, 0x06, 0x0e, 0xf0, 0x3f, 26 | 0xf8, 0x7f, 0x08, 0xfe, 0x04, 0x0e, 0xf0, 0x3f, 0xf8, 0x7f, 0x18, 0x7c, 27 | 0x06, 0x0e, 0xf0, 0x3f, 0xf8, 0xff, 0x30, 0xff, 0x9f, 0x07, 0xf0, 0x3f, 28 | 0xf8, 0xff, 0x90, 0xff, 0x7f, 0x03, 0xf0, 0x3f, 0xf0, 0xff, 0xc0, 0xff, 29 | 0xff, 0x03, 0xe0, 0x1f, 0xf0, 0xff, 0xc0, 0xff, 0xff, 0x07, 0xe0, 0x1f, 30 | 0xf0, 0xff, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0x1f, 0xf0, 0xff, 0xe0, 0xff, 31 | 0x7f, 0x06, 0xe0, 0x1f, 0xe0, 0xff, 0xe0, 0xff, 0x9f, 0x07, 0xe0, 0x0f, 32 | 0xe0, 0xff, 0xe0, 0xff, 0xcf, 0x07, 0xc0, 0x0f, 0xe0, 0xff, 0xc1, 0xff, 33 | 0xf3, 0x01, 0xc0, 0x0f, 0xc0, 0xff, 0x01, 0x7f, 0x7c, 0x0c, 0xc0, 0x07, 34 | 0xc0, 0xff, 0x19, 0x80, 0x9f, 0x0f, 0x80, 0x07, 0x80, 0xff, 0x39, 0xfc, 35 | 0xc7, 0x0f, 0x00, 0x03, 0x80, 0xff, 0x78, 0x78, 0xf0, 0x1f, 0x00, 0x03, 36 | 0x00, 0x7f, 0xf8, 0x00, 0xf8, 0x1f, 0x80, 0x01, 0x00, 0x3e, 0xf8, 0x03, 37 | 0xfe, 0x3f, 0x80, 0x01, 0x00, 0x3e, 0xf8, 0xff, 0xff, 0x3f, 0xc0, 0x00, 38 | 0x00, 0x1c, 0xf8, 0xff, 0xff, 0x7f, 0x60, 0x00, 0x00, 0x18, 0xfc, 0xff, 39 | 0xff, 0x7f, 0x30, 0x00, 0x00, 0x30, 0xfc, 0xff, 0xff, 0xff, 0x18, 0x00, 40 | 0x00, 0x60, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0xc0, 0xff, 0xff, 41 | 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 42 | 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 43 | 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 44 | 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 45 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 46 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 47 | -------------------------------------------------------------------------------- /.twm/am: -------------------------------------------------------------------------------- 1 | #define am_width 32 2 | #define am_height 32 3 | static unsigned char am_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 6 | 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x7f, 0x1f, 0x00, 0x7c, 7 | 0x63, 0x3f, 0x00, 0x7e, 0x63, 0x7f, 0x00, 0x7f, 0x63, 0xff, 0x80, 0x7f, 8 | 0x63, 0xff, 0xc1, 0x7f, 0x00, 0xff, 0xe3, 0x7f, 0x00, 0xff, 0xf7, 0x7f, 9 | 0x00, 0xef, 0xff, 0x7b, 0x00, 0xcf, 0xff, 0x79, 0x00, 0x8f, 0xff, 0x78, 10 | 0x00, 0x0f, 0x7f, 0x78, 0x00, 0x0f, 0x3e, 0x78, 0x00, 0x0f, 0x1c, 0x78, 11 | 0x00, 0x0f, 0x08, 0x78, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x0f, 0x00, 0x78, 12 | 0x00, 0x0f, 0x00, 0x78, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x0f, 0x00, 0x78, 13 | 0x00, 0x0e, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 15 | -------------------------------------------------------------------------------- /.twm/amule: -------------------------------------------------------------------------------- 1 | #define Untitled_width 57 2 | #define Untitled_height 73 3 | static unsigned char Untitled_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 9 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 10 | 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf0, 11 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 12 | 0x00, 0x1f, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0xf8, 13 | 0x03, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 14 | 0x00, 0xfc, 0x01, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 15 | 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x4f, 0xfe, 0x03, 0x00, 0x00, 0x00, 16 | 0x00, 0xf8, 0xdf, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x9f, 0xff, 17 | 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 18 | 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 19 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 21 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x9f, 23 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x1f, 0x03, 0x00, 0x00, 0x00, 24 | 0x00, 0x00, 0x8e, 0x0f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 25 | 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3f, 0x06, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0xc6, 0x7e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x3e, 27 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x1f, 0x0e, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x0e, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xff, 29 | 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 31 | 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 33 | 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 34 | 0x00, 0x80, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 35 | 0xff, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 36 | 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xc0, 0xff, 0xff, 0xff, 37 | 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 38 | 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 39 | 0xff, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 40 | 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 41 | 0xff, 0xff, 0x01, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x00, 42 | 0x00, 0x1f, 0xfe, 0xff, 0xff, 0x40, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 43 | 0xff, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 44 | 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0xff, 45 | 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 46 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0xff, 0xff, 47 | 0xff, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 48 | 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0x07, 0xff, 49 | 0xfb, 0xff, 0x7f, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 50 | 0xf0, 0x01, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 51 | 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 52 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 53 | -------------------------------------------------------------------------------- /.twm/close: -------------------------------------------------------------------------------- 1 | #define close_width 11 2 | #define close_height 11 3 | static unsigned char close_bits[] = { 4 | 0x00, 0x00, 0x06, 0x03, 0x8e, 0x03, 0xdc, 0x01, 0xf8, 0x00, 0x70, 0x00, 5 | 0xf8, 0x00, 0xdc, 0x01, 0x8e, 0x03, 0x06, 0x03, 0x00, 0x00}; 6 | -------------------------------------------------------------------------------- /.twm/ff: -------------------------------------------------------------------------------- 1 | #define ff_width 32 2 | #define ff_height 32 3 | static unsigned char ff_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 5 | 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, 6 | 0xe0, 0xff, 0x3f, 0x1f, 0xf0, 0xff, 0x3f, 0x03, 0xf0, 0xff, 0x3f, 0x1f, 7 | 0xf0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 8 | 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 9 | 0xf0, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x0f, 0x00, 10 | 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 11 | 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 12 | 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 13 | 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 15 | -------------------------------------------------------------------------------- /.twm/fullsize: -------------------------------------------------------------------------------- 1 | #define fullsize_width 11 2 | #define fullsize_height 11 3 | static unsigned char fullsize_bits[] = { 4 | 0x00, 0x00, 0xfc, 0x01, 0xfe, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 5 | 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xfc, 0x01, 0x00, 0x00}; 6 | -------------------------------------------------------------------------------- /.twm/iconify: -------------------------------------------------------------------------------- 1 | #define icon_width 11 2 | #define icon_height 11 3 | static unsigned char icon_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x02, 0x02, 0x02, 0x02, 5 | 0xfe, 0x03, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 6 | -------------------------------------------------------------------------------- /.twm/moose: -------------------------------------------------------------------------------- 1 | #define moose_width 45 2 | #define moose_height 49 3 | static unsigned char moose_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 7 | 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 8 | 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 9 | 0x00, 0x1f, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x0f, 0x00, 0x00, 10 | 0x00, 0x07, 0xf1, 0x03, 0x00, 0x00, 0x00, 0x87, 0x71, 0x00, 0x00, 0x00, 11 | 0x00, 0xb7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x57, 0x70, 0x00, 0x00, 0x00, 12 | 0x00, 0xe7, 0x71, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x71, 0x00, 0x00, 0x00, 13 | 0x00, 0x3f, 0x78, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 14 | 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0x00, 15 | 0xf8, 0xff, 0xf1, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0xf0, 0x51, 0x00, 0x00, 16 | 0xbe, 0x3f, 0xe0, 0xff, 0x03, 0x00, 0x3e, 0x3f, 0xc0, 0xff, 0x07, 0x00, 17 | 0x1e, 0x3d, 0xc0, 0xff, 0x0f, 0x00, 0x9e, 0x3c, 0xc0, 0xff, 0x1f, 0x08, 18 | 0x5e, 0x3e, 0xc0, 0xff, 0xff, 0x07, 0x7c, 0x3e, 0xe0, 0xff, 0xff, 0x01, 19 | 0xf8, 0x3f, 0xf0, 0xff, 0x7f, 0x00, 0xf0, 0x1f, 0xf8, 0xff, 0x3f, 0x00, 20 | 0xe0, 0x0f, 0xff, 0xff, 0x3f, 0x00, 0x80, 0x87, 0xff, 0xff, 0x1f, 0x00, 21 | 0x00, 0xc0, 0xe3, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xfb, 0xff, 0x1f, 0x00, 22 | 0x00, 0xc0, 0x7d, 0xf8, 0x0f, 0x00, 0x00, 0xe0, 0x3c, 0xf8, 0x07, 0x00, 23 | 0x00, 0xf8, 0x0c, 0xf8, 0x07, 0x00, 0x00, 0xfc, 0x1c, 0x98, 0x03, 0x00, 24 | 0x00, 0xdc, 0x1c, 0x98, 0x03, 0x00, 0x00, 0xf8, 0x3c, 0x38, 0x07, 0x00, 25 | 0x00, 0x70, 0x3c, 0x78, 0x1f, 0x00, 0x00, 0x00, 0x6c, 0xf8, 0xfe, 0x00, 26 | 0x00, 0x00, 0x6e, 0xf0, 0xfd, 0x00, 0x00, 0x00, 0x3e, 0xb0, 0xfb, 0x00, 27 | 0x00, 0x00, 0x0c, 0xe0, 0x79, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 29 | -------------------------------------------------------------------------------- /.twm/mozilla: -------------------------------------------------------------------------------- 1 | #define mozilla_width 32 2 | #define mozilla_height 32 3 | static unsigned char mozilla_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x02, 0xf0, 0xff, 0x7f, 5 | 0x01, 0xe2, 0xff, 0xff, 0xd9, 0xc4, 0xff, 0xff, 0xd9, 0x88, 0xff, 0xff, 6 | 0x5b, 0x16, 0xff, 0xff, 0x2f, 0x76, 0xfc, 0xff, 0x4f, 0xe4, 0xe0, 0xff, 7 | 0x19, 0xff, 0x87, 0xff, 0x31, 0xf8, 0x1f, 0xfe, 0xe3, 0xff, 0x7f, 0xf8, 8 | 0x83, 0xff, 0xff, 0xe1, 0x07, 0xff, 0xff, 0xc7, 0x0d, 0xfe, 0xff, 0x87, 9 | 0x0d, 0xfc, 0xff, 0x83, 0x09, 0xf0, 0xff, 0x81, 0x01, 0xe0, 0xff, 0x81, 10 | 0x01, 0xc0, 0xff, 0x93, 0x01, 0x00, 0xff, 0xb3, 0x01, 0x00, 0xfc, 0xbf, 11 | 0x01, 0x20, 0xe0, 0xbf, 0x03, 0x00, 0x00, 0x9c, 0x07, 0x00, 0x04, 0x80, 12 | 0x1f, 0x00, 0x18, 0x80, 0xff, 0x03, 0x40, 0xc1, 0xff, 0x3b, 0x00, 0xc0, 13 | 0x3f, 0xe0, 0x03, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x1c, 0xf8, 14 | 0x02, 0x80, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0x3f}; 15 | -------------------------------------------------------------------------------- /.twm/resize: -------------------------------------------------------------------------------- 1 | #define resize_width 11 2 | #define resize_height 11 3 | static unsigned char resize_bits[] = { 4 | 0x00, 0x00, 0xfc, 0x00, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 5 | 0x02, 0x03, 0x02, 0x03, 0xfc, 0x03, 0xf8, 0x01, 0x00, 0x00}; 6 | -------------------------------------------------------------------------------- /.twm/torrent: -------------------------------------------------------------------------------- 1 | #define torrent_width 48 2 | #define torrent_height 48 3 | static unsigned char torrent_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 10 | 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x0f, 11 | 0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x0f, 12 | 0x80, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 13 | 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 15 | 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 16 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 17 | 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 19 | 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 20 | 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 21 | 0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 22 | 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 23 | 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 24 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 25 | 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 28 | -------------------------------------------------------------------------------- /.twm/tv: -------------------------------------------------------------------------------- 1 | #define Untitled_width 32 2 | #define Untitled_height 32 3 | static unsigned char Untitled_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 5 | 0x00, 0x36, 0x3e, 0x00, 0x00, 0x32, 0x33, 0x00, 0x00, 0x26, 0x1b, 0x00, 6 | 0x00, 0x6c, 0x19, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 7 | 0x80, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0x01, 0xe0, 0x07, 8 | 0xe0, 0x00, 0xc0, 0x07, 0xe0, 0x0c, 0xc6, 0x07, 0xe0, 0x0c, 0xc6, 0x07, 9 | 0xe0, 0x00, 0xc0, 0x07, 0xe0, 0x00, 0xc0, 0x07, 0xe0, 0x00, 0xc0, 0x07, 10 | 0xe0, 0xf0, 0xc3, 0x07, 0xe0, 0xe0, 0xc1, 0x07, 0xe0, 0x00, 0x20, 0x06, 11 | 0xe0, 0x01, 0x20, 0x06, 0xe0, 0xff, 0x3f, 0x06, 0xe0, 0xff, 0xff, 0x07, 12 | 0xc0, 0xff, 0xff, 0x03, 0x80, 0xff, 0xff, 0x00, 0x00, 0x03, 0x20, 0x00, 13 | 0x00, 0x03, 0x60, 0x00, 0x80, 0x03, 0x60, 0x00, 0x00, 0x01, 0xc0, 0x00, 14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 15 | -------------------------------------------------------------------------------- /.twm/xlogo32: -------------------------------------------------------------------------------- 1 | #define xlogo32_width 32 2 | #define xlogo32_height 32 3 | static unsigned char xlogo32_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0xfc, 0x03, 0x00, 0x20, 0xf8, 0x07, 0x00, 0x30, 0xf8, 0x07, 0x00, 0x18, 6 | 0xf0, 0x0f, 0x00, 0x0c, 0xe0, 0x1f, 0x00, 0x06, 0xc0, 0x3f, 0x00, 0x06, 7 | 0xc0, 0x3f, 0x00, 0x03, 0x80, 0x7f, 0x80, 0x01, 0x00, 0xff, 0xc0, 0x00, 8 | 0x00, 0xfe, 0x61, 0x00, 0x00, 0xfe, 0x31, 0x00, 0x00, 0xfc, 0x33, 0x00, 9 | 0x00, 0xf8, 0x1b, 0x00, 0x00, 0xf0, 0x0d, 0x00, 0x00, 0xf0, 0x0e, 0x00, 10 | 0x00, 0x60, 0x1f, 0x00, 0x00, 0xb0, 0x3f, 0x00, 0x00, 0x98, 0x7f, 0x00, 11 | 0x00, 0x98, 0x7f, 0x00, 0x00, 0x0c, 0xff, 0x00, 0x00, 0x06, 0xfe, 0x01, 12 | 0x00, 0x03, 0xfc, 0x03, 0x80, 0x01, 0xfc, 0x03, 0xc0, 0x00, 0xf8, 0x07, 13 | 0xc0, 0x00, 0xf0, 0x0f, 0x60, 0x00, 0xe0, 0x1f, 0x30, 0x00, 0xe0, 0x1f, 14 | 0x18, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00}; 15 | -------------------------------------------------------------------------------- /.twmrc: -------------------------------------------------------------------------------- 1 | #--------------------------------- 2 | # CPI # PROJ. : twmrc 3 | # # FILE : .twmrc 4 | # + # VER. : 20170828.0718UTC 5 | # + # EMAIL : hal@clockworkpi.com 6 | # +++ # HOST : clockworkpi.com 7 | #--------------------------------- 8 | 9 | NoGrabServer 10 | RestartPreviousState 11 | DecorateTransients 12 | RandomPlacement 13 | BorderWidth 1 14 | NoHighlight 15 | OpaqueMove 16 | MenuBorderWidth 1 17 | NoMenuShadows 18 | 19 | NoDefaults 20 | LeftTitleButton "~/launcher/.twm/close" = f.delete 21 | RightTitleButton "~/launcher/.twm/iconify" = f.iconify 22 | RightTitleButton "~/launcher/.twm/resize" = f.resize 23 | RightTitleButton "~/launcher/.twm/fullsize" = f.fullzoom 24 | 25 | TitleFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*" 26 | ResizeFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*" 27 | MenuFont "-misc-fixed-medium-r-semicondensed-*-*-120-*-*-c-*-iso8859-8" 28 | IconFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*" 29 | IconManagerFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*" 30 | 31 | Color 32 | { 33 | BorderColor "grey30" 34 | DefaultBackground "rgb:5/5/5" 35 | DefaultForeground "gray80" 36 | TitleBackground "rgb:5/5/5" 37 | TitleForeground "gray80" 38 | MenuBackground "rgb:5/5/5" 39 | MenuForeground "gray80" 40 | MenuTitleBackground "gray80" 41 | MenuTitleForeground "rgb:5/5/5" 42 | MenuBorderColor "gray60" 43 | IconBackground "rgb:4/4/4" 44 | IconForeground "gray80" 45 | IconBorderColor "gray70" 46 | IconManagerBackground "rgb:5/5/5" 47 | IconManagerForeground "gray80" 48 | } 49 | 50 | Cursors 51 | { 52 | Menu "hand2" 53 | } 54 | 55 | ForceIcons 56 | Icons 57 | { 58 | "Chrome" "~/launcher/.twm/chrome.xbm" 59 | "xterm" "~/launcher/.twm/xlogo32" 60 | } 61 | 62 | 63 | MoveDelta 3 64 | Function "move-or-lower" { f.move f.deltastop f.lower } 65 | Function "move-or-raise" { f.move f.deltastop f.raise } 66 | Function "move-or-iconify" { f.move f.deltastop f.iconify } 67 | 68 | 69 | Button1 = : root : f.menu "main" 70 | Button3 = : root : f.menu "exec" 71 | Button1 = m : window|icon : f.function "move-or-raise" 72 | Button2 = m : window|icon : f.iconify 73 | Button3 = m : window|icon : f.resize 74 | Button1 = : title : f.function "move-or-raise" 75 | Button2 = : title : f.raiselower 76 | Button1 = : icon : f.function "move-or-iconify" 77 | Button2 = : icon : f.iconify 78 | Button1 = : iconmgr : f.iconify 79 | Button2 = : iconmgr : f.iconify 80 | 81 | 82 | NoTitle 83 | { 84 | "gkrellm" 85 | } 86 | 87 | 88 | menu "main" 89 | { 90 | "CLOCKWORKPI" f.title 91 | "Raise" f.raise 92 | "Lower" f.lower 93 | "Focus" f.focus 94 | "Unfocus" f.unfocus 95 | "-------------" f.nop 96 | "Show Iconmgr" f.showiconmgr 97 | "Hide Iconmgr" f.hideiconmgr 98 | "Kill" f.destroy 99 | "-------------" f.nop 100 | "Restart" f.restart 101 | "Exit" ("gray80":"#773333") f.menu "exit" 102 | } 103 | 104 | menu "exit" 105 | { 106 | "Are you sure ?" ("gray80":"#773333") f.title 107 | "No" f.nop 108 | "Yes" f.quit 109 | } 110 | 111 | menu "exec" 112 | { 113 | ":: Applications ::" f.title 114 | "Xterm" ("gray80":"#334455") f.exec "exec /usr/bin/xterm &" 115 | "Xterm Orange" ("gray80":"#aa5522") f.exec "exec /usr/bin/xterm -fg '#dc8700' &" 116 | "Xmag" f.exec "exec /usr/bin/xmag &" 117 | "Gkrellm" f.exec "/usr/bin/gkrellm &" 118 | "XClock" f.exec "exec /usr/bin/xclock &" 119 | "XFig" f.exec "exec /usr/bin/xfig -nosplash &" 120 | "Wicd client" f.exec "exec /usr/bin/wicd-client -n &" 121 | "xpdf" f.exec "exec /usr/bin/xpdf &" 122 | } 123 | 124 | WindowRing 125 | { 126 | "xterm" 127 | "xpdf" 128 | } 129 | 130 | "r" = m | c: all : f.exec "exec /usr/bin/xterm -fg '#dc8700' &" 131 | "s" = m | c: all : f.exec "exec /usr/bin/alsamixergui &" 132 | "t" = m | c: all : f.exec "exec /usr/bin/xterm +sb &" 133 | "w" = m | c: all : f.exec "exec /usr/bin/wicd-client -n &" 134 | 135 | "i" = m | s: all : f.iconify 136 | "x" = m | s: all : f.delete 137 | 138 | "F12" = m : all : f.fullzoom 139 | "Tab" = m : all : f.warpring "next" 140 | 141 | -------------------------------------------------------------------------------- /.xinitrc: -------------------------------------------------------------------------------- 1 | session=${1:-gameshell} 2 | 3 | case $session in 4 | hdmi ) 5 | exec aria2c --conf-path=/home/cpi/launcher/aria2.conf & 6 | feh --bg-center ~/launcher/sys.py/gameshell/wallpaper/desktopbg.jpg 7 | cd ~/launcher/sys.py/ ; python appinstaller.py > /tmp/appinstaller.log & cd ~/ 8 | exec ~/launcher/load.sh & 9 | exec ~/launcher/sys.py/gsnotify/gsnotify-arm daemon & 10 | #exec /usr/bin/twm -f ~/launcher/.twmrc 11 | exec ~/launcher/dwm-mod 12 | ;; 13 | gameshell ) 14 | exec aria2c --conf-path=/home/cpi/launcher/aria2.conf & 15 | feh --bg-center ~/launcher/sys.py/gameshell/wallpaper/loading.png 16 | cd ~/launcher/sys.py/ ; python appinstaller.py > /tmp/appinstaller.log & cd ~/ 17 | exec ~/launcher/load.sh & 18 | exec ~/launcher/sys.py/gsnotify/gsnotify-arm & 19 | #exec awesome -c ~/launcher/awesome/rc.lua 20 | exec ~/launcher/dwm-mod -w 21 | ;; 22 | *) 23 | exec $1;; 24 | esac 25 | 26 | -------------------------------------------------------------------------------- /.xorg.conf: -------------------------------------------------------------------------------- 1 | Section "Device" 2 | Identifier "Allwinner A10/A13 FBDEV" 3 | Driver "fbturbo" 4 | Option "fbdev" "/dev/fb0" 5 | 6 | Option "SwapbuffersWait" "true" 7 | EndSection 8 | -------------------------------------------------------------------------------- /.xorg_lima.conf: -------------------------------------------------------------------------------- 1 | Section "Device" 2 | Identifier "Allwinner A10/A13 FBDEV" 3 | Driver "modesetting" 4 | Option "fbdev" "/dev/fb0" 5 | 6 | Option "SwapbuffersWait" "true" 7 | EndSection 8 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Brightness/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ## local UI import 4 | import pages 5 | import myvars 6 | 7 | def Init(main_screen): 8 | pages.InitBrightnessPage(main_screen) 9 | 10 | def API(main_screen): 11 | 12 | if main_screen !=None: 13 | main_screen.PushCurPage() 14 | main_screen.SetCurPage(myvars.BrightnessPage) 15 | main_screen.Draw() 16 | main_screen.SwapAndShow() 17 | 18 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Brightness/myvars.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import sys 5 | 6 | SoundPage = None 7 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Brightness/pages.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from brightness_page import BrightnessPage 4 | 5 | import myvars 6 | 7 | def InitBrightnessPage(main_screen): 8 | 9 | myvars.BrightnessPage = BrightnessPage() 10 | 11 | myvars.BrightnessPage._Screen = main_screen 12 | myvars.BrightnessPage._Name = "Brightness" 13 | myvars.BrightnessPage.Init() 14 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/LauncherGo/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import pygame 4 | #import math 5 | #mport subprocess 6 | #from beeprint import pp 7 | from libs.roundrects import aa_round_rect 8 | 9 | ## local UI import 10 | from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB 11 | from UI.util_funcs import ArmSystem 12 | from UI.lang_manager import MyLangManager 13 | from UI.confirm_page import ConfirmPage 14 | 15 | class SwitchToLauncherGoConfirmPage(ConfirmPage): 16 | 17 | def KeyDown(self,event): 18 | 19 | if IsKeyMenuOrB(event.key): 20 | self.ReturnToUpLevelPage() 21 | self._Screen.Draw() 22 | self._Screen.SwapAndShow() 23 | 24 | if IsKeyStartOrA(event.key): 25 | self._Screen._MsgBox.SetText("Rebooting to LauncherGo") 26 | self._Screen._MsgBox.Draw() 27 | self._Screen.SwapAndShow() 28 | pygame.time.delay(300) 29 | ArmSystem("sed -i s/launcher/launchergo/g ~/.bashrc" ) 30 | ArmSystem("sudo reboot") 31 | 32 | 33 | class APIOBJ(object): 34 | 35 | _Page = None 36 | 37 | def __init__(self): 38 | pass 39 | def Init(self,main_screen): 40 | self._Page = SwitchToLauncherGoConfirmPage() 41 | self._Page._Screen = main_screen 42 | self._Page._Name ="Switch To LauncherGo" 43 | self._Page.Init() 44 | 45 | def API(self,main_screen): 46 | if main_screen !=None: 47 | main_screen.PushPage(self._Page) 48 | main_screen.Draw() 49 | main_screen.SwapAndShow() 50 | 51 | OBJ = APIOBJ() 52 | def Init(main_screen): 53 | OBJ.Init(main_screen) 54 | def API(main_screen): 55 | OBJ.API(main_screen) 56 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/PowerOFF/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | #UI lib 6 | from UI.constants import RUNSYS 7 | from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB 8 | from UI.confirm_page import ConfirmPage 9 | from UI.lang_manager import MyLangManager 10 | from UI.skin_manager import MySkinManager 11 | 12 | import config 13 | 14 | class PowerOffConfirmPage(ConfirmPage): 15 | 16 | _ConfirmText = MyLangManager.Tr("Confirm Power OFF?") 17 | 18 | def CheckBattery(self): 19 | try: 20 | f = open(config.Battery) 21 | except IOError: 22 | print( "PowerOFF open %s failed" % config.Battery) 23 | return 0 24 | else: 25 | with f: 26 | bat_uevent = {} 27 | content = f.readlines() 28 | content = [x.strip() for x in content] 29 | for i in content: 30 | pis = i.split("=") 31 | if len(pis) > 1: 32 | bat_uevent[pis[0]] = pis[1] 33 | 34 | if "POWER_SUPPLY_CAPACITY" in bat_uevent: 35 | cur_cap = int(bat_uevent["POWER_SUPPLY_CAPACITY"]) 36 | else: 37 | cur_cap = 0 38 | 39 | return cur_cap 40 | 41 | return 0 42 | 43 | def KeyDown(self,event): 44 | 45 | if IsKeyMenuOrB(event.key): 46 | 47 | self.ReturnToUpLevelPage() 48 | self._Screen.Draw() 49 | self._Screen.SwapAndShow() 50 | 51 | if IsKeyStartOrA(event.key): 52 | if self.CheckBattery() < 20: 53 | cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("gameover.png") 54 | else: 55 | cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png") 56 | 57 | cmdpath += "sleep 3;" 58 | 59 | #cmdpath += "echo 'halt -p' > /tmp/halt_cmd" 60 | 61 | cmdpath += "sudo halt -p" 62 | pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) 63 | 64 | 65 | 66 | class APIOBJ(object): 67 | 68 | _StoragePage = None 69 | def __init__(self): 70 | pass 71 | def Init(self,main_screen): 72 | self._Page = PowerOffConfirmPage() 73 | 74 | self._Page._Screen = main_screen 75 | self._Page._Name ="Power OFF" 76 | self._Page.Init() 77 | 78 | 79 | def API(self,main_screen): 80 | if main_screen !=None: 81 | main_screen.PushPage(self._Page) 82 | main_screen.Draw() 83 | main_screen.SwapAndShow() 84 | 85 | OBJ = APIOBJ() 86 | def Init(main_screen): 87 | OBJ.Init(main_screen) 88 | def API(main_screen): 89 | OBJ.API(main_screen) 90 | 91 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Sound/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ## local UI import 4 | import pages 5 | import myvars 6 | 7 | def Init(main_screen): 8 | pages.InitSoundPage(main_screen) 9 | 10 | def API(main_screen): 11 | 12 | if main_screen !=None: 13 | main_screen.PushCurPage() 14 | main_screen.SetCurPage(myvars.SoundPage) 15 | main_screen.Draw() 16 | main_screen.SwapAndShow() 17 | 18 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Sound/myvars.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import sys 5 | 6 | SoundPage = None 7 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Sound/pages.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from sound_page import SoundPage 4 | 5 | import myvars 6 | 7 | def InitSoundPage(main_screen): 8 | 9 | myvars.SoundPage = SoundPage() 10 | 11 | myvars.SoundPage._Screen = main_screen 12 | myvars.SoundPage._Name = "Sound Volume" 13 | myvars.SoundPage.Init() 14 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Time/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | ## local UI import 6 | import pages 7 | import myvars 8 | 9 | def Init(main_screen): 10 | pages.InitTimezoneListPage(main_screen) 11 | 12 | def API(main_screen): 13 | if main_screen !=None: 14 | main_screen.PushCurPage() 15 | main_screen.SetCurPage(myvars.TimezoneListPage) 16 | main_screen.Draw() 17 | main_screen.SwapAndShow() 18 | 19 | 20 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Time/list_item.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from libs.roundrects import aa_round_rect 5 | 6 | ## local UI import 7 | from UI.constants import ICON_TYPES 8 | from UI.page import Page 9 | from UI.label import Label 10 | from UI.icon_item import IconItem 11 | from UI.util_funcs import midRect 12 | from UI.skin_manager import MySkinManager 13 | 14 | # a item for List 15 | # - - - - - - - - - - - -- 16 | # | Icon Text..... > | 17 | # ------------------------ 18 | 19 | import myvars # icons_path 20 | 21 | class ListItemIcon(IconItem): 22 | 23 | _CanvasHWND = None 24 | _Parent = None 25 | _Width = 18 26 | _Height = 18 27 | 28 | def Draw(self): 29 | self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height)) 30 | 31 | 32 | class ListItemLabel(Label): 33 | 34 | _ActiveColor = MySkinManager.GiveColor('Active') 35 | _Active = False 36 | def Draw(self): 37 | 38 | self._FontObj.set_bold(self._Active) 39 | 40 | my_text = self._FontObj.render( self._Text,True,self._Color) 41 | self._CanvasHWND.blit(my_text,(self._PosX,self._PosY,self._Width,self._Height)) 42 | 43 | 44 | class ListItem(object): 45 | _PosX = 0 46 | _PosY = 0 47 | _Width = 0 48 | _Height = 30 49 | 50 | _Labels = {} 51 | _Icons = {} 52 | _Fonts = {} 53 | _MyType = ICON_TYPES["EXE"] 54 | _LinkObj = None 55 | _Path = "" 56 | _Active = False 57 | _Parent = None 58 | 59 | _Text = "" 60 | def __init__(self): 61 | self._Labels = {} 62 | self._Icons = {} 63 | self._Fonts = {} 64 | 65 | 66 | def Init(self,text): 67 | 68 | self._Text = text 69 | 70 | l = ListItemLabel() 71 | l._PosX = 22 72 | l.SetCanvasHWND(self._Parent._CanvasHWND) 73 | 74 | if self._MyType == ICON_TYPES["DIR"]: 75 | l.Init(text,self._Fonts["normal"]) 76 | self._Path = text 77 | else: 78 | l.Init(text,self._Fonts["normal"]) 79 | self._Path = text 80 | 81 | 82 | self._Labels["Text"] = l 83 | 84 | 85 | def NewCoord(self,x,y): 86 | self._PosX = x 87 | self._PosY = y 88 | 89 | def Draw(self): 90 | 91 | if self._MyType == ICON_TYPES["DIR"] and self._Path != "[..]": 92 | self._Parent._Icons["sys"]._IconIndex = 0 93 | self._Parent._Icons["sys"].NewCoord(self._PosX+12,self._PosY+ (self._Height - self._Parent._Icons["sys"]._Height)/2+self._Parent._Icons["sys"]._Height/2) 94 | self._Parent._Icons["sys"].Draw() 95 | 96 | if self._MyType == ICON_TYPES["FILE"]: 97 | self._Parent._Icons["sys"]._IconIndex = 1 98 | self._Parent._Icons["sys"].NewCoord(self._PosX+12,self._PosY+ (self._Height - self._Parent._Icons["sys"]._Height)/2+self._Parent._Icons["sys"]._Height/2) 99 | self._Parent._Icons["sys"].Draw() 100 | 101 | if self._Active == True: 102 | self._Labels["Text"]._Active = True 103 | else: 104 | self._Labels["Text"]._Active = False 105 | 106 | 107 | self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2 108 | 109 | pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Line'),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1) 110 | 111 | self._Labels["Text"].Draw() 112 | 113 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Time/logger.py: -------------------------------------------------------------------------------- 1 | import logzero 2 | 3 | def get_logger(): 4 | # Set a custom formatter 5 | log_format = '%(color)s[%(levelname)1.1s ' \ 6 | '%(asctime)s.%(msecs)03d %(module)s:%(lineno)d]' \ 7 | '%(end_color)s %(message)s' 8 | formatter = logzero.LogFormatter(fmt=log_format) 9 | logzero.setup_default_logger(formatter=formatter) 10 | 11 | logzero.logfile( 12 | 'logzero.log', 13 | maxBytes=1e6, 14 | backupCount=3 15 | ) 16 | return logzero.logger -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Time/myvars.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | TimePage = None 4 | TimezoneListPage = None 5 | 6 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Time/pages.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from timezone_lib_list_page import TimezoneListPage 4 | import myvars 5 | 6 | def InitTimePage(main_screen): 7 | myvars.TimePage = None 8 | 9 | def InitTimezoneListPage(main_screen): 10 | myvars.TimezoneListPage = TimezoneListPage() 11 | myvars.TimezoneListPage._Screen = main_screen 12 | myvars.TimezoneListPage._Name = "Timezone Selection" 13 | myvars.TimezoneListPage.Init() 14 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Wifi/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ## local UI import 4 | import pages 5 | import myvars 6 | """ 7 | try: 8 | from icons import preload 9 | except: 10 | print("No icons package") 11 | """ 12 | 13 | def Init(main_screen): 14 | pages.InitPasswordPage(main_screen) 15 | pages.InitScanPage(main_screen) 16 | myvars.PasswordPage._Caller = myvars.ScanPage 17 | 18 | def API(main_screen): 19 | 20 | if main_screen != None: 21 | main_screen.PushCurPage() 22 | main_screen.SetCurPage(myvars.ScanPage) 23 | main_screen.Draw() 24 | main_screen.SwapAndShow() 25 | 26 | 27 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Wifi/myvars.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | ScanPage = None 5 | PasswordPage = None 6 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/Wifi/pages.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | #import dbus 5 | #import dbus.service 6 | #from wicd import misc 7 | ##misc.to_bool 8 | ##misc.misc.noneToString 9 | ##misc.to_unicode 10 | ##misc.Noneify 11 | #from wicd.translations import _ 12 | #from wicd import wpath 13 | #from wicd import dbusmanager 14 | 15 | 16 | ## local UI import 17 | from libs.DBUS import bus,daemon,wireless,wired 18 | 19 | from UI.keyboard import Keyboard 20 | from wifi_list import WifiList 21 | 22 | import myvars 23 | 24 | 25 | def InitScanPage(main_screen): 26 | global wireless 27 | global daemon 28 | global bus 29 | 30 | myvars.ScanPage = WifiList() 31 | myvars.ScanPage._Name = "Scan wifi" 32 | 33 | myvars.ScanPage._Wireless = wireless 34 | myvars.ScanPage._Daemon = daemon 35 | myvars.ScanPage._Dbus = bus 36 | 37 | 38 | myvars.ScanPage._Screen = main_screen 39 | myvars.ScanPage.Init() 40 | 41 | 42 | if daemon != None: 43 | #Bind signals 44 | myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusScanFinishedSig, 'SendEndScanSignal', 45 | 'org.wicd.daemon.wireless') 46 | myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusScanStarted, 'SendStartScanSignal', 47 | 'org.wicd.daemon.wireless') 48 | # 49 | myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusDaemonStatusChangedSig, 'StatusChanged', 50 | 'org.wicd.daemon') 51 | myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusConnectResultsSent, 'ConnectResultsSent', 52 | 'org.wicd.daemon') 53 | 54 | def InitPasswordPage(main_screen): 55 | 56 | myvars.PasswordPage = Keyboard() 57 | myvars.PasswordPage._Name = "Enter wifi password" 58 | 59 | myvars.PasswordPage._Screen = main_screen 60 | myvars.PasswordPage.Init() 61 | 62 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from pygame.locals import * 5 | from sys import exit 6 | import os 7 | import sys 8 | 9 | from datetime import datetime 10 | 11 | import base64 12 | from beeprint import pp 13 | 14 | 15 | ## local UI import 16 | import pages 17 | import myvars 18 | 19 | def Init(main_screen): 20 | pages.InitListPage(main_screen) 21 | 22 | def API(main_screen): 23 | 24 | if main_screen !=None: 25 | main_screen.PushCurPage() 26 | main_screen.SetCurPage(myvars.ListPage) 27 | main_screen.Draw() 28 | main_screen.SwapAndShow() 29 | 30 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/list_item.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | 6 | 7 | ## local UI import 8 | from UI.page import Page 9 | from UI.label import Label 10 | from UI.lang_manager import MyLangManager 11 | # a item for List 12 | # - - - - - - - - - - - -- 13 | # | Icon Text..... > | 14 | # ------------------------ 15 | 16 | import myvars # icons_path 17 | 18 | 19 | class ListItem(object): 20 | _PosX = 0 21 | _PosY = 0 22 | _Width = 0 23 | _Height = 30 24 | 25 | _Labels = {} 26 | _Icons = {} 27 | _Fonts = {} 28 | 29 | _LinkObj = None 30 | 31 | def __init__(self): 32 | self._Labels = {} 33 | self._Icons = {} 34 | self._Fonts = {} 35 | 36 | def Init(self,text): 37 | 38 | #self._Fonts["normal"] = fonts["veramono12"] 39 | 40 | l = Label() 41 | l._PosX = 16 42 | l.SetCanvasHWND(self._Parent._CanvasHWND) 43 | text = MyLangManager.Tr(text) 44 | l.Init(text,self._Fonts["normal"]) 45 | self._Labels["Text"] = l 46 | 47 | 48 | def Draw(self): 49 | 50 | self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2 51 | self._Labels["Text"].Draw() 52 | 53 | pygame.draw.line(self._Parent._CanvasHWND,(169,169,169),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1) 54 | 55 | 56 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/myvars.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from sys import exit 4 | import os 5 | import sys 6 | 7 | 8 | basepath = os.path.dirname(os.path.realpath(__file__)) 9 | 10 | icons_path = basepath+"/icons" 11 | 12 | ListPage = None 13 | -------------------------------------------------------------------------------- /Menu/GameShell/10_Settings/pages.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from list_page import ListPage 4 | 5 | import myvars 6 | 7 | def InitListPage(main_screen): 8 | 9 | myvars.ListPage = ListPage() 10 | 11 | myvars.ListPage._Screen = main_screen 12 | myvars.ListPage._Name = "Setting List" 13 | myvars.ListPage.Init() 14 | -------------------------------------------------------------------------------- /Menu/GameShell/30_RetroArch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | retroarch 3 | -------------------------------------------------------------------------------- /Menu/GameShell/31_CaveStory.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | retroarch -L /home/cpi/apps/emulators/nxengine_libretro.so /home/cpi/games/nxengine/cavestory/data 3 | -------------------------------------------------------------------------------- /Menu/GameShell/32_ChocoDM/action.config: -------------------------------------------------------------------------------- 1 | ROM=/home/cpi/games/ChocoDM 2 | ROM_SO= 3 | EXT=wad 4 | LAUNCHER=chocolate-doom -iwad 5 | TITLE=ChocoDM 6 | SO_URL= 7 | -------------------------------------------------------------------------------- /Menu/GameShell/50_PICO-8/PICO-8.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /home/cpi/games/PICO-8/pico-8 || exit 4 | SDL_VIDEODRIVER=x11 DISPLAY=:0 ./pico8_dyn -splore -draw_rect 32,0,256,240 5 | -------------------------------------------------------------------------------- /Menu/GameShell/50_PICO-8/Post-Up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir ~/.lexaloffle 4 | 5 | cp -rf pico-8 ~/.lexaloffle 6 | 7 | mkdir ~/.lexaloffle/pico-8/carts 8 | 9 | ln -s ~/.lexaloffle/pico-8/carts/ ~/games/PICO-8/carts 10 | 11 | touch .done 12 | -------------------------------------------------------------------------------- /Menu/GameShell/50_PICO-8/compkginfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "GameDir": "/home/cpi/games/PICO-8/", 3 | "InstallDir": "pico-8", 4 | "NotFoundMsg": [ 5 | "Please purchase the PICO-8 \n|None|varela16", 6 | "and copy it to the \"~/games/PICO-8\"|None|varela16" 7 | ], 8 | "MD5": { 9 | "pico-8_0.2.2_raspi.zip": "e2dba152bf507d337459e9316061411d", 10 | "pico-8_0.1.11g_raspi.zip": "a3f2995cf117499f880bd964d6a0e1f2", 11 | "pico-8_0.1.11g_amd64.zip": "6726141c784afd4a41be6b7414c1b932", 12 | "pico-8_0.1.12_raspi.zip": "08eda95570e63089a2b9f5531503431e", 13 | "pico-8_0.1.12c_raspi.zip": "1a62b0d7d4e4be65f89f23ec9757cb66", 14 | "pico-8_0.1.12c2_raspi.zip": "7a878795472fa39304e9a10128c1f712", 15 | "pico-8_0.2.0e_raspi.zip": "085edfecd111c2b195b878b2197afe7a", 16 | "pico-8.zip": "whatever it takes" 17 | }, 18 | "Post-Up": "bash Post-Up.sh" 19 | } 20 | -------------------------------------------------------------------------------- /Menu/GameShell/50_PICO-8/pico-8/config.txt: -------------------------------------------------------------------------------- 1 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 | // Configuration for pico-8 3 | // 4 | // config.txt is read on startup and saved on exit. 5 | // To generate the default config.txt, delete this file. 6 | // 7 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8 | 9 | 10 | // :: Video Settings 11 | 12 | window_size 0 0 // window width, height 13 | screen_size 0 0 // screen width, height (stretched to window) 14 | show_fps 0 // Draw frames per second in the corner 15 | 16 | 17 | // :: Window Settings 18 | 19 | windowed 0 // 1 to start up in windowed mode 20 | window_position -1 -1 // x and y position of window, or -1, -1 to let the window manager decide 21 | frameless 0 // 1 to use a window with no frame 22 | fullscreen_method 0 // 0 maximized window (linux) 1 borderless desktop-sized window 2 fullscreen 23 | 24 | 25 | // :: System Settings 26 | 27 | foreground_sleep_ms 1 // number of milliseconds to sleep each frame. Try 10 to conserve battery power 28 | 29 | background_sleep_ms 20 // number of milliseconds to sleep each frame when running in the background 30 | 31 | sessions 4 // number of times program has been run 32 | 33 | // (scancode) hold this key down and left-click to simulate right-click 34 | rmb_key 0 // 0 for none 226 for LALT 35 | 36 | // 0:off 1: ignore SDL_TEXTINPUT and use SDL_GetKeyboardState instead (mapped to a US layout) 37 | emulate_textinput 1 38 | 39 | // Desktop for saving screenshots etc. Defaults to $HOME/Desktop 40 | desktop_path 41 | 42 | 43 | 44 | // :: Audio Settings 45 | 46 | sound_volume 256 // 0..256 47 | music_volume 256 // 0..256 48 | mix_buffer_size 1024 // usually 1024. Try 2048 if you get choppy sound 49 | 50 | 51 | // :: 52 | 53 | version 0.1.11g 54 | 55 | 56 | // Location of pico-8's root folder 57 | root_path /home/cpi/.lexaloffle/pico-8/carts/ 58 | 59 | 60 | // Location of cartridge save data 61 | cdata_path /home/cpi/.lexaloffle/pico-8/cdata/ 62 | 63 | 64 | // Specify which player index joystick control begins at (0..7) 65 | joystick_index 0 66 | 67 | 68 | // Custom keyboard scancodes for buttons. player0 0..6, player1 0..5 69 | button_keys 0 0 0 0 13 14 0 0 0 0 0 0 0 70 | 71 | // Play notes as they are plotted in frequency mode 72 | live_notes 0 73 | 74 | // iff 1: when using keyboard cursor, snap to closest pixel / map cel 75 | cursor_snap 0 76 | 77 | // maximum length of gif in seconds (1..120, default 8) 78 | gif_len 8 79 | 80 | // 0 classic 1 dark blue background in code editor 81 | gui_theme 0 82 | 83 | // scale of screenshots and gifs // 2 means 256x256 84 | screenshot_scale 3 85 | gif_scale 2 86 | 87 | // when 1 can enter glyphs using shift-A..Z 88 | shift_glyphs 1 89 | 90 | // 0 for off. 1 to notify whenever unsaved changes are backed up 91 | show_backup_messages 1 92 | 93 | // 0 for off. 1 to allow control of a cart's framerate due to host machine's cpu capacity (recommended) 94 | host_framerate_control 1 95 | 96 | // filter splore content 97 | // 0 for no filter (18+) 1 medium (13+) 2 maximum (kid-friendly) 98 | content_filter 1 99 | 100 | -------------------------------------------------------------------------------- /Menu/GameShell/50_PICO-8/pico-8/log.txt: -------------------------------------------------------------------------------- 1 | codo_init 2 | platform: Linux 3 | Found config.txt 4 | 5 | 01 window_size 0 0 // window width, height 6 | 02 screen_size 0 0 // screen width, height (stretched to window) 7 | 03 show_fps 0 // Draw frames per second in the corner 8 | 04 windowed 0 // 1 to start up in windowed mode 9 | 05 window_position -1 -1 // x and y position of window, or -1, -1 to let the window manager decide 10 | new window position: -1, -1 11 | 06 frameless 0 // 1 to use a window with no frame 12 | 07 fullscreen_method 1 // 0 maximized window (linux) 1 borderless desktop-sized window 2 fullscreen 13 | 08 foreground_sleep_ms 1 // number of milliseconds to sleep each frame. Try 10 to conserve battery power 14 | 09 background_sleep_ms 20 // number of milliseconds to sleep each frame when running in the background 15 | 10 sessions 3 // number of times program has been run 16 | 11 rmb_key 0 // 0 for none 226 for LALT 17 | 12 emulate_textinput 1 18 | 13 desktop_path 19 | 14 sound_volume 256 // 0..256 20 | 15 music_volume 256 // 0..256 21 | 16 mix_buffer_size 1024 // usually 1024. Try 2048 if you get choppy sound 22 | 17 version 0.1.11g 23 | 18 root_path /home/cpi/.lexaloffle/pico-8/carts/ 24 | 19 cdata_path /home/cpi/.lexaloffle/pico-8/cdata/ 25 | 20 joystick_index 0 26 | 21 button_keys 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 22 live_notes 0 28 | 23 cursor_snap 0 29 | 24 gif_len 8 30 | 25 gui_theme 0 31 | 26 screenshot_scale 3 32 | 27 gif_scale 2 33 | 28 shift_glyphs 1 34 | 29 show_backup_messages 1 35 | 30 host_framerate_control 1 36 | 31 content_filter 1 37 | 38 | codo_system_init 39 | Compiled against SDL version: 2.0.7 40 | Linked against SDL version: 2.0.5 41 | Built-in video drivers: 0 x11 1 wayland 2 dummy 42 | Current video driver: x11 43 | Built-in render drivers: 44 | Renderer opengl: 45 | Flags: 0x0000000E ( | | ) 46 | Texture formats (1): ARGB8888 47 | Renderer opengles2: 48 | Flags: 0x0000000E ( | | ) 49 | Texture formats (4): ARGB8888, ABGR8888, RGB888, BGR888 50 | Renderer software: 51 | Flags: 0x00000009 ( | ) 52 | Texture formats (8): ARGB8888, ABGR8888, RGBA8888, BGRA8888, RGB888, BGR888, RGB565, RGB555 53 | codo_reset_timer 54 | codo_gui_init 55 | codo_keys_init 56 | codo_text_init 57 | codo_video_init 58 | codo_mouse_init 59 | codo_joystick_init 60 | Reading controller mappings: /home/cpi/.lexaloffle/pico-8/sdl_controllers.txt 61 | searching for joysticks 62 | found 0 joysticks 63 | ok 64 | ok 65 | codo_load_pod: /home/cpi/apps/Menu/50_PICO-8/pico8.dat ok 66 | codo_set_screen 128 128 8 100 67 | set pixel_perfect 1 68 | window size: 640 480 69 | codo_plat_pi: forcing fullscreen mode 70 | Current renderer: 71 | Renderer opengl: 72 | Flags: 0x0000000A ( | ) 73 | Texture formats (5): ARGB8888, YV12, IYUV, 0x3231564e, 0x3132564e 74 | Max Texture Size: 8192x8192 75 | codo_sound_init mix_buffer_size: 1024 76 | codo_sound_init 77 | SDL_INIT_AUDIO ok 78 | SDL_OpenAudio ok 79 | Built-in audio drivers: 0 pulseaudio 1 alsa 2 sndio 3 dsp 4 disk 5 dummy 80 | Current audio driver: alsa 81 | codo_exit 82 | cmusic_stop 83 | codo_main_exit 84 | codo_config_save 85 | codo_sound_exit 86 | codo_video_exit 87 | codo_joystick_exit 88 | codo_system_exit 89 | codo_items_created: 1023 90 | ok 91 | -------------------------------------------------------------------------------- /Menu/GameShell/50_PICO-8/pico-8/sdl_controllers.txt: -------------------------------------------------------------------------------- 1 | // add SDL2 game controller mappings to this file 2 | -------------------------------------------------------------------------------- /Menu/GameShell/90_Reload UI.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exit 0 4 | -------------------------------------------------------------------------------- /Menu/GameShell/97_Music Player/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | ## local UI import 6 | import pages 7 | import myvars 8 | 9 | def Init(main_screen): 10 | pages.InitPoller() 11 | 12 | pages.InitListPage(main_screen) 13 | pages.InitMusicLibPage(main_screen) 14 | pages.InitSpectrumPage(main_screen) 15 | 16 | def API(main_screen): 17 | 18 | if main_screen !=None: 19 | main_screen.PushCurPage() 20 | main_screen.SetCurPage(myvars.PlayListPage) 21 | main_screen.Draw() 22 | main_screen.SwapAndShow() 23 | 24 | 25 | -------------------------------------------------------------------------------- /Menu/GameShell/97_Music Player/myvars.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | Poller = None # MPD Poller 4 | PlayListPage = None 5 | MusicLibListPage = None 6 | 7 | SpectrumPage = None 8 | 9 | -------------------------------------------------------------------------------- /Menu/GameShell/97_Music Player/pages.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from libs.MPD import poller 4 | 5 | from play_list_page import PlayListPage 6 | from music_lib_list_page import MusicLibListPage 7 | from mpd_spectrum_page import MPDSpectrumPage 8 | import myvars 9 | 10 | from config import MPD_socket 11 | 12 | def InitPoller(): 13 | try: 14 | myvars.Poller = poller.MPDPoller(host=MPD_socket) 15 | myvars.Poller.connect() 16 | except: 17 | myvars.Poller = None 18 | 19 | 20 | def InitMusicLibPage(main_screen): 21 | myvars.MusicLibListPage = MusicLibListPage() 22 | myvars.MusicLibListPage._Screen = main_screen 23 | myvars.MusicLibListPage._Name = "Music Library" 24 | myvars.MusicLibListPage.Init() 25 | 26 | def InitListPage(main_screen): 27 | 28 | myvars.PlayListPage = PlayListPage() 29 | 30 | myvars.PlayListPage._Screen = main_screen 31 | myvars.PlayListPage._Name = "Play List" 32 | myvars.PlayListPage.Init() 33 | 34 | def InitSpectrumPage(main_screen): 35 | myvars.SpectrumPage = MPDSpectrumPage() 36 | myvars.SpectrumPage._Screen = main_screen 37 | myvars.SpectrumPage._Name = "GameShell RTA" 38 | myvars.SpectrumPage.Init() 39 | -------------------------------------------------------------------------------- /Menu/GameShell/99_PowerOFF/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | #UI lib 6 | from UI.constants import RUNSYS 7 | from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB 8 | from UI.confirm_page import ConfirmPage 9 | from UI.lang_manager import MyLangManager 10 | from UI.skin_manager import MySkinManager 11 | 12 | import config 13 | 14 | class PowerOffConfirmPage(ConfirmPage): 15 | 16 | _ConfirmText = MyLangManager.Tr("Awaiting Input") 17 | _FootMsg = ["Nav","","Reboot","Cancel","Shutdown"] 18 | 19 | def CheckBattery(self): 20 | try: 21 | f = open(config.Battery) 22 | except IOError: 23 | print( "PowerOFF open %s failed" % config.Battery) 24 | return 0 25 | else: 26 | with f: 27 | bat_uevent = {} 28 | content = f.readlines() 29 | content = [x.strip() for x in content] 30 | for i in content: 31 | pis = i.split("=") 32 | if len(pis) > 1: 33 | bat_uevent[pis[0]] = pis[1] 34 | 35 | if "POWER_SUPPLY_CAPACITY" in bat_uevent: 36 | cur_cap = int(bat_uevent["POWER_SUPPLY_CAPACITY"]) 37 | else: 38 | cur_cap = 0 39 | 40 | return cur_cap 41 | 42 | return 0 43 | 44 | def KeyDown(self,event): 45 | 46 | if IsKeyMenuOrB(event.key): 47 | self.ReturnToUpLevelPage() 48 | self._Screen.Draw() 49 | self._Screen.SwapAndShow() 50 | 51 | if IsKeyStartOrA(event.key): 52 | if self.CheckBattery() < 20: 53 | cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("gameover.png") 54 | else: 55 | cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png") 56 | 57 | cmdpath += "sleep 3;" 58 | 59 | #cmdpath += "echo 'halt -p' > /tmp/halt_cmd" 60 | 61 | cmdpath += "sudo halt -p" 62 | pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) 63 | 64 | if event.key == CurKeys["X"]: 65 | cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png") 66 | cmdpath += "sleep 3;" 67 | cmdpath += "sudo reboot" 68 | pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) 69 | 70 | 71 | class APIOBJ(object): 72 | 73 | _StoragePage = None 74 | def __init__(self): 75 | pass 76 | def Init(self,main_screen): 77 | self._Page = PowerOffConfirmPage() 78 | 79 | self._Page._Screen = main_screen 80 | self._Page._Name ="Power OFF" 81 | self._Page.Init() 82 | 83 | 84 | def API(self,main_screen): 85 | if main_screen !=None: 86 | main_screen.PushPage(self._Page) 87 | main_screen.Draw() 88 | main_screen.SwapAndShow() 89 | 90 | OBJ = APIOBJ() 91 | def Init(main_screen): 92 | OBJ.Init(main_screen) 93 | def API(main_screen): 94 | OBJ.API(main_screen) 95 | 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GameShell launcher 2 | This is the launcher for GameShell based on 320x240 resolution and D-Pad layout. 3 | ![Screenshot](https://github.com/clockworkpi/GameShellDocs/blob/master/screenshot.png) 4 | 5 | # Create the necessary user and group 6 | * User name: cpi 7 | * Password: cpi 8 | * Group ID: 31415 with group name: cpifav 9 | 10 | ``` 11 | sudo adduser cpi 12 | sudo groupadd cpifav -g 31415 13 | sudo adduser cpi cpifav 14 | ``` 15 | 16 | # Directory structure 17 | ``` 18 | /home/cpi/ 19 | ├── apps 20 | │   ├── emulators 21 | │   └── launcher <-Here we are 22 | │   ├── Menu 23 | │   ├── sys.py 24 | │   └── truetype 25 | ├── games 26 | │   ├── FreeDM 27 | │   ├── MAME 28 | │   └── nxengine 29 | └── music 30 | ``` 31 | ## Create the necessary directories 32 | ``` 33 | mkdir -p /home/cpi/apps/emulators 34 | mkdir -p /home/cpi/games 35 | mkdir -p /home/cpi/music 36 | ``` 37 | 38 | # Dependent packages 39 | * validators, numpy, requests, python-mpd2, beeprint, python-pycurl, python-alsaaudio, python-pygame, python-gobject, python-xlib, python-wicd 40 | * wicd (For Wi-Fi) 41 | * mpd (For music player) 42 | 43 | ## Install dependent packages 44 | ``` 45 | sudo apt-get -y install mpd ncmpcpp git libuser 46 | sudo apt-get -y install python-wicd wicd wicd-curses python-pycurl python-alsaaudio python-pygame python-gobject python-xlib 47 | 48 | sudo apt-get -y install python-pip 49 | sudo pip install validators numpy requests python-mpd2 beeprint 50 | ``` 51 | 52 | ### With pip install and virtualenv 53 | 54 | ``` 55 | mkvirtualenv launcher 56 | pip install -r requirements.txt 57 | ``` 58 | 59 | # Create “.mpd_cpi.conf” config 60 | 61 | vim ~/.mpd_cpi.conf 62 | 63 | ``` 64 | music_directory "/home/cpi/music" 65 | playlist_directory "/home/cpi/music/playlists" 66 | db_file "/home/cpi/music/tag_cache" 67 | log_file "/tmp/mpd.log" 68 | pid_file "/tmp/mpd.pid" 69 | state_file "/home/cpi/music/mpd_state" 70 | sticker_file "/home/cpi/music/sticker.sql" 71 | user "cpi" 72 | bind_to_address "/tmp/mpd.socket" 73 | auto_update "yes" 74 | auto_update_depth "3" 75 | input { 76 | plugin "curl" 77 | } 78 | 79 | audio_output { 80 | type "alsa" 81 | name "My ALSA Device" 82 | } 83 | 84 | audio_output { 85 | type "fifo" 86 | name "my_fifo" 87 | path "/tmp/mpd.fifo" 88 | format "44100:16:2" 89 | } 90 | 91 | filesystem_charset "UTF-8" 92 | ``` 93 | 94 | 95 | -------------------------------------------------------------------------------- /aria2.conf: -------------------------------------------------------------------------------- 1 | max-connection-per-server=5 2 | enable-rpc=true 3 | rpc-allow-origin-all=true 4 | rpc-listen-all=true 5 | log-level=error 6 | log=/tmp/aria.log 7 | dir=/home/cpi/aria2download 8 | daemon=true 9 | allow-overwrite=true 10 | split=1 11 | max-concurrent-downloads=100 12 | disk-cache=15M 13 | timeout=600 14 | retry-wait=30 15 | max-tries=50 16 | save-session-interval=10 17 | disable-ipv6=true 18 | save-session=/home/cpi/aria2download/aria.session.txt 19 | -------------------------------------------------------------------------------- /aria2c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/aria2c -------------------------------------------------------------------------------- /awesome/themes/default/README: -------------------------------------------------------------------------------- 1 | Background images: 2 | Mikael Eriksson 3 | Licensed under CC-BY-SA-3.0 4 | -------------------------------------------------------------------------------- /awesome/themes/default/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/background.png -------------------------------------------------------------------------------- /awesome/themes/default/background_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/background_white.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornerne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornerne.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornernew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornernew.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornernw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornernw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornernww.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornernww.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornerse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornerse.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornersew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornersew.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornersw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornersw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/cornersww.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/cornersww.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/dwindle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/dwindle.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/dwindlew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/dwindlew.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/fairh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/fairh.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/fairhw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/fairhw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/fairv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/fairv.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/fairvw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/fairvw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/floating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/floating.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/floatingw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/floatingw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/fullscreen.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/fullscreenw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/fullscreenw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/magnifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/magnifier.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/magnifierw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/magnifierw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/max.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/maxw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/maxw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/spiral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/spiral.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/spiralw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/spiralw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tile.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tilebottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tilebottom.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tilebottomw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tilebottomw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tileleft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tileleft.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tileleftw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tileleftw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tiletop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tiletop.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tiletopw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tiletopw.png -------------------------------------------------------------------------------- /awesome/themes/default/layouts/tilew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/layouts/tilew.png -------------------------------------------------------------------------------- /awesome/themes/default/submenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/submenu.png -------------------------------------------------------------------------------- /awesome/themes/default/taglist/squarefw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/taglist/squarefw.png -------------------------------------------------------------------------------- /awesome/themes/default/taglist/squarew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/taglist/squarew.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/close_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/close_focus.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/close_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/close_normal.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/floating_focus_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/floating_focus_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/floating_focus_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/floating_focus_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/floating_normal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/floating_normal_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/floating_normal_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/floating_normal_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/maximized_focus_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/maximized_focus_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/maximized_focus_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/maximized_focus_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/maximized_normal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/maximized_normal_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/maximized_normal_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/maximized_normal_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/minimize_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/minimize_focus.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/minimize_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/minimize_normal.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/ontop_focus_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/ontop_focus_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/ontop_focus_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/ontop_focus_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/ontop_normal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/ontop_normal_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/ontop_normal_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/ontop_normal_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/sticky_focus_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/sticky_focus_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/sticky_focus_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/sticky_focus_inactive.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/sticky_normal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/sticky_normal_active.png -------------------------------------------------------------------------------- /awesome/themes/default/titlebar/sticky_normal_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/awesome/themes/default/titlebar/sticky_normal_inactive.png -------------------------------------------------------------------------------- /bluetooth_firmware.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FIRM=$(cat /proc/driver/brcmf_fw) 4 | 5 | if [[ $FIRM =~ .*a0.* ]] 6 | then 7 | brcm_patchram_plus --patchram /lib/firmware/brcm/bcm43438a0.hcd --enable_hci --bd_addr B0:F1:EC:2D:07:5B --no2bytes --tosleep 5000 /dev/ttyS1 & 8 | else 9 | brcm_patchram_plus --patchram /lib/firmware/brcm/bcm43438a1.hcd --enable_hci --bd_addr B0:F1:EC:2D:07:5B --no2bytes --tosleep 5000 /dev/ttyS1 & 10 | fi 11 | -------------------------------------------------------------------------------- /dwm-mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/dwm-mod -------------------------------------------------------------------------------- /launcher.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "path": ".", 6 | "name": "GameShell launcher" 7 | } 8 | ], 9 | } 10 | -------------------------------------------------------------------------------- /load.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BASENAME=$(dirname "$0") 4 | 5 | cd "$BASENAME"/sys.py || exit 6 | 7 | python run.py 8 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pycurl 2 | pygame 3 | #gobject 4 | xlib 5 | pyalsaaudio 6 | dbus-python 7 | #wicd - not pip installable yet 8 | #beeprint - causes bugs 9 | validators 10 | python-mpd -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/Coleco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/Coleco.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/Fuse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/Fuse.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/GGEAR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/GGEAR.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/GPSP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/GPSP.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/LYNX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/LYNX.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/MAME.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/MAME.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/MGBA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/MGBA.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/NESTOPIA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/NESTOPIA.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/Pcsx+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/Pcsx+.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/PicoDrive+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/PicoDrive+.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/PocketSNES+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/PocketSNES+.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/SFC9X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/SFC9X.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/UAE+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/UAE+.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/gpSP+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/gpSP+.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/20_Retro Games/mupen64+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/20_Retro Games/mupen64+.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/21_Indie Games/2048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/21_Indie Games/2048.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/21_Indie Games/Hurrican.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/21_Indie Games/Hurrican.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/21_Indie Games/No.909.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/21_Indie Games/No.909.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/21_Indie Games/NyanCat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/21_Indie Games/NyanCat.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/21_Indie Games/Planet-Busters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/21_Indie Games/Planet-Busters.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/CaveStory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/CaveStory.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/ChocoDM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/ChocoDM.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Indie Games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Indie Games.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Love2D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Love2D.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Music Player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Music Player.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/PICO-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/PICO-8.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/PowerOFF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/PowerOFF.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Reload UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Reload UI.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Retro Games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Retro Games.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/RetroArch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/RetroArch.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Settings.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Sleep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Sleep.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/TIC-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/TIC-80.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/TinyCloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/TinyCloud.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Utils.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Utils.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/Warehouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/Warehouse.png -------------------------------------------------------------------------------- /skin/default/Menu/GameShell/freeDM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/Menu/GameShell/freeDM.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/blank.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/footbar_icons/footbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/footbar_icons/footbar.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/DialogBoxs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/DialogBoxs.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/GS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/GS.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/_L.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/_L.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/_R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/_R.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/about_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/about_bg.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/add.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/airwire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/airwire.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/app.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/appdling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/appdling.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/blackheart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/blackheart.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/blueselector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/blueselector.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/buttonslayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/buttonslayout.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/done.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/empty.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/heart.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/icon_sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/icon_sd.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/light.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/lock.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/needwifi_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/needwifi_bg.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/online.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/online.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/pico8_md5_err.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/pico8_md5_err.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/pico8_notfound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/pico8_notfound.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/rom_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/rom_download.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/roundcorners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/roundcorners.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/scale.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/sheep_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/sheep_bg.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/sheep_body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/sheep_body.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/sheep_head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/sheep_head.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/star.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/sys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/sys.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/tape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/tape.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/vol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/vol.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/icons/ware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/icons/ware.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/battery_unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/battery_unknown.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/bluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/bluetooth.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/dlstatus18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/dlstatus18.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/soundvolume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/soundvolume.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/wifi.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/withcharging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/withcharging.png -------------------------------------------------------------------------------- /skin/default/sys.py/gameshell/titlebar_icons/without_charging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/sys.py/gameshell/titlebar_icons/without_charging.png -------------------------------------------------------------------------------- /skin/default/truetype/NotoSansCJK-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/truetype/NotoSansCJK-Regular.ttf -------------------------------------------------------------------------------- /skin/default/truetype/NotoSansMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/truetype/NotoSansMono-Regular.ttf -------------------------------------------------------------------------------- /skin/default/truetype/VarelaRound-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/truetype/VarelaRound-Regular.ttf -------------------------------------------------------------------------------- /skin/default/truetype/VeraMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/skin/default/truetype/VeraMono.ttf -------------------------------------------------------------------------------- /sys.py/UI/Emulator/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from pygame.locals import * 5 | from sys import exit 6 | import os 7 | import sys 8 | 9 | 10 | ## local UI import 11 | from UI.delete_confirm_page import DeleteConfirmPage 12 | from UI.icon_pool import MyIconPool 13 | from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB 14 | from UI.lang_manager import MyLangManager 15 | 16 | from rom_list_page import RomListPage 17 | from fav_list_page import FavListPage 18 | 19 | class FavDeleteConfirmPage(DeleteConfirmPage): 20 | 21 | def KeyDown(self,event): 22 | 23 | if IsKeyMenuOrB(event.key): 24 | 25 | self.ReturnToUpLevelPage() 26 | self._Screen.Draw() 27 | self._Screen.SwapAndShow() 28 | 29 | 30 | if IsKeyStartOrA(event.key): 31 | try: 32 | #self._FileName 33 | stats = os.stat(self._FileName) 34 | os.chown(self._FileName, stats.st_uid,stats.st_uid) ## normally uid and gid should be the same 35 | except: 36 | print("error in FavDeleteConfirmPage chown ") 37 | 38 | self.SnapMsg(MyLangManager.Tr("Deleteing")) 39 | self._Screen.Draw() 40 | self._Screen.SwapAndShow() 41 | self.Reset() 42 | 43 | pygame.time.delay(300) 44 | self.ReturnToUpLevelPage() 45 | self._Screen.Draw() 46 | self._Screen.SwapAndShow() 47 | 48 | print(self._FileName) 49 | 50 | 51 | class MyEmulator(object): 52 | 53 | _Icons = {} 54 | RomListPage = None 55 | FavListPage = None 56 | _Emulator = None 57 | 58 | _FavGID = 31415 59 | _FavGname = "cpifav" 60 | 61 | def __init__(self): 62 | self._Icons = {} 63 | 64 | def load_icons(self): 65 | """ 66 | basepath = os.path.dirname(os.path.realpath(__file__)) 67 | files = os.listdir(basepath+"/icons") 68 | for i in files: 69 | if os.path.isfile(basepath+"/"+i) and i.endswith(".png"): 70 | keyname = i.split(".")[0] 71 | self._Icons[keyname] = pygame.image.load(basepath+"/"+i).convert_alpha() 72 | """ 73 | self._Icons["sys"] = MyIconPool.GiveIconSurface("sys") 74 | 75 | 76 | def InitDeleteConfirmPage(self,main_screen): 77 | self.DeleteConfirmPage = DeleteConfirmPage() 78 | self.DeleteConfirmPage._Screen = main_screen 79 | self.DeleteConfirmPage._Name = "DeleteConfirm" 80 | self.DeleteConfirmPage.Init() 81 | 82 | self.FavDeleteConfirmPage = FavDeleteConfirmPage() 83 | self.FavDeleteConfirmPage._Screen = main_screen 84 | self.FavDeleteConfirmPage._Name = "DeleteConfirm" 85 | self.FavDeleteConfirmPage.Init() 86 | 87 | def InitFavListPage(self,main_screen): 88 | self.FavListPage = FavListPage() 89 | self.FavListPage._Screen = main_screen 90 | self.FavListPage._Name = "FavouriteGames" 91 | self.FavListPage._Emulator = self._Emulator 92 | self.FavListPage._Parent = self 93 | 94 | self.FavListPage.Init() 95 | 96 | def InitRomListPage(self,main_screen): 97 | self.RomListPage = RomListPage() 98 | self.RomListPage._Screen = main_screen 99 | self.RomListPage._Name = self._Emulator["TITLE"] 100 | self.RomListPage._Emulator = self._Emulator 101 | self.RomListPage._Parent = self 102 | self.RomListPage.Init() 103 | 104 | def Init(self,main_screen): 105 | self.load_icons() 106 | self.InitDeleteConfirmPage(main_screen) 107 | self.InitRomListPage(main_screen) 108 | self.InitFavListPage(main_screen) 109 | 110 | def API(self,main_screen): 111 | if main_screen !=None: 112 | main_screen.PushCurPage() 113 | main_screen.SetCurPage(self.RomListPage) 114 | main_screen.Draw() 115 | main_screen.SwapAndShow() 116 | -------------------------------------------------------------------------------- /sys.py/UI/Emulator/list_item.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | #from beeprint import pp 5 | import os 6 | 7 | ## local UI import 8 | from UI.constants import ICON_TYPES 9 | from UI.page import Page 10 | from UI.label import Label 11 | from UI.icon_item import IconItem 12 | from UI.util_funcs import midRect 13 | from UI.skin_manager import MySkinManager 14 | 15 | # a item for List 16 | # - - - - - - - - - - - -- 17 | # | Icon Text..... > | 18 | # ------------------------ 19 | 20 | 21 | class ListItemIcon(IconItem): 22 | 23 | _CanvasHWND = None 24 | _Parent = None 25 | _Width = 18 26 | _Height = 18 27 | 28 | def Draw(self): 29 | self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height)) 30 | 31 | class ListItem(object): 32 | _PosX = 0 33 | _PosY = 0 34 | _Width = 0 35 | _Height = 32 36 | 37 | _Labels = {} 38 | _Icons = {} 39 | _Fonts = {} 40 | _MyType = ICON_TYPES["EXE"] 41 | _LinkObj = None 42 | _Path = "" 43 | _Active = False 44 | _Playing = False ## play or pause 45 | _Parent = None 46 | 47 | def __init__(self): 48 | self._Labels = {} 49 | self._Icons = {} 50 | self._Fonts = {} 51 | 52 | def IsFile(self): 53 | if self._MyType == ICON_TYPES["FILE"]: 54 | return True 55 | 56 | return False 57 | def IsDir(self): 58 | if self._MyType == ICON_TYPES["DIR"]: 59 | return True 60 | 61 | return False 62 | 63 | def Init(self,text): 64 | 65 | #self._Fonts["normal"] = fonts["veramono12"] 66 | 67 | l = Label() 68 | l._PosX = 20 69 | l.SetCanvasHWND(self._Parent._CanvasHWND) 70 | 71 | if self._MyType == ICON_TYPES["DIR"] or self._MyType == ICON_TYPES["FILE"]: 72 | self._Path = text 73 | 74 | label_text = os.path.basename(text) 75 | alias_file = os.path.splitext(text)[0] + ".alias" 76 | if os.path.isfile(alias_file.encode("utf8")): 77 | fp = open(alias_file.encode("utf8"), "r") 78 | alias = fp.read() 79 | fp.close() 80 | label_text = alias.decode("utf8") 81 | 82 | if self._MyType == ICON_TYPES["DIR"]: 83 | l.Init(label_text,self._Fonts["normal"]) 84 | else: 85 | l.Init(label_text,self._Fonts["normal"]) 86 | 87 | 88 | self._Labels["Text"] = l 89 | 90 | 91 | 92 | def Draw(self): 93 | if self._Path != "[..]": 94 | self._Labels["Text"]._PosX = 23 95 | else: 96 | self._Labels["Text"]._PosX = 3 97 | 98 | self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2 99 | self._Labels["Text"].Draw() 100 | 101 | """ 102 | if self._Active == True: 103 | pass 104 | """ 105 | if self._MyType == ICON_TYPES["DIR"] and self._Path != "[..]": 106 | self._Parent._Icons["sys"]._IconIndex = 0 107 | self._Parent._Icons["sys"].NewCoord(self._PosX+12,self._PosY+ (self._Height - self._Parent._Icons["sys"]._Height)/2+self._Parent._Icons["sys"]._Height/2) 108 | self._Parent._Icons["sys"].Draw() 109 | 110 | if self._MyType == ICON_TYPES["FILE"]: 111 | self._Parent._Icons["sys"]._IconIndex = 1 112 | self._Parent._Icons["sys"].NewCoord(self._PosX+12,self._PosY+ (self._Height - self._Parent._Icons["sys"]._Height)/2+self._Parent._Icons["sys"]._Height/2) 113 | self._Parent._Icons["sys"].Draw() 114 | 115 | pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Line'),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1) 116 | 117 | 118 | -------------------------------------------------------------------------------- /sys.py/UI/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/UI/__init__.py -------------------------------------------------------------------------------- /sys.py/UI/constants.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from pygame.locals import * 5 | #from sys import exit 6 | #import os 7 | #import sys 8 | 9 | #from datetime import datetime 10 | 11 | #import base64 12 | #from beeprint import pp 13 | 14 | #UI lib 15 | 16 | 17 | Width = 320 18 | Height = 240 19 | 20 | icon_width = 80 21 | icon_height = 80 22 | icon_ext = ".sh" 23 | 24 | 25 | ICON_TYPES={"Commercial":8,"Emulator":7,"FILE":6,"STAT":5,"NAV":4,"LETTER":3,"FUNC":2,"DIR":1,"EXE":0,"None":-1} # FUNC is like UI widget's function,DIR contains child page,EXE just execute a binary 26 | 27 | ## H=horizontal ,V=vertical S=Single Line 28 | #SLeft start from left, single line 29 | #SCenter star from center ,single line 30 | ALIGN = {"HLeft":0,"HCenter":1,"HRight":2,"VMiddle":3,"SLeft":4,"VCenter":5,"SCenter":6} 31 | 32 | DT = pygame.time.Clock().tick(30) # fps in ms,eg:50 33 | 34 | RUNSH = pygame.USEREVENT+1 35 | #update_titlebar_event = pygame.event.Event(GMEVT, message="titlebar") 36 | RUNEVT = pygame.USEREVENT+2 37 | RUNSYS = pygame.USEREVENT+3 38 | LOWLIGHT = pygame.USEREVENT+4 ## when dim screen backlight 39 | FOOTMSG = pygame.USEREVENT+5 ## 40 | POWEROPT = pygame.USEREVENT+6 41 | RESTARTUI = pygame.USEREVENT+7 ##restart launcher 42 | -------------------------------------------------------------------------------- /sys.py/UI/counter_screen.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | import gobject 5 | import commands 6 | ## local package import 7 | from constants import Width,Height,RUNSYS 8 | from label import Label 9 | 10 | from full_screen import FullScreen 11 | from skin_manager import MySkinManager 12 | from lang_manager import MyLangManager 13 | 14 | import config 15 | 16 | class CounterScreen(FullScreen): 17 | 18 | _CounterFont = MyLangManager.TrFont("varela120") 19 | _TextFont1 = MyLangManager.TrFont("varela15") 20 | _TextFont2 = MyLangManager.TrFont("varela12") 21 | 22 | _TopLabel = None 23 | _BottomLabel = None 24 | _NumberLabel = None 25 | 26 | _BGColor = MySkinManager.GiveColor('Black') 27 | _FGColor = MySkinManager.GiveColor('White') 28 | 29 | _Counting = False 30 | _Number = 10 31 | _GobjectIntervalId = -1 32 | 33 | _inter_counter = 0 34 | 35 | def GObjectInterval(self): 36 | 37 | self._inter_counter+=1 38 | 39 | if self._Number == 0: 40 | self._Counting = False 41 | print("do the real shutdown") 42 | 43 | if config.CurKeySet != "PC": 44 | cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;" 45 | cmdpath += "sleep 3;" 46 | cmdpath += "sudo halt -p" 47 | pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))\ 48 | 49 | return False 50 | 51 | if self._inter_counter >=2: 52 | self._Number -= 1 53 | if self._Number < 0: 54 | self._Number = 0 55 | print("sub Number %d " % self._Number) 56 | self._inter_counter = 0 57 | 58 | self.Draw() 59 | self.SwapAndShow() 60 | 61 | 62 | 63 | return self._Counting 64 | 65 | def StartCounter(self): 66 | if self._Counting == True: 67 | return 68 | 69 | self._Number = 10 70 | self._Counting = True 71 | 72 | self._GobjectIntervalId = gobject.timeout_add(500,self.GObjectInterval) 73 | 74 | def StopCounter(self): 75 | if self._Counting == False: 76 | return 77 | self._Counting = False 78 | self._Number = 10 79 | self._inter_counter = 0 80 | 81 | if self._GobjectIntervalId != -1: 82 | gobject.source_remove(self._GobjectIntervalId) 83 | self._GobjectIntervalId = -1 84 | 85 | return 86 | 87 | def Init(self): 88 | self._CanvasHWND = pygame.Surface((self._Width,self._Height)) 89 | self._TopLabel = Label() 90 | self._TopLabel.SetCanvasHWND(self._CanvasHWND) 91 | self._TopLabel.Init("System shutdown in", self._TextFont1, self._FGColor) 92 | 93 | self._BottomLabel = Label() 94 | self._BottomLabel.SetCanvasHWND(self._CanvasHWND) 95 | self._BottomLabel.Init("Press any key to stop countdown", self._TextFont2, self._FGColor) 96 | 97 | self._NumberLabel = Label() 98 | self._NumberLabel.SetCanvasHWND(self._CanvasHWND) 99 | self._NumberLabel.Init(str(self._Number), self._CounterFont, self._FGColor) 100 | 101 | def Draw(self): 102 | self._CanvasHWND.fill( self._BGColor ) 103 | 104 | self._TopLabel.NewCoord(Width/2, 15) 105 | self._TopLabel.DrawCenter() 106 | 107 | self._BottomLabel.NewCoord(Width/2, Height-15) 108 | self._BottomLabel.DrawCenter() 109 | 110 | self._NumberLabel.NewCoord(Width/2,Height/2) 111 | self._NumberLabel.SetText(str(self._Number)) 112 | self._NumberLabel.DrawCenter() 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /sys.py/UI/createby_screen.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | import base64 5 | ## local package import 6 | from full_screen import FullScreen 7 | from skin_manager import MySkinManager 8 | from createby_clockworkpi import createby_clockworkpi_b64 9 | 10 | from constants import Width,Height 11 | 12 | class CreateByScreen(FullScreen): 13 | 14 | _BG = None 15 | _BGColor = MySkinManager.GiveColor('Black') 16 | 17 | def Init(self): 18 | self._BG = pygame.image.frombuffer(base64.b64decode(createby_clockworkpi_b64 ),(Width,Height),"RGBA") 19 | self._CanvasHWND = pygame.Surface((self._Width,self._Height)) 20 | 21 | 22 | def Draw(self): 23 | self._CanvasHWND.fill( self._BGColor ) 24 | 25 | self._CanvasHWND.blit(self._BG,(0,0,Width,Height)) 26 | -------------------------------------------------------------------------------- /sys.py/UI/delete_confirm_page.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | import os 5 | import shutil 6 | 7 | 8 | #UI lib 9 | from constants import Width,Height,ICON_TYPES 10 | from page import Page,PageSelector 11 | from label import Label 12 | from util_funcs import midRect 13 | from keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB 14 | from confirm_page import ConfirmPage 15 | from lang_manager import MyLangManager 16 | 17 | class DeleteConfirmPage(ConfirmPage): 18 | 19 | _FileName = "" 20 | _TrashDir = "" 21 | _ConfirmText = MyLangManager.Tr("ConfirmDeleteQ") 22 | 23 | def SetTrashDir(self,d): 24 | self._TrashDir = d 25 | 26 | if os.path.isdir(self._TrashDir) == False: 27 | raise IOError("Trash not existed") 28 | 29 | def SetFileName(self,fn): 30 | self._FileName = fn 31 | 32 | def KeyDown(self,event): 33 | 34 | if IsKeyMenuOrB(event.key): 35 | 36 | self.ReturnToUpLevelPage() 37 | self._Screen.Draw() 38 | self._Screen.SwapAndShow() 39 | 40 | 41 | if IsKeyStartOrA(event.key): 42 | try: 43 | os.remove(self._TrashDir+"/"+os.path.basename(self._FileName)) 44 | except: 45 | pass 46 | 47 | try: 48 | shutil.move(self._FileName, self._TrashDir) 49 | except shutil.Error as e: 50 | if "already exists" in str(e): 51 | self._Screen._MsgBox.SetText("AlreadyExisted") 52 | else: 53 | self._Screen._MsgBox.SetText("Error") 54 | 55 | self._Screen._MsgBox.Draw() 56 | self._Screen.SwapAndShow() 57 | else: 58 | self.SnapMsg(MyLangManager.Tr("Deleting")) 59 | self._Screen.Draw() 60 | self._Screen.SwapAndShow() 61 | self.Reset() 62 | 63 | pygame.time.delay(300) 64 | self.ReturnToUpLevelPage() 65 | self._Screen.Draw() 66 | self._Screen.SwapAndShow() 67 | 68 | print(self._FileName) 69 | 70 | 71 | -------------------------------------------------------------------------------- /sys.py/UI/full_screen.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | #from sys import exit 5 | #import os 6 | #import sys 7 | 8 | #from libs import easing 9 | #from datetime import datetime 10 | 11 | #from beeprint import pp 12 | 13 | ## local package import 14 | from constants import Width,Height 15 | 16 | 17 | class FullScreen(object): 18 | _PosX = 0 19 | _PosY = 0 20 | _Width = Width 21 | _Height = Height 22 | _CanvasHWND = None 23 | _HWND = None 24 | 25 | def __init__(self): 26 | pass 27 | 28 | def Init(self): 29 | pass 30 | 31 | def SwapAndShow(self): 32 | if self._HWND != None: 33 | self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width,self._Height)) 34 | pygame.display.update() 35 | 36 | def Draw(self): 37 | pass 38 | 39 | -------------------------------------------------------------------------------- /sys.py/UI/icon_pool.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from pygame.locals import * 5 | from sys import exit 6 | import os 7 | import sys 8 | 9 | from skin_manager import MySkinManager 10 | ##pool only store surfaces 11 | 12 | class IconPool(object): 13 | 14 | _GameShellIconPath = MySkinManager.GiveIcon("gameshell/icons/") 15 | _Icons = {} 16 | _Sizes = {} 17 | def __init__(self): 18 | self._Icons= {} 19 | 20 | def Init(self): 21 | 22 | files = os.listdir(self._GameShellIconPath) 23 | for i in files: 24 | if os.path.isfile(self._GameShellIconPath+"/"+i) and i.endswith(".png"): 25 | keyname = i.split(".")[0] 26 | self._Icons[keyname] = pygame.image.load(self._GameShellIconPath+"/"+i).convert_alpha() 27 | self._Sizes[keyname] = self._Icons[keyname].get_size() 28 | 29 | def Width(self,keyname): 30 | if keyname in self._Sizes: 31 | return self._Sizes[keyname][0] 32 | 33 | def Height(self,keyname): 34 | if keyname in self._Sizes: 35 | return self._Sizes[keyname][1] 36 | 37 | def GiveIconSurface(self,imgname): ## imgname is the png file name without .png 38 | if imgname in self._Icons: 39 | return self._Icons[imgname] 40 | else: 41 | icon_file = MySkinManager.GiveIcon("gameshell/icons/"+imgname+".png") 42 | if os.path.isfile(icon_file): 43 | keyname = imgname 44 | self._Icons[keyname] = pygame.image.load(icon_file).convert_alpha() 45 | self._Sizes[keyname] = self._Icons[keyname].get_size() 46 | return self._Icons[keyname] 47 | 48 | return None # this will cause panic,if not found both in theme and default skin folder 49 | 50 | ##global Handler 51 | MyIconPool = None 52 | 53 | def InitMyIconPool(): 54 | global MyIconPool 55 | if MyIconPool == None: 56 | MyIconPool = IconPool() 57 | 58 | InitMyIconPool() 59 | 60 | 61 | -------------------------------------------------------------------------------- /sys.py/UI/info_page_list_item.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from label import Label 5 | from skin_manager import MySkinManager 6 | from widget import Widget 7 | class InfoPageListItem(Widget): 8 | _Height = 30 9 | 10 | _Labels = {} 11 | _Icons = {} 12 | _Fonts = {} 13 | 14 | _LinkObj = None 15 | _ReadOnly = False 16 | 17 | def __init__(self): 18 | self._Labels = {} 19 | self._Icons = {} 20 | self._Fonts = {} 21 | 22 | def SetSmallText(self,text): 23 | 24 | l = Label() 25 | l._PosX = 40 26 | l.SetCanvasHWND(self._Parent._CanvasHWND) 27 | l.Init(text,self._Fonts["small"]) 28 | self._Labels["Small"] = l 29 | 30 | def Init(self,text): 31 | 32 | #self._Fonts["normal"] = fonts["veramono12"] 33 | 34 | l = Label() 35 | l._PosX = 10 36 | l.SetCanvasHWND(self._Parent._CanvasHWND) 37 | 38 | l.Init(text,self._Fonts["normal"]) 39 | self._Labels["Text"] = l 40 | 41 | def Draw(self): 42 | if self._ReadOnly == True: 43 | self._Labels["Text"].SetColor(MySkinManager.GiveColor("ReadOnlyText")) 44 | else: 45 | self._Labels["Text"].SetColor(MySkinManager.GiveColor("Text")) 46 | 47 | 48 | self._Labels["Text"]._PosX = self._Labels["Text"]._PosX + self._PosX 49 | self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2 50 | self._Labels["Text"].Draw() 51 | self._Labels["Text"]._PosX = self._Labels["Text"]._PosX - self._PosX 52 | 53 | if "Small" in self._Labels: 54 | self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width-5 55 | 56 | self._Labels["Small"]._PosY = self._PosY + (self._Height - self._Labels["Small"]._Height)/2 57 | self._Labels["Small"].Draw() 58 | 59 | pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Line'),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1) 60 | -------------------------------------------------------------------------------- /sys.py/UI/info_page_selector.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import pygame 3 | 4 | from libs.roundrects import aa_round_rect 5 | ## local UI import 6 | from UI.constants import Width,Height 7 | from UI.page import Page,PageSelector 8 | from UI.skin_manager import MySkinManager 9 | 10 | class InfoPageSelector(PageSelector): 11 | _BackgroundColor = MySkinManager.GiveColor('Front') 12 | 13 | def __init__(self): 14 | self._Width = Width 15 | 16 | def AnimateDraw(self,x2,y2): 17 | pass 18 | 19 | def Draw(self): 20 | idx = self._Parent._PsIndex 21 | if idx >= 0 and idx < len(self._Parent._MyList): 22 | y = self._Parent._MyList[idx]._PosY+1 23 | h = self._Parent._MyList[idx]._Height -3 24 | 25 | self._PosY = y 26 | self._Height = h 27 | 28 | aa_round_rect(self._Parent._CanvasHWND, 29 | (self._PosX,self._PosY,self._Width-4,self._Height),self._BackgroundColor,4,0,self._BackgroundColor) 30 | -------------------------------------------------------------------------------- /sys.py/UI/keyboard_keys.layout: -------------------------------------------------------------------------------- 1 | 1 2 3 4 5 6 7 8 9 0 2 | q w e r t y u i o p 3 | a s d f g h j k l 4 | _L z x c v b n m _R 5 | 6 | 1 2 3 4 5 6 7 8 9 0 7 | Q W E R T Y U I O P 8 | A S D F G H J K L 9 | _L Z X C V B N M _R 10 | 11 | ! @ # $ % ^ & * ( ) 12 | - _ + = ~ ` [ ] { } 13 | | \ : ; " ' < > , . 14 | _L ? / _R _S 15 | -------------------------------------------------------------------------------- /sys.py/UI/keys_def.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from pygame.locals import * 5 | from sys import exit 6 | import os 7 | import sys 8 | 9 | import config 10 | from config import CurKeySet ## read only 11 | 12 | def GetButtonsLayoutMode(): 13 | lm = "xbox" 14 | try: 15 | with open(".buttonslayout", "r") as f: 16 | lm = f.read() 17 | except: 18 | None 19 | if lm not in ["xbox","snes"]: 20 | lm = "xbox" 21 | return lm 22 | 23 | def SetButtonsLayoutMode(mode): 24 | SetXYABButtons(mode) 25 | with open(".buttonslayout", "w") as f: 26 | f.write(mode) 27 | config.ButtonsLayout = mode 28 | 29 | def SetXYABButtons(mode): 30 | if mode == "snes": 31 | GameShell["Y"] = pygame.K_u 32 | GameShell["X"] = pygame.K_i 33 | GameShell["B"] = pygame.K_j 34 | GameShell["A"] = pygame.K_k 35 | else: 36 | GameShell["X"] = pygame.K_u 37 | GameShell["Y"] = pygame.K_i 38 | GameShell["A"] = pygame.K_j 39 | GameShell["B"] = pygame.K_k 40 | 41 | 42 | GameShell = {} 43 | GameShell["Up"] = pygame.K_UP 44 | GameShell["Down"] = pygame.K_DOWN 45 | GameShell["Left"] = pygame.K_LEFT 46 | GameShell["Right"]= pygame.K_RIGHT 47 | 48 | GameShell["Menu"] = pygame.K_ESCAPE 49 | 50 | SetXYABButtons(GetButtonsLayoutMode()) 51 | 52 | GameShell["Select"] = pygame.K_SPACE 53 | GameShell["Start"] = pygame.K_RETURN 54 | 55 | GameShell["LK1"] = pygame.K_h 56 | GameShell["LK5"] = pygame.K_l 57 | 58 | PC = {} 59 | 60 | PC["Up"] = pygame.K_UP 61 | PC["Down"] = pygame.K_DOWN 62 | PC["Left"] = pygame.K_LEFT 63 | PC["Right"] = pygame.K_RIGHT 64 | PC["Menu"] = pygame.K_ESCAPE 65 | PC["X"] = pygame.K_x 66 | PC["Y"] = pygame.K_y 67 | PC["A"] = pygame.K_a 68 | PC["B"] = pygame.K_b 69 | PC["Select"] = pygame.K_SPACE 70 | PC["Start"] = pygame.K_s 71 | 72 | PC["LK1"] = pygame.K_h 73 | PC["LK5"] = pygame.K_l 74 | 75 | if CurKeySet == "PC": 76 | CurKeys = PC 77 | else: 78 | CurKeys = GameShell 79 | 80 | 81 | def IsKeyStartOrA(key): 82 | return key == CurKeys["Start"] or key == CurKeys["A"] 83 | 84 | def IsKeyMenuOrB(key): 85 | return key == CurKeys["Menu"] or key == CurKeys["B"] 86 | -------------------------------------------------------------------------------- /sys.py/UI/label.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | #import base64 6 | #from beeprint import pp 7 | from constants import Width,Height 8 | from util_funcs import midRect 9 | 10 | #UI lib 11 | from skin_manager import MySkinManager 12 | from lang_manager import MyLangManager 13 | from widget import Widget 14 | class Label(Widget): 15 | _Text="" 16 | _FontObj=None 17 | _Color = MySkinManager.GiveColor('Text') 18 | _CanvasHWND = None 19 | _TextSurf = None 20 | def __init__(self): 21 | pass 22 | 23 | def Init(self, text, font_obj, color=MySkinManager.GiveColor('Text')): 24 | self._Color = color 25 | self._FontObj = font_obj 26 | self._Text = text 27 | 28 | my_text = self._FontObj.render(self._Text,True,self._Color) 29 | self._Width = my_text.get_width() 30 | self._Height = my_text.get_height() 31 | 32 | def SetColor(self,color): 33 | self._Color = color 34 | 35 | def GetText(self): 36 | return self._Text 37 | 38 | def SetText(self,text): 39 | self._Text = text 40 | 41 | my_text = self._FontObj.render(self._Text,True,self._Color) 42 | self._Width = my_text.get_width() 43 | self._Height = my_text.get_height() 44 | 45 | 46 | def SetCanvasHWND(self,_canvashwnd): 47 | self._CanvasHWND = _canvashwnd 48 | 49 | def DrawCenter(self,bold=False): 50 | self._FontObj.set_bold(bold) ## avoing same font tangling set_bold to others 51 | my_text = self._FontObj.render( self._Text,True,self._Color) 52 | self._CanvasHWND.blit(my_text,midRect(self._PosX,self._PosY,self._Width,self._Height,Width,Height)) 53 | 54 | def Draw(self,bold=False): 55 | self._FontObj.set_bold(bold) ## avoing same font tangling set_bold to others 56 | my_text = self._FontObj.render( self._Text,True,self._Color) 57 | 58 | self._CanvasHWND.blit(my_text,(self._PosX,self._PosY,self._Width,self._Height)) 59 | -------------------------------------------------------------------------------- /sys.py/UI/lang_manager.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import pygame 4 | import config 5 | import ConfigParser 6 | from skin_manager import MySkinManager 7 | from util_funcs import FileExists 8 | 9 | class CaseConfigParser(ConfigParser.SafeConfigParser): 10 | def optionxform(self, optionstr): 11 | return optionstr 12 | 13 | class LangManager(object): 14 | """ 15 | """ 16 | 17 | _Langs = {} 18 | _Config = None 19 | _ConfigFileName = "00_English.ini" ## double % to escape 20 | _CJKMode = False 21 | 22 | def __init__(self): 23 | self.Init() 24 | 25 | def Init(self): 26 | if not self._Langs: 27 | self.SetLangs() 28 | 29 | def UpdateLang(self): 30 | self._Langs = {} 31 | self.SetLangs() 32 | 33 | def IsCJKMode(self):## in MultiLabel, latins seped by white spaces,CJK no needs for that 34 | latins = ["English"] 35 | self._CJKMode = True 36 | 37 | for i in latins: 38 | if i in self._ConfigFileName: 39 | self._CJKMode= False 40 | break 41 | 42 | return self._CJKMode 43 | 44 | def SetLangs(self): 45 | self._Config = CaseConfigParser() 46 | #print("SetLangs") 47 | fname = ".lang" 48 | 49 | try: 50 | with open(fname, "r") as f: 51 | self._ConfigFileName = f.read() 52 | self._ConfigFileName = self._ConfigFileName.strip("\r\n ") 53 | #print(self._ConfigFileName) 54 | except: 55 | os.system("touch .lang") 56 | print("read lang failed") 57 | None 58 | 59 | 60 | if self._ConfigFileName == "" or FileExists("langs/"+self._ConfigFileName) == False: 61 | #print("miss file") 62 | self._ConfigFileName = "00_English.ini" 63 | else: 64 | pass 65 | #print("has file",self._ConfigFileName) 66 | 67 | 68 | try: 69 | self._Config.read("langs/"+self._ConfigFileName) 70 | except Exception, e: 71 | print("read lang ini error %s" % str(e)) 72 | return 73 | else: 74 | if "Langs" in self._Config.sections(): 75 | lang_opts = self._Config.options("Langs") 76 | for i in lang_opts: 77 | try: 78 | self._Langs[i] = self._Config.get("Langs", i) 79 | except Exception, e: 80 | print("error %s" % str(e)) 81 | continue 82 | 83 | def Tr(self,english_key_str): 84 | #print("english_key_str", english_key_str) 85 | if english_key_str in self._Langs: 86 | #print( self._Langs[english_key_str] ) 87 | return self._Langs[english_key_str].decode("utf8") 88 | else: 89 | return english_key_str 90 | 91 | def TrFont(self,orig_font_str): 92 | try: 93 | font_size_number = int(filter(str.isdigit, orig_font_str)) 94 | except TypeError: 95 | font_size_number = int(filter(unicode.isdigit, orig_font_str)) 96 | if font_size_number > 120: 97 | raise Exception('font string format error') 98 | 99 | if "English.ini" in self._ConfigFileName: 100 | return MySkinManager.GiveFont(orig_font_str) 101 | else: 102 | if font_size_number > 28: 103 | # raise Exception('cjk font string format error '+ str(font_size_number)) 104 | return MySkinManager.GiveFont(orig_font_str) 105 | else: 106 | return MySkinManager.GiveFont("notosanscjk%d" % font_size_number) 107 | 108 | ##global MyLangManager Handler 109 | MyLangManager = None 110 | 111 | def InitMyLangManager(): 112 | global MyLangManager 113 | if MyLangManager == None: 114 | MyLangManager = LangManager() 115 | 116 | 117 | InitMyLangManager() 118 | -------------------------------------------------------------------------------- /sys.py/UI/multi_icon_item.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | #from beeprint import pp 5 | 6 | ## local import 7 | from constants import icon_width,icon_height,ICON_TYPES,ALIGN,icon_ext,Width,Height 8 | from util_funcs import color_surface,midRect 9 | from label import Label 10 | from icon_item import IconItem 11 | 12 | ##Resource file contains multi icons in single image 13 | ##usually the Image contains icons in Vertical, convert 1.png 2.png 3.png -append out.png 14 | 15 | class MultiIconItem(IconItem): 16 | _IconWidth=18 17 | _IconHeight=18 18 | _IconIndex = 0 # icon index on the resource Image 19 | 20 | def CreateImageSurf(self): 21 | if self._ImgSurf == None and self._ImageName != "": 22 | # print(self._ImageName) 23 | self._ImgSurf = pygame.image.load( self._ImageName ).convert_alpha() 24 | 25 | 26 | def DrawTopLeft(self): 27 | if self._Align==ALIGN["VCenter"]: #default 28 | if self._Label != None: 29 | self._Label._PosX = self._PosX - self._Label._Width/2 + self._Parent._PosX 30 | self._Label._PosY = self._PosY + self._Height/2 +6 + self._Parent._PosY 31 | 32 | elif self._Align ==ALIGN["HLeft"]: 33 | if self._Label != None: 34 | self._Label._PosX = self._PosX + self._Width/2 + 3 + self._Parent._PosX 35 | self._Label._PosY = self._PosY - self._Label._Height/2 + self._Parent._PosY 36 | 37 | if self._Label!=None: 38 | self._Label.Draw() 39 | 40 | 41 | if self._ImgSurf != None: 42 | self._Parent._CanvasHWND.blit(self._ImgSurf,pygame.Rect(self._PosX+self._Parent._PosX, 43 | self._PosY+self._Parent._PosY, 44 | self._Width,self._Height), 45 | (0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight)) 46 | 47 | def DrawRect(self,rect1,rect2): 48 | if self._ImgSurf != None: 49 | self._Parent._CanvasHWND.blit(self._ImgSurf,rect1,rect2) 50 | 51 | def Draw(self): 52 | if self._Align==ALIGN["VCenter"]: #default 53 | if self._Label != None: 54 | self._Label._PosX = self._PosX - self._Label._Width/2 + self._Parent._PosX 55 | self._Label._PosY = self._PosY + self._Height/2 +6 + self._Parent._PosY 56 | 57 | elif self._Align ==ALIGN["HLeft"]: 58 | if self._Label != None: 59 | self._Label._PosX = self._PosX + self._Width/2 + 3 + self._Parent._PosX 60 | self._Label._PosY = self._PosY - self._Label._Height/2 + self._Parent._PosY 61 | 62 | if self._Label!=None: 63 | self._Label.Draw() 64 | 65 | 66 | if self._ImgSurf != None: 67 | self._Parent._CanvasHWND.blit(self._ImgSurf,midRect(self._PosX+self._Parent._PosX, 68 | self._PosY+self._Parent._PosY, 69 | self._Width,self._Height,Width,Height), 70 | (0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight)) 71 | 72 | -------------------------------------------------------------------------------- /sys.py/UI/multilabel.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | from skin_manager import MySkinManager 6 | from lang_manager import MyLangManager 7 | from widget import Widget 8 | 9 | class MultiLabel(Widget): ##Multi Line Label 10 | _Width=135 11 | _Height=100 12 | _Text="" 13 | _FontObj=None 14 | _Color = MySkinManager.GiveColor('Text') 15 | _CanvasHWND = None 16 | _TextSurf = None 17 | _MaxWidth = 0 18 | 19 | def __init__(self): 20 | pass 21 | 22 | def Init(self,text,font_obj,color=MySkinManager.GiveColor('Text')): 23 | self._Color = color 24 | self._FontObj = font_obj 25 | self._Text = text 26 | 27 | self.blit_text(self._CanvasHWND,self._Text,(self._PosX,self._PosY),self._FontObj) 28 | 29 | 30 | def SetColor(self,color): 31 | self._Color = color 32 | 33 | def GetText(self): 34 | return self._Text 35 | 36 | def SetText(self,text): 37 | self._Text = text 38 | 39 | self.blit_text(self._CanvasHWND,self._Text,(self._PosX,self._PosY),self._FontObj) 40 | 41 | def SetCanvasHWND(self,_canvashwnd): 42 | self._CanvasHWND = _canvashwnd 43 | 44 | def blit_text(self, surface,text, pos, font): 45 | iscjk = MyLangManager.IsCJKMode() 46 | 47 | color = self._Color 48 | words = [word.split(' ') for word in text.splitlines()] 49 | space = font.size(' ')[0] 50 | 51 | if iscjk: 52 | space = 0 53 | words = [list(word.decode("utf8")) for word in text.splitlines()] 54 | 55 | max_width = self._Width 56 | x ,y = pos 57 | row_total_width = 0 58 | lines = 0 59 | line_max = 12 60 | row_max = 4 61 | if iscjk: 62 | line_max = line_max*2 63 | 64 | for i,line in enumerate(words[:row_max]): 65 | for word in line[:line_max]: 66 | word_surface = font.render(word, True, color) 67 | word_width = word_surface.get_width() 68 | word_height = word_surface.get_height() 69 | row_total_width += word_width 70 | if row_total_width+space >= max_width: 71 | x = pos[0] # Reset the x. 72 | y += word_height # Start on new row. 73 | row_total_width = word_width 74 | 75 | if lines == 0: 76 | lines += word_height 77 | else: 78 | lines += word_height 79 | 80 | surface.blit(word_surface, (x, y)) 81 | x += word_width + space 82 | x = pos[0] # Reset the x. 83 | y += word_height # Start on new row. 84 | lines += word_height 85 | self._Height = lines 86 | 87 | 88 | def Draw(self): 89 | #my_text = self._FontObj.render( self._Text,True,self._Color) 90 | self.blit_text(self._CanvasHWND,self._Text,(self._PosX,self._PosY),self._FontObj) 91 | #pygame.draw.rect(self._CanvasHWND,(83,83,83), (self._PosX,self._PosY,self._Width,self._Height) , 1 ) 92 | #self._CanvasHWND.blit(my_text,(self._PosX,self._PosY,self._Width,self._Height)) 93 | -------------------------------------------------------------------------------- /sys.py/UI/scroller.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import pygame 3 | 4 | from util_funcs import midRect 5 | 6 | from libs.roundrects import aa_round_rect 7 | 8 | from skin_manager import MySkinManager 9 | 10 | class ListScroller(object): 11 | _PosX = 0 12 | _PosY = 0 13 | _Width = 7 14 | _Height = 0 15 | _MinHeight = 6 ## tested 16 | _Parent = None 17 | _Color = MySkinManager.GiveColor('Front') 18 | 19 | _StartX = 0 20 | _StartY = 0 21 | _EndX = 0 22 | _EndY = 0 23 | _Value = 0 24 | _CanvasHWND = None 25 | 26 | def __init__(self): 27 | pass 28 | 29 | def Init(self): 30 | self.SetCanvasHWND(self._Parent._CanvasHWND) 31 | 32 | def SetCanvasHWND(self,canvas): 33 | self._CanvasHWND = canvas 34 | 35 | def AnimateDraw(self,x2,y2): 36 | pass 37 | 38 | def UpdateSize(self,bigheight,dirtyheight): 39 | bodyheight = float(self._Parent._Height) / float(bigheight) 40 | if bodyheight > 1: 41 | bodyheight = 1 ## 100% 42 | 43 | margin = 4 44 | self._Height = bodyheight * self._Parent._Height - margin ## Draw body 45 | 46 | if self._Height < self._MinHeight: 47 | self._Height = self._MinHeight 48 | 49 | self._StartX = self._Width/2 50 | self._StartY = margin/2+self._Height/2 51 | 52 | self._EndX = self._Width/2 53 | self._EndY = self._Parent._Height - margin/2 - self._Height/2 54 | 55 | process = float(dirtyheight) / float(bigheight) 56 | value = process* (self._EndY - self._StartY) 57 | 58 | self._Value = int(value) 59 | 60 | def Draw(self): 61 | 62 | start_rect = midRect(self._PosX+self._StartX,self._StartY+self._Value,self._Width,self._Height,self._Parent._Width,self._Parent._Height) 63 | aa_round_rect(self._CanvasHWND,start_rect, self._Color,3,0, self._Color) 64 | -------------------------------------------------------------------------------- /sys.py/UI/simple_name_space.py: -------------------------------------------------------------------------------- 1 | 2 | class SimpleNamespace: 3 | def __init__(self, **kwargs): 4 | self.__dict__.update(kwargs) 5 | 6 | def __repr__(self): 7 | keys = sorted(self.__dict__) 8 | items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys) 9 | return "{}({})".format(type(self).__name__, ", ".join(items)) 10 | 11 | def __eq__(self, other): 12 | return self.__dict__ == other.__dict__ 13 | -------------------------------------------------------------------------------- /sys.py/UI/slider.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | class Slider(object): 4 | _PosX = 0 5 | _PosY = 0 6 | _Width = 0 7 | _Height = 0 8 | 9 | _Value = 0 10 | _CanvasHWND = None 11 | 12 | _Range = [] 13 | 14 | def __init__(self): 15 | self._Range = [0,255] 16 | 17 | def Init(self): 18 | self._Value = 0 19 | 20 | def SetValue(self,v): 21 | self._Value = int(v) 22 | 23 | def SetRange(self,m1,m2): 24 | if m1 >= m2: 25 | return 26 | 27 | self._Range[0] = m1 28 | self._Range[1] = m2 29 | 30 | 31 | def SetCanvasHWND(self,cav): 32 | self._CanvasHWND = cav 33 | 34 | def KeyDown(self): 35 | pass 36 | 37 | def Draw(self): 38 | pass 39 | 40 | 41 | -------------------------------------------------------------------------------- /sys.py/UI/text_item.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | #local import 3 | from UI.constants import Width,Height,ICON_TYPES 4 | from UI.icon_item import IconItem 5 | from UI.util_funcs import midRect 6 | from UI.skin_manager import MySkinManager 7 | 8 | class TextItem(IconItem): 9 | _PosX = 0 10 | _PosY = 0 11 | _Width = 0 12 | _Height = 0 13 | _Str = "" 14 | _Color = MySkinManager.GiveColor('Text') 15 | _FontObj = None 16 | _Bold = False 17 | _MyType = ICON_TYPES["LETTER"] 18 | _Parent = None 19 | 20 | def Draw(self): 21 | self._FontObj.set_bold(self._Bold) 22 | my_text = self._FontObj.render(self._Str,True,self._Color) 23 | if my_text.get_width() != self._Width: 24 | self._Width = my_text.get_width() 25 | if my_text.get_height() != self._Height: 26 | self._Height = my_text.get_height() 27 | 28 | self._Parent._CanvasHWND.blit(my_text, \ 29 | midRect(self._PosX,self._PosY,self._Width,self._Height,Width,Height)) 30 | -------------------------------------------------------------------------------- /sys.py/UI/untitled_icon.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | from pygame.locals import * 5 | from sys import exit 6 | import os 7 | import sys 8 | 9 | from datetime import datetime 10 | 11 | import base64 12 | from beeprint import pp 13 | 14 | from util_funcs import midRect 15 | 16 | from skin_manager import MySkinManager 17 | 18 | BlankPng = MySkinManager.GiveIcon("gameshell/blank.png") # 80x80 19 | ## use blank circle as bg, Two alpha As Icon Label 20 | #Upper and Lower 21 | 22 | 23 | class UntitledIcon(object): 24 | _PosX = 0 25 | _PosY = 0 26 | _Width = 80 27 | _Height = 80 28 | 29 | _Words = ["G", "s"] 30 | _FontObj = MySkinManager.GiveFont("varela40") 31 | 32 | _BG = None # initial surface 33 | 34 | _Color = MySkinManager.GiveColor('Text') 35 | 36 | def __init__(self): 37 | self._Words = ["G", "s"] 38 | 39 | def Init(self): 40 | self._BG = pygame.image.load(BlankPng).convert_alpha() 41 | 42 | def SetWords(self, TwoWords): 43 | if len(TwoWords) == 1: 44 | self._Words[0] = TwoWords[0].upper() 45 | 46 | if len(TwoWords) == 2: 47 | self._Words[0] = TwoWords[0].upper() 48 | self._Words[1] = TwoWords[1].lower() 49 | 50 | self._Text = self._FontObj.render("".join(self._Words),True,self._Color) 51 | 52 | def Draw(self): 53 | if self._BG != None: 54 | w_ = self._Text.get_width() 55 | h_ = self._Text.get_height() 56 | 57 | self._BG.blit(self._Text,midRect(self._Width/2,self._Height/2,w_,h_,self._Width,self._Height)) 58 | 59 | def Surface(self): 60 | self.Draw() 61 | 62 | return self._BG 63 | 64 | 65 | -------------------------------------------------------------------------------- /sys.py/UI/util_funcs.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import platform 3 | import pygame 4 | import os 5 | import subprocess 6 | 7 | #from libs import easing 8 | #from datetime import datetime 9 | 10 | #import base64 11 | #from beeprint import pp 12 | import string 13 | from Xlib import X,display 14 | import config 15 | from constants import Width,Height 16 | 17 | def get_git_revision_hash(): 18 | return subprocess.check_output(['git', 'rev-parse', 'HEAD']) 19 | 20 | def get_git_revision_short_hash(): 21 | return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']) 22 | 23 | 24 | def X_center_mouse(): 25 | d = display.Display() 26 | s = d.screen() 27 | root = s.root 28 | width = s.width_in_pixels 29 | height = s.height_in_pixels 30 | # print(width,height) 31 | root.warp_pointer(width/2,height/2) 32 | 33 | d.sync() 34 | 35 | 36 | def IsPythonPackage(self,dirname): 37 | files = os.listdir(dirname) 38 | for i in sorted(files): 39 | if i.endswith("__init__.py"): 40 | return True 41 | return False 42 | 43 | def IsExecutable(fpath): 44 | return os.path.isfile(fpath) and os.access(fpath, os.X_OK) 45 | 46 | def MakeExecutable(path): 47 | mode = os.stat(path).st_mode 48 | mode |= (mode & 0o444) >> 2 # copy R bits to X 49 | os.chmod(path, mode) 50 | 51 | def GetExePath():# get self dir 52 | #dir_path = os.path.dirname(os.path.realpath(__file__)) 53 | dir_path = os.getcwd() 54 | return dir_path 55 | 56 | def CmdClean(cmdpath):#escape spec chars 57 | spchars = "\\`$();|{}&'\"*?<>[]!^~-#\n\r " 58 | for i in spchars: 59 | cmdpath = string.replace(cmdpath,i,"\\"+i) 60 | 61 | return cmdpath 62 | 63 | def ReplaceSuffix(orig_file_str,new_ext): 64 | filename,ext = os.path.splitext(orig_file_str) 65 | ext = ext.strip() 66 | if ext != "": 67 | return "%s.%s"%(filename,new_ext) 68 | 69 | def FileExists(name): # both file and dir checked 70 | return os.path.exists(name) 71 | 72 | 73 | def ReadTheFileContent(filename): 74 | data = "" 75 | with open(filename, 'r') as myfile: 76 | data = myfile.read() 77 | return data 78 | 79 | def midRect(x,y,width,height,canWidth,canHeight): 80 | return pygame.Rect(min(canWidth,x-width/2),min(canHeight,y-height/2),width,height) 81 | 82 | #surface color change 83 | def color_surface(surface, color): 84 | red = color.r 85 | green = color.g 86 | blue = color.b 87 | arr = pygame.surfarray.pixels3d(surface) 88 | arr[:,:,0] = red 89 | arr[:,:,1] = green 90 | arr[:,:,2] = blue 91 | 92 | 93 | def DrawText(canvas,text, x,y,width,height,canWidth,canHeight,fontObj):# text for content,fontObj for pygame.font.Font 94 | _w = 0 95 | _tp = len(text) 96 | 97 | for idx,t in enumerate(fontObj.metrics(text)): 98 | _w = _w + t[1] - t[0] 99 | if _w > icon_width: 100 | _tp = idx 101 | break 102 | width = _w #recalc the width of text 103 | if width > icon_width: ##Label width max is icon width 104 | width = icon_width 105 | 106 | if _tp < len(text):##cut the text to fit width 107 | text = text[0:_tp] 108 | 109 | canvas.blit(fontObj.render(text,True,(83,83,83)),midRect(x,y,width,height,canWidth,canHeight)) 110 | 111 | 112 | def SwapAndShow(): 113 | screen = pygame.display.get_surface() 114 | if config.GlobalScale > 1: 115 | pygame.transform.scale(config.GlobalCanvas,(Width*config.GlobalScale,Height*config.GlobalScale),config.GlobalCanvas2) 116 | screen.blit(config.GlobalCanvas2,(0,0,Width*config.GlobalScale,Height*config.GlobalScale)) 117 | elif config.GlobalScale == 1: 118 | screen.blit(config.GlobalCanvas,(0,0,Width,Height)) 119 | 120 | pygame.display.update() 121 | 122 | def ArmSystem(cmd): 123 | if "arm" not in platform.machine(): 124 | return 125 | os.system(cmd) 126 | 127 | def InGameShell(): 128 | if "arm" not in platform.machine(): 129 | return True 130 | else: 131 | return False 132 | -------------------------------------------------------------------------------- /sys.py/UI/widget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | class Widget: 4 | _PosX =0 5 | _PosY = 0 6 | _Width = 0 7 | _Height = 0 8 | 9 | def __init__(self): 10 | pass 11 | 12 | def NewCoord(self,x,y): 13 | self._PosX = x 14 | self._PosY = y 15 | 16 | def Coord(self): 17 | return self._PosX,self._PosY 18 | 19 | def Width(self): 20 | return self._Width 21 | 22 | def Height(self): 23 | return self._Height 24 | 25 | def Size(self): 26 | return self._Width,self._Height 27 | -------------------------------------------------------------------------------- /sys.py/UI/yes_cancel_confirm_page.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import pygame 4 | 5 | #UI lib 6 | from UI.constants import RUNSYS 7 | from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB 8 | from UI.confirm_page import ConfirmPage 9 | from UI.lang_manager import MyLangManager 10 | from UI.skin_manager import MySkinManager 11 | 12 | class YesCancelConfirmPage(ConfirmPage): 13 | 14 | _ConfirmText = MyLangManager.Tr("Awaiting Input") 15 | _FootMsg = ["Nav","","","Cancel","Yes"] 16 | _StartOrA_Event = None 17 | _Key_X_Event = None 18 | _Key_Y_Event = None 19 | 20 | def KeyDown(self,event): 21 | 22 | if IsKeyMenuOrB(event.key): 23 | self.ReturnToUpLevelPage() 24 | self._Screen.Draw() 25 | self._Screen.SwapAndShow() 26 | 27 | if IsKeyStartOrA(event.key): 28 | if self._StartOrA_Event != None: 29 | if callable( self._StartOrA_Event): 30 | self._StartOrA_Event() 31 | self.ReturnToUpLevelPage() 32 | 33 | if event.key == CurKeys["X"]: 34 | if self._Key_X_Event != None: 35 | if callable( self._Key_X_Event): 36 | self._Key_X_Event() 37 | self.ReturnToUpLevelPage() 38 | 39 | if event.key == CurKeys["Y"]: 40 | if self._Key_Y_Event != None: 41 | if callable( self._Key_Y_Event): 42 | self._Key_Y_Event() 43 | self.ReturnToUpLevelPage() 44 | 45 | -------------------------------------------------------------------------------- /sys.py/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import platform 4 | from UI.util_funcs import FileExists,ArmSystem,ReadTheFileContent 5 | from pyaria2_rpc.pyaria2 import Xmlrpc 6 | 7 | CurKeySet = "GameShell" ## >>> PC or GameShell <<< 8 | 9 | DontLeave = False 10 | 11 | BackLight = "/proc/driver/backlight" 12 | Battery = "/sys/class/power_supply/axp20x-battery/uevent" 13 | FB_Modes = "/sys/class/graphics/fb0/modes" 14 | 15 | MPD_socket = "/tmp/mpd.socket" 16 | 17 | UPDATE_URL="https://raw.githubusercontent.com/clockworkpi/CPI/master/launcher_ver0.4.json" 18 | 19 | VERSION="stable 1.25" 20 | 21 | SKIN=None 22 | 23 | ButtonsLayout="xbox" 24 | 25 | RPC = None 26 | ## three timer values in seconds: dim screen, close screen,PowerOff 27 | ## zero means no action 28 | PowerLevels = {} 29 | PowerLevels["supersaving"] = [10,30,120] 30 | PowerLevels["powersaving"] = [40,120,300] 31 | PowerLevels["server"] = [40,120,0] 32 | PowerLevels["balance_saving"] = [40,0,0] 33 | 34 | PowerLevel = "balance_saving" 35 | 36 | GlobalCanvas=None 37 | GlobalCanvas2=None 38 | GlobalScale = 1 39 | 40 | def PreparationInAdv(): 41 | global SKIN,ButtonsLayout,FB_Modes,GlobalScale 42 | global PowerLevel 43 | global RPC 44 | if SKIN != None: 45 | return 46 | 47 | SKIN= "../skin/default" 48 | 49 | if FileExists("%s/.gameshell_skin" % os.path.expanduser('~')) == True: 50 | with open("%s/.gameshell_skin" % os.path.expanduser('~'),"r") as f: 51 | gameshell_skin = f.read() 52 | 53 | gameshell_skin = gameshell_skin.strip() 54 | SKIN= gameshell_skin 55 | 56 | if FileExists(".buttonslayout") == True: 57 | with open(".buttonslayout") as f: 58 | btnlayout = f.read() 59 | 60 | btnlayout = btnlayout.strip() 61 | ButtonsLayout = btnlayout 62 | if ButtonsLayout != "xbox" and ButtonsLayout != "snes": 63 | ButtonsLayout = "xbox" 64 | 65 | if FileExists(".powerlevel") == False: 66 | os.system("touch .powerlevel") 67 | 68 | with open(".powerlevel","r") as f: 69 | powerlevel = f.read() 70 | 71 | powerlevel = powerlevel.strip() 72 | if powerlevel != "": 73 | PowerLevel = powerlevel 74 | if powerlevel != "supersaving": 75 | ArmSystem("sudo iw wlan0 set power_save off >/dev/null") 76 | else: 77 | ArmSystem("sudo iw wlan0 set power_save on > /dev/null") 78 | else: 79 | ArmSystem("sudo iw wlan0 set power_save off >/dev/null") 80 | 81 | if FileExists(FB_Modes): 82 | modes = ReadTheFileContent(FB_Modes) 83 | if "320x240" in modes: 84 | GlobalScale = 1 85 | if "640x480" in modes: 86 | GlobalScale = 2 87 | if "480x640" in modes: 88 | GlobalScale = 2 89 | else: 90 | GlobalScale = 1 91 | 92 | RPC = Xmlrpc('localhost', 6800) 93 | PreparationInAdv() 94 | ##sys.py/.powerlevel 95 | 96 | -------------------------------------------------------------------------------- /sys.py/gameshell/wallpaper/desktopbg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gameshell/wallpaper/desktopbg.jpg -------------------------------------------------------------------------------- /sys.py/gameshell/wallpaper/gameover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gameshell/wallpaper/gameover.png -------------------------------------------------------------------------------- /sys.py/gameshell/wallpaper/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gameshell/wallpaper/loading.png -------------------------------------------------------------------------------- /sys.py/gameshell/wallpaper/seeyou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gameshell/wallpaper/seeyou.png -------------------------------------------------------------------------------- /sys.py/gameshell/wallpaper/updating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gameshell/wallpaper/updating.png -------------------------------------------------------------------------------- /sys.py/gsnotify/Jobs/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gsnotify/Jobs/.gitkeep -------------------------------------------------------------------------------- /sys.py/gsnotify/Jobs/00_lowpower.alias: -------------------------------------------------------------------------------- 1 | Low Battery 2 | -------------------------------------------------------------------------------- /sys.py/gsnotify/Jobs/00_lowpower.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BAT_PNT=$(upower -i "$(upower -e | grep 'battery')" | grep -E "state|to\ full|percentage" | awk '/perc/{print $2}' | cut -d % -f1 ) 4 | 5 | if [ "$BAT_PNT" -lt "20" ]; then 6 | 7 | if [ "$BAT_PNT" -lt "5" ]; then 8 | echo '{"type":"once","content":"Low Battery: 5% of battery remaining"}' 9 | elif [ "$BAT_PNT" -lt "10" ]; then 10 | echo '{"type":"once","content":"Low Battery: 10% of battery remaining"}' 11 | fi 12 | 13 | else 14 | echo "$BAT_PNT" 15 | fi 16 | -------------------------------------------------------------------------------- /sys.py/gsnotify/gsnotify-arm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/gsnotify/gsnotify-arm -------------------------------------------------------------------------------- /sys.py/gsnotify/md5sum: -------------------------------------------------------------------------------- 1 | f174bb3f8e91ce01ae03d70864425abb gsnotify-arm 2 | -------------------------------------------------------------------------------- /sys.py/langs/00_English.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=Settings 3 | Retro Games=Retro Games 4 | Music Player=Music Player 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=PowerOFF 7 | Reload UI=Reload UI 8 | freeDM=freeDM 9 | CaveStory=CaveStory 10 | RetroArch=RetroArch 11 | Launching=Launching.... 12 | Nav=Nav 13 | Scan=Scan 14 | Back=Back 15 | Enter=Enter 16 | Remove=Remove 17 | Backspace=Backspace 18 | Done=Done 19 | Run=Run 20 | AddToPlayList=Add to Playlist 21 | Add to Playlist=Add to Playlist 22 | DownloadConfirm=Download Confirm 23 | MyFavGames=my favorite games 24 | Deleting=Deleting... 25 | AddFav=Add Fav 26 | ADdFavList=Add to favourite list 27 | Del=Del 28 | Please upload data over Wi-Fi=Please upload data over Wi-Fi 29 | ConfirmDeleteQ=Confirm Delete ? 30 | AlreadyExisted=Already existed 31 | Cancel=Cancel 32 | Yes=Yes 33 | ConfirmQ=Confirm? 34 | Disconnecting=Disconnecting... 35 | ConfirmUpdateToFQ=Confirm Update to %%s ? 36 | UpdateToFQ=Update to %%s ? 37 | SetupGameEngineAutoQ=Do you want to setup this game engine automatically? 38 | Downloading=Downloading... 39 | BATOver5Pct=Battery must over 5%% 40 | DeleteConfirm=Delete Confirm 41 | FavouriteGames=Favourite Games 42 | ConfirmForgetQ=Confirm Forget? 43 | ConfirmForget=Confirm Forget 44 | Disconnect=Disconnect 45 | ConfirmDisconnectQ=Confirm Disconnect ? 46 | Confirm Disconnect=Confirm Disconnect 47 | Forget=Forget 48 | Forgeting=Forgeting... 49 | Info=Info 50 | TryConnect=TryConnect 51 | Bluetooth Info=Bluetooth info 52 | Connecting=Connecting 53 | BluetoothScanning=Bluetooth scanning... 54 | Scanning=Scanning.. 55 | ShutDownConnecting=ShutDownConnecting... 56 | Select=Select 57 | Detail=Detail 58 | Applying=Applying... 59 | DownloadFailed=Download failed 60 | LauncherIsUpToDate=Launcher is up to date 61 | CheckWifiConnection=Please Check your Wi-Fi connection 62 | TurningOn=Turning On 63 | TurningOff=Turning Off 64 | Invalid=Invalid 65 | CheckingUpdate=Checking update... 66 | CheckingUpdateFailed=Checking update failed 67 | Update=Update 68 | Toggle=Toggle 69 | Rescue=Rescue 70 | Airplane Mode=Airplane Mode 71 | minutes=minutes 72 | seconds=seconds 73 | second=second 74 | minute=minute 75 | Never=Never 76 | Power Options=Power Options 77 | Languages=Languages 78 | Notify=Notify 79 | Setting List=Setting List 80 | Wi-Fi=Wi-Fi 81 | Bluetooth=Bluetooth 82 | Sound Volume=Sound Volume 83 | Brightness=Brightness 84 | BackLight Brightness=BackLight Brightness 85 | Storage=Storage 86 | Timezone=Timezone 87 | Timezone Selection=Timezone Selection 88 | Notification=Notification 89 | About=About 90 | Power off=Power off 91 | Buttons Layout=Buttons Layout 92 | UpdateRetroArch=UpdateRetroArch 93 | Wifi scanning=Wifi scanning... 94 | Power option detail=Power option detail 95 | Screen dimming=Screen dimming 96 | Screen OFF=Screen OFF 97 | Power OFF=Power OFF 98 | Power saving=Power saving 99 | Balanced=Balanced 100 | Server=Server 101 | Performance=Performance 102 | Confirm Power OFF?=Confirm Power OFF? 103 | Reboot=Reboot 104 | Shutdown=Shutdown 105 | my favorite music=my favorite music 106 | Check Update=Check Update 107 | -------------------------------------------------------------------------------- /sys.py/langs/01_日本語.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=設定 3 | Retro Games=Retro Games 4 | Music Player=音楽プレーヤー 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=電源オフ 7 | Reload UI=リロードUI 8 | freeDM=デュークニューケム 9 | CaveStory=洞窟物語 10 | RetroArch=RetroArch 11 | Launching=起動中... 12 | Nav=ナビ 13 | Scan=スキャン 14 | Back=後ろ 15 | Enter=エンター 16 | Remove=削除 17 | Backspace=後退 18 | Done=完了 19 | Run=起動 20 | AddToPlayList=再生リストに追加 21 | Add to Playlist=再生リストに追加 22 | DownloadConfirm=ダウンロード確認 23 | MyFavGames=お気に入りのゲーム 24 | Deleting=削除 25 | AddFav=お気に入りに追加 26 | ADdFavList=お気に入りリストに登録 27 | Del=削除 28 | Please upload data over Wi-Fi=Wi-Fiでデータ転送 29 | ConfirmDeleteQ=削除しますか? 30 | AlreadyExisted=既に存在している 31 | Cancel=取り消す 32 | Yes=はい 33 | ConfirmQ=確認? 34 | Disconnecting=接続を切断 35 | ConfirmUpdateToFQ=%%sにアップデートしますか? 36 | UpdateToFQ=%%sにアップデート? 37 | SetupGameEngineAutoQ=ゲームエンジンの自動セットアップを希望しますか? 38 | Downloading=ダウンロード中 39 | BATOver5Pct=バッテリーは5%%以上が必要 40 | DeleteConfirm=削除の確認 41 | FavouriteGames=お気に入りのゲーム 42 | ConfirmForgetQ=無視しますか? 43 | ConfirmForget=無視しますか 44 | Disconnect=接続を切断 45 | ConfirmDisconnectQ=接続を切りますか? 46 | Confirm Disconnect=接続を切りますか 47 | Forget=無視 48 | Forgeting=無視中 49 | Info=情報 50 | TryConnect=接続を試みる 51 | Bluetooth Info=ブルートゥース情報 52 | Connecting=接続中 53 | BluetoothScanning=ブルートゥーススキャン中 54 | Scanning=スキャン中 55 | ShutDownConnecting=接続を切断 56 | Select=選択 57 | Detail=詳細 58 | Applying=応用中 59 | DownloadFailed=ダウンロード失敗 60 | LauncherIsUpToDate=Launcher更新済み 61 | CheckWifiConnection=wifi接続をチェックしてください 62 | TurningOn=開けている 63 | TurningOff=閉じている 64 | Invalid=無効 65 | CheckingUpdate=アップデート確認中 66 | CheckingUpdateFailed=アップデート確認失敗 67 | Update=更新 68 | Toggle=切り替え 69 | Rescue=救う 70 | Airplane Mode=機内モード 71 | minutes=分 72 | seconds=秒 73 | second=秒 74 | minute=分 75 | Never=決してしない 76 | Power Options=電源オプション 77 | Languages=言語 78 | Notify=通知ウィジェット 79 | Setting List=設定リスト 80 | Wi-Fi=Wi-Fi 81 | Bluetooth=ブルートゥース 82 | Sound Volume=音量 83 | Sound Volume=音量 84 | Brightness=明るさ 85 | BackLight Brightness=バックライトの明るさ 86 | Storage=ストレージ 87 | Timezone=時地 88 | Timezone Selection=タイムゾーン選択 89 | Notification=注意を通知する 90 | About=について 91 | Power off=電源オフ 92 | Buttons Layout=ボタンの配置 93 | UpdateRetroArch=RetroArchを更新 94 | Wifi scanning=wifiスキャン中 95 | Power option detail=電源オプション 96 | Screen dimming=画面が暗くなる 97 | Screen OFF=スクリーンオフ 98 | Power OFF=電源オフ 99 | Power saving=省エネルギー 100 | Balanced=バランス 101 | Server=サーバ 102 | Performance=性能 103 | Confirm Power OFF?=電源オフしますか? 104 | Reboot=再起動 105 | Shutdown=シャットダウン 106 | Play List=プレイリスト 107 | Music Library=ミュージックライブラリ 108 | Play/Pause=再生/停止 109 | my favorite music=お気に入り 110 | Check Update=アップデートをチェック 111 | -------------------------------------------------------------------------------- /sys.py/langs/02_한국어.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=설정 3 | Retro Games=레트로 게임 4 | Music Player=뮤직 플레이어 5 | TinyCloud=타이니 클라우드 6 | Indie Games=인디 게임 7 | PowerOFF=전원끄기 8 | Reload UI=UI 재설정 9 | freeDM=freeDM 10 | CaveStory=케이브 스토리 11 | RetroArch=레트로아크 12 | Launching=실행 중.... 13 | Nav=이동 14 | Scan=스캔 15 | Back=이전 16 | Enter=확인 17 | Remove=제거 18 | Backspace=백스페이스 19 | Done=완료 20 | Run=실행 21 | AddToPlayList=재생목록에 추가 22 | Add to Playlist=재생목록에 추가 23 | DownloadConfirm=다운로드 확인 24 | MyFavGames=내 즐겨찾기 게임 25 | Deleting=삭제 중... 26 | AddFav=즐겨찾기 추가 27 | AddFavList=즐겨찾기 목록에 추가 28 | Del=삭제 29 | Please upload data over Wi-Fi=Wi-Fi를 통해 데이터를 업로드하세요 30 | ConfirmDeleteQ=삭제하시겠습니까? 31 | AlreadyExisted=이미 존재함 32 | Cancel=취소 33 | Yes=예 34 | ConfirmQ=확인? 35 | Disconnecting=연결해제 중... 36 | ConfirmUpdateToFQ=%%s 버전으로 업데이트 합니까? 37 | UpdateToFQ=%%s 업데이트? 38 | SetupGameEngineAutoQ=현재 게임 엔진을 자동으로 설치할까요? 39 | Downloading=다운로드 중... 40 | BATOver5Pct=배터리가 5%% 이상이어야 합니다 41 | DeleteConfirm=삭제 확인 42 | FavouriteGames=즐겨찾기 게임 43 | ConfirmForgetQ=등록해제 확인? 44 | ConfirmForget=등록해제 확인 45 | Disconnect=연결해제 46 | ConfirmDisconnectQ=연결해제 확인? 47 | Confirm Disconnect=연결해제 확인 48 | Forget=등록해제 49 | Forgeting=등록해제 중... 50 | Info=정보 51 | TryConnect=연결시도 52 | Bluetooth Info=블루투스 정보 53 | Connecting=연결 중 54 | BluetoothScanning=블루투스 검색 중... 55 | Scanning=검색 중.. 56 | ShutDownConnecting=연결종정료 중... 57 | Select=선택 58 | Detail=세부정보 59 | Applying=적용 중... 60 | DownloadFailed=다운로드 실패 61 | LauncherIsUpToDate=런처가 최신입니다 62 | CheckWifiConnection=Wi-Fi 연결을 확인하십시오 63 | TurningOn=켜기 64 | TurningOff=끄기 65 | Invalid=잘못됨 66 | CheckingUpdate=업데이트 확인 중... 67 | CheckingUpdateFailed=업데이트 확인 실패 68 | Update=업데이트 69 | Toggle=토글 70 | Rescue=Rescue 71 | Airplane Mode=비행기 모드 72 | minutes=분 73 | seconds=초 74 | second=초 75 | minute=분 76 | Never=사용안함 77 | Power Options=전원 옵션 78 | Languages=언어 79 | Notify=알림 80 | Setting List=설정 목록 81 | Wi-Fi=Wi-Fi 82 | Bluetooth=블루투스 83 | Sound Volume=사운드 볼륨 84 | Sound volume=사운드 볼륨 85 | Brightness=밝기 86 | BackLight Brightness=백라이트 밝기 87 | Storage=저장공간 88 | Timezone=시간대 89 | Timezone Selection=시간대 선택 90 | Notification=알림 91 | About=정보 92 | Power off=전원 끄기 93 | Buttons Layout=버튼 레이아웃 94 | UpdateRetroArch=레트로아크 업데이트 95 | Wifi scanning=Wifi 검색 중... 96 | Power option detail=전원 옵션 세부정보 97 | Screen dimming=화면 어둡게 98 | Screen OFF=화면 끄기 99 | Power OFF=전원 끄기 100 | Power saving=전원 절역모드 101 | Balanced=균형 102 | Server=서버 103 | Performance=퍼포먼스 104 | Confirm Power OFF?=전원 끄기 확인? 105 | Reboot=재시작 106 | Shutdown=종료 107 | my favorite music=내 즐겨찾기 음악 108 | Check Update=업데이트 확인 109 | GPU Driver Switch=GPU 드라이버 변경 110 | Switch to LauncherGo=런처고로 변경 111 | Network gateway switch=네트워크 게이트웨이 변경 112 | Update Launcher=런처 업데이트 113 | Theme Manager=테마 매니저 -------------------------------------------------------------------------------- /sys.py/langs/03_简体中文.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=设置 3 | Retro Games=Retro Games 4 | Music Player=音乐播放器 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=关机 7 | Reload UI=重载菜单 8 | freeDM=freeDM 9 | CaveStory=洞窟物语 10 | Launching=正在启动... 11 | Nav=导航 12 | Scan=扫描 13 | Back=返回 14 | Enter=进入 15 | Remove=删除 16 | Backspace=退格 17 | Done=完成 18 | Run=运行 19 | AddToPlayList=添加到播放列表 20 | Add to Playlist=添加到播放列表 21 | DownloadConfirm=下载确认 22 | MyFavGames=加星游戏列表 23 | Deleting=删除中... 24 | AddFav=加星 25 | Del=删 26 | Please upload data over Wi-Fi=请通过无线Wifi上传数据 27 | ConfirmDeleteQ=确认删除? 28 | AlreadyExisted=已存在 29 | Cancel=取消 30 | Yes=是 31 | ConfirmQ=确认? 32 | Disconnecting=断开连接... 33 | ConfirmUpdateToFQ=确认升级至 %%s ? 34 | UpdateToFQ=更新至 %%s ? 35 | SetupGameEngineAutoQ=你希望自动安装游戏引擎部件吗? 36 | Downloading=下载中... 37 | BATOver5Pct=电量必须多余5%% 38 | DeleteConfirm=删除确认 39 | FavouriteGames=偏好游戏 40 | ConfirmForgetQ=确认忽略? 41 | ConfirmForget=确认忽略 42 | Disconnect=断开 43 | ConfirmDisconnectQ=确认断开? 44 | Confirm Disconnect=确认断开 45 | Forget=忽略 46 | Forgeting=忽略中... 47 | Info=属性 48 | TryConnect=试连接 49 | Bluetooth Info=蓝牙属性 50 | Connecting=连接中 51 | BluetoothScanning=蓝牙搜索中... 52 | Scanning=搜索中.. 53 | ShutDownConnecting=断开连接... 54 | Select=选择 55 | Detail=详细 56 | Applying=设置中... 57 | DownloadFailed=下载失败 58 | LauncherIsUpToDate=Launcher已是最新 59 | CheckWifiConnection=请检查 Wi-Fi 连接 60 | TurningOn=打开 61 | TurningOff=关闭 62 | Invalid=非法 63 | CheckingUpdate=检查更新... 64 | CheckingUpdateFailed=检查更新失败 65 | Update=更新 66 | Toggle=切换 67 | Rescue=重置无线设备 68 | Airplane Mode=飞行模式 69 | minutes=分 70 | seconds=秒 71 | second=秒 72 | minute=分 73 | Never=永不 74 | Power Options=电源选项 75 | Languages=语言 76 | Notify=提醒 77 | Setting List=设置列表 78 | Wi-Fi=Wi-Fi 79 | Bluetooth=蓝牙 80 | Sound Volume=音量 81 | Sound volume=音量 82 | Sound Volume=音量 83 | Brightness=亮度 84 | BackLight Brightness=背光亮度 85 | Storage=存储空间 86 | Timezone=时区 87 | Timezone Selection=时区选择 88 | Notification=提醒控件 89 | Update Launcher=更新启动器 90 | About=关于GameShell 91 | Power off=关机 92 | Buttons Layout=按钮布局 93 | UpdateRetroArch=更新RetroArch 94 | Wifi scanning=WiFi扫描中 95 | Power option detail=电源选项 96 | Screen dimming=屏幕变暗 97 | Screen OFF=关闭屏幕 98 | Power OFF=关机 99 | Power saving=节能 100 | Balanced=平衡 101 | Server=服务器 102 | Performance=性能 103 | Confirm Power OFF?=确认关机? 104 | Reboot=重启 105 | Shutdown=关闭 106 | Play List=播放列表 107 | Music Library=乐库 108 | Play/Pause=播放/暂停 109 | my favorite music=我的音乐库 110 | Check Update=检查更新 111 | Theme Manager=主题管理 112 | Switch to LauncherGo=切换至LauncherGo 113 | GPU Driver Switch=切换GPU驱动 114 | GPU driver switch=切换GPU驱动 115 | Network gateway switch=切换网关 116 | Rebooting to LauncherGo=正在重启至LauncherGo... 117 | Awaiting Input=等待输入中... 118 | -------------------------------------------------------------------------------- /sys.py/langs/04_繁体中文.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=設置 3 | Retro Games=Retro Games 4 | Music Player=音樂播放器 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=關機 7 | Reload UI=重載菜單 8 | freeDM=freeDM 9 | CaveStory=洞窟物語 10 | Launching=正在啟動... 11 | Nav=導航 12 | Scan=掃描 13 | Back=返回 14 | Enter=進入 15 | Remove=刪除 16 | Backspace=退格 17 | Done=完成 18 | Run=運行 19 | AddToPlayList=添加到播放列表 20 | Add to Playlist=添加到播放列表 21 | DownloadConfirm=下載確認 22 | MyFavGames=加星遊戲列表 23 | Deleting=刪除中... 24 | AddFav=加星 25 | Del=刪 26 | Please upload data over Wi-Fi=請通過無線Wifi上傳數據 27 | ConfirmDeleteQ=確認刪除? 28 | AlreadyExisted=已存在 29 | Cancel=取消 30 | Yes=是 31 | ConfirmQ=確認? 32 | Disconnecting=斷開連接... 33 | ConfirmUpdateToFQ=確認升級至 %%s ? 34 | UpdateToFQ=更新至 %%s ? 35 | SetupGameEngineAutoQ=你希望自動安裝遊戲引擎部件嗎? 36 | Downloading=下載中... 37 | BATOver5Pct=電量必須多余5%% 38 | DeleteConfirm=刪除確認 39 | FavouriteGames=偏好遊戲 40 | ConfirmForgetQ=確認忽略? 41 | ConfirmForget=確認忽略 42 | Disconnect=斷開 43 | ConfirmDisconnectQ=確認斷開? 44 | Confirm Disconnect=確認斷開 45 | Forget=忽略 46 | Forgeting=忽略中... 47 | Info=屬性 48 | TryConnect=試連接 49 | Bluetooth Info=藍牙屬性 50 | Connecting=連接中 51 | BluetoothScanning=藍牙搜索中... 52 | Scanning=搜索中.. 53 | ShutDownConnecting=斷開連接... 54 | Select=選擇 55 | Detail=詳細 56 | Applying=設置中... 57 | DownloadFailed=下載失敗 58 | LauncherIsUpToDate=Launcher已是最新 59 | CheckWifiConnection=請檢查 Wi-Fi 連接 60 | TurningOn=打開 61 | TurningOff=關閉 62 | Invalid=非法 63 | CheckingUpdate=檢查更新... 64 | CheckingUpdateFailed=檢查更新失敗 65 | Update=更新 66 | Toggle=切換 67 | Rescue=重置無線設備 68 | Airplane Mode=飛行模式 69 | minutes=分 70 | seconds=秒 71 | second=秒 72 | minute=分 73 | Never=永不 74 | Power Options=電源選項 75 | Languages=語言 76 | Notify=提醒 77 | Setting List=設置列表 78 | Wi-Fi=Wi-Fi 79 | Bluetooth=藍牙 80 | Sound Volume=音量 81 | Sound volume=音量 82 | Sound Volume=音量 83 | Brightness=亮度 84 | BackLight Brightness=背光亮度 85 | Storage=存儲空間 86 | Timezone=時區 87 | Timezone Selection=時區選擇 88 | Notification=提醒控件 89 | Update Launcher=更新啟動器 90 | About=關於GameShell 91 | Power off=關機 92 | Buttons Layout=按鈕布局 93 | UpdateRetroArch=更新RetroArch 94 | Wifi scanning=WiFi掃描中 95 | Power option detail=電源選項 96 | Screen dimming=屏幕變暗 97 | Screen OFF=關閉屏幕 98 | Power OFF=關機 99 | Power saving=節能 100 | Balanced=平衡 101 | Server=服務器 102 | Performance=性能 103 | Confirm Power OFF?=確認關機? 104 | Reboot=重啟 105 | Shutdown=關閉 106 | Play List=播放列表 107 | Music Library=樂庫 108 | Play/Pause=播放/暫停 109 | my favorite music=我的音樂庫 110 | Check Update=檢查更新 111 | Theme Manager=主題管理 112 | GPU Driver Switch=切換GPU驅動 113 | -------------------------------------------------------------------------------- /sys.py/langs/05_Spanish.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=Opciones 3 | Retro Games=Juegos Retro 4 | Indie Games=Juegos Indie 5 | Music Player=Música 6 | TinyCloud=TinyCloud 7 | PowerOFF=Apagar 8 | Reload UI=Recargar IU 9 | freeDM=freeDM 10 | CaveStory=CaveStory 11 | RetroArch=RetroArch 12 | Launching=Cargando.... 13 | Nav=Nav 14 | Scan=Buscar 15 | Back=Volver 16 | Enter=Entrar 17 | Remove=Borrar 18 | Backspace=Borrar 19 | Done=Hecho 20 | Run=Abrir 21 | AddToPlayList=Añadir a lista 22 | Add to Playlist=Añadir a lista 23 | DownloadConfirm=Confirmar descarga 24 | Download Confirm=Confirmar descarga 25 | MyFavGames=mis juegos favoritos 26 | Deleting=Borrando... 27 | AddFav=Favorito 28 | AddFavList=Añadido a favoritos 29 | Del=Borrar 30 | Please upload data over Wi-Fi=Carga datos por Wi-Fi 31 | ConfirmDeleteQ=¿Confirmar borrado? 32 | AlreadyExisted=Ya existía 33 | Cancel=Cancelar 34 | Yes=Sí 35 | ConfirmQ=¿Confirmar? 36 | Disconnecting=Desconectando... 37 | ConfirmUpdateToFQ=¿Confirmar actualización al %%s ? 38 | UpdateToFQ=¿Actualizar al %%s ? 39 | SetupGameEngineAutoQ=¿Descargar emulador? 40 | Downloading=Descargando... 41 | BATOver5Pct=La batería debe ser superior al 5%% 42 | DeleteConfirm=Confirmar borrado 43 | FavouriteGames=Juegos favoritos 44 | ConfirmForgetQ=¿Confirmar olvidar? 45 | ConfirmForget=Confirmar olvidar 46 | Disconnect=Desconectar 47 | ConfirmDisconnectQ=¿Confirmar desconectar? 48 | Confirm Disconnect=Confirmar desconectar 49 | Forget=Olvidar 50 | Forgeting=Olvidando... 51 | Info=Info 52 | TryConnect=Intentar conectar 53 | Bluetooth Info=Info Bluetooth 54 | Connecting=Conectando 55 | BluetoothScanning=Escaneando Bluetooth... 56 | Scanning=Escaneando... 57 | ShutDownConnecting=Terminando conectar... 58 | Select=Seleccionar 59 | Detail=Detalle 60 | Applying=Aplicando... 61 | DownloadFailed=Descarga fallida 62 | LauncherIsUpToDate=Lanzador ya actualizado 63 | CheckWifiConnection=Comprueba tu conexión Wi-Fi 64 | TurningOn=Encendiendo 65 | TurningOff=Apagando 66 | Invalid=Inválido 67 | CheckingUpdate=Comprobando actualizaciones... 68 | CheckingUpdateFailed=Fallo al comprobar 69 | Update=Actualizar 70 | Toggle=Alternar 71 | Rescue=Rescatar 72 | Airplane Mode=Modo avión 73 | minutes=minutos 74 | seconds=segundos 75 | second=segundo 76 | minute=minuto 77 | Never=Nunca 78 | Power Options=Opciones de energía 79 | Languages=Idiomas 80 | Notify=Notificaciones 81 | Setting List=Lista de opciones 82 | Wi-Fi=Wi-Fi 83 | Bluetooth=Bluetooth 84 | Sound Volume=Volumen de sonido 85 | Sound volume=Volumen de sonido 86 | Brightness=Brillo 87 | BackLight Brightness=Brillo de pantalla 88 | Storage=Almacenamiento 89 | Timezone=Zona horaria 90 | Timezone Selection=Seleccionar zona horaria 91 | Notification=Notificaciones 92 | About=Acerca de 93 | Power off=Apagar 94 | Buttons Layout=Disposición de botones 95 | UpdateRetroArch=Actualizar RetroArch 96 | Wifi scanning=Buscando Wifi... 97 | Power option detail=Detalle opciones energía 98 | Screen dimming=Oscurecer pantalla 99 | Screen OFF=Apagar pantalla 100 | Power OFF=Apagar 101 | Power saving=Ahorro energía 102 | Balanced=Equilibrado 103 | Server=Servidor 104 | Performance=Rendimiento 105 | Confirm Power OFF?=¿Confirmar apagado? 106 | Reboot=Reiniciar 107 | Shutdown=Apagar 108 | my favorite music=mi música favorita 109 | Check Update=Buscar actualizaciones 110 | Switch to LauncherGo=Cambiar a LauncherGo 111 | GPU driver switch=Cambiar controlador gráfico 112 | Network gateway switch=Cambiar pasarela de red 113 | Gateway switch=Cambiar pasarela 114 | Clear All=Limpiar todo 115 | Cleaning up=Limpiando 116 | Overwrite RA conf=Restaurar conf RA 117 | Music Library=Biblioteca musical 118 | Play List=Lista de reproducción 119 | Play/Pause=Repr/Pausa 120 | Awaiting Input=Escoge una opción 121 | Scan wifi=Escanear Wifi 122 | Wifi info=Información Wifi -------------------------------------------------------------------------------- /sys.py/langs/06_French.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=Réglages 3 | Retro Games=Jeux Retro 4 | Music Player=Musique 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=Arrêt 7 | Reload UI=Recharger IU 8 | freeDM=FreeDooM 9 | CaveStory=CaveStory 10 | RetroArch=RetroArch 11 | Launching=Lancement ... 12 | Nav=Nav 13 | Scan=Scan 14 | Back=Retour 15 | Enter=Entrer 16 | Remove=Supprimer 17 | Backspace=Retour Arrière 18 | Done=Valider 19 | Run=Lancer 20 | AddToPlayList=Ajouter à la playlist 21 | Add to Playlist=Ajouter à la playlist 22 | DownloadConfirm=Confirmer le téléchargement 23 | MyFavGames=Mes jeux favoris 24 | Deleting=Suppression ... 25 | AddFav=Ajouter Favoris 26 | ADdFavList=Ajouter à la liste des favoris 27 | Del=Suppr 28 | Please upload data over Wi-Fi=Aucun fichier 29 | ConfirmDeleteQ=Confirmer la suppression ? 30 | AlreadyExisted=Déjà existant 31 | Cancel=Annuler 32 | Yes=Confirmer 33 | ConfirmQ=Confirmer ? 34 | Disconnecting=Déconnexion ... 35 | ConfirmUpdateToFQ=Confirmer la mise à jour vers %%s ? 36 | UpdateToFQ=Mise à jour vers %%s ? 37 | SetupGameEngineAutoQ=Souhaitez vous installer le moteur du jeux automatiquement ? 38 | Downloading=Téléchargement ... 39 | BATOver5Pct=La batterie doit être à plus de 5% 40 | DeleteConfirm=Suppression effectué 41 | FavouriteGames=Jeux favoris 42 | ConfirmForgetQ=Confirmer l'oubli ? 43 | ConfirmForget=Oubli confirmé 44 | Disconnect=Déconnecter 45 | ConfirmDisconnectQ=Confirmer la déconnexion ? 46 | Confirm Disconnect=Déconnexion effectué 47 | Forget=Oubli 48 | Forgeting=Oubli ... 49 | Info=Info 50 | TryConnect=Se connecter 51 | Bluetooth Info=Info sur le Bluetooth 52 | Connecting=Connexion 53 | BluetoothScanning=Scan Bluetooth en cours ... 54 | Scanning=Scan ... 55 | ShutDownConnecting=Arrêt de la connexion ... 56 | Select=Sélectionner 57 | Detail=Détail 58 | Applying=Application ... 59 | DownloadFailed=Échec du téléchargement 60 | LauncherIsUpToDate=Le lanceur est à jour 61 | CheckWifiConnection=Veuillez vérifier votre connexion Wi-Fi 62 | TurningOn=Allumage 63 | TurningOff=Extinction 64 | Invalid=Invalide 65 | CheckingUpdate=Vérification des mises à jour ... 66 | CheckingUpdateFailed=Échec de la vérification des mises à jour 67 | Update=Mise à jour 68 | Toggle=Basculer 69 | Rescue=Récupération 70 | Airplane Mode=Mode avion 71 | minutes=minutes 72 | seconds=secondes 73 | second=seconde 74 | minute=minute 75 | Never=Jamais 76 | Power Options=Gestion de l'alimentation 77 | Languages=Langues 78 | Notify=Notifications 79 | Setting List=Liste des réglages 80 | Wi-Fi=Wi-Fi 81 | Bluetooth=Bluetooth 82 | Sound Volume=Volume sonore 83 | Sound volume=Volume sonore 84 | Brightness=Luminosité 85 | BackLight Brightness=Rétroéclairage 86 | Storage=Stockage 87 | Timezone=Fuseau horaire 88 | Timezone Selection=Liste des fuseaux horaire 89 | Notification=Notifications 90 | About=À propos 91 | Power off=Arrêt 92 | Buttons Layout=Mappage des touches 93 | UpdateRetroArch=Mettre à jour RetroArch 94 | Wifi scanning=Scan Wi-Fi en cours ... 95 | Power option detail=Détail de l'option 96 | Screen dimming=Atténuation de l'écran 97 | Screen OFF=Extinction de l'écran 98 | Power OFF=Arrêt de l'appareil 99 | Power saving=Économique 100 | Balanced=Équilibré 101 | Server=Serveur 102 | Performance=Performance 103 | Confirm Power OFF?=Confirmer l’arrêt ? 104 | Reboot=Redémarrage 105 | Shutdown=Extinction 106 | my favorite music=Ma musique favorite 107 | Check Update=Vérifier les mises à jour -------------------------------------------------------------------------------- /sys.py/langs/07_Deutsch.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=Einstellungen 3 | Retro Games=Retro Spiele 4 | Music Player=Musik Player 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=Ausschalten 7 | Reload UI=UI Neu Laden 8 | freeDM=freeDM 9 | CaveStory=CaveStory 10 | RetroArch=RetroArch 11 | Launching=Starte.... 12 | Nav=Nav 13 | Scan=Scannen 14 | Back=Zurück 15 | Enter=Enter 16 | Remove=Entfernen 17 | Backspace=Löschen 18 | Done=Fertig 19 | Run=Starten 20 | AddToPlayList=Zur Playlist hinzufügen 21 | Add to Playlist=Zur Playlist hinzufügen 22 | DownloadConfirm=Bestätige Download 23 | MyFavGames=Meine Lieblingsspiele 24 | Deleting=Lösche... 25 | AddFav=Favorit hinzufügen 26 | ADdFavList=Zur Favoritenliste hinzufügen 27 | Del=Löschen 28 | Please upload data over Wi-Fi=Bitte lade die Daten über Wi-Fi hoch 29 | ConfirmDeleteQ=Wirklich löschen? 30 | AlreadyExisted=Existiert bereits 31 | Cancel=Abbrechen 32 | Yes=Ja 33 | ConfirmQ=Bestätigen? 34 | Disconnecting=Trenne... 35 | ConfirmUpdateToFQ=Bestätige Update zu %%s ? 36 | UpdateToFQ=Update zu %%s ? 37 | SetupGameEngineAutoQ=Willst du diese Spiele-Engine automatisch konfigurieren? 38 | Downloading=Lade runter... 39 | BATOver5Pct=Batterie muss über 5%% sein 40 | DeleteConfirm=Löschen bestätigen 41 | FavouriteGames=Lieblings-Spiele 42 | ConfirmForgetQ=Entfernen bestätigen? 43 | ConfirmForget=Bestätige Entfernen 44 | Disconnect=Trennen 45 | ConfirmDisconnectQ=Trennen bestätigen? 46 | Confirm Disconnect=Bestätige Trennen 47 | Forget=Entfernen 48 | Forgeting=Entferne... 49 | Info=Info 50 | TryConnect=Verbinden 51 | Bluetooth Info=Bluetooth Info 52 | Connecting=Verbinde 53 | BluetoothScanning=Scanne Bluetooth... 54 | Scanning=Scanne... 55 | ShutDownConnecting=Verbinden abbrechen... 56 | Select=Auswählen 57 | Detail=Details 58 | Applying=Wende an... 59 | DownloadFailed=Download fehlgeschlagen 60 | LauncherIsUpToDate=Launcher ist auf dem neuesten Stand 61 | CheckWifiConnection=Bitte überprüfe deine Wi-Fi Verbindung 62 | TurningOn=Schalte ein 63 | TurningOff=Schalte aus 64 | Invalid=Ungültig 65 | CheckingUpdate=Überprüfe auf Update... 66 | CheckingUpdateFailed=Auf Update überprüfen fehlgeschlagen 67 | Update=Update 68 | Toggle=Umschalten 69 | Rescue=Retten 70 | Airplane Mode=Flugmodus 71 | minutes=minuten 72 | seconds=sekunden 73 | second=sekunde 74 | minute=minute 75 | Never=Nie 76 | Power Options=Energieoptionen 77 | Languages=Sprachen 78 | Notify=Benachrichtigen 79 | Setting List=Einstellungen 80 | Wi-Fi=Wi-Fi 81 | Bluetooth=Bluetooth 82 | Sound Volume=Lautsprecher 83 | Sound Volume=Lautsprecher 84 | Brightness=Helligkeit 85 | BackLight Brightness=Display Helligkeit 86 | Storage=Speicher 87 | Timezone=Zeitzone 88 | Timezone Selection=Zeitzone auswählen 89 | Notification=Benachrichtigung 90 | About=Über 91 | Power off=Ausschalten 92 | Buttons Layout=Tastenlayout 93 | UpdateRetroArch=RetroArch aktualisieren 94 | Wifi scanning=Wi-Fi Scan... 95 | Power option detail=Energieoptionen Details 96 | Screen dimming=Bildschirmdimmung 97 | Screen OFF=Bildschirm aus 98 | Power OFF=System ausschalten 99 | Power saving=Energiesparen 100 | Balanced=Balanciert 101 | Server=Server 102 | Performance=Leistung 103 | Confirm Power OFF?=Ausschalten bestätigen? 104 | Reboot=Neustart 105 | Shutdown=Ausschalten 106 | my favorite music=Meine Lieblingsmusik 107 | Check Update=Auf Update überprüfen -------------------------------------------------------------------------------- /sys.py/langs/08_Bulgarian.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=Настройки 3 | Retro Games=Ретро игри 4 | Music Player=Музик плеър 5 | TinyCloud=Tiny Cloud 6 | PowerOFF=Изключи 7 | Reload UI=Презареди UI 8 | freeDM=freeDM 9 | CaveStory=CaveStory 10 | RetroArch=RetroArch 11 | Launching=Стартиране.... 12 | Nav=Нав 13 | Scan=Сканиране 14 | Back=Назад 15 | Enter=Въведи 16 | Remove=Премахни 17 | Backspace=Backspace 18 | Done=Изпълнено 19 | Run=Старт 20 | AddToPlayList=Добави към плейлист 21 | Add to Playlist=Добави към плейлист 22 | DownloadConfirm=Потвърждаване Изтегляне 23 | MyFavGames=любимите ми игри 24 | Deleting=Изтриване... 25 | AddFav=Add Fav 26 | ADdFavList=Добавяне към списъка с любими 27 | Del=Изт 28 | Please upload data over Wi-Fi=Моля, качете данни през Wi-Fi 29 | ConfirmDeleteQ=Потвърди Изтриване ? 30 | AlreadyExisted=Вече съществува 31 | Cancel=Отказ 32 | Yes=Да 33 | ConfirmQ=Потвърди? 34 | Disconnecting=Изключване... 35 | ConfirmUpdateToFQ=Потвърдете Актуализиране до %%s ? 36 | UpdateToFQ=Актуализиране до %%s ? 37 | SetupGameEngineAutoQ=Искате ли да настроите този game engine автоматично? 38 | Downloading=Изтегля се... 39 | BATOver5Pct=Батерията трябва да е над 5%% 40 | DeleteConfirm=Потвърдете изтриването 41 | FavouriteGames=Favourite GamesЛюбими игри 42 | ConfirmForgetQ=Потвърдете забравянето? 43 | ConfirmForget=Потвърдете забравянето 44 | Disconnect=Изключване 45 | ConfirmDisconnectQ=Потвърдете Изключване ? 46 | Confirm Disconnect=Потвърдете Изключване 47 | Forget=Забрави 48 | Forgeting=Забравям... 49 | Info=Инфо 50 | TryConnect=TryConnect 51 | Bluetooth Info=Bluetooth информация 52 | Connecting=Свързване 53 | BluetoothScanning=Bluetooth сканиране... 54 | Scanning=Сканиране... 55 | ShutDownConnecting=ShutDownConnecting... 56 | Select=Изберете 57 | Detail=Детайл 58 | Applying=Прилагане... 59 | DownloadFailed=Изтеглянето се провали 60 | LauncherIsUpToDate=Launcher е актуален 61 | CheckWifiConnection=Моля, проверете вашата Wi-Fi връзка 62 | TurningOn=Включване 63 | TurningOff=Изключване 64 | Invalid=Невалиден 65 | CheckingUpdate=Проверката на актуализация... 66 | CheckingUpdateFailed=Проверката на актуализацията не бе успешна 67 | Update=Актуализация 68 | Toggle=Щифт 69 | Rescue=Спаси 70 | Airplane Mode=Самолетен режим 71 | minutes=минути 72 | seconds=секунди 73 | second=секунда 74 | minute=минута 75 | Never=Никога 76 | Power Options=Опции за захранване 77 | Languages=Езици 78 | Notify=Уведоми 79 | Setting List=Настройките 80 | Wi-Fi=Wi-Fi 81 | Bluetooth=Bluetooth 82 | Sound Volume=Сила на звука 83 | Sound Volume=Сила на звука 84 | Brightness=Яркост 85 | BackLight Brightness=Яркост на задната светлина 86 | Storage=памет 87 | Timezone=Часова зона 88 | Timezone Selection=Избор на часова зона 89 | Notification=Съобщение 90 | About=Относно 91 | Power off=изключи захранването 92 | Buttons Layout=Положение на бутони 93 | UpdateRetroArch=UpdateRetroArch 94 | Wifi scanning=Wifi Сканиране... 95 | Power option detail=Детайл за опция за захранване 96 | Screen dimming=Затъмняване на екрана 97 | Screen OFF=изключи екрана 98 | Power OFF=изключи захранването 99 | Power saving=Енергоспестяващ 100 | Balanced=Уравновесен 101 | Server=Сървър 102 | Performance=Перформънс 103 | Confirm Power OFF?=Потвърдете изключването 104 | Reboot=Рестарт 105 | Shutdown=Изключи 106 | my favorite music=любимата ми музика 107 | Check Update=Провери актуализацията 108 | -------------------------------------------------------------------------------- /sys.py/langs/09_Russian.ini: -------------------------------------------------------------------------------- 1 | [Langs] 2 | Settings=Настройки 3 | Retro Games=Ретро-игры 4 | Indie Games=Инди-игры 5 | Utils = Утилиты 6 | Music Player=Плеер 7 | TinyCloud=Tiny Cloud 8 | PowerOFF=Выключить 9 | Reload UI=Обновить UI 10 | freeDM=freeDM 11 | CaveStory=CaveStory 12 | RetroArch=RetroArch 13 | Launching=Запускается.... 14 | Nav=Нав. 15 | Scan=Скан. 16 | Back=Назад 17 | Enter=Ввод 18 | Remove=Удалить 19 | Backspace=Стереть 20 | Done=Выполнено 21 | Run=Старт 22 | AddToPlayList=Добавить в Плейлист 23 | Add to Playlist=Добавить в Плейлист 24 | DownloadConfirm=Подтвердить Скачивание 25 | MyFavGames=избранные игры 26 | Deleting=Удаляю... 27 | AddFav=Доб Изб 28 | ADdFavList=Добавить в избранное 29 | Del=Удалить 30 | Please upload data over Wi-Fi=Пожалуйста, загрузите данные по Wi-Fi 31 | ConfirmDeleteQ=Подтвердить Удаление ? 32 | AlreadyExisted=Уже существует 33 | Cancel=Отмена 34 | Yes=Да 35 | ConfirmQ=Подтвердить? 36 | Disconnecting=Отключение... 37 | ConfirmUpdateToFQ=Подтвердить Обновление до %%s ? 38 | UpdateToFQ=Обновить до %%s ? 39 | SetupGameEngineAutoQ=Хотите автоматически установить движок для этой игры? 40 | Downloading=Скачиваю... 41 | BATOver5Pct=Батарея должна быть заряжена больше, чем на 5%% 42 | DeleteConfirm=Подтвердить Удаление 43 | FavouriteGames=Избранные Игры 44 | ConfirmForgetQ=Забыть? 45 | ConfirmForget=Подтвердить Забытие 46 | Disconnect=Отключиться 47 | ConfirmDisconnectQ=Подтвердить Отключение ? 48 | Confirm Disconnect=Подтвердить отключение 49 | Forget=Забыть 50 | Forgeting=Забываю... 51 | Info=Инфо 52 | TryConnect=TryConnect 53 | Bluetooth Info=Настройки Bluetooth 54 | Connecting=Подключаюсь 55 | BluetoothScanning=Сканирую Bluetooth... 56 | Scanning=Сканирую.. 57 | ShutDownConnecting=ShutDownConnecting... 58 | Select=Выбрать 59 | Detail=Подробнее 60 | Applying=Применяю... 61 | DownloadFailed=Не удалось скачать 62 | LauncherIsUpToDate=Лаунчер актуален 63 | CheckWifiConnection=Пожалуйста, Проверьте ваше Wi-Fi соединение 64 | TurningOn=Включить 65 | TurningOff=Выключить 66 | Invalid=Недействительно 67 | CheckingUpdate=Проверяю обновления... 68 | CheckingUpdateFailed=Не удалось проверить обновления 69 | Update=Обновить 70 | Toggle=Переключить 71 | Rescue=Сохранить 72 | Airplane Mode=Авиарежим 73 | minutes=минут(ы) 74 | seconds=секунд(ы) 75 | second=секунда 76 | minute=минута 77 | Never=Никогда 78 | Power Options=Настройки питания 79 | Languages=Языки 80 | Notify=Уведомления 81 | Setting List=Список настроек 82 | Wi-Fi=Wi-Fi 83 | Bluetooth=Bluetooth 84 | Sound Volume=Громкость звука 85 | Sound volume=Громкость звука 86 | Sound Volume=Громкость звука 87 | Brightness=Яркость 88 | BackLight Brightness=Яркость подсветки 89 | Storage=Хранилище 90 | Timezone=Часовой пояс 91 | Timezone Selection=Выбор часового пояса 92 | Notification=Уведомления 93 | About=About 94 | Power off=Выключить питание 95 | Buttons Layout=Расположение кнопок 96 | UpdateRetroArch=Обновить RetroArch 97 | Update Launcher=Обновить лаунчер 98 | About=Об устройстве 99 | Theme Manager=Темы оформления 100 | Wifi scanning=Сканирую сеть Wi-Fi... 101 | Power option detail=Настройки питания 102 | Screen dimming=Затемнение экрана 103 | Screen OFF=Выключить экран 104 | Power OFF=Выключить питание 105 | Power saving=Энергосбережение 106 | Balanced=Сбалансированный 107 | Server=Сервер 108 | Performance=Производительность 109 | Confirm Power OFF?=Подтвердить выключение? 110 | Reboot=Перезагрузка 111 | Shutdown=Выключить 112 | my favorite music=избранная музыка 113 | Check Update=Проверить Обновления 114 | Switch to LauncherGo=Переключиться на LauncherGo 115 | GPU Driver Switch=Переключить драйвер GPU 116 | Network gateway switch=Переключить сетевой шлюз 117 | Gateway switch=Переключить шлюз 118 | Clear All=Очистить все 119 | Cleaning up=Стереть 120 | Music Library=Библиотека музыки 121 | Play List=Плейлист 122 | Play/Pause=Играть/Пауза 123 | Awaiting Input=Выберите опцию 124 | Scan wifi=Wi-Fi 125 | Wifi info=Настройки Wi-Fi -------------------------------------------------------------------------------- /sys.py/libs/MPD/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/libs/MPD/__init__.py -------------------------------------------------------------------------------- /sys.py/libs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clockworkpi/launcher/e15f6155cd34e82691291abc273678ef9e7ee880/sys.py/libs/__init__.py -------------------------------------------------------------------------------- /sys.py/libs/bluezutils/__init__.py: -------------------------------------------------------------------------------- 1 | import dbus 2 | 3 | SERVICE_NAME = "org.bluez" 4 | ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter1" 5 | DEVICE_INTERFACE = SERVICE_NAME + ".Device1" 6 | 7 | def get_managed_objects(): 8 | bus = dbus.SystemBus() 9 | manager = dbus.Interface(bus.get_object("org.bluez", "/"), 10 | "org.freedesktop.DBus.ObjectManager") 11 | return manager.GetManagedObjects() 12 | 13 | def find_adapter(pattern=None): 14 | return find_adapter_in_objects(get_managed_objects(), pattern) 15 | 16 | def find_adapter_in_objects(objects, pattern=None): 17 | bus = dbus.SystemBus() 18 | for path, ifaces in objects.iteritems(): 19 | adapter = ifaces.get(ADAPTER_INTERFACE) 20 | if adapter is None: 21 | continue 22 | if not pattern or pattern == adapter["Address"] or \ 23 | path.endswith(pattern): 24 | obj = bus.get_object(SERVICE_NAME, path) 25 | return dbus.Interface(obj, ADAPTER_INTERFACE) 26 | raise Exception("Bluetooth adapter not found") 27 | 28 | def find_device(device_address, adapter_pattern=None): 29 | return find_device_in_objects(get_managed_objects(), device_address, 30 | adapter_pattern) 31 | 32 | def find_device_in_objects(objects, device_address, adapter_pattern=None): 33 | bus = dbus.SystemBus() 34 | path_prefix = "" 35 | if adapter_pattern: 36 | adapter = find_adapter_in_objects(objects, adapter_pattern) 37 | path_prefix = adapter.object_path 38 | for path, ifaces in objects.iteritems(): 39 | device = ifaces.get(DEVICE_INTERFACE) 40 | if device is None: 41 | continue 42 | if (device["Address"] == device_address and 43 | path.startswith(path_prefix)): 44 | obj = bus.get_object(SERVICE_NAME, path) 45 | return dbus.Interface(obj, DEVICE_INTERFACE) 46 | 47 | raise Exception("Bluetooth device not found") 48 | -------------------------------------------------------------------------------- /sys.py/libs/easing.py: -------------------------------------------------------------------------------- 1 | 2 | import math 3 | 4 | 5 | def SineIn(t, b, c, d): 6 | return -c * math.cos(t/d * (math.pi/2)) + c + b 7 | 8 | -------------------------------------------------------------------------------- /sys.py/libs/roundrects/__init__.py: -------------------------------------------------------------------------------- 1 | from .roundrects import aa_round_rect, round_rect 2 | -------------------------------------------------------------------------------- /sys.py/libs/roundrects/roundrects.py: -------------------------------------------------------------------------------- 1 | """ 2 | Rounded rectangles in both non-antialiased and antialiased varieties. 3 | """ 4 | 5 | import pygame as pg 6 | 7 | from pygame import gfxdraw 8 | 9 | 10 | def round_rect(surface, rect, color, rad=20, border=0, inside=(0,0,0,0)): 11 | """ 12 | Draw a rect with rounded corners to surface. Argument rad can be specified 13 | to adjust curvature of edges (given in pixels). An optional border 14 | width can also be supplied; if not provided the rect will be filled. 15 | Both the color and optional interior color (the inside argument) support 16 | alpha. 17 | """ 18 | rect = pg.Rect(rect) 19 | zeroed_rect = rect.copy() 20 | zeroed_rect.topleft = 0,0 21 | image = pg.Surface(rect.size).convert_alpha() 22 | image.fill((0,0,0,0)) 23 | _render_region(image, zeroed_rect, color, rad) 24 | if border: 25 | zeroed_rect.inflate_ip(-2*border, -2*border) 26 | _render_region(image, zeroed_rect, inside, rad) 27 | surface.blit(image, rect) 28 | 29 | 30 | def _render_region(image, rect, color, rad): 31 | """Helper function for round_rect.""" 32 | corners = rect.inflate(-2*rad, -2*rad) 33 | for attribute in ("topleft", "topright", "bottomleft", "bottomright"): 34 | pg.draw.circle(image, color, getattr(corners,attribute), rad) 35 | image.fill(color, rect.inflate(-2*rad,0)) 36 | image.fill(color, rect.inflate(0,-2*rad)) 37 | 38 | 39 | def aa_round_rect(surface, rect, color, rad=20, border=0, inside=(0,0,0)): 40 | """ 41 | Draw an antialiased rounded rect on the target surface. Alpha is not 42 | supported in this implementation but other than that usage is identical to 43 | round_rect. 44 | """ 45 | rect = pg.Rect(rect) 46 | _aa_render_region(surface, rect, color, rad) 47 | if border: 48 | rect.inflate_ip(-2*border, -2*border) 49 | _aa_render_region(surface, rect, inside, rad) 50 | 51 | 52 | def _aa_render_region(image, rect, color, rad): 53 | """Helper function for aa_round_rect.""" 54 | corners = rect.inflate(-2*rad-1, -2*rad-1) 55 | for attribute in ("topleft", "topright", "bottomleft", "bottomright"): 56 | x, y = getattr(corners, attribute) 57 | gfxdraw.aacircle(image, x, y, rad, color) 58 | gfxdraw.filled_circle(image, x, y, rad, color) 59 | image.fill(color, rect.inflate(-2*rad,0)) 60 | image.fill(color, rect.inflate(0,-2*rad)) 61 | -------------------------------------------------------------------------------- /sys.py/libs/websocket/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | websocket - WebSocket client library for Python 3 | 4 | Copyright (C) 2010 Hiroki Ohtani(liris) 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 | Boston, MA 02110-1335 USA 20 | 21 | """ 22 | from ._abnf import * 23 | from ._app import WebSocketApp 24 | from ._core import * 25 | from ._exceptions import * 26 | from ._logging import * 27 | from ._socket import * 28 | 29 | __version__ = "0.56.0" 30 | -------------------------------------------------------------------------------- /sys.py/libs/websocket/_cookiejar.py: -------------------------------------------------------------------------------- 1 | try: 2 | import Cookie 3 | except: 4 | import http.cookies as Cookie 5 | 6 | 7 | class SimpleCookieJar(object): 8 | def __init__(self): 9 | self.jar = dict() 10 | 11 | def add(self, set_cookie): 12 | if set_cookie: 13 | try: 14 | simpleCookie = Cookie.SimpleCookie(set_cookie) 15 | except: 16 | simpleCookie = Cookie.SimpleCookie(set_cookie.encode('ascii', 'ignore')) 17 | 18 | for k, v in simpleCookie.items(): 19 | domain = v.get("domain") 20 | if domain: 21 | if not domain.startswith("."): 22 | domain = "." + domain 23 | cookie = self.jar.get(domain) if self.jar.get(domain) else Cookie.SimpleCookie() 24 | cookie.update(simpleCookie) 25 | self.jar[domain.lower()] = cookie 26 | 27 | def set(self, set_cookie): 28 | if set_cookie: 29 | try: 30 | simpleCookie = Cookie.SimpleCookie(set_cookie) 31 | except: 32 | simpleCookie = Cookie.SimpleCookie(set_cookie.encode('ascii', 'ignore')) 33 | 34 | for k, v in simpleCookie.items(): 35 | domain = v.get("domain") 36 | if domain: 37 | if not domain.startswith("."): 38 | domain = "." + domain 39 | self.jar[domain.lower()] = simpleCookie 40 | 41 | def get(self, host): 42 | if not host: 43 | return "" 44 | 45 | cookies = [] 46 | for domain, simpleCookie in self.jar.items(): 47 | host = host.lower() 48 | if host.endswith(domain) or host == domain[1:]: 49 | cookies.append(self.jar.get(domain)) 50 | 51 | return "; ".join(filter(None, ["%s=%s" % (k, v.value) for cookie in filter(None, sorted(cookies)) for k, v in 52 | sorted(cookie.items())])) 53 | -------------------------------------------------------------------------------- /sys.py/libs/websocket/_exceptions.py: -------------------------------------------------------------------------------- 1 | """ 2 | websocket - WebSocket client library for Python 3 | 4 | Copyright (C) 2010 Hiroki Ohtani(liris) 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 | Boston, MA 02110-1335 USA 20 | 21 | """ 22 | 23 | 24 | """ 25 | define websocket exceptions 26 | """ 27 | 28 | 29 | class WebSocketException(Exception): 30 | """ 31 | websocket exception class. 32 | """ 33 | pass 34 | 35 | 36 | class WebSocketProtocolException(WebSocketException): 37 | """ 38 | If the websocket protocol is invalid, this exception will be raised. 39 | """ 40 | pass 41 | 42 | 43 | class WebSocketPayloadException(WebSocketException): 44 | """ 45 | If the websocket payload is invalid, this exception will be raised. 46 | """ 47 | pass 48 | 49 | 50 | class WebSocketConnectionClosedException(WebSocketException): 51 | """ 52 | If remote host closed the connection or some network error happened, 53 | this exception will be raised. 54 | """ 55 | pass 56 | 57 | 58 | class WebSocketTimeoutException(WebSocketException): 59 | """ 60 | WebSocketTimeoutException will be raised at socket timeout during read/write data. 61 | """ 62 | pass 63 | 64 | 65 | class WebSocketProxyException(WebSocketException): 66 | """ 67 | WebSocketProxyException will be raised when proxy error occurred. 68 | """ 69 | pass 70 | 71 | 72 | class WebSocketBadStatusException(WebSocketException): 73 | """ 74 | WebSocketBadStatusException will be raised when we get bad handshake status code. 75 | """ 76 | 77 | def __init__(self, message, status_code, status_message=None, resp_headers=None): 78 | msg = message % (status_code, status_message) 79 | super(WebSocketBadStatusException, self).__init__(msg) 80 | self.status_code = status_code 81 | self.resp_headers = resp_headers 82 | 83 | class WebSocketAddressException(WebSocketException): 84 | """ 85 | If the websocket address info cannot be found, this exception will be raised. 86 | """ 87 | pass 88 | -------------------------------------------------------------------------------- /sys.py/libs/websocket/_logging.py: -------------------------------------------------------------------------------- 1 | """ 2 | websocket - WebSocket client library for Python 3 | 4 | Copyright (C) 2010 Hiroki Ohtani(liris) 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 | Boston, MA 02110-1335 USA 20 | 21 | """ 22 | import logging 23 | 24 | _logger = logging.getLogger('websocket') 25 | try: 26 | from logging import NullHandler 27 | except ImportError: 28 | class NullHandler(logging.Handler): 29 | def emit(self, record): 30 | pass 31 | 32 | _logger.addHandler(NullHandler()) 33 | 34 | _traceEnabled = False 35 | 36 | __all__ = ["enableTrace", "dump", "error", "warning", "debug", "trace", 37 | "isEnabledForError", "isEnabledForDebug"] 38 | 39 | 40 | def enableTrace(traceable, handler = logging.StreamHandler()): 41 | """ 42 | turn on/off the traceability. 43 | 44 | traceable: boolean value. if set True, traceability is enabled. 45 | """ 46 | global _traceEnabled 47 | _traceEnabled = traceable 48 | if traceable: 49 | _logger.addHandler(handler) 50 | _logger.setLevel(logging.DEBUG) 51 | 52 | 53 | def dump(title, message): 54 | if _traceEnabled: 55 | _logger.debug("--- " + title + " ---") 56 | _logger.debug(message) 57 | _logger.debug("-----------------------") 58 | 59 | 60 | def error(msg): 61 | _logger.error(msg) 62 | 63 | 64 | def warning(msg): 65 | _logger.warning(msg) 66 | 67 | 68 | def debug(msg): 69 | _logger.debug(msg) 70 | 71 | 72 | def trace(msg): 73 | if _traceEnabled: 74 | _logger.debug(msg) 75 | 76 | 77 | def isEnabledForError(): 78 | return _logger.isEnabledFor(logging.ERROR) 79 | 80 | 81 | def isEnabledForDebug(): 82 | return _logger.isEnabledFor(logging.DEBUG) 83 | -------------------------------------------------------------------------------- /sys.py/libs/websocket/_ssl_compat.py: -------------------------------------------------------------------------------- 1 | """ 2 | websocket - WebSocket client library for Python 3 | 4 | Copyright (C) 2010 Hiroki Ohtani(liris) 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 | Boston, MA 02110-1335 USA 20 | 21 | """ 22 | __all__ = ["HAVE_SSL", "ssl", "SSLError", "SSLWantReadError", "SSLWantWriteError"] 23 | 24 | try: 25 | import ssl 26 | from ssl import SSLError 27 | from ssl import SSLWantReadError 28 | from ssl import SSLWantWriteError 29 | if hasattr(ssl, 'SSLContext') and hasattr(ssl.SSLContext, 'check_hostname'): 30 | HAVE_CONTEXT_CHECK_HOSTNAME = True 31 | else: 32 | HAVE_CONTEXT_CHECK_HOSTNAME = False 33 | if hasattr(ssl, "match_hostname"): 34 | from ssl import match_hostname 35 | else: 36 | from backports.ssl_match_hostname import match_hostname 37 | __all__.append("match_hostname") 38 | __all__.append("HAVE_CONTEXT_CHECK_HOSTNAME") 39 | 40 | HAVE_SSL = True 41 | except ImportError: 42 | # dummy class of SSLError for ssl none-support environment. 43 | class SSLError(Exception): 44 | pass 45 | 46 | class SSLWantReadError(Exception): 47 | pass 48 | 49 | class SSLWantWriteError(Exception): 50 | pass 51 | 52 | HAVE_SSL = False 53 | -------------------------------------------------------------------------------- /sys.py/libs/websocket/_utils.py: -------------------------------------------------------------------------------- 1 | """ 2 | websocket - WebSocket client library for Python 3 | 4 | Copyright (C) 2010 Hiroki Ohtani(liris) 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 | Boston, MA 02110-1335 USA 20 | 21 | """ 22 | import six 23 | 24 | __all__ = ["NoLock", "validate_utf8", "extract_err_message", "extract_error_code"] 25 | 26 | 27 | class NoLock(object): 28 | 29 | def __enter__(self): 30 | pass 31 | 32 | def __exit__(self, exc_type, exc_value, traceback): 33 | pass 34 | 35 | try: 36 | # If wsaccel is available we use compiled routines to validate UTF-8 37 | # strings. 38 | from wsaccel.utf8validator import Utf8Validator 39 | 40 | def _validate_utf8(utfbytes): 41 | return Utf8Validator().validate(utfbytes)[0] 42 | 43 | except ImportError: 44 | # UTF-8 validator 45 | # python implementation of http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ 46 | 47 | _UTF8_ACCEPT = 0 48 | _UTF8_REJECT = 12 49 | 50 | _UTF8D = [ 51 | # The first part of the table maps bytes to character classes that 52 | # to reduce the size of the transition table and create bitmasks. 53 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 54 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 55 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 56 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 57 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 58 | 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 59 | 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 60 | 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, 61 | 62 | # The second part is a transition table that maps a combination 63 | # of a state of the automaton and a character class to a state. 64 | 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12, 65 | 12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12, 66 | 12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12, 67 | 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, 68 | 12,36,12,12,12,12,12,12,12,12,12,12, ] 69 | 70 | def _decode(state, codep, ch): 71 | tp = _UTF8D[ch] 72 | 73 | codep = (ch & 0x3f) | (codep << 6) if ( 74 | state != _UTF8_ACCEPT) else (0xff >> tp) & ch 75 | state = _UTF8D[256 + state + tp] 76 | 77 | return state, codep 78 | 79 | def _validate_utf8(utfbytes): 80 | state = _UTF8_ACCEPT 81 | codep = 0 82 | for i in utfbytes: 83 | if six.PY2: 84 | i = ord(i) 85 | state, codep = _decode(state, codep, i) 86 | if state == _UTF8_REJECT: 87 | return False 88 | 89 | return True 90 | 91 | 92 | def validate_utf8(utfbytes): 93 | """ 94 | validate utf8 byte string. 95 | utfbytes: utf byte string to check. 96 | return value: if valid utf8 string, return true. Otherwise, return false. 97 | """ 98 | return _validate_utf8(utfbytes) 99 | 100 | 101 | def extract_err_message(exception): 102 | if exception.args: 103 | return exception.args[0] 104 | else: 105 | return None 106 | 107 | 108 | def extract_error_code(exception): 109 | if exception.args and len(exception.args) > 1: 110 | return exception.args[0] if isinstance(exception.args[0], int) else None 111 | -------------------------------------------------------------------------------- /sys.py/patches/mame2003_plus_libretro.so.zip/Run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cat >~/.config/retroarch/retroarch-core-options.cfg<<'EOF' 4 | mame2003-plus_analog = "digital" 5 | mame2003-plus_art_resolution = "1" 6 | mame2003-plus_brightness = "1.0" 7 | mame2003-plus_cheat_input_ports = "disabled" 8 | mame2003-plus_core_save_subfolder = "enabled" 9 | mame2003-plus_core_sys_subfolder = "enabled" 10 | mame2003-plus_dcs_speedhack = "disabled" 11 | mame2003-plus_deadzone = "20" 12 | mame2003-plus_display_artwork = "enabled" 13 | mame2003-plus_display_setup = "disabled" 14 | mame2003-plus_four_way_emulation = "disabled" 15 | mame2003-plus_frameskip = "0" 16 | mame2003-plus_gamma = "1.2" 17 | mame2003-plus_input_interface = "retropad" 18 | mame2003-plus_machine_timing = "enabled" 19 | mame2003-plus_mame_remapping = "enabled" 20 | mame2003-plus_mouse_device = "mouse" 21 | mame2003-plus_neogeo_bios = "default" 22 | mame2003-plus_rstick_to_btns = "enabled" 23 | mame2003-plus_sample_rate = "48000" 24 | mame2003-plus_skip_disclaimer = "disabled" 25 | mame2003-plus_skip_warnings = "disabled" 26 | mame2003-plus_tate_mode = "disabled" 27 | mame2003_art_resolution = "1" 28 | mame2003_brightness = "1.0" 29 | mame2003_core_save_subfolder = "enabled" 30 | mame2003_core_sys_subfolder = "enabled" 31 | mame2003_dcs_speedhack = "enabled" 32 | mame2003_display_artwork = "enabled" 33 | mame2003_display_setup = "disabled" 34 | mame2003_four_way_emulation = "disabled" 35 | mame2003_frameskip = "0" 36 | mame2003_gamma = "1.0" 37 | mame2003_input_interface = "simultaneous" 38 | mame2003_mame_remapping = "enabled" 39 | mame2003_mouse_device = "mouse" 40 | mame2003_neogeo_bios = "default" 41 | mame2003_rstick_to_btns = "enabled" 42 | mame2003_sample_rate = "48000" 43 | mame2003_skip_disclaimer = "disabled" 44 | mame2003_skip_warnings = "disabled" 45 | mame2003_tate_mode = "disabled" 46 | EOF 47 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /home/cpi/launcher || exit 4 | feh --bg-center /home/cpi/launcher/sys.py/gameshell/wallpaper/updating.png 5 | git pull 6 | git reset --hard "$1" 7 | git submodule init 8 | git submodule update 9 | 10 | cd ~/apps/Menu && git pull && cd - || exit 11 | 12 | feh --bg-center /home/cpi/launcher/sys.py/gameshell/wallpaper/loading.png 13 | ./load.sh 14 | --------------------------------------------------------------------------------