Skip to content

Commit

Permalink
Start gui refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
brentyi committed Sep 24, 2024
1 parent 42f3e10 commit aac0788
Show file tree
Hide file tree
Showing 27 changed files with 1,347 additions and 1,001 deletions.
482 changes: 273 additions & 209 deletions src/viser/_gui_api.py

Large diffs are not rendered by default.

448 changes: 135 additions & 313 deletions src/viser/_gui_handles.py

Large diffs are not rendered by default.

210 changes: 163 additions & 47 deletions src/viser/_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def redundancy_key(self) -> str:

@classmethod
def __init_subclass__(
cls, tag: Literal[None, "GuiAddComponentMessage", "SceneNodeMessage"] = None
cls, tag: Literal[None, "GuiComponentMessage", "SceneNodeMessage"] = None
):
"""Tag will be used to create a union type in TypeScript."""
super().__init_subclass__()
Expand Down Expand Up @@ -778,68 +778,90 @@ class ResetGuiMessage(Message):


@dataclasses.dataclass
class GuiAddFolderMessage(Message, tag="GuiAddComponentMessage"):
class GuiBaseProps(Message):
"""Base message type containing fields commonly used by GUI inputs."""

order: float
id: str
label: str
container_id: str
expand_by_default: bool
hint: Optional[str]
visible: bool
disabled: bool


@dataclasses.dataclass
class GuiAddMarkdownMessage(Message, tag="GuiAddComponentMessage"):
class GuiFolderProps:
order: float
label: str
visible: bool
expand_by_default: bool


@dataclasses.dataclass
class GuiFolderMessage(Message, tag="GuiComponentMessage"):
id: str
markdown: str
container_id: str
visible: bool
props: GuiFolderProps


@dataclasses.dataclass
class GuiAddProgressBarMessage(Message, tag="GuiAddComponentMessage"):
class GuiMarkdownProps:
order: float
markdown: str
visible: bool


@dataclasses.dataclass
class GuiMarkdownMessage(Message, tag="GuiComponentMessage"):
id: str
value: float
container_id: str
props: GuiMarkdownProps


@dataclasses.dataclass
class GuiProgressBarProps:
order: float
animated: bool
color: Optional[Color]
container_id: str
visible: bool


@dataclasses.dataclass
class GuiAddPlotlyMessage(Message, tag="GuiAddComponentMessage"):
order: float
class GuiProgressBarMessage(Message, tag="GuiComponentMessage"):
value: float
id: str
container_id: str
props: GuiProgressBarProps


@dataclasses.dataclass
class GuiPlotlyProps:
order: float
plotly_json_str: str
aspect: float
container_id: str
visible: bool


@dataclasses.dataclass
class GuiAddTabGroupMessage(Message, tag="GuiAddComponentMessage"):
order: float
class GuiPlotlyMessage(Message, tag="GuiComponentMessage"):
id: str
container_id: str
props: GuiPlotlyProps


@dataclasses.dataclass
class GuiTabGroupProps:
tab_labels: Tuple[str, ...]
tab_icons_html: Tuple[Union[str, None], ...]
tab_container_ids: Tuple[str, ...]
order: float
visible: bool


@dataclasses.dataclass
class _GuiAddInputBase(Message):
"""Base message type containing fields commonly used by GUI inputs."""

order: float
class GuiTabGroupMessage(Message, tag="GuiComponentMessage"):
id: str
label: str
container_id: str
hint: Optional[str]
value: Any
visible: bool
disabled: bool
props: GuiTabGroupProps


@dataclasses.dataclass
Expand All @@ -855,33 +877,52 @@ class GuiCloseModalMessage(Message):


@dataclasses.dataclass
class GuiAddButtonMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
# All GUI elements currently need an `value` field.
# This makes our job on the frontend easier.
value: bool
class GuiButtonProps(GuiBaseProps):
color: Optional[Color]
icon_html: Optional[str]


@dataclasses.dataclass
class GuiAddUploadButtonMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiButtonMessage(Message, tag="GuiComponentMessage"):
value: bool
id: str
container_id: str
props: GuiButtonProps


@dataclasses.dataclass
class GuiUploadButtonProps(GuiBaseProps):
color: Optional[Color]
icon_html: Optional[str]
mime_type: str


@dataclasses.dataclass
class GuiAddSliderMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiUploadButtonMessage(Message, tag="GuiComponentMessage"):
id: str
container_id: str
props: GuiUploadButtonProps


@dataclasses.dataclass
class GuiSliderProps(GuiBaseProps):
min: float
max: float
step: Optional[float]
value: float
precision: int
marks: Optional[Tuple[GuiSliderMark, ...]] = None


@dataclasses.dataclass
class GuiAddMultiSliderMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiSliderMessage(Message, tag="GuiComponentMessage"):
value: float
id: str
container_id: str
props: GuiSliderProps


@dataclasses.dataclass
class GuiMultiSliderProps(GuiBaseProps):
min: float
max: float
step: Optional[float]
Expand All @@ -892,64 +933,139 @@ class GuiAddMultiSliderMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):


@dataclasses.dataclass
class GuiAddNumberMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
value: float
class GuiMultiSliderMessage(Message, tag="GuiComponentMessage"):
value: tuple[float, ...]
id: str
container_id: str
props: GuiMultiSliderProps


@dataclasses.dataclass
class GuiNumberProps(GuiBaseProps):
precision: int
step: float
min: Optional[float]
max: Optional[float]


@dataclasses.dataclass
class GuiAddRgbMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiNumberMessage(Message, tag="GuiComponentMessage"):
value: float
id: str
container_id: str
props: GuiNumberProps


@dataclasses.dataclass
class GuiRgbProps(GuiBaseProps):
pass


@dataclasses.dataclass
class GuiRgbMessage(Message, tag="GuiComponentMessage"):
value: Tuple[int, int, int]
id: str
container_id: str
props: GuiRgbProps


@dataclasses.dataclass
class GuiRgbaProps(GuiBaseProps):
pass


@dataclasses.dataclass
class GuiAddRgbaMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiRgbaMessage(Message, tag="GuiComponentMessage"):
value: Tuple[int, int, int, int]
id: str
container_id: str
props: GuiRgbaProps


@dataclasses.dataclass
class GuiAddCheckboxMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiCheckboxProps(GuiBaseProps):
pass


@dataclasses.dataclass
class GuiCheckboxMessage(Message, tag="GuiComponentMessage"):
value: bool
id: str
container_id: str
props: GuiCheckboxProps


@dataclasses.dataclass
class GuiAddVector2Message(_GuiAddInputBase, tag="GuiAddComponentMessage"):
value: Tuple[float, float]
class GuiVector2Props(GuiBaseProps):
min: Optional[Tuple[float, float]]
max: Optional[Tuple[float, float]]
step: float
precision: int


@dataclasses.dataclass
class GuiAddVector3Message(_GuiAddInputBase, tag="GuiAddComponentMessage"):
value: Tuple[float, float, float]
class GuiVector2Message(Message, tag="GuiComponentMessage"):
value: Tuple[float, float]
id: str
container_id: str
props: GuiVector2Props


@dataclasses.dataclass
class GuiVector3Props(GuiBaseProps):
min: Optional[Tuple[float, float, float]]
max: Optional[Tuple[float, float, float]]
step: float
precision: int


@dataclasses.dataclass
class GuiAddTextMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
value: str
class GuiVector3Message(Message, tag="GuiComponentMessage"):
value: Tuple[float, float, float]
id: str
container_id: str
props: GuiVector3Props


@dataclasses.dataclass
class GuiAddDropdownMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiTextProps(GuiBaseProps):
pass


@dataclasses.dataclass
class GuiTextMessage(Message, tag="GuiComponentMessage"):
value: str
id: str
container_id: str
props: GuiTextProps


@dataclasses.dataclass
class GuiDropdownProps(GuiBaseProps):
options: Tuple[str, ...]


@dataclasses.dataclass
class GuiAddButtonGroupMessage(_GuiAddInputBase, tag="GuiAddComponentMessage"):
class GuiDropdownMessage(Message, tag="GuiComponentMessage"):
value: str
id: str
container_id: str
props: GuiDropdownProps


@dataclasses.dataclass
class GuiButtonGroupProps(GuiBaseProps):
options: Tuple[str, ...]


@dataclasses.dataclass
class GuiButtonGroupMessage(Message, tag="GuiComponentMessage"):
value: str
id: str
container_id: str
props: GuiButtonGroupProps


@dataclasses.dataclass
class GuiRemoveMessage(Message):
"""Sent server->client to remove a GUI element."""
Expand All @@ -964,7 +1080,7 @@ class GuiUpdateMessage(Message):
id: str
updates: Annotated[
Dict[str, Any],
infra.TypeScriptAnnotationOverride("Partial<GuiAddComponentMessage>"),
infra.TypeScriptAnnotationOverride("Partial<GuiComponentMessage>"),
]
"""Mapping from property name to new value."""

Expand Down
Loading

0 comments on commit aac0788

Please sign in to comment.