Spaces:
Sleeping
Sleeping
| """ | |
| Main Application Orchestrator for D'n'D Campaign Manager | |
| Assembles all modular tabs into the complete Gradio interface | |
| """ | |
| import gradio as gr | |
| from src.agents.character_agent import CharacterAgent | |
| from src.agents.campaign_agent import CampaignAgent | |
| from src.ui.components.dropdown_manager import DropdownManager | |
| from src.ui.tabs import ( | |
| AboutTab, | |
| CharacterCreateTab, | |
| CharacterLoadTab, | |
| CharacterManageTab, | |
| CharacterPortraitTab, | |
| CharacterExportTab, | |
| CampaignCreateTab, | |
| CampaignManageTab, | |
| CampaignAddCharsTab, | |
| CampaignSynthesizeTab, | |
| SessionTrackingTab, | |
| ) | |
| class DnDCampaignManagerApp: | |
| """Main application class that orchestrates all UI components""" | |
| def __init__(self): | |
| # Initialize agents | |
| self.character_agent = CharacterAgent() | |
| self.campaign_agent = CampaignAgent() | |
| # Initialize dropdown manager | |
| self.dropdown_manager = DropdownManager( | |
| character_agent=self.character_agent, | |
| campaign_agent=self.campaign_agent | |
| ) | |
| # Initialize tabs | |
| self.about_tab = AboutTab() | |
| self.character_create_tab = CharacterCreateTab( | |
| character_agent=self.character_agent | |
| ) | |
| self.character_load_tab = CharacterLoadTab( | |
| character_agent=self.character_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.character_manage_tab = CharacterManageTab( | |
| character_agent=self.character_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.character_portrait_tab = CharacterPortraitTab( | |
| character_agent=self.character_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.character_export_tab = CharacterExportTab( | |
| character_agent=self.character_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.campaign_create_tab = CampaignCreateTab( | |
| campaign_agent=self.campaign_agent | |
| ) | |
| self.campaign_manage_tab = CampaignManageTab( | |
| campaign_agent=self.campaign_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.campaign_add_chars_tab = CampaignAddCharsTab( | |
| character_agent=self.character_agent, | |
| campaign_agent=self.campaign_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.campaign_synthesize_tab = CampaignSynthesizeTab( | |
| character_agent=self.character_agent, | |
| campaign_agent=self.campaign_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| self.session_tracking_tab = SessionTrackingTab( | |
| campaign_agent=self.campaign_agent, | |
| dropdown_manager=self.dropdown_manager | |
| ) | |
| def create_interface(self) -> gr.Blocks: | |
| """Create and assemble the complete Gradio interface""" | |
| with gr.Blocks(title="D'n'D Campaign Manager - Character Creator") as interface: | |
| gr.Markdown(""" | |
| # π² D'n'D Campaign Manager | |
| ## Complete D&D Character Creator | |
| Create and manage complete D&D 5e characters for your campaigns! | |
| """) | |
| with gr.Tabs(): | |
| # Character tabs | |
| self.character_create_tab.create() | |
| character_dropdown = self.character_load_tab.create() | |
| delete_character_dropdown = self.character_manage_tab.create() | |
| portrait_character_dropdown = self.character_portrait_tab.create() | |
| export_character_dropdown = self.character_export_tab.create() | |
| # Campaign Management tab with sub-tabs | |
| with gr.Tab("Campaign Management"): | |
| gr.Markdown(""" | |
| ### π² Campaign Management | |
| Create and manage your D&D campaigns, track sessions, and record events! | |
| """) | |
| with gr.Tabs(): | |
| self.campaign_synthesize_tab.create() | |
| self.campaign_create_tab.create() | |
| manage_campaign_dropdown = self.campaign_manage_tab.create() | |
| add_char_campaign_dropdown, add_char_character_dropdown = self.campaign_add_chars_tab.create() | |
| session_campaign_dropdown, auto_session_campaign_dropdown, notes_campaign_dropdown, event_campaign_dropdown = self.session_tracking_tab.create() | |
| # About tab | |
| self.about_tab.create() | |
| gr.Markdown(""" | |
| --- | |
| ### Tips | |
| - Enable "Use AI" options for more creative and detailed characters | |
| - Use Standard Array for balanced characters | |
| - Use Roll for random variation | |
| - Save your character ID to load it later | |
| - Check the character list to find previously created characters | |
| """) | |
| # Auto-populate dropdowns on interface load | |
| def populate_all_dropdowns(): | |
| """Populate all dropdowns when interface loads""" | |
| campaign_choices = self.dropdown_manager.get_campaign_dropdown_choices() | |
| character_choices = self.dropdown_manager.get_character_dropdown_choices() | |
| return [ | |
| gr.update(choices=character_choices), # character_dropdown | |
| gr.update(choices=character_choices), # delete_character_dropdown | |
| gr.update(choices=character_choices), # portrait_character_dropdown | |
| gr.update(choices=character_choices), # export_character_dropdown | |
| gr.update(choices=campaign_choices), # manage_campaign_dropdown | |
| gr.update(choices=campaign_choices), # add_char_campaign_dropdown | |
| gr.update(choices=character_choices), # add_char_character_dropdown | |
| gr.update(choices=campaign_choices), # session_campaign_dropdown | |
| gr.update(choices=campaign_choices), # auto_session_campaign_dropdown | |
| gr.update(choices=campaign_choices), # notes_campaign_dropdown | |
| gr.update(choices=campaign_choices), # event_campaign_dropdown | |
| ] | |
| interface.load( | |
| fn=populate_all_dropdowns, | |
| inputs=[], | |
| outputs=[ | |
| character_dropdown, | |
| delete_character_dropdown, | |
| portrait_character_dropdown, | |
| export_character_dropdown, | |
| manage_campaign_dropdown, | |
| add_char_campaign_dropdown, | |
| add_char_character_dropdown, | |
| session_campaign_dropdown, | |
| auto_session_campaign_dropdown, | |
| notes_campaign_dropdown, | |
| event_campaign_dropdown, | |
| ] | |
| ) | |
| return interface | |
| def launch_ui(): | |
| """Launch the Gradio interface""" | |
| app = DnDCampaignManagerApp() | |
| interface = app.create_interface() | |
| interface.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=False, | |
| show_error=True | |
| ) | |
| if __name__ == "__main__": | |
| launch_ui() | |