add plugin settings, per-tile refresh, settings menu, touch-friendly UI
- Plugin settings infrastructure in PluginManager with config/plugin_settings.cfg storage, manifest [settings] sections, CRUD API, plugin_setting_changed signal - Per-tile refresh intervals: 100ms base tick, per-tile update_interval_ms metadata, dynamic tween durations clamped to refresh window - Settings menu (PopupPanel) with General/Plugins/About tabs, plugin activation toggles, per-plugin settings cog buttons - Plugin settings popup (PopupPanel) with dynamic UI from setting definitions (SpinBox/CheckBox/LineEdit), auto-save on change - Modal behavior: exclusive = true on settings windows - Touch-friendly sizing: enlarged close buttons, cog buttons, controls, spacing - Red corner close button redesign with rounded corners, hover/pressed states - Split system_monitor into local_system_monitor (CPU, Memory) and test plugins - Plugin activation/deactivation with layout preservation
This commit is contained in:
parent
12b45b2685
commit
57b36798b9
24 changed files with 1065 additions and 183 deletions
|
|
@ -18,6 +18,10 @@ var current_layout_name: String = "Main"
|
|||
## The active layout data: tile_id -> {col, row, w, h}
|
||||
var _layout: Dictionary = {}
|
||||
|
||||
## Grid dimensions for this layout.
|
||||
var grid_columns: int = 4
|
||||
var grid_rows: int = 3
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if not DirAccess.dir_exists_absolute(LAYOUT_DIR):
|
||||
|
|
@ -64,6 +68,17 @@ func remove_tile(tile_id: String) -> void:
|
|||
_layout.erase(tile_id)
|
||||
|
||||
|
||||
## Set grid dimensions stored in this layout.
|
||||
func set_grid_size(cols: int, rows: int) -> void:
|
||||
grid_columns = cols
|
||||
grid_rows = rows
|
||||
|
||||
|
||||
## Get grid dimensions for the current layout.
|
||||
func get_grid_size() -> Dictionary:
|
||||
return { columns = grid_columns, rows = grid_rows }
|
||||
|
||||
|
||||
## Save the current layout to config/layouts/{name}.cfg
|
||||
func save_layout(layout_name: String = "") -> void:
|
||||
if layout_name.is_empty():
|
||||
|
|
@ -72,6 +87,8 @@ func save_layout(layout_name: String = "") -> void:
|
|||
var cfg := ConfigFile.new()
|
||||
cfg.set_value("layout", "name", layout_name)
|
||||
cfg.set_value("layout", "saved_at", Time.get_datetime_string_from_system())
|
||||
cfg.set_value("layout", "grid_columns", grid_columns)
|
||||
cfg.set_value("layout", "grid_rows", grid_rows)
|
||||
|
||||
var tile_ids: Array = _layout.keys()
|
||||
cfg.set_value("tiles", "count", tile_ids.size())
|
||||
|
|
@ -106,6 +123,9 @@ func load_layout(name: String) -> bool:
|
|||
_layout.clear()
|
||||
current_layout_name = name
|
||||
|
||||
grid_columns = cfg.get_value("layout", "grid_columns", 4)
|
||||
grid_rows = cfg.get_value("layout", "grid_rows", 3)
|
||||
|
||||
var tile_count: int = cfg.get_value("tiles", "count", 0)
|
||||
for i in range(tile_count):
|
||||
var section := "tile_%d" % i
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue