Skip to content

Commit 6f6aac6

Browse files
Border styling props in Stack, Text, Image and IFrame allow either single value or a list (#68)
* Border-style props allow either value or a list Affected controls: IFrame Image Stack Text * Use _get_value_or_list_attr in ComboBox
1 parent 50d1275 commit 6f6aac6

File tree

8 files changed

+184
-95
lines changed

8 files changed

+184
-95
lines changed

examples/chat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def main(page):
3737
rows=1,
3838
auto_adjust_height=True,
3939
shift_enter=True,
40-
resizable=True,
40+
resizable=False,
4141
)
4242

4343
def on_message(user, message):

pglet/combobox.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
1-
from typing import List, Optional
1+
from typing import List, Optional, Union
2+
3+
from beartype import beartype
4+
5+
from pglet.control import Control
6+
27
try:
38
from typing import Literal
49
except:
510
from typing_extensions import Literal
611

7-
from beartype import beartype
8-
9-
from pglet.control import Control
1012

1113
ItemType = Literal[None, "normal", "divider", "header", "selectAll", "select_all"]
14+
ComboBoxValue = Union[None, str, List[str]]
1215

1316

1417
class ComboBox(Control):
1518
def __init__(
1619
self,
1720
label=None,
1821
id=None,
19-
value=None,
22+
value: ComboBoxValue = None,
2023
placeholder=None,
2124
error_message=None,
2225
on_change=None,
@@ -95,16 +98,12 @@ def label(self, value):
9598
# value
9699
@property
97100
def value(self):
98-
v = self._get_attr("value")
99-
if v and self.multi_select:
100-
return [x.strip() for x in v.split(",")]
101-
return v
101+
return self._get_value_or_list_attr("value", ",")
102102

103103
@value.setter
104-
def value(self, value):
105-
if isinstance(value, List):
106-
value = ",".join(value)
107-
self._set_attr("value", value)
104+
@beartype
105+
def value(self, value: ComboBoxValue):
106+
self._set_value_or_list_attr("value", value, ",")
108107

109108
# placeholder
110109
@property

pglet/control.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
]
2828

2929
BorderStyle = Union[None, BorderStyles, List[BorderStyles]]
30+
BorderWidth = Union[None, str, List[str]]
31+
BorderColor = Union[None, str, List[str]]
32+
BorderRadius = Union[None, str, List[str]]
3033

3134
TextSize = Literal[
3235
None,
@@ -103,6 +106,17 @@ def _get_attr(self, name, def_value=None, data_type="string"):
103106
def _set_attr(self, name, value, dirty=True):
104107
self._set_attr_internal(name, value, dirty)
105108

109+
def _get_value_or_list_attr(self, name, delimiter):
110+
v = self._get_attr(name)
111+
if v and delimiter in v:
112+
return [x.strip() for x in v.split(delimiter)]
113+
return v
114+
115+
def _set_value_or_list_attr(self, name, value, delimiter):
116+
if isinstance(value, List):
117+
value = delimiter.join(value)
118+
self._set_attr(name, value)
119+
106120
def _set_attr_internal(self, name, value, dirty=True):
107121
name = name.lower()
108122
orig_val = self.__attrs.get(name)

pglet/iframe.py

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from beartype import beartype
44

5-
from pglet.control import BorderStyle, Control
5+
from pglet.control import BorderColor, BorderRadius, BorderStyle, BorderWidth, Control
66

77

88
class IFrame(Control):
@@ -11,9 +11,9 @@ def __init__(
1111
id=None,
1212
src=None,
1313
border_style: BorderStyle = None,
14-
border_width=None,
15-
border_color=None,
16-
border_radius=None,
14+
border_width: BorderWidth = None,
15+
border_color: BorderColor = None,
16+
border_radius: BorderRadius = None,
1717
title=None,
1818
width=None,
1919
height=None,
@@ -56,44 +56,42 @@ def src(self, value):
5656
# border_style
5757
@property
5858
def border_style(self):
59-
v = self._get_attr("borderStyle")
60-
if v:
61-
return [x.strip() for x in v.split(" ")]
62-
return v
59+
return self._get_value_or_list_attr("borderStyle", " ")
6360

6461
@border_style.setter
6562
@beartype
6663
def border_style(self, value: BorderStyle):
67-
if isinstance(value, List):
68-
value = " ".join(value)
69-
self._set_attr("borderStyle", value)
64+
self._set_value_or_list_attr("borderStyle", value, " ")
7065

7166
# border_width
7267
@property
7368
def border_width(self):
74-
return self._get_attr("borderWidth")
69+
return self._get_value_or_list_attr("borderWidth", " ")
7570

7671
@border_width.setter
77-
def border_width(self, value):
78-
self._set_attr("borderWidth", value)
72+
@beartype
73+
def border_width(self, value: BorderWidth):
74+
self._set_value_or_list_attr("borderWidth", value, " ")
7975

8076
# border_color
8177
@property
8278
def border_color(self):
83-
return self._get_attr("borderColor")
79+
return self._get_value_or_list_attr("borderColor", " ")
8480

8581
@border_color.setter
86-
def border_color(self, value):
87-
self._set_attr("borderColor", value)
82+
@beartype
83+
def border_color(self, value: BorderColor):
84+
self._set_value_or_list_attr("borderColor", value, " ")
8885

8986
# border_radius
9087
@property
9188
def border_radius(self):
92-
return self._get_attr("borderRadius")
89+
return self._get_value_or_list_attr("borderRadius", " ")
9390

9491
@border_radius.setter
95-
def border_radius(self, value):
96-
self._set_attr("borderRadius", value)
92+
@beartype
93+
def border_radius(self, value: BorderRadius):
94+
self._set_value_or_list_attr("borderRadius", value, " ")
9795

9896
# title
9997
@property

pglet/image.py

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from beartype import beartype
44

5-
from pglet.control import BorderStyle, Control
5+
from pglet.control import BorderColor, BorderRadius, BorderStyle, BorderWidth, Control
66

77
try:
88
from typing import Literal
@@ -25,9 +25,9 @@ def __init__(
2525
maximize_frame=None,
2626
fit: Fit = None,
2727
border_style: BorderStyle = None,
28-
border_width=None,
29-
border_color=None,
30-
border_radius=None,
28+
border_width: BorderWidth = None,
29+
border_color: BorderColor = None,
30+
border_radius: BorderRadius = None,
3131
width=None,
3232
height=None,
3333
padding=None,
@@ -110,41 +110,39 @@ def fit(self, value: Fit):
110110
# border_style
111111
@property
112112
def border_style(self):
113-
v = self._get_attr("borderStyle")
114-
if v:
115-
return [x.strip() for x in v.split(" ")]
116-
return v
113+
return self._get_value_or_list_attr("borderStyle", " ")
117114

118115
@border_style.setter
119116
@beartype
120117
def border_style(self, value: BorderStyle):
121-
if isinstance(value, List):
122-
value = " ".join(value)
123-
self._set_attr("borderStyle", value)
118+
self._set_value_or_list_attr("borderStyle", value, " ")
124119

125120
# border_width
126121
@property
127122
def border_width(self):
128-
return self._get_attr("borderWidth")
123+
return self._get_value_or_list_attr("borderWidth", " ")
129124

130125
@border_width.setter
131-
def border_width(self, value):
132-
self._set_attr("borderWidth", value)
126+
@beartype
127+
def border_width(self, value: BorderWidth):
128+
self._set_value_or_list_attr("borderWidth", value, " ")
133129

134130
# border_color
135131
@property
136132
def border_color(self):
137-
return self._get_attr("borderColor")
133+
return self._get_value_or_list_attr("borderColor", " ")
138134

139135
@border_color.setter
140-
def border_color(self, value):
141-
self._set_attr("borderColor", value)
136+
@beartype
137+
def border_color(self, value: BorderColor):
138+
self._set_value_or_list_attr("borderColor", value, " ")
142139

143140
# border_radius
144141
@property
145142
def border_radius(self):
146-
return self._get_attr("borderRadius")
143+
return self._get_value_or_list_attr("borderRadius", " ")
147144

148145
@border_radius.setter
149-
def border_radius(self, value):
150-
self._set_attr("borderRadius", value)
146+
@beartype
147+
def border_radius(self, value: BorderRadius):
148+
self._set_value_or_list_attr("borderRadius", value, " ")

pglet/stack.py

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from beartype import beartype
44

5-
from pglet.control import BorderStyle, Control
5+
from pglet.control import BorderColor, BorderRadius, BorderStyle, BorderWidth, Control
66

77
try:
88
from typing import Literal
@@ -40,9 +40,9 @@ def __init__(
4040
wrap=None,
4141
bgcolor=None,
4242
border_style: BorderStyle = None,
43-
border_width=None,
44-
border_color=None,
45-
border_radius=None,
43+
border_width: BorderWidth = None,
44+
border_color: BorderColor = None,
45+
border_radius: BorderRadius = None,
4646
scroll_x=None,
4747
scroll_y=None,
4848
auto_scroll=None,
@@ -215,44 +215,42 @@ def bgcolor(self, value):
215215
# border_style
216216
@property
217217
def border_style(self):
218-
v = self._get_attr("borderStyle")
219-
if v:
220-
return [x.strip() for x in v.split(" ")]
221-
return v
218+
return self._get_value_or_list_attr("borderStyle", " ")
222219

223220
@border_style.setter
224221
@beartype
225222
def border_style(self, value: BorderStyle):
226-
if isinstance(value, List):
227-
value = " ".join(value)
228-
self._set_attr("borderStyle", value)
223+
self._set_value_or_list_attr("borderStyle", value, " ")
229224

230225
# border_width
231226
@property
232227
def border_width(self):
233-
return self._get_attr("borderWidth")
228+
return self._get_value_or_list_attr("borderWidth", " ")
234229

235230
@border_width.setter
236-
def border_width(self, value):
237-
self._set_attr("borderWidth", value)
231+
@beartype
232+
def border_width(self, value: BorderWidth):
233+
self._set_value_or_list_attr("borderWidth", value, " ")
238234

239235
# border_color
240236
@property
241237
def border_color(self):
242-
return self._get_attr("borderColor")
238+
return self._get_value_or_list_attr("borderColor", " ")
243239

244240
@border_color.setter
245-
def border_color(self, value):
246-
self._set_attr("borderColor", value)
241+
@beartype
242+
def border_color(self, value: BorderColor):
243+
self._set_value_or_list_attr("borderColor", value, " ")
247244

248245
# border_radius
249246
@property
250247
def border_radius(self):
251-
return self._get_attr("borderRadius")
248+
return self._get_value_or_list_attr("borderRadius", " ")
252249

253250
@border_radius.setter
254-
def border_radius(self, value):
255-
self._set_attr("borderRadius", value)
251+
@beartype
252+
def border_radius(self, value: BorderRadius):
253+
self._set_value_or_list_attr("borderRadius", value, " ")
256254

257255
# scroll_x
258256
@property

0 commit comments

Comments
 (0)