import json import os import config.data as data from fabric.widgets.box import Box from fabric.widgets.button import Button from fabric.widgets.datetime import DateTime from modules.dock.battery import Battery from modules.dock.controls import Controls from modules.dock.indicators import Indicators from modules.dock.metrics import Metrics from modules.dock.workspaces import create_workspace_widget class DockComponents(Box): def __init__(self, orientation_val="h", **kwargs): super().__init__( name="dock-components", orientation=orientation_val, spacing=4, **kwargs ) # Initialize component visibility from data self.component_visibility = data.DOCK_COMPONENTS_VISIBILITY # Create components self.workspaces = Button( child=create_workspace_widget(), name="workspaces", ) self.metrics = Metrics() self.battery = Battery() self.date_time = DateTime( name="date-time", formatters=["%I:%M"] if not data.VERTICAL else ["%I\n%M"], h_align="center" if not data.VERTICAL else "fill", v_align="center", h_expand=True, v_expand=True, ) self.controls = Controls() self.indicators = Indicators() # Add components based on position if data.DOCK_POSITION == "Right": self.add(self.date_time) self.add(self.controls) self.add(self.indicators) self.add(self.battery) self.add(self.metrics) self.add(self.workspaces) else: # Bottom or Left position self.add(self.workspaces) self.add(self.metrics) self.add(self.controls) self.add(self.indicators) self.add(self.battery) self.add(self.date_time) # Apply initial visibility self.apply_component_props() def apply_component_props(self): components = { "workspaces": self.workspaces, "metrics": self.metrics, "battery": self.battery, "date_time": self.date_time, "controls": self.controls, "indicators": self.indicators, } for component_name, widget in components.items(): if component_name in self.component_visibility: widget.set_visible(self.component_visibility[component_name]) def toggle_component_visibility(self, component_name): components = { "workspaces": self.workspaces, "metrics": self.metrics, "battery": self.battery, "date_time": self.date_time, "controls": self.controls, "indicators": self.indicators, } if component_name in components and component_name in self.component_visibility: self.component_visibility[component_name] = not self.component_visibility[ component_name ] components[component_name].set_visible( self.component_visibility[component_name] ) config_file = os.path.expanduser( f"~/.config/{data.APP_NAME}/config/config.json" ) if os.path.exists(config_file): try: with open(config_file, "r") as f: config = json.load(f) config[f"dock_{component_name}_visible"] = ( self.component_visibility[component_name] ) with open(config_file, "w") as f: json.dump(config, f, indent=4) except Exception as e: print(f"Error updating config file: {e}") return self.component_visibility[component_name] return None