summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorGlenn Rice <glennricster@gmail.com>2010-04-17 03:17:36 +0000
committerGlenn Rice <glennricster@gmail.com>2010-04-17 03:17:36 +0000
commit0a12b9d9f5c200d190be596a00d4c48044f92df0 (patch)
tree2e2682afc254725e2a927aa4a6587e61fd1c7292 /Source/Core
parent3b35cb12f291bb2541b1b1712b9b447b39584cd3 (diff)
Logical reorderring of the GUI boot sequence. Also a little clean up in the OpenGL plugin.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5379 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinWX/Src/Frame.cpp11
-rw-r--r--Source/Core/DolphinWX/Src/Frame.h6
-rw-r--r--Source/Core/DolphinWX/Src/FrameTools.cpp138
-rw-r--r--Source/Core/DolphinWX/Src/Main.cpp6
4 files changed, 78 insertions, 83 deletions
diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp
index 1dbd17b519..2d027b15b7 100644
--- a/Source/Core/DolphinWX/Src/Frame.cpp
+++ b/Source/Core/DolphinWX/Src/Frame.cpp
@@ -357,7 +357,7 @@ CFrame::CFrame(wxFrame* parent,
, m_RenderFrame(NULL), m_RenderParent(NULL)
, m_LogWindow(NULL)
, UseDebugger(_UseDebugger), m_bEdit(false), m_bTabSplit(false), m_bNoDocking(false)
- , m_bControlsCreated(false), m_StopDlg(NULL)
+ , m_bControlsCreated(false), m_bGameLoading(false), m_StopDlg(NULL)
#if wxUSE_TIMER
, m_timer(this)
#endif
@@ -488,13 +488,6 @@ CFrame::CFrame(wxFrame* parent,
// -------------------------
// Connect event handlers
- wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
- wxKeyEventHandler(CFrame::OnKeyDown),
- (wxObject*)0, this);
- wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP,
- wxKeyEventHandler(CFrame::OnKeyUp),
- (wxObject*)0, this);
-
m_Mgr->Connect(wxID_ANY, wxEVT_AUI_RENDER, // Resize
wxAuiManagerEventHandler(CFrame::OnManagerResize),
(wxObject*)0, this);
@@ -846,7 +839,7 @@ void CFrame::OnGameListCtrl_ItemActivated(wxListEvent& WXUNUSED (event))
}
else
// Game started by double click
- StartGame(std::string(""));
+ BootGame(std::string(""));
}
bool IsHotkey(wxKeyEvent &event, int Id)
diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h
index e3016899c4..27285cb0af 100644
--- a/Source/Core/DolphinWX/Src/Frame.h
+++ b/Source/Core/DolphinWX/Src/Frame.h
@@ -131,7 +131,7 @@ class CFrame : public CRenderFrame
void ClearStatusBar();
void OnCustomHostMessage(int Id);
void OnSizeRequest(int& x, int& y, int& width, int& height);
- void StartGame(const std::string& filename);
+ void BootGame(const std::string& filename);
void OnRenderParentClose(wxCloseEvent& event);
void OnRenderParentMove(wxMoveEvent& event);
bool RendererHasFocus();
@@ -232,6 +232,7 @@ class CFrame : public CRenderFrame
bool m_bTabSplit;
bool m_bNoDocking;
bool m_bControlsCreated;
+ bool m_bGameLoading;
char newDiscpath[2048];
wxMessageDialog *m_StopDlg;
@@ -349,6 +350,7 @@ class CFrame : public CRenderFrame
void OnGameListCtrl_ItemActivated(wxListEvent& event);
void OnRenderParentResize(wxSizeEvent& event);
bool RendererIsFullscreen();
+ void StartGame(const std::string& filename);
#if defined HAVE_X11 && HAVE_X11
void X11_SendClientEvent(const char *message,
int data1 = 0, int data2 = 0, int data3 = 0, int data4 = 0);
@@ -363,8 +365,6 @@ class CFrame : public CRenderFrame
wxMenuItem* m_pSubMenuSave;
wxMenuItem* m_pSubMenuFrameSkipping;
- void BootGame(const std::string& filename);
-
#if wxUSE_TIMER
// Used to process command events
void OnTimer(wxTimerEvent& WXUNUSED(event));
diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp
index 973e25a1f0..533d8627ac 100644
--- a/Source/Core/DolphinWX/Src/FrameTools.cpp
+++ b/Source/Core/DolphinWX/Src/FrameTools.cpp
@@ -483,9 +483,6 @@ void CFrame::InitBitmaps()
aNormalFile = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
}
-// Game loading state
-bool game_loading = false;
-
// Menu items
// Start the game or change the disc.
@@ -495,7 +492,7 @@ bool game_loading = false;
// 3. Boot last selected game
void CFrame::BootGame(const std::string& filename)
{
- bool success = false;
+ std::string bootfile = filename;
SCoreStartupParameter& StartUp = SConfig::GetInstance().m_LocalCoreStartupParameter;
if (Core::GetState() != Core::CORE_UNINITIALIZED)
@@ -504,44 +501,30 @@ void CFrame::BootGame(const std::string& filename)
// Start filename if non empty.
// Start the selected ISO, or try one of the saved paths.
// If all that fails, ask to add a dir and don't boot
- if (!filename.empty())
- success = BootManager::BootCore(filename);
- else if (m_GameListCtrl->GetSelectedISO() != NULL)
- {
- if (m_GameListCtrl->GetSelectedISO()->IsValid())
- success = BootManager::BootCore(m_GameListCtrl->GetSelectedISO()->GetFileName());
- }
- else if (!StartUp.m_strDefaultGCM.empty()
- && wxFileExists(wxString(StartUp.m_strDefaultGCM.c_str(), wxConvUTF8)))
- {
- success = BootManager::BootCore(StartUp.m_strDefaultGCM);
- }
- else
+ if (bootfile.empty())
{
- if (!SConfig::GetInstance().m_LastFilename.empty()
- && wxFileExists(wxString(SConfig::GetInstance().m_LastFilename.c_str(), wxConvUTF8)))
+ if (m_GameListCtrl->GetSelectedISO() != NULL)
{
- success = BootManager::BootCore(SConfig::GetInstance().m_LastFilename);
+ if (m_GameListCtrl->GetSelectedISO()->IsValid())
+ bootfile = m_GameListCtrl->GetSelectedISO()->GetFileName();
}
+ else if (!StartUp.m_strDefaultGCM.empty()
+ && wxFileExists(wxString(StartUp.m_strDefaultGCM.c_str(), wxConvUTF8)))
+ bootfile = StartUp.m_strDefaultGCM;
else
{
- if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain)
- m_RenderFrame->Destroy();
- m_GameListCtrl->BrowseForDirectory();
- game_loading = false;
- m_GameListCtrl->Enable();
- m_GameListCtrl->Show();
- return;
+ if (!SConfig::GetInstance().m_LastFilename.empty()
+ && wxFileExists(wxString(SConfig::GetInstance().m_LastFilename.c_str(), wxConvUTF8)))
+ bootfile = SConfig::GetInstance().m_LastFilename;
+ else
+ {
+ m_GameListCtrl->BrowseForDirectory();
+ return;
+ }
}
}
- if (!success)
- {
- if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain)
- m_RenderFrame->Destroy();
- game_loading = false;
- m_GameListCtrl->Enable();
- m_GameListCtrl->Show();
- }
+ if (!bootfile.empty())
+ StartGame(bootfile);
}
// Open file to boot
@@ -582,7 +565,7 @@ void CFrame::DoOpen(bool Boot)
{
if (!fileChosen)
return;
- StartGame(std::string(path.mb_str()));
+ BootGame(std::string(path.mb_str()));
}
else
{
@@ -667,13 +650,12 @@ void CFrame::OnPlay(wxCommandEvent& WXUNUSED (event))
}
else
// Core is uninitialized, start the game
- StartGame(std::string(""));
+ BootGame(std::string(""));
}
void CFrame::OnRenderParentClose(wxCloseEvent& event)
{
- if ((Core::GetState() == Core::CORE_RUN) || (Core::GetState() == Core::CORE_PAUSE))
- DoStop();
+ DoStop();
event.Skip();
}
@@ -689,30 +671,27 @@ void CFrame::OnRenderParentMove(wxMoveEvent& event)
void CFrame::OnRenderParentResize(wxSizeEvent& event)
{
- event.Skip();
- if (Core::GetState() == Core::CORE_RUN || Core::GetState() == Core::CORE_PAUSE)
+ int width, height;
+ if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain &&
+ !RendererIsFullscreen() && !m_RenderFrame->IsMaximized())
{
- int width, height;
- if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain &&
- !RendererIsFullscreen() && !m_RenderFrame->IsMaximized())
- {
- m_RenderFrame->GetSize(&width, &height);
- SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowWidth = width;
- SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight = height;
- }
+ m_RenderFrame->GetSize(&width, &height);
+ SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowWidth = width;
+ SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight = height;
+ }
#if defined(HAVE_X11) && HAVE_X11
- int x, y;
- m_RenderParent->GetSize(&width, &height);
- m_RenderParent->GetPosition(&x, &y);
- X11_SendClientEvent("RESIZE", x, y, width, height);
+ int x, y;
+ m_RenderParent->GetSize(&width, &height);
+ m_RenderParent->GetPosition(&x, &y);
+ X11_SendClientEvent("RESIZE", x, y, width, height);
#endif
- }
+ event.Skip();
}
// Prepare the GUI to start the game.
void CFrame::StartGame(const std::string& filename)
{
- game_loading = true;
+ m_bGameLoading = true;
if (m_ToolBar)
m_ToolBar->EnableTool(IDM_PLAY, false);
@@ -746,27 +725,41 @@ void CFrame::StartGame(const std::string& filename)
m_RenderFrame->Connect(wxID_ANY, wxEVT_MOVE,
wxMoveEventHandler(CFrame::OnRenderParentMove),
(wxObject*)0, this);
- m_RenderFrame->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
- wxKeyEventHandler(CFrame::OnKeyDown),
- (wxObject*)0, this);
m_RenderParent = new CPanel(m_RenderFrame, wxID_ANY);
m_RenderFrame->Show();
}
- m_RenderFrame->Connect(wxID_ANY, wxEVT_SIZE,
- wxSizeEventHandler(CFrame::OnRenderParentResize),
- (wxObject*)0, this);
#ifdef _WIN32
::SetFocus((HWND)m_RenderParent->GetHandle());
#else
m_RenderParent->SetFocus();
#endif
- BootGame(filename);
+ if (!BootManager::BootCore(filename))
+ {
+ // Destroy the renderer frame when not rendering to main
+ if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain)
+ m_RenderFrame->Destroy();
+ m_RenderParent = NULL;
+ m_bGameLoading = false;
+ UpdateGUI();
+ }
+ else
+ {
+ wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
+ wxKeyEventHandler(CFrame::OnKeyDown),
+ (wxObject*)0, this);
+ wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP,
+ wxKeyEventHandler(CFrame::OnKeyUp),
+ (wxObject*)0, this);
+ m_RenderFrame->Connect(wxID_ANY, wxEVT_SIZE,
+ wxSizeEventHandler(CFrame::OnRenderParentResize),
+ (wxObject*)0, this);
+ }
}
void CFrame::OnBootDrive(wxCommandEvent& event)
{
- StartGame(drives[event.GetId()-IDM_DRIVE1]);
+ BootGame(drives[event.GetId()-IDM_DRIVE1]);
}
@@ -843,6 +836,15 @@ void CFrame::DoStop()
UpdateGUI();
// Destroy the renderer frame when not rendering to main
+ m_RenderFrame->Disconnect(wxID_ANY, wxEVT_SIZE,
+ wxSizeEventHandler(CFrame::OnRenderParentResize),
+ (wxObject*)0, this);
+ wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
+ wxKeyEventHandler(CFrame::OnKeyDown),
+ (wxObject*)0, this);
+ wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_UP,
+ wxKeyEventHandler(CFrame::OnKeyUp),
+ (wxObject*)0, this);
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
m_RenderParent->SetCursor(wxCURSOR_ARROW);
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain)
@@ -863,7 +865,7 @@ void CFrame::DoStop()
void CFrame::OnStop(wxCommandEvent& WXUNUSED (event))
{
- game_loading = false;
+ m_bGameLoading = false;
DoStop();
}
@@ -1000,7 +1002,7 @@ void CFrame::OnShow_CheatsWindow(wxCommandEvent& WXUNUSED (event))
void CFrame::OnLoadWiiMenu(wxCommandEvent& WXUNUSED (event))
{
- StartGame(std::string (File::GetUserPath(D_WIIMENU_IDX)));
+ BootGame(std::string (File::GetUserPath(D_WIIMENU_IDX)));
}
void CFrame::OnConnectWiimote(wxCommandEvent& event)
@@ -1222,7 +1224,7 @@ void CFrame::UpdateGUI()
}
}
- if (m_GameListCtrl && !game_loading)
+ if (m_GameListCtrl && !m_bGameLoading)
{
// Game has not started, show game list
if (!m_GameListCtrl->IsShown())
@@ -1233,7 +1235,7 @@ void CFrame::UpdateGUI()
sizerPanel->FitInside(m_Panel);
}
// Game has been selected but not started, enable play button
- if (m_GameListCtrl->GetSelectedISO() != NULL && m_GameListCtrl->IsEnabled() && !game_loading)
+ if (m_GameListCtrl->GetSelectedISO() != NULL && m_GameListCtrl->IsEnabled() && !m_bGameLoading)
{
if (m_ToolBar)
m_ToolBar->EnableTool(IDM_PLAY, true);
@@ -1249,7 +1251,7 @@ void CFrame::UpdateGUI()
GetMenuBar()->FindItem(IDM_PLAY)->Enable(true);
// Reset game loading flag
- game_loading = false;
+ m_bGameLoading = false;
}
if (m_ToolBar) m_ToolBar->Refresh();
diff --git a/Source/Core/DolphinWX/Src/Main.cpp b/Source/Core/DolphinWX/Src/Main.cpp
index 93c0066d8e..3a4debea88 100644
--- a/Source/Core/DolphinWX/Src/Main.cpp
+++ b/Source/Core/DolphinWX/Src/Main.cpp
@@ -455,7 +455,7 @@ bool DolphinApp::OnInit()
// First check if we have an elf command line.
if (LoadElf && ElfFile != wxEmptyString)
{
- main_frame->StartGame(std::string(ElfFile.mb_str()));
+ main_frame->BootGame(std::string(ElfFile.mb_str()));
}
// If we have selected Automatic Start, start the default ISO, or if no default
// ISO exists, start the last loaded ISO
@@ -467,13 +467,13 @@ bool DolphinApp::OnInit()
&& File::Exists(SConfig::GetInstance().m_LocalCoreStartupParameter.
m_strDefaultGCM.c_str()))
{
- main_frame->StartGame(SConfig::GetInstance().m_LocalCoreStartupParameter.
+ main_frame->BootGame(SConfig::GetInstance().m_LocalCoreStartupParameter.
m_strDefaultGCM);
}
else if(!SConfig::GetInstance().m_LastFilename.empty()
&& File::Exists(SConfig::GetInstance().m_LastFilename.c_str()))
{
- main_frame->StartGame(SConfig::GetInstance().m_LastFilename);
+ main_frame->BootGame(SConfig::GetInstance().m_LastFilename);
}
}
}