Skip to content

Commit 78e8118

Browse files
Merge remote-tracking branch 'upstream/main'
2 parents 59f6eef + 5b75124 commit 78e8118

16 files changed

Lines changed: 448 additions & 83 deletions

‎lang/English.json‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,5 +123,7 @@
123123
"deleteRom" : "Delete ROM",
124124
"aboutThisDevice": "About this Device",
125125
"removeGameSwitcherGame": "Remove from GameSwitcher",
126-
"addGameSwitcherGame":"Add to GameSwitcher"
126+
"addGameSwitcherGame":"Add to GameSwitcher",
127+
"showExtrasInSystemSelectMenu": "Show Apps/Settings/etc",
128+
"mergeMainMenuAndGameMenu": "Merge Main Menu And Game Menu"
127129
}

‎main-ui/devices/miyoo_trim_common.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from devices.utils.process_runner import ProcessRunner
1010
from display.font_purpose import FontPurpose
1111
from menus.games.utils.rom_info import RomInfo
12+
from themes.theme import Theme
1213
from utils.logger import PyUiLogger
1314

1415

@@ -59,6 +60,7 @@ def delete_cmd_to_run():
5960

6061
@staticmethod
6162
def run_game(device, rom_info: RomInfo, remap_sdcard_path = False, run_prefix ="") -> subprocess.Popen:
63+
Theme.check_and_create_ra_assets()
6264
launch_path = os.path.join(rom_info.game_system.game_system_config.get_emu_folder(),rom_info.game_system.game_system_config.get_launch())
6365

6466
#file_path = /mnt/SDCARD/Roms/FAKE08/Alpine Alpaca.p8

‎main-ui/menus/app/app_menu.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ def run_app_selection(self) :
133133
selected.get_selection().get_value()()
134134
elif(ControllerInput.B == selected.get_input()):
135135
self.save_app_selection(selected)
136-
if(not Theme.skip_main_menu()):
137-
running = False
136+
running = False
138137
elif(ControllerInput.MENU == selected.get_input()):
139138
self.save_app_selection(selected)
140139
if(selected.get_selection()):

‎main-ui/menus/common/top_bar.py‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ def render_top_bar_menu_not_skipped(self, title, hide_top_bar_icons = False) :
8585
self.top_bar_w = max(self.top_bar_w, text_w)
8686
self.top_bar_h = max(self.top_bar_h, text_h)
8787

88-
if(Device.supports_wifi()):
88+
wifi_icon = None
89+
if(Device.supports_wifi() and Device.is_wifi_enabled()):
8990
wifi_status = Device.get_wifi_status()
9091
wifi_icon = Theme.get_wifi_icon(wifi_status)
9192
wifi_w, wifi_h = Display.get_image_dimensions(wifi_icon)
@@ -113,7 +114,7 @@ def render_top_bar_menu_not_skipped(self, title, hide_top_bar_icons = False) :
113114
battery_icon ,x_offset,center_of_bar,RenderMode.MIDDLE_RIGHT_ALIGNED)
114115
x_offset = x_offset - w - padding
115116

116-
if(Device.supports_wifi()):
117+
if(wifi_icon is not None):
117118
#Wifi
118119
w, h = Display.render_image(wifi_icon,x_offset,center_of_bar, RenderMode.MIDDLE_RIGHT_ALIGNED)
119120
x_offset = x_offset - w - padding

‎main-ui/menus/games/game_system_select_menu.py‎

Lines changed: 95 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ class GameSystemSelectMenu:
112112
"zxs": "ZX Spectrum"
113113
}
114114

115-
def __init__(self):
115+
def __init__(self, app_menu, favorites_menu, collections_menu, recents_menu, settings_menu):
116+
self.app_menu = app_menu
117+
self.favorites_menu = favorites_menu
118+
self.collections_menu = collections_menu
119+
self.recents_menu = recents_menu
120+
self.settings_menu = settings_menu
116121
self.game_utils : GameSystemUtils = Device.get_game_system_utils()
117122
self.rom_select_menu : GameSelectMenu = GameSelectMenu()
118123
self.use_emu_cfg = False
@@ -191,6 +196,81 @@ def get_rom_count_text(self, game_system):
191196
return f"{len(roms)} games"
192197
else:
193198
return f"{len(roms)} game"
199+
200+
def game_system_selected(self, input_value, game_system : GameSystem):
201+
if(ControllerInput.A == input_value):
202+
PyUiState.set_last_system_selection(game_system.display_name)
203+
return_value = self.rom_select_menu.run_rom_selection(game_system)
204+
if(return_value is not None):
205+
if(ControllerInput.B == return_value):
206+
PyUiState.set_in_game_selection_screen(None)
207+
if(Theme.skip_main_menu()):
208+
return return_value
209+
elif(ControllerInput.MENU == input_value):
210+
return_value = self.game_system_select_menu_popup.run_popup_menu_selection(game_system)
211+
if(return_value is not None):
212+
return return_value
213+
214+
def run_extra(self, input_value, primary_text, run_function):
215+
PyUiState.set_last_system_selection(primary_text)
216+
if(ControllerInput.A == input_value):
217+
PyUiState.set_in_game_selection_screen(True)
218+
run_function()
219+
PyUiState.set_in_game_selection_screen(False)
220+
221+
def add_extras_to_systems_list(self, systems_list):
222+
if((Theme.skip_main_menu() or Theme.merge_main_menu_and_game_menu()) and Theme.show_extras_in_system_select_menu()):
223+
if(Theme.get_apps_enabled()):
224+
systems_list.append(GridOrListEntry(
225+
primary_text="Apps",
226+
primary_text_long="Applications",
227+
image_path=Theme.get_system_icon("apps"),
228+
image_path_selected=Theme.get_system_icon_selected("apps"),
229+
description = "Launch Applications",
230+
icon=None,
231+
value=lambda input_value: self.run_extra(input_value, "Apps",self.app_menu.run_app_selection)
232+
))
233+
if(Theme.get_favorites_enabled()):
234+
systems_list.append(GridOrListEntry(
235+
primary_text="Favorites",
236+
primary_text_long="Favorites",
237+
image_path=Theme.get_system_icon("favorites"),
238+
image_path_selected=Theme.get_system_icon_selected("favorites"),
239+
description = "Launch Favorites",
240+
icon=None,
241+
value=lambda input_value: self.run_extra(input_value, "Favorites", self.favorites_menu.run_rom_selection)
242+
) )
243+
if(Theme.get_recents_enabled()):
244+
systems_list.append(GridOrListEntry(
245+
primary_text="Recents",
246+
primary_text_long="Recents",
247+
image_path=Theme.get_system_icon("recents"),
248+
image_path_selected=Theme.get_system_icon_selected("recents"),
249+
description = "Launch Recents",
250+
icon=None,
251+
value=lambda input_value: self.run_extra(input_value, "Recents", self.recents_menu.run_rom_selection)
252+
) )
253+
if(Theme.get_collections_enabled()):
254+
systems_list.append(GridOrListEntry(
255+
primary_text="Collections",
256+
primary_text_long="Collections",
257+
image_path=Theme.get_system_icon("collections"),
258+
image_path_selected=Theme.get_system_icon_selected("collections"),
259+
description = "Launch Collections",
260+
icon=None,
261+
value=lambda input_value: self.run_extra(input_value, "Collections", self.collections_menu.run_rom_selection)
262+
) )
263+
if(Theme.get_settings_enabled() or Theme.merge_main_menu_and_game_menu()):
264+
systems_list.append(GridOrListEntry(
265+
primary_text="Settings",
266+
primary_text_long="Settings",
267+
image_path=Theme.get_system_icon("settings"),
268+
image_path_selected=Theme.get_system_icon_selected("settings"),
269+
description = "Launch Settings",
270+
icon=None,
271+
value=lambda input_value: self.settings_menu.show_menu() if ControllerInput.A == input_value else None
272+
) )
273+
194274

195275
def build_system_list(self):
196276
systems_list = []
@@ -210,19 +290,22 @@ def build_system_list(self):
210290
image_path_selected=image_path_selected,
211291
description = lambda idx=index, gs=game_system: f"{gs.display_name} - {self.get_rom_count_text(gs)} - System {idx} of {total_count}",
212292
icon=icon,
213-
value=game_system
293+
value=lambda input_value, game_system=game_system: self.game_system_selected(input_value, game_system)
214294
)
215295
systems_list.append(option)
216-
if(game_system.display_name == PyUiState.get_last_system_selection()):
217-
selected = Selection(option,None,index-1)
218-
296+
297+
self.add_extras_to_systems_list(systems_list)
298+
299+
for entry in systems_list:
300+
if(entry.get_primary_text() == PyUiState.get_last_system_selection()):
301+
selected = Selection(entry,None,systems_list.index(entry))
302+
break
219303
return systems_list, selected
220304

221305
def run_system_selection(self) :
222-
223306
if(self.selected is not None):
224307
if(PyUiState.get_in_game_selection_screen()):
225-
return_value = self.rom_select_menu.run_rom_selection(self.selected.get_selection().get_value())
308+
return_value = self.selected.get_selection().get_value()(ControllerInput.A)
226309
if(return_value is not None):
227310
if(ControllerInput.B == return_value):
228311
PyUiState.set_in_game_selection_screen(None)
@@ -260,6 +343,9 @@ def run_system_selection(self) :
260343
carousel_selected_entry_width_percent=Theme.get_carousel_system_select_primary_img_width(),
261344
carousel_shrink_further_away=Theme.get_carousel_system_select_shrink_further_away(),
262345
carousel_sides_hang_off_edge=Theme.get_carousel_system_select_sides_hang_off(),
346+
carousel_x_pad=Theme.get_carousel_system_x_pad(),
347+
carousel_x_offset=Theme.get_carousel_system_external_x_offset(),
348+
grid_view_wrap_around_single_row=Theme.get_system_select_grid_wrap_around_single_row()
263349
)
264350
else:
265351
view.set_options(self.systems_list)
@@ -271,16 +357,8 @@ def run_system_selection(self) :
271357

272358
while(not exit):
273359
self.selected = view.get_selection(accepted_inputs)
274-
if(ControllerInput.A == self.selected.get_input()):
275-
PyUiState.set_last_system_selection(self.selected.get_selection().get_value().display_name)
276-
return_value = self.rom_select_menu.run_rom_selection(self.selected.get_selection().get_value())
277-
if(return_value is not None):
278-
if(ControllerInput.B == return_value):
279-
PyUiState.set_in_game_selection_screen(None)
280-
if(Theme.skip_main_menu()):
281-
return return_value
282-
elif(ControllerInput.MENU == self.selected.get_input()):
283-
return_value = self.game_system_select_menu_popup.run_popup_menu_selection(self.selected.get_selection().get_value())
360+
if(ControllerInput.A == self.selected.get_input() or ControllerInput.MENU == self.selected.get_input()):
361+
return_value = self.selected.get_selection().get_value()(self.selected.get_input())
284362
if(return_value is not None):
285363
return return_value
286364
elif(ControllerInput.B == self.selected.get_input() and not Theme.skip_main_menu()):

‎main-ui/menus/language/language.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,14 @@ def sel_bg_resize_pad_height(cls):
552552
def skip_main_menu(cls):
553553
return cls._data.get("skipMainMenu","Skip Main Menu")
554554

555+
@classmethod
556+
def merge_main_menu_and_game_menu(cls):
557+
return cls._data.get("mergeMainMenuAndGameMenu","Merge Main Menu And Game Menu")
558+
559+
@classmethod
560+
def show_extras_in_system_select_menu(cls):
561+
return cls._data.get("showExtrasInSystemSelectMenu","Show Apps/Settings/etc")
562+
555563
@classmethod
556564
def main_menu(cls):
557565
return cls._data.get("mainMenu","Main Menu")

‎main-ui/menus/main_menu.py‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@
2222

2323
class MainMenu:
2424
def __init__(self):
25-
self.system_select_menu = GameSystemSelectMenu()
2625
self.app_menu = AppMenu()
2726
self.favorites_menu = FavoritesMenu()
2827
self.collections_menu = CollectionsMenu()
2928
self.recents_menu = RecentsMenu()
3029
self.settings_menu = BasicSettingsMenu()
30+
self.system_select_menu = GameSystemSelectMenu(self.app_menu, self.favorites_menu, self.collections_menu, self.recents_menu, self.settings_menu)
31+
3132
self.popup_menu = MainMenuPopup()
3233

3334
def reorder_options(self,ordering, objects):
@@ -122,7 +123,9 @@ def build_main_menu_view(self, options, selected):
122123
cols=Theme.get_main_menu_column_count(),
123124
rows=1,
124125
selected_index=selected.get_index(),
125-
show_grid_text=Theme.get_main_menu_show_text_grid_mode())
126+
show_grid_text=Theme.get_main_menu_show_text_grid_mode(),
127+
grid_view_wrap_around_single_row=Theme.get_main_menu_grid_wrap_around_single_row()
128+
)
126129

127130
def launch_selection(self, selection):
128131
if("Game" == selection):
@@ -184,7 +187,7 @@ def run_main_menu_selection(self):
184187
self.check_for_boxart_resizing()
185188

186189

187-
if(Theme.skip_main_menu()):
190+
if(Theme.skip_main_menu() or Theme.merge_main_menu_and_game_menu()):
188191

189192
selection = PyUiState.get_last_main_menu_selection()
190193
if(selection not in ["Game","App","Setting"]):

‎main-ui/menus/settings/theme/theme_selection_menu.py‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
import os
33
from controller.controller_inputs import ControllerInput
4+
from devices.device import Device
45
from utils.logger import PyUiLogger
56
from utils.py_ui_config import PyUiConfig
67
from views.grid_or_list_entry import GridOrListEntry
@@ -24,13 +25,16 @@ def get_selected_option_index(self, options, title):
2425
qoi_path = os.path.join(theme_dir,opt,"preview.qoi")
2526
image_path = qoi_path
2627
PyUiLogger.get_logger().info(f"{opt} : {image_path}")
27-
option_list.append(
28-
GridOrListEntry(
28+
option = GridOrListEntry(
2929
primary_text=opt,
3030
value=index,
3131
image_path=image_path
3232
)
33+
option_list.append(
34+
option
3335
)
36+
if(opt == Device.get_system_config().get_theme()):
37+
selected = Selection(option, None, index)
3438

3539
#convert to text and desc and show the theme desc
3640
#maybe preview too if theyre common

‎main-ui/menus/settings/theme/theme_settings_main_menu.py‎

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,23 @@ def build_options_list(self) -> list[GridOrListEntry]:
3535
)
3636
)
3737

38+
option_list.append(
39+
self.build_enabled_disabled_entry(
40+
primary_text=Language.merge_main_menu_and_game_menu(),
41+
get_value_func=Theme.merge_main_menu_and_game_menu,
42+
set_value_func=Theme.set_merge_main_menu_and_game_menu
43+
)
44+
)
45+
46+
if(Theme.skip_main_menu() or Theme.merge_main_menu_and_game_menu()):
47+
option_list.append(
48+
self.build_enabled_disabled_entry(
49+
primary_text=Language.show_extras_in_system_select_menu(),
50+
get_value_func=Theme.show_extras_in_system_select_menu,
51+
set_value_func=Theme.set_show_extras_in_system_select_menu
52+
)
53+
)
54+
3855
if(not Theme.skip_main_menu()):
3956
option_list.append(
4057
self.build_view_type_entry(
@@ -59,7 +76,12 @@ def build_options_list(self) -> list[GridOrListEntry]:
5976
set_value_func=Theme.set_main_menu_show_text_grid_mode
6077
)
6178
)
62-
79+
option_list.append(
80+
self.build_enabled_disabled_entry("Wrap-Around",
81+
Theme.get_main_menu_grid_wrap_around_single_row,
82+
Theme.set_main_menu_grid_wrap_around_single_row)
83+
)
84+
if(not Theme.skip_main_menu() or Theme.show_extras_in_system_select_menu()):
6385
option_list.append(
6486
self.build_enabled_disabled_entry(
6587
primary_text=Language.show_recents(),

‎main-ui/menus/settings/theme/theme_settings_system_select_menu.py‎

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ def build_options_list(self) -> list[GridOrListEntry]:
3434
set_value_func=Theme.set_list_system_select_img_height
3535
)
3636
)
37-
38-
if(ViewType.GRID == Theme.get_view_type_for_system_select_menu()):
37+
if(ViewType.CAROUSEL == Theme.get_view_type_for_system_select_menu() or ViewType.GRID == Theme.get_view_type_for_system_select_menu()):
3938
option_list.append(
4039
self.build_numeric_entry("Columns",
4140
Theme.get_game_system_select_col_count,
4241
Theme.set_game_system_select_col_count)
4342
)
43+
44+
if(ViewType.GRID == Theme.get_view_type_for_system_select_menu()):
4445
option_list.append(
4546
self.build_numeric_entry("Rows",
4647
Theme.get_game_system_select_row_count,
@@ -77,7 +78,14 @@ def build_options_list(self) -> list[GridOrListEntry]:
7778
get_value_func=Theme.get_grid_system_select_img_height,
7879
set_value_func=Theme.set_grid_system_select_img_height
7980
)
80-
)
81+
)
82+
if(Theme.get_game_system_select_row_count() == 1):
83+
option_list.append(
84+
self.build_enabled_disabled_entry("Wrap-Around",
85+
Theme.get_system_select_grid_wrap_around_single_row,
86+
Theme.set_system_select_grid_wrap_around_single_row)
87+
)
88+
8189
if(ViewType.FULLSCREEN_GRID == Theme.get_view_type_for_system_select_menu()):
8290
option_list.append(
8391
self.build_enabled_disabled_entry("Show Text",
@@ -117,7 +125,18 @@ def build_options_list(self) -> list[GridOrListEntry]:
117125
Theme.get_carousel_system_select_sides_hang_off,
118126
Theme.set_carousel_system_select_sides_hang_off)
119127
)
120-
128+
option_list.append(
129+
self.build_numeric_entry("Internal Padding",
130+
Theme.get_carousel_system_x_pad,
131+
Theme.set_carousel_system_x_pad,
132+
min=0)
133+
)
134+
option_list.append(
135+
self.build_numeric_entry("X-Offset",
136+
Theme.get_carousel_system_external_x_offset,
137+
Theme.set_carousel_system_external_x_offset,
138+
min=-99999)
139+
)
121140
if(ViewType.CAROUSEL == Theme.get_view_type_for_system_select_menu() or ViewType.CAROUSEL == Theme.get_view_type_for_system_select_menu()):
122141
option_list.append(
123142
self.build_enabled_disabled_entry(

0 commit comments

Comments
 (0)