First commit
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
"""
|
||||
Subscription Selection Frame
|
||||
|
||||
UI component for selecting an Azure subscription.
|
||||
"""
|
||||
|
||||
import customtkinter as ctk
|
||||
from typing import List, Dict, Callable, Optional
|
||||
from ui.components import UnifiedDropdown
|
||||
|
||||
|
||||
class SubscriptionSelectionFrame(ctk.CTkFrame):
|
||||
"""Frame for subscription selection."""
|
||||
|
||||
def __init__(self, parent, on_subscription_selected: Callable = None):
|
||||
"""
|
||||
Initialize the subscription selection frame.
|
||||
|
||||
Args:
|
||||
parent: Parent widget
|
||||
on_subscription_selected: Callback function when a subscription is selected
|
||||
"""
|
||||
super().__init__(parent)
|
||||
|
||||
self.on_subscription_selected = on_subscription_selected
|
||||
|
||||
# Configure frame
|
||||
self.configure(corner_radius=10, border_width=2)
|
||||
|
||||
# Create unified dropdown
|
||||
self.dropdown = UnifiedDropdown(
|
||||
self,
|
||||
title="Subscription Selection",
|
||||
on_selection_changed=self._on_subscription_selected,
|
||||
show_count=True,
|
||||
display_key='name',
|
||||
max_dropdown_height=300
|
||||
)
|
||||
self.dropdown.grid(row=0, column=0, sticky="ew")
|
||||
self.dropdown.set_placeholder("Please connect to Azure first")
|
||||
|
||||
# Configure grid
|
||||
self.grid_columnconfigure(0, weight=1)
|
||||
|
||||
def set_subscriptions(self, subscriptions: List[Dict[str, str]]):
|
||||
"""
|
||||
Set the list of subscriptions.
|
||||
|
||||
Args:
|
||||
subscriptions: List of subscription dictionaries with 'id' and 'name'
|
||||
"""
|
||||
self.dropdown.set_items(subscriptions)
|
||||
|
||||
def _on_subscription_selected(self, subscription: Dict):
|
||||
"""
|
||||
Handle subscription selection.
|
||||
|
||||
Args:
|
||||
subscription: The selected subscription dictionary
|
||||
"""
|
||||
if self.on_subscription_selected:
|
||||
self.on_subscription_selected(subscription)
|
||||
|
||||
def get_selected_subscription(self) -> Optional[Dict[str, str]]:
|
||||
"""
|
||||
Get the currently selected subscription.
|
||||
|
||||
Returns:
|
||||
Dict: Selected subscription or None
|
||||
"""
|
||||
return self.dropdown.get_selected()
|
||||
|
||||
def set_enabled(self, enabled: bool):
|
||||
"""
|
||||
Enable or disable the frame.
|
||||
|
||||
Args:
|
||||
enabled: Whether to enable the frame
|
||||
"""
|
||||
self.dropdown.set_enabled(enabled)
|
||||
|
||||
def set_loading(self, loading: bool):
|
||||
"""
|
||||
Set loading state.
|
||||
|
||||
Args:
|
||||
loading: Whether currently loading
|
||||
"""
|
||||
self.dropdown.set_loading(loading)
|
||||
Reference in New Issue
Block a user