GUI: Moved debugging window to AUI, more AUI improvements to be done

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4052 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
John Peterson
2009-08-25 01:50:27 +00:00
parent 984988c5d3
commit b01b7c78a5
24 changed files with 3624 additions and 404 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Version="9,00"
Name="Dolphin"
ProjectGUID="{A72606EF-C5C1-4954-90AD-F0F93A8D97D9}"
RootNamespace="DolphinWX"
@ -90,11 +90,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib wxmsw28u_aui.lib"
OutputFile="../../../Binary/Win32/Dolphin.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\Win32;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="msvcrt"
GenerateDebugInformation="true"
@ -207,11 +207,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib rpcrt4.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib wxmsw28u_aui.lib"
OutputFile="../../../Binary/x64/Dolphin.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\x64"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(PlatformName)\$(ConfigurationName)\$(TargetName).pdb"
SubSystem="2"
@ -318,11 +318,11 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/TLBID:1"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28ud.lib wxmsw28ud_core.lib wxmsw28ud_adv.lib wxmsw28ud_aui.lib"
OutputFile="../../../Binary/Win32/DolphinD.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\lib32;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\Win32;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
ProgramDatabaseFile="$(PlatformName)\$(ConfigurationName)\$(TargetName).pdb"
@ -429,11 +429,11 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/TLBID:1"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28ud.lib wxmsw28ud_core.lib wxmsw28ud_adv.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28ud.lib wxmsw28ud_core.lib wxmsw28ud_adv.lib wxmsw28ud_aui.lib"
OutputFile="../../../Binary/x64/DolphinD.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\x64"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
ProgramDatabaseFile="$(PlatformName)\$(ConfigurationName)\$(TargetName).pdb"
@ -543,11 +543,11 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/NODEFAULTLIB:msvcrt.lib&#x0D;&#x0A;/NODEFAULTLIB:libcmtd.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib wxmsw28u_aui.lib"
OutputFile="../../../Binary/Win32/DolphinDF.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\lib32;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\Win32;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(PlatformName)\$(ConfigurationName)\$(TargetName).pdb"
SubSystem="2"
@ -655,11 +655,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib wxmsw28u_aui.lib"
OutputFile="../../../Binary/x64/DolphinDF.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\x64"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(PlatformName)\$(ConfigurationName)\$(TargetName).pdb"
GenerateMapFile="false"
@ -768,11 +768,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib winmm.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib wxmsw28u_aui.lib"
OutputFile="../../../Binary/Win32/DolphinIL.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\Win32;..\..\..\Externals\LZO\win32\$(ConfigurationName)"
IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="msvcrt"
GenerateDebugInformation="true"
@ -884,11 +884,11 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib rpcrt4.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib"
AdditionalDependencies="comctl32.lib rpcrt4.lib wxbase28u.lib wxmsw28u_core.lib wxmsw28u_adv.lib wxmsw28u_aui.lib"
OutputFile="../../../Binary/x64/DolphinIL.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
AdditionalLibraryDirectories="..\..\..\Externals\wxWidgets\lib\vc_lib\x64"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(PlatformName)\$(ConfigurationName)\$(TargetName).pdb"
SubSystem="2"

View File

@ -290,6 +290,12 @@ EVT_HOST_COMMAND(wxID_ANY, CFrame::OnHostMessage)
#if wxUSE_TIMER
EVT_TIMER(wxID_ANY, CFrame::OnTimer)
#endif
// Debugger Menu Entries
EVT_MENU(wxID_ANY, CFrame::PostEvent)
//EVT_MENU_HIGHLIGHT_ALL(CFrame::PostMenuEvent)
//EVT_UPDATE_UI(wxID_ANY, CFrame::PostUpdateUIEvent)
END_EVENT_TABLE()
//////////////////////////////////////////////////////////////////////////////////////////
@ -303,8 +309,10 @@ CFrame::CFrame(bool showLogWindow,
const wxString& title,
const wxPoint& pos,
const wxSize& size,
bool _UseDebugger,
long style)
: wxFrame(parent, id, title, pos, size, style)
, UseDebugger(_UseDebugger)
, m_pStatusBar(NULL), bRenderToMain(true), HaveLeds(false)
, HaveSpeakers(false), m_Panel(NULL)
, m_bLogWindow(showLogWindow || SConfig::GetInstance().m_InterfaceLogWindow)
@ -314,6 +322,10 @@ CFrame::CFrame(bool showLogWindow,
#endif
{
// Debugger class
if (UseDebugger)
g_pCodeWindow = new CCodeWindow(SConfig::GetInstance().m_LocalCoreStartupParameter, this);
// Create timer
#if wxUSE_TIMER
int TimesPerSecond = 10; // We don't need more than this
@ -341,13 +353,8 @@ CFrame::CFrame(bool showLogWindow,
if (SConfig::GetInstance().m_InterfaceConsole)
console->Open();
// This panel is the parent for rendering and it holds the gamelistctrl
//m_Panel = new wxPanel(this, IDM_MPANEL);
m_Panel = new CPanel(this, IDM_MPANEL);
m_LogWindow = new CLogWindow(this);
if (m_bLogWindow)
m_LogWindow->Show();
wxPanel * m_Panel2 = new wxPanel(this, wxID_ANY);
m_GameListCtrl = new CGameListCtrl(m_Panel, LIST_CTRL,
wxDefaultPosition, wxDefaultSize,
@ -357,14 +364,44 @@ CFrame::CFrame(bool showLogWindow,
sizerPanel->Add(m_GameListCtrl, 1, wxEXPAND | wxALL);
m_Panel->SetSizer(sizerPanel);
sizerFrame = new wxBoxSizer(wxHORIZONTAL);
sizerFrame->Add(m_Panel, 1, wxEXPAND | wxALL);
this->SetSizer(sizerFrame);
m_Mgr = new wxAuiManager();
m_Mgr->SetManagedWindow(this);
// This panel is the parent for rendering and it holds the gamelistctrl
if (UseDebugger)
{
m_Mgr->AddPane(m_Panel, wxAuiPaneInfo().
Name(wxT("test8")).Caption(wxT("Tree Pane")).
CenterPane().PaneBorder(true));
/**/
m_Mgr->AddPane(m_Panel2, wxAuiPaneInfo().
Name(wxT("test9")).Caption(wxT("Tree Pane")).
CenterPane());
m_Mgr->AddPane(g_pCodeWindow, wxAuiPaneInfo().
Name(wxT("test10")).Caption(wxT("Tree Pane")).
CenterPane().Right());
}
else
{
/*
sizerFrame = new wxBoxSizer(wxHORIZONTAL);
sizerFrame->Add(m_Panel, 1, wxEXPAND | wxALL);
this->SetSizer(sizerFrame);
*/
m_Mgr->AddPane(m_Panel, wxAuiPaneInfo().
Name(wxT("test8")).Caption(wxT("Tree Pane")).
CenterPane().PaneBorder(false));
}
// Open log window
m_LogWindow = new CLogWindow(this);
if (m_bLogWindow) m_LogWindow->Show();
// Create the toolbar
RecreateToolbar();
if (!SConfig::GetInstance().m_InterfaceToolbar)
TheToolBar->Hide();
if (!SConfig::GetInstance().m_InterfaceToolbar) TheToolBar->Hide();
FitInside();
@ -378,6 +415,9 @@ CFrame::CFrame(bool showLogWindow,
m_GameListCtrl->Update();
//sizerPanel->SetSizeHints(m_Panel);
// Commit
m_Mgr->Update();
// Create cursors
#ifdef _WIN32
CreateCursor();
@ -404,6 +444,7 @@ CFrame::CFrame(bool showLogWindow,
// ----------
UpdateGUI();
if (UseDebugger) g_pCodeWindow->UpdateButtonStates();
// If we are rerecording create the status bar now instead of later when a game starts
#ifdef RERECORDING
@ -445,7 +486,7 @@ void CFrame::OnClose(wxCloseEvent& event)
//////////////////////////////////////////////////////////////////////////////////////////
// Input and host messages
// Host messages
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef _WIN32
WXLRESULT CFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
@ -483,7 +524,26 @@ void CFrame::OnHostMessage(wxCommandEvent& event)
}
}
// Post events
void CFrame::PostEvent(wxCommandEvent& event)
{
// Don't post zero events, that may hang
if (g_pCodeWindow && event.GetId()) wxPostEvent(g_pCodeWindow, event);
}
void CFrame::PostMenuEvent(wxMenuEvent& event)
{
if (g_pCodeWindow) wxPostEvent(g_pCodeWindow, event);
}
void CFrame::PostUpdateUIEvent(wxUpdateUIEvent& event)
{
if (g_pCodeWindow) wxPostEvent(g_pCodeWindow, event);
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
// Input
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CFrame::OnGameListCtrl_ItemActivated(wxListEvent& WXUNUSED (event))
{
// Show all platforms and regions if...

View File

@ -23,8 +23,10 @@
#include <wx/busyinfo.h>
#include <wx/mstream.h>
#include <wx/listctrl.h>
#include <wx/aui/aui.h>
#include "CDUtils.h"
#include "CodeWindow.h"
#include "LogWindow.h"
// A shortcut to access the bitmaps
@ -49,6 +51,7 @@ class CFrame : public wxFrame
const wxString& title = wxT("Dolphin"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
bool _UseDebugger = false,
long style = wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE);
void* GetRenderHandle()
@ -70,9 +73,14 @@ class CFrame : public wxFrame
void UpdateGUI();
void ToggleLogWindow(bool check);
void ToggleConsole(bool check);
CCodeWindow* g_pCodeWindow;
void PostEvent(wxCommandEvent& event);
void PostMenuEvent(wxMenuEvent& event);
void PostUpdateUIEvent(wxUpdateUIEvent& event);
// ---------------------------------------
// Wiimote leds
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ModifyStatusBar();
void CreateDestroy(int Case);
void CreateLeds(); void CreateSpeakers();
@ -89,6 +97,8 @@ class CFrame : public wxFrame
private:
wxAuiManager *m_Mgr;
bool UseDebugger;
wxBoxSizer* sizerPanel;
wxBoxSizer* sizerFrame;
CGameListCtrl* m_GameListCtrl;
@ -139,7 +149,7 @@ class CFrame : public wxFrame
wxBitmap m_Bitmaps[EToolbar_Max];
wxBitmap m_BitmapsMenu[EToolbar_Max];
void PopulateToolbar(wxToolBar* toolBar);
void PopulateToolbar(wxAuiToolBar* toolBar);
void RecreateToolbar();
void CreateMenu();

View File

@ -238,13 +238,15 @@ void CFrame::CreateMenu()
helpMenu->Append(IDM_HELPABOUT, _T("&About..."));
menuBar->Append(helpMenu, _T("&Help"));
if (UseDebugger) g_pCodeWindow->CreateMenu(SConfig::GetInstance().m_LocalCoreStartupParameter, menuBar);
// Associate the menu bar with the frame
SetMenuBar(menuBar);
}
// Create toolbar items
void CFrame::PopulateToolbar(wxToolBar* toolBar)
void CFrame::PopulateToolbar(wxAuiToolBar* toolBar)
{
int w = m_Bitmaps[Toolbar_FileOpen].GetWidth(),
h = m_Bitmaps[Toolbar_FileOpen].GetHeight();
@ -278,7 +280,32 @@ void CFrame::PopulateToolbar(wxToolBar* toolBar)
// Delete and recreate the toolbar
void CFrame::RecreateToolbar()
{
wxAuiToolBar* TheToolBar = new wxAuiToolBar(this, ID_TOOLBAR, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW | wxAUI_TB_TEXT);
PopulateToolbar(TheToolBar);
UpdateGUI();
m_Mgr->AddPane(TheToolBar, wxAuiPaneInfo().
Name(wxT("TheToolBar")).Caption(wxT("Big Toolbar")).
ToolbarPane().Top().
LeftDockable(false).RightDockable(false));
if (UseDebugger)
{
wxAuiToolBar* TheToolBar2 = new wxAuiToolBar(this, ID_TOOLBAR2, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW | wxAUI_TB_TEXT);
g_pCodeWindow->PopulateToolbar(TheToolBar2);
m_Mgr->AddPane(TheToolBar2, wxAuiPaneInfo().
Name(wxT("TheToolBar2")).Caption(wxT("Big Toolbar")).
ToolbarPane().Top().
LeftDockable(false).RightDockable(false));
}
/*
wxToolBarBase* toolBar = GetToolBar();
long style = toolBar ? toolBar->GetWindowStyle() : TOOLBAR_STYLE;
@ -291,6 +318,7 @@ void CFrame::RecreateToolbar()
PopulateToolbar(TheToolBar);
SetToolBar(TheToolBar);
UpdateGUI();
*/
}
void CFrame::InitBitmaps()
@ -950,7 +978,7 @@ void CFrame::UpdateGUI()
}
}
TheToolBar->Realize();
//TheToolBar->Realize();
FitInside();
}

View File

@ -16,7 +16,10 @@
// http://code.google.com/p/dolphin-emu/
// This holds global data for DolphinWx and DebuggerWx
// This file holds global data for DolphinWx and DebuggerWx
#ifndef _GLOBALS_H
#define _GLOBALS_H
@ -99,6 +102,67 @@ enum
IDM_CONFIG_WIIMOTE_PLUGIN,
IDM_TOGGLE_FULLSCREEN,
// --------------------------------------------------------------
// Debugger Menu Entries
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// CPU Mode
IDM_INTERPRETER,
//IDM_DUALCORE, // not used
IDM_AUTOMATICSTART, IDM_BOOTTOPAUSE,
IDM_JITUNLIMITED, IDM_JITBLOCKLINKING, // JIT
IDM_JITOFF,
IDM_JITLSOFF, IDM_JITLSLXZOFF, IDM_JITLSLWZOFF, IDM_JITLSLBZXOFF,
IDM_JITLSPOFF, IDM_JITLSFOFF,
IDM_JITIOFF,
IDM_JITFPOFF,
IDM_JITPOFF,
IDM_JITSROFF,
// Views
IDM_FONTPICKER,
IDM_LOGWINDOW,
IDM_REGISTERWINDOW,
IDM_BREAKPOINTWINDOW,
IDM_MEMORYWINDOW,
IDM_JITWINDOW,
IDM_SOUNDWINDOW,
IDM_VIDEOWINDOW,
// Symbols
IDM_CLEARSYMBOLS,
IDM_CLEANSYMBOLS, // not used
IDM_SCANFUNCTIONS,
IDM_LOADMAPFILE,
IDM_SAVEMAPFILE, IDM_SAVEMAPFILEWITHCODES,
IDM_CREATESIGNATUREFILE,
IDM_RENAME_SYMBOLS,
IDM_USESIGNATUREFILE,
//IDM_USESYMBOLFILE, // not used
IDM_PATCHHLEFUNCTIONS,
// JIT
IDM_CLEARCODECACHE,
IDM_LOGINSTRUCTIONS,
IDM_SEARCHINSTRUCTION,
// Profiler
IDM_PROFILEBLOCKS,
IDM_WRITEPROFILE,
// --------------------------------------------------------------
// --------------------------------------------------------------
// Debugger Toolbar
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ID_TOOLBAR2 = 2000,
IDM_DEBUG_GO,
IDM_STEP,
IDM_STEPOVER,
IDM_SKIP,
IDM_SETPC,
IDM_GOTOPC,
IDM_ADDRBOX,
// --------------------------------------------------------------
IDM_TOGGLE_DUALCORE, // Other
IDM_TOGGLE_SKIPIDLE,
IDM_TOGGLE_TOOLBAR,

View File

@ -297,7 +297,7 @@ bool DolphinApp::OnInit()
if (UseDebugger)
{
main_frame = new CFrame(UseLogger, (wxFrame*) NULL, wxID_ANY, wxString::FromAscii(title),
wxPoint(x, y), wxSize(w, h));
wxPoint(x, y), wxSize(w, h), true);
}
else
{
@ -305,13 +305,6 @@ bool DolphinApp::OnInit()
wxPoint(100, 100), wxSize(800, 600));
}
// Create debugging window
if (UseDebugger)
{
g_pCodeWindow = new CCodeWindow(SConfig::GetInstance().m_LocalCoreStartupParameter, main_frame);
g_pCodeWindow->Show(true);
}
// ---------------------------------------------------
// Check the autoboot options.
// ---------------------
@ -322,20 +315,23 @@ bool DolphinApp::OnInit()
}
/* If we have selected Automatic Start, start the default ISO, or if no default
ISO exists, start the last loaded ISO */
else if (UseDebugger && g_pCodeWindow->AutomaticStart())
else if (UseDebugger)
{
if(!SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM.empty()
&& File::Exists(SConfig::GetInstance().m_LocalCoreStartupParameter.
m_strDefaultGCM.c_str()))
if (main_frame->g_pCodeWindow->AutomaticStart())
{
BootManager::BootCore(SConfig::GetInstance().m_LocalCoreStartupParameter.
m_strDefaultGCM);
if(!SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM.empty()
&& File::Exists(SConfig::GetInstance().m_LocalCoreStartupParameter.
m_strDefaultGCM.c_str()))
{
BootManager::BootCore(SConfig::GetInstance().m_LocalCoreStartupParameter.
m_strDefaultGCM);
}
else if(!SConfig::GetInstance().m_LastFilename.empty()
&& File::Exists(SConfig::GetInstance().m_LastFilename.c_str()))
{
BootManager::BootCore(SConfig::GetInstance().m_LastFilename);
}
}
else if(!SConfig::GetInstance().m_LastFilename.empty()
&& File::Exists(SConfig::GetInstance().m_LastFilename.c_str()))
{
BootManager::BootCore(SConfig::GetInstance().m_LastFilename);
}
}
// ---------------------