|
10 | 10 | BluetoothConfiguration, |
11 | 11 | Firewall, |
12 | 12 | FirewallConfiguration, |
| 13 | + FontPackage, |
| 14 | + FontsConfiguration, |
13 | 15 | PowerManagement, |
14 | 16 | PowerManagementConfiguration, |
15 | 17 | PrintServiceConfiguration, |
@@ -77,6 +79,13 @@ def _define_menu_options(self) -> list[MenuItem]: |
77 | 79 | preview_action=self._prev_firewall, |
78 | 80 | key='firewall_config', |
79 | 81 | ), |
| 82 | + MenuItem( |
| 83 | + text=tr('Fonts'), |
| 84 | + action=select_fonts, |
| 85 | + value=self._app_config.fonts_config, |
| 86 | + preview_action=self._prev_fonts, |
| 87 | + key='fonts_config', |
| 88 | + ), |
80 | 89 | ] |
81 | 90 |
|
82 | 91 | def _prev_power_management(self, item: MenuItem) -> str | None: |
@@ -115,6 +124,13 @@ def _prev_firewall(self, item: MenuItem) -> str | None: |
115 | 124 | return f'{tr("Firewall")}: {config.firewall.value}' |
116 | 125 | return None |
117 | 126 |
|
| 127 | + def _prev_fonts(self, item: MenuItem) -> str | None: |
| 128 | + if item.value is not None: |
| 129 | + config: FontsConfiguration = item.value |
| 130 | + packages = ', '.join(f.value for f in config.fonts) |
| 131 | + return f'{tr("Fonts")}: {packages}' |
| 132 | + return None |
| 133 | + |
118 | 134 |
|
119 | 135 | async def select_power_management(preset: PowerManagementConfiguration | None = None) -> PowerManagementConfiguration | None: |
120 | 136 | group = MenuItemGroup.from_enum(PowerManagement) |
@@ -217,3 +233,35 @@ async def select_firewall(preset: FirewallConfiguration | None = None) -> Firewa |
217 | 233 | return FirewallConfiguration(firewall=result.get_value()) |
218 | 234 | case ResultType.Reset: |
219 | 235 | return None |
| 236 | + |
| 237 | + |
| 238 | +async def select_fonts(preset: FontsConfiguration | None = None) -> FontsConfiguration | None: |
| 239 | + descriptions = { |
| 240 | + FontPackage.EMOJI: tr('color emoji for browsers and apps'), |
| 241 | + FontPackage.CJK: tr('Chinese, Japanese, Korean characters'), |
| 242 | + } |
| 243 | + items = [MenuItem(f'{f.value} ({descriptions[f]})', value=f) for f in FontPackage] |
| 244 | + group = MenuItemGroup(items) |
| 245 | + |
| 246 | + if preset: |
| 247 | + for f in preset.fonts: |
| 248 | + group.set_selected_by_value(f) |
| 249 | + |
| 250 | + result = await Selection[FontPackage]( |
| 251 | + group, |
| 252 | + header=tr('Select font packages to install'), |
| 253 | + allow_skip=True, |
| 254 | + allow_reset=True, |
| 255 | + multi=True, |
| 256 | + ).show() |
| 257 | + |
| 258 | + match result.type_: |
| 259 | + case ResultType.Skip: |
| 260 | + return preset |
| 261 | + case ResultType.Selection: |
| 262 | + selected = result.get_values() |
| 263 | + if selected: |
| 264 | + return FontsConfiguration(fonts=selected) |
| 265 | + return None |
| 266 | + case ResultType.Reset: |
| 267 | + return None |
0 commit comments