First commit
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
"""
|
||||
Login Frame
|
||||
|
||||
UI component for authentication.
|
||||
"""
|
||||
|
||||
import customtkinter as ctk
|
||||
from typing import Callable
|
||||
|
||||
|
||||
class LoginFrame(ctk.CTkFrame):
|
||||
"""Frame for authentication UI."""
|
||||
|
||||
def __init__(self, parent, on_connect: Callable = None):
|
||||
"""
|
||||
Initialize the login frame.
|
||||
|
||||
Args:
|
||||
parent: Parent widget
|
||||
on_connect: Callback function when connect button is clicked
|
||||
"""
|
||||
super().__init__(parent)
|
||||
|
||||
self.on_connect = on_connect
|
||||
self.is_authenticated = False
|
||||
|
||||
# Configure frame
|
||||
self.configure(corner_radius=10, border_width=2)
|
||||
|
||||
# Title
|
||||
self.title_label = ctk.CTkLabel(
|
||||
self,
|
||||
text="Authentication",
|
||||
font=ctk.CTkFont(size=18, weight="bold")
|
||||
)
|
||||
self.title_label.grid(row=0, column=0, columnspan=3, padx=20, pady=(20, 10), sticky="w")
|
||||
|
||||
# Status indicator (colored circle)
|
||||
self.status_indicator = ctk.CTkLabel(
|
||||
self,
|
||||
text="●",
|
||||
font=ctk.CTkFont(size=20),
|
||||
text_color="red"
|
||||
)
|
||||
self.status_indicator.grid(row=1, column=0, padx=(20, 5), pady=10)
|
||||
|
||||
# Status text
|
||||
self.status_label = ctk.CTkLabel(
|
||||
self,
|
||||
text="Not Connected",
|
||||
font=ctk.CTkFont(size=14)
|
||||
)
|
||||
self.status_label.grid(row=1, column=1, padx=5, pady=10, sticky="w")
|
||||
|
||||
# Connect button
|
||||
self.connect_button = ctk.CTkButton(
|
||||
self,
|
||||
text="Connect to Azure",
|
||||
command=self._on_connect_clicked,
|
||||
width=200,
|
||||
height=40,
|
||||
font=ctk.CTkFont(size=14, weight="bold")
|
||||
)
|
||||
self.connect_button.grid(row=1, column=2, padx=20, pady=10, sticky="e")
|
||||
|
||||
# Configure grid
|
||||
self.grid_columnconfigure(1, weight=1)
|
||||
|
||||
def _on_connect_clicked(self):
|
||||
"""Handle connect button click."""
|
||||
if self.on_connect:
|
||||
self.on_connect()
|
||||
|
||||
def set_authenticated(self, authenticated: bool):
|
||||
"""
|
||||
Update authentication status.
|
||||
|
||||
Args:
|
||||
authenticated: Whether authentication succeeded
|
||||
"""
|
||||
self.is_authenticated = authenticated
|
||||
|
||||
if authenticated:
|
||||
self.status_indicator.configure(text_color="green")
|
||||
self.status_label.configure(text="Connected")
|
||||
self.connect_button.configure(state="disabled", text="Connected")
|
||||
else:
|
||||
self.status_indicator.configure(text_color="red")
|
||||
self.status_label.configure(text="Not Connected")
|
||||
self.connect_button.configure(state="normal", text="Connect to Azure")
|
||||
|
||||
def set_connecting(self):
|
||||
"""Set UI to connecting state."""
|
||||
self.status_indicator.configure(text_color="orange")
|
||||
self.status_label.configure(text="Connecting...")
|
||||
self.connect_button.configure(state="disabled", text="Connecting...")
|
||||
|
||||
def enable_button(self):
|
||||
"""Enable the connect button (for retry after error)."""
|
||||
if not self.is_authenticated:
|
||||
self.connect_button.configure(state="normal", text="Connect to Azure")
|
||||
Reference in New Issue
Block a user