@@ -127,11 +127,35 @@ def _dropdown(self, key: str, argItems: list[str]) -> Any:
127
127
)
128
128
129
129
def _fileBrowser (
130
- self , key : str , default : str | None = None , _type : ItemType = ItemType .File
130
+ self ,
131
+ key : str ,
132
+ default : str | None = None ,
133
+ _type : ItemType = ItemType .File ,
134
+ additional_properties : dict | None = None ,
131
135
) -> list [Any ]:
132
136
"""Return a fileBrowser button and field."""
137
+ additional_properties = additional_properties or {}
138
+
133
139
height = self .sizes ["input_size" ][1 ]
134
140
width = self .sizes ["input_size" ][0 ]
141
+
142
+ key = f"{ key } { SEP } { _type } "
143
+ if _type in [ItemType .FileWrite , ItemType .File ]:
144
+ key += f";{ additional_properties .get ('file_mode' )} ;{ additional_properties .get ('file_encoding' )} "
145
+
146
+ browser = self .sg .FileBrowse (
147
+ key = "@@" + key ,
148
+ size = (int (width / 3 ), height ),
149
+ pad = (0 , self .sizes ["padding" ][1 ]),
150
+ )
151
+
152
+ if _type in [ItemType .FileWrite , ItemType .Path ]:
153
+ browser = self .sg .SaveAs (
154
+ button_text = "Select/Create" ,
155
+ key = "@@" + key ,
156
+ size = (int (width / 3 ), height ),
157
+ pad = (0 , self .sizes ["padding" ][1 ]),
158
+ )
135
159
fb : list [Any ] = [
136
160
self .sg .InputText (
137
161
default or "" ,
@@ -140,11 +164,7 @@ def _fileBrowser(
140
164
key = key ,
141
165
font = ("sans" , self .sizes ["text_size" ]),
142
166
),
143
- self .sg .FileBrowse (
144
- key = f"{ key } { SEP } { _type } " ,
145
- size = (int (width / 3 ), height ),
146
- pad = (0 , self .sizes ["padding" ][1 ]),
147
- ),
167
+ browser ,
148
168
]
149
169
return fb
150
170
@@ -229,7 +249,10 @@ def _helpFileWidget(
229
249
"""Return a set of self that make up an arg with a file."""
230
250
return [
231
251
self ._helpArgNameAndHelp (item .commands , item .help , item .display_name ),
232
- self .sg .Column ([self ._fileBrowser (item .dest , item .default , item .type )], pad = (0 , 0 )),
252
+ self .sg .Column (
253
+ [self ._fileBrowser (item .dest , item .default , item .type , item .additional_properties )],
254
+ pad = (0 , 0 ),
255
+ ),
233
256
]
234
257
235
258
def _helpDropdownWidget (
@@ -259,6 +282,7 @@ def addWidgetFromItem(self, item: Item) -> list[Any]:
259
282
functionMap = {
260
283
ItemType .Bool : self ._helpFlagWidget ,
261
284
ItemType .File : self ._helpFileWidget ,
285
+ ItemType .FileWrite : self ._helpFileWidget ,
262
286
ItemType .Path : self ._helpFileWidget ,
263
287
ItemType .Choice : self ._helpDropdownWidget ,
264
288
ItemType .Int : self ._helpCounterWidget ,
0 commit comments