feat(ui): добавление поддержки лобби в основное окно
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
import wx
|
import wx
|
||||||
|
|
||||||
|
from mind_reader.core import GameState
|
||||||
from mind_reader.ui.dialogs import ClientConnectDialog, ServerStartDialog
|
from mind_reader.ui.dialogs import ClientConnectDialog, ServerStartDialog
|
||||||
from mind_reader.ui.menu_bar import AppMenuBar
|
from mind_reader.ui.menu_bar import AppMenuBar
|
||||||
|
from mind_reader.ui.views import LobbyPanel
|
||||||
|
|
||||||
|
|
||||||
class MainFrame(wx.Frame):
|
class MainFrame(wx.Frame):
|
||||||
@@ -13,8 +15,14 @@ class MainFrame(wx.Frame):
|
|||||||
size=wx.Size(700, 500),
|
size=wx.Size(700, 500),
|
||||||
style=wx.DEFAULT_FRAME_STYLE,
|
style=wx.DEFAULT_FRAME_STYLE,
|
||||||
)
|
)
|
||||||
|
self.state: GameState | None = None
|
||||||
|
self.lobby_panel: LobbyPanel | None = None
|
||||||
|
|
||||||
self.Center()
|
self.Center()
|
||||||
|
|
||||||
|
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
self.SetSizer(self.main_sizer)
|
||||||
|
|
||||||
self.menu_bar = AppMenuBar(self)
|
self.menu_bar = AppMenuBar(self)
|
||||||
self.SetMenuBar(self.menu_bar)
|
self.SetMenuBar(self.menu_bar)
|
||||||
|
|
||||||
@@ -32,10 +40,29 @@ class MainFrame(wx.Frame):
|
|||||||
wx.EVT_MENU, self.on_disconnect, self.menu_bar.item_disconnect
|
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):
|
def on_client_connect(self, event):
|
||||||
d = ClientConnectDialog(self)
|
d = ClientConnectDialog(self)
|
||||||
if d.ShowModal() == wx.ID_OK:
|
if d.ShowModal() == wx.ID_OK:
|
||||||
name, ip = d.get_data()
|
name, ip = d.get_data()
|
||||||
|
self.state = GameState(name)
|
||||||
|
|
||||||
|
self._show_lobby()
|
||||||
|
|
||||||
self.menu_bar.set_connected_state(True)
|
self.menu_bar.set_connected_state(True)
|
||||||
self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}")
|
self.SetStatusText(f"Подключено к {ip} | Ваше имя {name}")
|
||||||
d.Destroy()
|
d.Destroy()
|
||||||
@@ -44,10 +71,18 @@ class MainFrame(wx.Frame):
|
|||||||
d = ServerStartDialog(self)
|
d = ServerStartDialog(self)
|
||||||
if d.ShowModal() == wx.ID_OK:
|
if d.ShowModal() == wx.ID_OK:
|
||||||
name, ip = d.get_data()
|
name, ip = d.get_data()
|
||||||
|
self.state = GameState(name)
|
||||||
|
|
||||||
|
self._show_lobby()
|
||||||
|
|
||||||
self.menu_bar.set_connected_state(True)
|
self.menu_bar.set_connected_state(True)
|
||||||
self.SetStatusText(f"Сервер запущен на {ip} | Ваше имя {name}")
|
self.SetStatusText(f"Сервер запущен на {ip} | Ваше имя {name}")
|
||||||
d.Destroy()
|
d.Destroy()
|
||||||
|
|
||||||
def on_disconnect(self, event):
|
def on_disconnect(self, event):
|
||||||
|
self._destroy_lobby()
|
||||||
|
|
||||||
|
self.state = None
|
||||||
|
|
||||||
self.menu_bar.set_connected_state(False)
|
self.menu_bar.set_connected_state(False)
|
||||||
self.SetStatusText("Подключение отсутствует")
|
self.SetStatusText("Подключение отсутствует")
|
||||||
|
|||||||
Reference in New Issue
Block a user