summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/MenuScreen.cpp
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-04-01 21:23:39 +0200
committerAki <please@ignore.pl>2022-04-01 21:23:39 +0200
commit3c487c5cd69c53d6fea948643c0a76df03516605 (patch)
tree72730c7b8b26a5ef8fc9a987ec4c16129efd5aac /StarsEx/MenuScreen.cpp
parent8f353abd0bfe18baddd8a8250ab7c4f2d1c83a6e (diff)
downloadstarshatter-3c487c5cd69c53d6fea948643c0a76df03516605.zip
starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.gz
starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.bz2
Moved Stars45 to StarsEx
Diffstat (limited to 'StarsEx/MenuScreen.cpp')
-rw-r--r--StarsEx/MenuScreen.cpp1073
1 files changed, 1073 insertions, 0 deletions
diff --git a/StarsEx/MenuScreen.cpp b/StarsEx/MenuScreen.cpp
new file mode 100644
index 0000000..f45d2c5
--- /dev/null
+++ b/StarsEx/MenuScreen.cpp
@@ -0,0 +1,1073 @@
+/* Starshatter: The Open Source Project
+ Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
+ Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
+ Copyright (c) 1997-2006, Destroyer Studios LLC.
+
+ AUTHOR: John DiCamillo
+
+*/
+
+#include "MenuScreen.h"
+
+#include "FormDef.h"
+#include "MenuDlg.h"
+
+#include "ExitDlg.h"
+#include "AudDlg.h"
+#include "VidDlg.h"
+#include "OptDlg.h"
+#include "CtlDlg.h"
+#include "JoyDlg.h"
+#include "KeyDlg.h"
+#include "ConfirmDlg.h"
+#include "PlayerDlg.h"
+#include "ModDlg.h"
+#include "ModInfoDlg.h"
+#include "MsnSelectDlg.h"
+#include "MsnEditDlg.h"
+#include "MsnElemDlg.h"
+#include "MsnEventDlg.h"
+#include "MsnEditNavDlg.h"
+#include "FirstTimeDlg.h"
+#include "AwardShowDlg.h"
+#include "LoadDlg.h"
+#include "TacRefDlg.h"
+
+#include "CmpSelectDlg.h"
+#include "NetClientDlg.h"
+#include "NetLobbyDlg.h"
+#include "NetServerDlg.h"
+#include "NetUnitDlg.h"
+#include "NetAddrDlg.h"
+#include "NetPassDlg.h"
+
+#include "Starshatter.h"
+#include "Player.h"
+#include "NetLobby.h"
+#include "NetClientConfig.h"
+#include "NetServerConfig.h"
+
+#include "GameWinDX9.h"
+#include "Video.h"
+#include "Screen.h"
+#include "ActiveWindow.h"
+#include "Mouse.h"
+#include "Keyboard.h"
+#include "FadeView.h"
+#include "Color.h"
+#include "Bitmap.h"
+#include "Font.h"
+#include "FontMgr.h"
+#include "EventDispatch.h"
+#include "DataLoader.h"
+
+// +--------------------------------------------------------------------+
+
+MenuScreen::MenuScreen()
+: screen(0), menudlg(0),
+fadewin(0), fadeview(0), exitdlg(0),
+auddlg(0), viddlg(0), optdlg(0), ctldlg(0), joydlg(0), keydlg(0),
+playdlg(0), confirmdlg(0), firstdlg(0), awarddlg(0), cmpSelectDlg(0),
+msnSelectDlg(0), modDlg(0), modInfoDlg(0),
+msnEditDlg(0), msnElemDlg(0), msnEventDlg(0), msnEditNavDlg(0),
+netClientDlg(0), netAddrDlg(0), netPassDlg(0), netLobbyDlg(0), netServerDlg(0),
+netUnitDlg(0), loadDlg(0), tacRefDlg(0), current_dlg(0), isShown(false)
+{
+ loader = DataLoader::GetLoader();
+}
+
+MenuScreen::~MenuScreen()
+{
+ TearDown();
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::Setup(Screen* s)
+{
+ if (!s)
+ return;
+
+ screen = s;
+
+ Color::SetFade(0);
+
+ // create windows
+
+ loader->UseFileSystem(true);
+
+ FormDef menu_def("MenuDlg", 0);
+ menu_def.Load("MenuDlg");
+ menudlg = new MenuDlg(screen, menu_def, this);
+
+ FormDef exit_def("ExitDlg", 0);
+ exit_def.Load("ExitDlg");
+ exitdlg = new ExitDlg(screen, exit_def, this);
+
+ FormDef aud_def("AudDlg", 0);
+ aud_def.Load("AudDlg");
+ auddlg = new AudDlg(screen, aud_def, this);
+
+ FormDef ctl_def("CtlDlg", 0);
+ ctl_def.Load("CtlDlg");
+ ctldlg = new CtlDlg(screen, ctl_def, this);
+
+ FormDef opt_def("OptDlg", 0);
+ opt_def.Load("OptDlg");
+ optdlg = new OptDlg(screen, opt_def, this);
+
+ FormDef vid_def("VidDlg", 0);
+ vid_def.Load("VidDlg");
+ viddlg = new VidDlg(screen, vid_def, this);
+
+ FormDef mod_def("ModDlg", 0);
+ mod_def.Load("ModDlg");
+ modDlg = new ModDlg(screen, mod_def, this);
+
+ FormDef tac_ref_def("TacRefDlg", 0);
+ tac_ref_def.Load("TacRefDlg");
+ tacRefDlg = new TacRefDlg(screen, tac_ref_def, this);
+
+ FormDef cmp_sel_def("CmpSelectDlg", 0);
+ cmp_sel_def.Load("CmpSelectDlg");
+ cmpSelectDlg = new CmpSelectDlg(screen, cmp_sel_def, this);
+
+ FormDef net_lobby_def("NetLobbyDlg", 0);
+ net_lobby_def.Load("NetLobbyDlg");
+ netLobbyDlg = new NetLobbyDlg(screen, net_lobby_def, this);
+
+ FormDef net_client_def("NetClientDlg", 0);
+ net_client_def.Load("NetClientDlg");
+ netClientDlg = new NetClientDlg(screen, net_client_def, this);
+
+ FormDef net_server_def("NetServerDlg", 0);
+ net_server_def.Load("NetServerDlg");
+ netServerDlg = new NetServerDlg(screen, net_server_def, this);
+
+ FormDef net_unit_def("NetUnitDlg", 0);
+ net_unit_def.Load("NetUnitDlg");
+ netUnitDlg = new NetUnitDlg(screen, net_unit_def, this);
+
+ FormDef net_addr_def("NetAddrDlg", 0);
+ net_addr_def.Load("NetAddrDlg");
+ netAddrDlg = new NetAddrDlg(screen, net_addr_def, this);
+
+ FormDef net_pass_def("NetPassDlg", 0);
+ net_pass_def.Load("NetPassDlg");
+ netPassDlg = new NetPassDlg(screen, net_pass_def, this);
+
+ FormDef msn_edit_def("MsnEditDlg", 0);
+ msn_edit_def.Load("MsnEditDlg");
+ msnEditDlg = new MsnEditDlg(screen, msn_edit_def, this);
+
+ FormDef msn_nav_def("MsnEditNavDlg", 0);
+ msn_nav_def.Load("MsnEditNavDlg");
+ msnEditNavDlg = new MsnEditNavDlg(screen, msn_nav_def, this);
+
+ FormDef msn_elem_def("MsnElemDlg", 0);
+ msn_elem_def.Load("MsnElemDlg");
+ msnElemDlg = new MsnElemDlg(screen, msn_elem_def, this);
+
+ FormDef msn_event_def("MsnEventDlg", 0);
+ msn_event_def.Load("MsnEventDlg");
+ msnEventDlg = new MsnEventDlg(screen, msn_event_def, this);
+
+ FormDef msn_def("MsnSelectDlg", 0);
+ msn_def.Load("MsnSelectDlg");
+ msnSelectDlg = new MsnSelectDlg(screen, msn_def, this);
+
+ FormDef player_def("PlayerDlg", 0);
+ player_def.Load("PlayerDlg");
+ playdlg = new PlayerDlg(screen, player_def, this);
+
+ FormDef award_def("AwardDlg", 0);
+ award_def.Load("AwardDlg");
+ awarddlg = new AwardShowDlg(screen, award_def, this);
+
+ FormDef joy_def("JoyDlg", 0);
+ joy_def.Load("JoyDlg");
+ joydlg = new JoyDlg(screen, joy_def, this);
+
+ FormDef key_def("KeyDlg", 0);
+ key_def.Load("KeyDlg");
+ keydlg = new KeyDlg(screen, key_def, this);
+
+ FormDef first_def("FirstTimeDlg", 0);
+ first_def.Load("FirstTimeDlg");
+ firstdlg = new FirstTimeDlg(screen, first_def, this);
+
+ FormDef mod_info_def("ModInfoDlg", 0);
+ mod_info_def.Load("ModInfoDlg");
+ modInfoDlg = new ModInfoDlg(screen, mod_info_def, this);
+
+ FormDef confirm_def("ConfirmDlg", 0);
+ confirm_def.Load("ConfirmDlg");
+ confirmdlg = new ConfirmDlg(screen, confirm_def, this);
+
+ FormDef load_def("LoadDlg", 0);
+ load_def.Load("LoadDlg");
+ loadDlg = new LoadDlg(screen, load_def);
+
+ fadewin = new Window(screen, 0, 0, 1, 1);
+ fadeview = new FadeView(fadewin, 2, 0, 0);
+ fadewin->AddView(fadeview);
+ screen->AddWindow(fadewin);
+
+ loader->UseFileSystem(Starshatter::UseFileSystem());
+
+ ShowMenuDlg();
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::TearDown()
+{
+ if (screen) {
+ if (menudlg) screen->DelWindow(menudlg);
+ if (netClientDlg) screen->DelWindow(netClientDlg);
+ if (netAddrDlg) screen->DelWindow(netAddrDlg);
+ if (netPassDlg) screen->DelWindow(netPassDlg);
+ if (netLobbyDlg) screen->DelWindow(netLobbyDlg);
+ if (netServerDlg) screen->DelWindow(netServerDlg);
+ if (netUnitDlg) screen->DelWindow(netUnitDlg);
+
+ if (cmpSelectDlg) screen->DelWindow(cmpSelectDlg);
+ if (awarddlg) screen->DelWindow(awarddlg);
+ if (firstdlg) screen->DelWindow(firstdlg);
+ if (msnSelectDlg) screen->DelWindow(msnSelectDlg);
+ if (msnEditDlg) screen->DelWindow(msnEditDlg);
+ if (msnElemDlg) screen->DelWindow(msnElemDlg);
+ if (msnEventDlg) screen->DelWindow(msnEventDlg);
+ if (msnEditNavDlg) screen->DelWindow(msnEditNavDlg);
+ if (tacRefDlg) screen->DelWindow(tacRefDlg);
+ if (loadDlg) screen->DelWindow(loadDlg);
+
+ if (auddlg) screen->DelWindow(auddlg);
+ if (viddlg) screen->DelWindow(viddlg);
+ if (optdlg) screen->DelWindow(optdlg);
+ if (ctldlg) screen->DelWindow(ctldlg);
+ if (modDlg) screen->DelWindow(modDlg);
+ if (modInfoDlg) screen->DelWindow(modInfoDlg);
+ if (joydlg) screen->DelWindow(joydlg);
+ if (keydlg) screen->DelWindow(keydlg);
+ if (exitdlg) screen->DelWindow(exitdlg);
+ if (playdlg) screen->DelWindow(playdlg);
+ if (confirmdlg) screen->DelWindow(confirmdlg);
+ if (fadewin) screen->DelWindow(fadewin);
+ }
+
+ delete menudlg;
+ delete fadewin;
+ delete exitdlg;
+ delete auddlg;
+ delete viddlg;
+ delete optdlg;
+ delete ctldlg;
+ delete modDlg;
+ delete modInfoDlg;
+ delete joydlg;
+ delete keydlg;
+ delete playdlg;
+ delete confirmdlg;
+
+ delete netClientDlg;
+ delete netAddrDlg;
+ delete netPassDlg;
+ delete netLobbyDlg;
+ delete netServerDlg;
+ delete netUnitDlg;
+ delete msnSelectDlg;
+ delete msnEditDlg;
+ delete msnElemDlg;
+ delete msnEventDlg;
+ delete msnEditNavDlg;
+ delete tacRefDlg;
+ delete loadDlg;
+ delete firstdlg;
+ delete awarddlg;
+ delete cmpSelectDlg;
+
+ screen = 0;
+ fadewin = 0;
+ fadeview = 0;
+ menudlg = 0;
+ exitdlg = 0;
+ playdlg = 0;
+ confirmdlg = 0;
+ msnSelectDlg = 0;
+ msnEditDlg = 0;
+ msnElemDlg = 0;
+ msnEventDlg = 0;
+ msnEditNavDlg = 0;
+ cmpSelectDlg = 0;
+ awarddlg = 0;
+ firstdlg = 0;
+ netClientDlg = 0;
+ netAddrDlg = 0;
+ netPassDlg = 0;
+ netLobbyDlg = 0;
+ netServerDlg = 0;
+ netUnitDlg = 0;
+ loadDlg = 0;
+ tacRefDlg = 0;
+
+ auddlg = 0;
+ viddlg = 0;
+ optdlg = 0;
+ ctldlg = 0;
+ modDlg = 0;
+ modInfoDlg = 0;
+ joydlg = 0;
+ keydlg = 0;
+
+ screen = 0;
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ExecFrame()
+{
+ GameWinDX9::GetInstance()->SetScreenColor(Color::Black);
+
+ if (menudlg && menudlg->IsShown())
+ menudlg->ExecFrame();
+
+ if (exitdlg && exitdlg->IsShown())
+ exitdlg->ExecFrame();
+
+ if (joydlg && joydlg->IsShown())
+ joydlg->ExecFrame();
+
+ if (keydlg && keydlg->IsShown())
+ keydlg->ExecFrame();
+
+ if (ctldlg && ctldlg->IsShown())
+ ctldlg->ExecFrame();
+
+ if (optdlg && optdlg->IsShown())
+ optdlg->ExecFrame();
+
+ if (auddlg && auddlg->IsShown())
+ auddlg->ExecFrame();
+
+ if (viddlg && viddlg->IsShown())
+ viddlg->ExecFrame();
+
+ if (confirmdlg && confirmdlg->IsShown())
+ confirmdlg->ExecFrame();
+
+ if (playdlg && playdlg->IsShown())
+ playdlg->ExecFrame();
+
+ if (msnSelectDlg && msnSelectDlg->IsShown())
+ msnSelectDlg->ExecFrame();
+
+ if (msnEditNavDlg && msnEditNavDlg->IsShown())
+ msnEditNavDlg->ExecFrame();
+
+ if (firstdlg && firstdlg->IsShown())
+ firstdlg->ExecFrame();
+
+ if (awarddlg && awarddlg->IsShown())
+ awarddlg->ExecFrame();
+
+ if (cmpSelectDlg && cmpSelectDlg->IsShown())
+ cmpSelectDlg->ExecFrame();
+
+ if (netClientDlg && netClientDlg->IsShown())
+ netClientDlg->ExecFrame();
+
+ if (netAddrDlg && netAddrDlg->IsShown())
+ netAddrDlg->ExecFrame();
+
+ if (netPassDlg && netPassDlg->IsShown())
+ netPassDlg->ExecFrame();
+
+ if (netLobbyDlg && netLobbyDlg->IsShown())
+ netLobbyDlg->ExecFrame();
+
+ if (netServerDlg && netServerDlg->IsShown())
+ netServerDlg->ExecFrame();
+
+ if (netUnitDlg && netUnitDlg->IsShown())
+ netUnitDlg->ExecFrame();
+
+ if (loadDlg && loadDlg->IsShown())
+ loadDlg->ExecFrame();
+
+ if (tacRefDlg && tacRefDlg->IsShown())
+ tacRefDlg->ExecFrame();
+}
+
+// +--------------------------------------------------------------------+
+
+bool
+MenuScreen::CloseTopmost()
+{
+ bool processed = false;
+ if (joydlg && joydlg->IsShown()) {
+ ShowCtlDlg();
+ processed = true;
+ }
+
+ else if (keydlg && keydlg->IsShown()) {
+ ShowCtlDlg();
+ processed = true;
+ }
+
+ else if (msnElemDlg && msnElemDlg->IsShown()) {
+ HideMsnElemDlg();
+ processed = true;
+ }
+
+ else if (msnEventDlg && msnEventDlg->IsShown()) {
+ HideMsnEventDlg();
+ processed = true;
+ }
+
+ else if (netAddrDlg && netAddrDlg->IsShown()) {
+ ShowNetClientDlg();
+ processed = true;
+ }
+
+ else if (netPassDlg && netPassDlg->IsShown()) {
+ ShowNetClientDlg();
+ processed = true;
+ }
+
+ else if (netServerDlg && netServerDlg->IsShown()) {
+ ShowNetClientDlg();
+ processed = true;
+ }
+
+ else if (netUnitDlg && netUnitDlg->IsShown()) {
+ netUnitDlg->OnCancel(0);
+ processed = true;
+ }
+
+ else if (netLobbyDlg && netLobbyDlg->IsShown()) {
+ netLobbyDlg->OnCancel(0);
+ processed = true;
+ }
+
+ else if (netClientDlg && netClientDlg->IsShown()) {
+ netClientDlg->OnCancel(0);
+ processed = true;
+ }
+
+ else if (exitdlg && exitdlg->IsShown()) {
+ // key_exit is handled in the exit dlg...
+ }
+
+ else if (cmpSelectDlg && cmpSelectDlg->IsShown()) {
+ if (cmpSelectDlg->CanClose())
+ ShowMenuDlg();
+
+ processed = true;
+ }
+
+ else if (menudlg && !menudlg->IsShown()) {
+ ShowMenuDlg();
+ processed = true;
+ }
+
+ return processed;
+}
+
+void
+MenuScreen::Show()
+{
+ if (!isShown) {
+ Starshatter* stars = Starshatter::GetInstance();
+ NetLobby* lobby = NetLobby::GetInstance();
+
+ if (lobby) {
+ ShowNetLobbyDlg();
+ }
+ else if (current_dlg == msnSelectDlg) {
+ ShowMsnSelectDlg();
+ }
+ else {
+ if (Player::ConfigExists()) {
+ ShowMenuDlg();
+ }
+
+ else {
+ ShowFirstTimeDlg();
+ }
+ }
+
+ isShown = true;
+ }
+}
+
+void
+MenuScreen::Hide()
+{
+ if (isShown) {
+ HideAll();
+ isShown = false;
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowMenuDlg()
+{
+ HideAll();
+ if (menudlg) {
+ menudlg->Show();
+ menudlg->SetTopMost(true);
+ }
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowCmpSelectDlg()
+{
+ HideAll();
+ current_dlg = cmpSelectDlg;
+ if (cmpSelectDlg)
+ cmpSelectDlg->Show();
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowMsnSelectDlg()
+{
+ HideAll();
+ current_dlg = msnSelectDlg;
+
+ if (msnSelectDlg)
+ msnSelectDlg->Show();
+
+ if (msnEditNavDlg)
+ msnEditNavDlg->SetMission(0);
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowModDlg()
+{
+ if (modDlg) {
+ HideAll();
+ modDlg->Show();
+ modDlg->SetTopMost(true);
+ Mouse::Show(true);
+ }
+ else {
+ ShowMsnSelectDlg();
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowModInfoDlg()
+{
+ if (modDlg && modInfoDlg) {
+ HideAll();
+ modDlg->Show();
+ modDlg->SetTopMost(false);
+ modInfoDlg->Show();
+ Mouse::Show(true);
+ }
+ else {
+ ShowMsnSelectDlg();
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowMsnEditDlg()
+{
+ if (msnEditDlg) {
+ bool nav_shown = false;
+ if (msnEditNavDlg && msnEditNavDlg->IsShown())
+ nav_shown = true;
+
+ HideAll();
+
+ if (nav_shown) {
+ msnEditNavDlg->Show();
+ msnEditNavDlg->SetTopMost(true);
+ }
+ else {
+ msnEditDlg->Show();
+ msnEditDlg->SetTopMost(true);
+ }
+
+ Mouse::Show(true);
+ }
+ else {
+ ShowMsnSelectDlg();
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowMsnElemDlg()
+{
+ if (msnElemDlg) {
+ if (msnEditDlg && msnEditDlg->IsShown())
+ msnEditDlg->SetTopMost(false);
+
+ if (msnEditNavDlg && msnEditNavDlg->IsShown())
+ msnEditNavDlg->SetTopMost(false);
+
+ msnElemDlg->Show();
+ msnElemDlg->SetTopMost(true);
+ Mouse::Show(true);
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowMsnEventDlg()
+{
+ if (msnEventDlg) {
+ if (msnEditDlg && msnEditDlg->IsShown())
+ msnEditDlg->SetTopMost(false);
+
+ if (msnEditNavDlg && msnEditNavDlg->IsShown())
+ msnEditNavDlg->SetTopMost(false);
+
+ msnEventDlg->Show();
+ msnEventDlg->SetTopMost(true);
+ Mouse::Show(true);
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNavDlg()
+{
+ if (msnEditNavDlg && !msnEditNavDlg->IsShown()) {
+ HideAll();
+ msnEditNavDlg->Show();
+ Mouse::Show(true);
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowFirstTimeDlg()
+{
+ HideAll();
+ if (menudlg && firstdlg) {
+ menudlg->Show();
+ menudlg->SetTopMost(false);
+
+ firstdlg->Show();
+ firstdlg->SetTopMost(true);
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowPlayerDlg()
+{
+ if (playdlg) {
+ HideAll();
+ playdlg->Show();
+ }
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowAwardDlg()
+{
+ if (awarddlg) {
+ HideAll();
+ awarddlg->Show();
+ }
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowTacRefDlg()
+{
+ if (tacRefDlg) {
+ HideAll();
+ tacRefDlg->Show();
+ }
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNetClientDlg()
+{
+ if (netClientDlg) {
+ HideAll();
+ netClientDlg->Show();
+ netClientDlg->SetTopMost(true);
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNetAddrDlg()
+{
+ if (netAddrDlg) {
+ if (netClientDlg) {
+ netClientDlg->Show();
+ netClientDlg->SetTopMost(false);
+ }
+
+ netAddrDlg->Show();
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNetPassDlg()
+{
+ if (netPassDlg) {
+ ShowNetClientDlg();
+ if (netClientDlg)
+ netClientDlg->SetTopMost(false);
+
+ netPassDlg->Show();
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNetLobbyDlg()
+{
+ if (netLobbyDlg) {
+ HideAll();
+ netLobbyDlg->Show();
+ netLobbyDlg->SetTopMost(true);
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNetServerDlg()
+{
+ if (netServerDlg) {
+ netServerDlg->Show();
+ netServerDlg->SetTopMost(true);
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowNetUnitDlg()
+{
+ if (netUnitDlg) {
+ HideAll();
+ netUnitDlg->Show();
+ netUnitDlg->SetTopMost(true);
+ }
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowAudDlg()
+{
+ HideAll();
+ if (auddlg)
+ auddlg->Show();
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowVidDlg()
+{
+ HideAll();
+ if (viddlg)
+ viddlg->Show();
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowOptDlg()
+{
+ HideAll();
+ if (optdlg)
+ optdlg->Show();
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowCtlDlg()
+{
+ HideAll();
+ if (ctldlg) {
+ ctldlg->Show();
+ ctldlg->SetTopMost(true);
+ }
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowJoyDlg()
+{
+ HideAll();
+ if (ctldlg) {
+ ctldlg->Show();
+ ctldlg->SetTopMost(false);
+ }
+
+ if (joydlg)
+ joydlg->Show();
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowKeyDlg()
+{
+ HideAll();
+
+ if (ctldlg) {
+ ctldlg->Show();
+ ctldlg->SetTopMost(false);
+ }
+
+ if (keydlg)
+ keydlg->Show();
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowConfirmDlg()
+{
+ if (confirmdlg) {
+ if (msnSelectDlg && msnSelectDlg->IsShown())
+ msnSelectDlg->SetTopMost(false);
+
+ if (playdlg && playdlg->IsShown())
+ playdlg->SetTopMost(false);
+
+ confirmdlg->Show();
+ confirmdlg->SetTopMost(true);
+ Mouse::Show(true);
+ }
+}
+
+void
+MenuScreen::HideConfirmDlg()
+{
+ if (confirmdlg)
+ confirmdlg->Hide();
+
+ if (msnSelectDlg && msnSelectDlg->IsShown())
+ msnSelectDlg->SetTopMost(true);
+
+ if (playdlg && playdlg->IsShown())
+ playdlg->SetTopMost(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowLoadDlg()
+{
+ if (loadDlg) {
+ if (menudlg && menudlg->IsShown())
+ menudlg->SetTopMost(false);
+
+ loadDlg->Show();
+ loadDlg->SetTopMost(true);
+ Mouse::Show(true);
+ }
+}
+
+void
+MenuScreen::HideLoadDlg()
+{
+ if (loadDlg)
+ loadDlg->Hide();
+
+ if (menudlg && menudlg->IsShown())
+ menudlg->SetTopMost(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ShowExitDlg()
+{
+ HideAll();
+
+ if (menudlg) {
+ menudlg->Show();
+ menudlg->SetTopMost(false);
+ }
+
+ if (exitdlg)
+ exitdlg->Show();
+ else
+ Starshatter::GetInstance()->Exit();
+
+ Mouse::Show(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::HideNavDlg()
+{
+ if (msnEditNavDlg)
+ msnEditNavDlg->Hide();
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::HideMsnElemDlg()
+{
+ if (msnElemDlg)
+ msnElemDlg->Hide();
+
+ if (msnEditDlg && msnEditDlg->IsShown())
+ msnEditDlg->SetTopMost(true);
+
+ if (msnEditNavDlg && msnEditNavDlg->IsShown())
+ msnEditNavDlg->SetTopMost(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::HideMsnEventDlg()
+{
+ if (msnEventDlg)
+ msnEventDlg->Hide();
+
+ if (msnEditDlg && msnEditDlg->IsShown())
+ msnEditDlg->SetTopMost(true);
+
+ if (msnEditNavDlg && msnEditNavDlg->IsShown())
+ msnEditNavDlg->SetTopMost(true);
+}
+
+// +--------------------------------------------------------------------+
+
+bool
+MenuScreen::IsNavShown()
+{
+ return msnEditNavDlg && msnEditNavDlg->IsShown();
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::HideAll()
+{
+ Keyboard::FlushKeys();
+
+ current_dlg = 0;
+
+ if (menudlg) menudlg->Hide();
+ if (exitdlg) exitdlg->Hide();
+ if (auddlg) auddlg->Hide();
+ if (viddlg) viddlg->Hide();
+ if (ctldlg) ctldlg->Hide();
+ if (optdlg) optdlg->Hide();
+ if (joydlg) joydlg->Hide();
+ if (keydlg) keydlg->Hide();
+ if (playdlg) playdlg->Hide();
+ if (confirmdlg) confirmdlg->Hide();
+ if (modDlg) modDlg->Hide();
+ if (modInfoDlg) modInfoDlg->Hide();
+ if (msnSelectDlg) msnSelectDlg->Hide();
+ if (msnEditDlg) msnEditDlg->Hide();
+ if (msnElemDlg) msnElemDlg->Hide();
+ if (msnEventDlg) msnEventDlg->Hide();
+ if (msnEditNavDlg) msnEditNavDlg->Hide();
+ if (netClientDlg) netClientDlg->Hide();
+ if (netAddrDlg) netAddrDlg->Hide();
+ if (netPassDlg) netPassDlg->Hide();
+ if (netLobbyDlg) netLobbyDlg->Hide();
+ if (netServerDlg) netServerDlg->Hide();
+ if (netUnitDlg) netUnitDlg->Hide();
+ if (firstdlg) firstdlg->Hide();
+ if (awarddlg) awarddlg->Hide();
+ if (cmpSelectDlg) cmpSelectDlg->Hide();
+ if (tacRefDlg) tacRefDlg->Hide();
+ if (loadDlg) loadDlg->Hide();
+}
+
+// +--------------------------------------------------------------------+
+
+void
+MenuScreen::ApplyOptions()
+{
+ if (ctldlg) ctldlg->Apply();
+ if (optdlg) optdlg->Apply();
+ if (auddlg) auddlg->Apply();
+ if (viddlg) viddlg->Apply();
+ if (modDlg) modDlg->Apply();
+
+ ShowMenuDlg();
+}
+
+void
+MenuScreen::CancelOptions()
+{
+ if (ctldlg) ctldlg->Cancel();
+ if (optdlg) optdlg->Cancel();
+ if (auddlg) auddlg->Cancel();
+ if (viddlg) viddlg->Cancel();
+ if (modDlg) modDlg->Cancel();
+
+ ShowMenuDlg();
+}