Files
mind-reader/src/mind_reader/ui/main_frame.py
T

89 lines
2.6 KiB
Python

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("Подключение отсутствует")