mirror of
https://github.com/blackboxprogramming/lucidia.git
synced 2026-03-17 01:57:10 -05:00
55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import Dict, List
|
|
|
|
@dataclass
|
|
class InterfaceElement:
|
|
"""
|
|
Represents a UI element in a human-machine interface.
|
|
|
|
Attributes
|
|
----------
|
|
name : str
|
|
Identifier of the element.
|
|
element_type : str
|
|
Type of element (e.g., "button", "slider").
|
|
properties : Dict[str, str]
|
|
Optional dictionary of element-specific properties.
|
|
"""
|
|
name: str
|
|
element_type: str
|
|
properties: Dict[str, str] = field(default_factory=dict)
|
|
|
|
class InterfaceDesigner:
|
|
"""
|
|
A simple interface builder that collects elements and renders them.
|
|
"""
|
|
def __init__(self) -> None:
|
|
self.elements: List[InterfaceElement] = []
|
|
|
|
def add_element(self, element: InterfaceElement) -> None:
|
|
"""Add a new interface element to the design."""
|
|
self.elements.append(element)
|
|
|
|
def render(self) -> str:
|
|
"""
|
|
Produce a human-readable representation of the interface.
|
|
|
|
Returns
|
|
-------
|
|
str
|
|
A multiline string describing each element.
|
|
"""
|
|
lines = []
|
|
for e in self.elements:
|
|
props = ", ".join(f"{k}={v}" for k, v in e.properties.items()) if e.properties else ""
|
|
lines.append(f"{e.element_type.capitalize()} '{e.name}'" + (f" ({props})" if props else ""))
|
|
return "\n".join(lines)
|
|
|
|
if __name__ == "__main__":
|
|
designer = InterfaceDesigner()
|
|
designer.add_element(InterfaceElement("Submit", "button", {"color": "blue"}))
|
|
designer.add_element(InterfaceElement("Volume", "slider", {"min": "0", "max": "10"}))
|
|
print(designer.render())
|