import wx from mind_reader.core import GameState from mind_reader.ui.dialogs import ClientConnectDialog, ServerStartDialog from mind_reader.ui.menu_bar import AppMenuBar from mind_reader.ui.views import LobbyPanel class MainFrame(wx.Frame): def __init__(self): super().__init__( parent=None, id=wx.ID_ANY, title="Mind Reader", size=wx.Size(700, 500), style=wx.DEFAULT_FRAME_STYLE, ) self.state: GameState | None = None self.lobby_panel: LobbyPanel | None = None self.Center() self.main_sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.main_sizer) self.menu_bar = AppMenuBar(self) self.SetMenuBar(self.menu_bar) self.CreateStatusBar(1) self.SetStatusText("Подключение отсутствует") self._bind_menu_events() def _bind_menu_events(self): self.Bind( wx.EVT_MENU, self.on_client_connect, self.menu_bar.item_client ) self.Bind(wx.EVT_MENU, self.on_server_start, self.menu_bar.item_server) self.Bind( wx.EVT_MENU, self.on_disconnect, self.menu_bar.item_disconnect ) def _show_lobby(self): self._destroy_lobby() if self.state: self.lobby_panel = LobbyPanel(self, self.state) self.main_sizer.Add(self.lobby_panel, 1, wx.EXPAND) self.Layout() def _destroy_lobby(self): if self.lobby_panel: self.main_sizer.Detach(self.lobby_panel) self.lobby_panel.Destroy() self.lobby_panel = None self.Layout() def on_client_connect(self, event): d = ClientConnectDialog(self) if d.ShowModal() == wx.ID_OK: name, ip = d.get_data() self.state = GameState(name) self._show_lobby() self.menu_bar.set_connected_state(True) self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}") d.Destroy() def on_server_start(self, event): d = ServerStartDialog(self) if d.ShowModal() == wx.ID_OK: name, ip = d.get_data() self.state = GameState(name) self._show_lobby() self.menu_bar.set_connected_state(True) self.SetStatusText(f"Сервер запущен на {ip} | Ваше имя {name}") d.Destroy() def on_disconnect(self, event): self._destroy_lobby() self.state = None self.menu_bar.set_connected_state(False) self.SetStatusText("Подключение отсутствует")