90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
"""
|
|
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)
|