@@ -179,12 +179,14 @@ class ToolBar(QToolBar):
179179 """Tool bar widget for themes."""
180180
181181 imported = Signal (str )
182+ extend = Signal (bool )
182183 themes_dir = Path (__file__ ).parent / "themes"
183184
184185 def __init__ (self ):
185186 """Construct tool bar."""
186187 super ().__init__ ()
187188 self .setToolButtonStyle (Qt .ToolButtonStyle .ToolButtonTextUnderIcon )
189+ self .extended_state = False
188190 self .live_action = QAction (get_icon ("live" ), "live view" , self )
189191 self .preview_action = QAction (get_icon ("preview" ), "preview" , self )
190192 self .load_action = QAction (get_icon ("confirm" ), "load" , self )
@@ -194,6 +196,7 @@ def __init__(self):
194196 self .live_action .setChecked (True )
195197 self .preview_action .setCheckable (True )
196198 self .preview_action .setChecked (False )
199+ self .preview_action .setEnabled (False )
197200 self .addActions (
198201 [
199202 self .live_action ,
@@ -230,12 +233,27 @@ def __init__(self):
230233 )
231234 self .addSeparator ()
232235 self .addAction (self .github_action )
236+ self .addSeparator ()
237+ self .extend_action = QAction (get_icon ("extend-right" ), "extend" , self )
238+ self .addAction (self .extend_action )
233239 self .github_action .triggered .connect (open_github_browser )
234240 self .live_action .triggered .connect (self .activate_load )
235241 self .rename_action .triggered .connect (self .rename_theme )
236242 self .new_action .triggered .connect (self .new_dialog )
237243 self .delete_action .triggered .connect (self .delete_theme )
238244 self .import_action .triggered .connect (self .import_theme )
245+ self .extend_action .triggered .connect (self .on_extended )
246+
247+ def on_extended (self ):
248+ """Triggers extending the screen to view widgets while styling them."""
249+ if not self .extended_state :
250+ self .extend_action .setIcon (get_icon ("extend-left" ))
251+ self .extended_state = True
252+ self .extend .emit (True )
253+ else :
254+ self .extend_action .setIcon (get_icon ("extend-right" ))
255+ self .extended_state = False
256+ self .extend .emit (False )
239257
240258 def delete_theme (self ):
241259 """Delete the current theme in combo box."""
@@ -248,8 +266,10 @@ def activate_load(self, state):
248266 """Activate or deactivate load button."""
249267 if state :
250268 self .load_action .setDisabled (True )
269+ self .preview_action .setDisabled (True )
251270 else :
252271 self .load_action .setDisabled (False )
272+ self .preview_action .setDisabled (False )
253273
254274 def set_theme_name (self , new , old ):
255275 """Set the new name for current theme."""
@@ -303,6 +323,8 @@ def import_theme(self): # pragma: nocover
303323class StylerTab (QWidget ):
304324 """Styler Widget."""
305325
326+ extend = Signal (bool )
327+
306328 def __init__ (self , parent = None ):
307329 """Construct styler widget."""
308330 super ().__init__ (parent )
@@ -367,6 +389,7 @@ def __init__(self, parent=None):
367389 self .toolbar .themes_combo .currentTextChanged .connect (
368390 self .set_current_theme
369391 )
392+ self .toolbar .extend .connect (self .extend .emit )
370393
371394 def save_sheet (self ):
372395 """Save the current content of the editor to theme doc."""
@@ -492,3 +515,15 @@ def parse_changes(self):
492515 except ParsingError as err : # pragma: nocover
493516 a = str (err )
494517 self .window ().statusBar ().showMessage (f"Error near line { a } " , 2000 )
518+
519+ def export_theme (self ): # pragma: nocover
520+ """Export current editor contents to qss file."""
521+ current_theme = self .editor .text ()
522+ path = QFileDialog .getSaveFileName (self , caption = "Save Path" )
523+ if path and not os .path .exists (path ):
524+ if not path .lower ().endswith (".qss" ):
525+ path += ".qss"
526+ with open (path , "wt" , encoding = "utf8" ) as fd :
527+ fd .write (current_theme )
528+ else :
529+ self .window ().statusBar ().showMessage (f"Error saving to { path } " )
0 commit comments