2020class Generator :
2121 synoptic_dir : Path = field (repr = False )
2222
23- screen_name : str = field (init = False )
24- screen_components : list [Entity ] = field (init = False )
25-
2623 # These are global params for the class (not accessible by user)
2724 support_path : Path = field (init = False , repr = False )
2825 techui_support : dict = field (init = False , repr = False )
@@ -33,6 +30,7 @@ class Generator:
3330 widgets : list [ActionButton | EmbeddedDisplay ] = field (
3431 default_factory = list [ActionButton | EmbeddedDisplay ], init = False , repr = False
3532 )
33+ group : Group | None = field (default = None , init = False , repr = False )
3634
3735 # Add group padding, and self.widget_x for placing widget in x direction relative to
3836 # other widgets, with a widget count to reset the self.widget_x dimension when the
@@ -55,10 +53,6 @@ def _read_map(self):
5553 with open (support_yaml ) as map :
5654 self .techui_support = yaml .safe_load (map )
5755
58- def load_screen (self , screen_name : str , screen_components : list [Entity ]):
59- self .screen_name = screen_name
60- self .screen_components = screen_components
61-
6256 def _get_screen_dimensions (self , file : str ) -> tuple [int , int ]:
6357 """
6458 Parses the bob files for information on the height
@@ -248,7 +242,7 @@ def _allocate_widget(
248242 return new_widget
249243
250244 def _create_widget (
251- self , component : Entity
245+ self , name : str , component : Entity
252246 ) -> EmbeddedDisplay | ActionButton | None | list [EmbeddedDisplay | ActionButton ]:
253247 # if statement below is check if the suffix is
254248 # missing from the component description. If
@@ -261,7 +255,7 @@ def _create_widget(
261255 except KeyError :
262256 logger_ .warning (
263257 f"No available widget for { component .type } in screen \
264- { self . screen_name } . Skipping..."
258+ { name } . Skipping..."
265259 )
266260 return None
267261
@@ -337,28 +331,26 @@ def layout_widgets(self, widgets: list[EmbeddedDisplay | ActionButton]):
337331
338332 return sorted_widgets
339333
340- def build_groups (self ):
341- """
342- Create a group to fill with widgets
343- """
344- # Create screen
345- self .screen_ = pscreen .Screen (self .screen_name )
334+ def build_widgets (self , screen_name : str , screen_components : list [Entity ]):
346335 # Empty widget buffer
347336 self .widgets = []
348337
349- # create widget and group objects
350-
351338 # order is an enumeration of the components, used to list them,
352339 # and serves as functionality in the math for formatting.
353- for component in self . screen_components :
354- new_widget = self ._create_widget (component = component )
340+ for component in screen_components :
341+ new_widget = self ._create_widget (name = screen_name , component = component )
355342 if new_widget is None :
356343 continue
357344 if isinstance (new_widget , list ):
358345 self .widgets .extend (new_widget )
359346 continue
360347 self .widgets .append (new_widget )
361348
349+ def build_groups (self , screen_name : str ):
350+ """
351+ Create a group to fill with widgets
352+ """
353+
362354 if self .widgets == []:
363355 # No widgets found, so just back out
364356 return
@@ -369,28 +361,43 @@ def build_groups(self):
369361 height , width = self ._get_group_dimensions (self .widgets )
370362
371363 self .group = Group (
372- self . screen_name ,
364+ screen_name ,
373365 0 ,
374366 0 ,
375367 width ,
376368 height ,
377369 )
378370
371+ # TODO: we shouldn't need this assert; fix
372+ assert self .group is not None
379373 self .group .version ("2.0.0" )
380374 self .group .add_widget (self .widgets )
375+
376+ def build_screen (self , screen_name ):
377+ """
378+ Build the screen with the widget groups.
379+ """
380+ # Create screen
381+ self .screen_ = pscreen .Screen (screen_name )
382+
383+ # TODO: I don't like this
384+ if self .group is None :
385+ # No group found, so just back out
386+ return
387+
381388 self .screen_ .add_widget (self .group )
382389
383- def write_screen (self , directory : Path ):
390+ def write_screen (self , screen_name : str , directory : Path ):
384391 """Write the screen to file"""
385392
386393 if self .widgets == []:
387394 logger_ .warning (
388- f"Could not write screen: { self . screen_name } \
395+ f"Could not write screen: { screen_name } \
389396 as no widgets were available"
390397 )
391398 return
392399
393400 if not directory .exists ():
394401 os .mkdir (directory )
395- self .screen_ .write_screen (f"{ directory } /{ self . screen_name } .bob" )
396- logger_ .info (f"{ self . screen_name } .bob has been created successfully" )
402+ self .screen_ .write_screen (f"{ directory } /{ screen_name } .bob" )
403+ logger_ .info (f"{ screen_name } .bob has been created successfully" )
0 commit comments