Untitled

 avatar
unknown
plain_text
3 months ago
4.2 kB
5
Indexable
class LidAlertScreen(ctk.CTkToplevel):
    def __init__(self, parent, dark_mode: bool, language='EN'):
        super().__init__(parent)
        
        print("\n=== Initializing LidAlertScreen ===")
        
        self.language = language
        self.dark_mode = dark_mode
        self._destroyed = False
        self.parent = parent
        
        # Initialize the reed switch
        self.reed_switch = Button(25, pull_up=True)
        self.reed_switch.when_pressed = self.handle_lid_closed
        
        # Make it fullscreen and disable all close operations
        self.overrideredirect(True)
        self.geometry(f"{self.winfo_screenwidth()}x{self.winfo_screenheight()}+0+0")
        self.protocol("WM_DELETE_WINDOW", lambda: None)
        self.attributes('-topmost', True)

        # Set background color based on dark mode
        bg_color = '#1c1c1e' if dark_mode else '#f5f5f7'
        border_color = '#2c2c2e' if dark_mode else '#e5e5e7'
        self.configure(fg_color=bg_color)

        # Create main container with padding
        self.container = ctk.CTkFrame(self, fg_color=bg_color, corner_radius=0)
        self.container.pack(fill='both', expand=True, padx=30, pady=30)

        # Add a border around the alert box
        self.border_frame = ctk.CTkFrame(self.container, fg_color=border_color, corner_radius=10)
        self.border_frame.pack(fill='both', expand=True, padx=10, pady=10)

        # Create colored alert box inside the border (using pastel red)
        pastel_red = "#FFB3B3"  # Light pastel red
        self.alert_box = ctk.CTkFrame(self.border_frame, fg_color=pastel_red, corner_radius=8)
        self.alert_box.pack(fill='both', expand=True, padx=5, pady=5)

        # Add the warning message
        message_text = TRANSLATIONS[language].get('lid_open_warning', 
                                                "WARNING: Lid is open!\nPlease close the lid to continue.")
        self.message_label = ctk.CTkLabel(
            self.alert_box,
            text=message_text,
            font=('Dongle', 36),  # Slightly larger font than waste alert
            text_color='#000000'  # Black text for better contrast on pastel red
        )
        self.message_label.place(relx=0.5, rely=0.35, anchor='center')

        # Add warning icon
        try:
            icon_image = ctk.CTkImage(
                light_image=Image.open("icons/warning-b.png"),  # Assuming you have a warning icon
                dark_image=Image.open("icons/warning-b.png"),
                size=(65, 65)  # Slightly larger than waste alert
            )
            self.icon_label = ctk.CTkLabel(
                self.alert_box,
                image=icon_image,
                text=""
            )
            self.icon_label.place(relx=0.5, rely=0.55, anchor='center')
        except Exception as e:
            print(f"Error loading warning icon: {e}")
            self.icon_label = ctk.CTkLabel(
                self.alert_box,
                text="⚠️",  # Unicode warning symbol as fallback
                font=('Dongle', 48)
            )
            self.icon_label.place(relx=0.5, rely=0.55, anchor='center')
        
        # Start monitoring thread
        self.monitor_thread = threading.Thread(target=self.monitor_lid, daemon=True)
        self.monitor_thread.start()

    def handle_lid_closed(self):
        """Handle lid closed event"""
        print("Lid closed detected")
        if not self._destroyed:
            self.after(0, self.destroy)
            self._destroyed = True

    def monitor_lid(self):
        """Monitor lid status"""
        while not self._destroyed:
            if self.reed_switch.is_pressed:  # Magnet detected (lid closed)
                print("Lid closed detected in monitoring thread")
                if not self._destroyed:
                    self.after(0, self.destroy)
                    self._destroyed = True
                break
            time.sleep(0.1)  # Small delay to prevent CPU overuse

    def cleanup(self):
        """Cleanup resources"""
        self._destroyed = True
        if hasattr(self, 'reed_switch'):
            self.reed_switch.close()
Editor is loading...
Leave a Comment