Skip to content

Commit 279790d

Browse files
committed
Add text and number property types
1 parent 6e3ce24 commit 279790d

File tree

5 files changed

+46
-3
lines changed

5 files changed

+46
-3
lines changed

docs/codebase/dialog/properties.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ Route property button click to appropriate handler based on property type from s
6060
| Method | Purpose |
6161
|--------|---------|
6262
| `_handle_toggle_property` | Toggle between "True" and cleared |
63+
| `_handle_text_property` | Free text input via keyboard dialog |
64+
| `_handle_number_property` | Numeric input via numeric input dialog |
6365
| `_handle_options_property` | Show options picker with condition filtering |
6466

6567
***

docs/codebase/models/property.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Top-level container.
3333
| `template_only` | bool | Only used in templates |
3434
| `requires` | str | Property that must be set first |
3535
| `options` | list[SchemaOption] | Options for select type |
36-
| `type` | str | widget, background, toggle, or options |
36+
| `type` | str | widget, background, toggle, text, number, or select |
3737

3838
### ButtonMapping
3939

docs/skinning/properties.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Properties extend menu items beyond built-in fields (label, icon, action). Commo
8787
| Attribute | Required | Default | Description |
8888
|-----------|----------|---------|-------------|
8989
| `name` | Yes | - | Property name (stored in item.properties) |
90-
| `type` | No | `options` | Property type: `options`, `toggle`, `widget`, `background` |
90+
| `type` | No | `options` | Property type: `options`, `toggle`, `text`, `number`, `widget`, `background` |
9191
| `requires` | No | - | Property name that must have a value (see [Requires Check](#requires-check)) |
9292
| `templateonly` | No | `false` | If `true`, only available in templates, not in dialog |
9393

@@ -97,6 +97,8 @@ Properties extend menu items beyond built-in fields (label, icon, action). Commo
9797
|------|----------|
9898
| `options` | Select from defined options list |
9999
| `toggle` | Toggle between `True` and empty (cleared) |
100+
| `text` | Free text input via keyboard dialog |
101+
| `number` | Numeric input via numeric input dialog |
100102
| `widget` | Opens widget picker |
101103
| `background` | Opens background picker |
102104

resources/lib/skinshortcuts/dialog/properties.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,12 @@ def _handle_property_button(self, button_id: int) -> bool:
294294
if prop_type == "toggle":
295295
self._handle_toggle_property(prop, item, button, prop_name)
296296
return True
297+
if prop_type == "text":
298+
self._handle_text_property(item, button, prop_name)
299+
return True
300+
if prop_type == "number":
301+
self._handle_number_property(item, button, prop_name)
302+
return True
297303

298304
return self._handle_options_property(prop, item, button, prop_name)
299305

@@ -650,6 +656,39 @@ def _handle_toggle_property(self, prop, item: MenuItem, button, prop_name: str)
650656

651657
self._refresh_selected_item()
652658

659+
def _handle_text_property(self, item: MenuItem, button, prop_name: str) -> None:
660+
"""Handle a text-type property via keyboard input."""
661+
current_value = resolve_label(item.properties.get(prop_name, ""))
662+
title = resolve_label(button.title) if button.title else prop_name
663+
664+
keyboard = xbmc.Keyboard(current_value, title)
665+
keyboard.doModal()
666+
if not keyboard.isConfirmed():
667+
return
668+
669+
new_value = keyboard.getText()
670+
if new_value:
671+
self._log(f"Setting text property {prop_name}={new_value} on item {item.name}")
672+
self._set_item_property(item, prop_name, new_value, apply_suffix=False)
673+
else:
674+
self._log(f"Clearing text property {prop_name} on item {item.name}")
675+
self._set_item_property(item, prop_name, None, apply_suffix=False)
676+
677+
self._refresh_selected_item()
678+
679+
def _handle_number_property(self, item: MenuItem, button, prop_name: str) -> None:
680+
"""Handle a number-type property via numeric input dialog."""
681+
current_value = item.properties.get(prop_name, "")
682+
title = resolve_label(button.title) if button.title else prop_name
683+
684+
result = xbmcgui.Dialog().input(title, current_value, type=xbmcgui.INPUT_NUMERIC)
685+
if not result and result != "0":
686+
return
687+
688+
self._log(f"Setting number property {prop_name}={result} on item {item.name}")
689+
self._set_item_property(item, prop_name, result, apply_suffix=False)
690+
self._refresh_selected_item()
691+
653692
def _handle_options_property(self, prop, item: MenuItem, button, prop_name: str) -> bool:
654693
"""Handle a regular property with options list.
655694

resources/lib/skinshortcuts/models/property.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class ButtonMapping:
3333
title: str = ""
3434
show_none: bool = True
3535
show_icons: bool = True # Show icons in select dialog (useDetails=True)
36-
type: str = "" # "widget", "background", "toggle", or "options"
36+
type: str = "" # "widget", "background", "toggle", "text", "number", or "select"
3737
requires: str = "" # Property name that must have a value for button to be active
3838

3939

0 commit comments

Comments
 (0)