Untitled

 avatar
unknown
plain_text
7 months ago
5.8 kB
3
Indexable
height=40,
                fg_color="transparent",
                hover_color=border_color,
                command=self.close_screen
            )
        self.back_button.pack(side='left', padx=20)
        
        # Title
        self.title = ctk.CTkLabel(
            self.header,
            text=f"Connect to {self.network.ssid}",
            font=("Dongle", 24, "bold"),
            text_color=text_color
        )
        self.title.pack(side='left', padx=20)
        
        # Main container
        self.main_container = ctk.CTkFrame(self, fg_color=bg_color)
        self.main_container.pack(fill='both', expand=True, padx=20, pady=20)
        
        # Password entry
        self.password_frame = ctk.CTkFrame(self.main_container, fg_color="transparent")
        self.password_frame.pack(fill='x', pady=(0, 20))
        
        self.password_entry = ctk.CTkEntry(
            self.password_frame,
            width=300,
            height=40,
            placeholder_text="Enter password",
            show="•",
            font=("Dongle", 16),
            fg_color=border_color,
            text_color=text_color
        )
        self.password_entry.pack(side='left', padx=(0, 10))
        
        # Toggle password visibility button
        try:
            icon_suffix = "-w" if dark_mode else "-b"
            eye_image = ctk.CTkImage(
                light_image=Image.open(f"icons/eye{icon_suffix}.png"),
                dark_image=Image.open(f"icons/eye{icon_suffix}.png"),
                size=(20, 20)
            )
            self.toggle_password_button = ctk.CTkButton(
                self.password_frame,
                image=eye_image,
                text="",
                width=40,
                height=40,
                fg_color=border_color,
                hover_color='#3a3a3c' if dark_mode else '#d1d1d6',
                command=self.toggle_password_visibility
            )
        except Exception:
            self.toggle_password_button = ctk.CTkButton(
                self.password_frame,
                text="👁",
                width=40,
                height=40,
                fg_color=border_color,
                hover_color='#3a3a3c' if dark_mode else '#d1d1d6',
                command=self.toggle_password_visibility
            )
        self.toggle_password_button.pack(side='left', padx=5)
        
        # Clear password button
        try:
            icon_suffix = "-w" if dark_mode else "-b"
            clear_image = ctk.CTkImage(
                light_image=Image.open(f"icons/x{icon_suffix}.png"),
                dark_image=Image.open(f"icons/x{icon_suffix}.png"),
                size=(20, 20)
            )
            self.clear_button = ctk.CTkButton(
                self.password_frame,
                image=clear_image,
                text="",
                width=40,
                height=40,
                fg_color=border_color,
                hover_color='#3a3a3c' if dark_mode else '#d1d1d6',
                command=self.clear_password
            )
        except Exception:
            self.clear_button = ctk.CTkButton(
                self.password_frame,
                text="✕",
                width=40,
                height=40,
                fg_color=border_color,
                hover_color='#3a3a3c' if dark_mode else '#d1d1d6',
                command=self.clear_password
            )
        self.clear_button.pack(side='left', padx=5)
        
        # Connect button
        self.connect_button = ctk.CTkButton(
            self.main_container,
            text="Connect",
            width=200,
            height=40,
            font=("Dongle", 16),
            fg_color="#34c759",
            hover_color="#248a3d",
            command=self.handle_password_submit
        )
        self.connect_button.pack(pady=(0, 20))
        
        # Touch keyboard
        self.keyboard = TouchKeyboard(self.main_container, self.password_entry, dark_mode)
        self.keyboard.pack(fill='x', pady=(20, 0))
        
        # Password visibility state
        self.password_visible = False

    def toggle_password_visibility(self):
        self.password_visible = not self.password_visible
        self.password_entry.configure(show="" if self.password_visible else "•")

    def clear_password(self):
        self.password_entry.delete(0, 'end')

    def handle_password_submit(self):
        password = self.password_entry.get()
        if password:
            self.connect_button.configure(state="disabled", text="Connecting...")
            
            def connect():
                success = WiFiNetwork.connect(self.network.ssid, password)
                self.parent.after(0, lambda: self.handle_connection_result(success))
            
            threading.Thread(target=connect).start()

    def handle_connection_result(self, success: bool):
        if success:
            self.refresh_callback()
            self.close_screen()
        else:
            self.connect_button.configure(
                state="normal",
                text="Connect",
                fg_color="#ff3b30",
                hover_color="#ff453a"
            )
            self.password_entry.configure(fg_color="#ff3b30")
            self.parent.after(2000, lambda: self.reset_error_state())

    def reset_error_state(self):
        border_color = '#2c2c2e' if self.dark_mode else '#e5e5e7'
        self.connect_button.configure(
            fg_color="#34c759",
            hover_color="#248a3d"
        )
        self.password_entry.configure(fg_color=border_color)

    def close_screen(self):
        self.destroy()
Editor is loading...
Leave a Comment