Spaces:
Sleeping
Sleeping
File size: 7,256 Bytes
71b378e ddf162a 71b378e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
"""
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()
|