summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorShawn Hoffman <godisgovernment@gmail.com>2009-03-20 18:25:36 +0000
committerShawn Hoffman <godisgovernment@gmail.com>2009-03-20 18:25:36 +0000
commiteacb9ccd803945ee9aa0a32ea3a6ef6b227c6d40 (patch)
tree0e0708bf073ae582f7544d529a82341c4bf35e5f /Source/Core
parent7d910a5e4a48134201f99f3e098a531ceffe9c4d (diff)
Improve behavior of the console window on windows. Remove coloring from logwindow for the time being. Now you can use wxGetApp if you #include Main.h, and GetCFrame, etc...
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2694 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/Common.vcproj4
-rw-r--r--Source/Core/Common/Src/ConsoleListener.cpp50
-rw-r--r--Source/Core/Common/Src/LogManager.h7
-rw-r--r--Source/Core/Core/Src/ConfigManager.cpp4
-rw-r--r--Source/Core/Core/Src/ConfigManager.h1
-rw-r--r--Source/Core/DolphinWX/Src/Frame.cpp8
-rw-r--r--Source/Core/DolphinWX/Src/Frame.h7
-rw-r--r--Source/Core/DolphinWX/Src/FrameTools.cpp41
-rw-r--r--Source/Core/DolphinWX/Src/Globals.h3
-rw-r--r--Source/Core/DolphinWX/Src/LogWindow.cpp67
-rw-r--r--Source/Core/DolphinWX/Src/LogWindow.h1
-rw-r--r--Source/Core/DolphinWX/Src/Main.cpp7
-rw-r--r--Source/Core/DolphinWX/Src/Main.h15
13 files changed, 146 insertions, 69 deletions
diff --git a/Source/Core/Common/Common.vcproj b/Source/Core/Common/Common.vcproj
index 37705b1f21..80d3bd6911 100644
--- a/Source/Core/Common/Common.vcproj
+++ b/Source/Core/Common/Common.vcproj
@@ -546,10 +546,6 @@
>
</File>
<File
- RelativePath=".\Src\ConsoleListener.h"
- >
- </File>
- <File
RelativePath=".\Src\LogManager.cpp"
>
</File>
diff --git a/Source/Core/Common/Src/ConsoleListener.cpp b/Source/Core/Common/Src/ConsoleListener.cpp
index 59f8971fba..137fc9782b 100644
--- a/Source/Core/Common/Src/ConsoleListener.cpp
+++ b/Source/Core/Common/Src/ConsoleListener.cpp
@@ -15,7 +15,6 @@
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
-
#include <string> // System: To be able to add strings with "+"
#include <stdio.h>
#ifdef _WIN32
@@ -28,9 +27,19 @@
#include "LogManager.h" // Common
-/* Start console window - width and height is the size of console window */
-ConsoleListener::ConsoleListener(int Width, int Height, char * Name) :
- Listener("console")
+// Inits as a Listener
+ConsoleListener::ConsoleListener() : Listener("console")
+{
+}
+
+ConsoleListener::~ConsoleListener()
+{
+ Close();
+}
+
+// Open console window - width and height is the size of console window
+// Name is the window title
+void ConsoleListener::Open(int Width, int Height, char * Name)
{
#ifdef _WIN32
// Open the console window and create the window handle for GetStdHandle()
@@ -46,29 +55,38 @@ ConsoleListener::ConsoleListener(int Width, int Height, char * Name) :
COORD co = {Width, Height};
SetConsoleScreenBufferSize(m_hStdOut, co);
- /* Set the window size in number of letters. The height is hardcoded here
- because it can be changed with MoveWindow() later */
+ /* Set the window size in number of letters. The height is hard coded here
+ because it can be changed with MoveWindow() later */
SMALL_RECT coo = {0,0, (Width - 1),50}; // Top, left, right, bottom
SetConsoleWindowInfo(m_hStdOut, TRUE, &coo);
#endif
-
}
-
-/* Close the console window and close the eventual file handle */
-ConsoleListener::~ConsoleListener()
+// Close the console window and close the eventual file handle
+void ConsoleListener::Close()
{
#ifdef _WIN32
- FreeConsole(); // Close the console window
+ if (m_hStdOut == NULL)
+ return;
+ FreeConsole();
+ m_hStdOut = NULL;
#else
fflush(NULL);
#endif
}
+bool ConsoleListener::IsOpen()
+{
+#ifdef _WIN32
+ return (m_hStdOut != NULL);
+#else
+ return true;
+#endif
+}
+
// Logs the message to screen
void ConsoleListener::Log(LogTypes::LOG_LEVELS level, const char *text)
{
-
#if defined(_WIN32)
DWORD cCharsWritten; // We will get a value back here
WORD color;
@@ -101,8 +119,7 @@ void ConsoleListener::Log(LogTypes::LOG_LEVELS level, const char *text)
}
SetConsoleTextAttribute(m_hStdOut, color);
- WriteConsole(m_hStdOut, text, (DWORD)strlen(text),
- &cCharsWritten, NULL);
+ WriteConsole(m_hStdOut, text, (DWORD)strlen(text), &cCharsWritten, NULL);
#else
fprintf(stderr, "%s", text);
#endif
@@ -132,8 +149,8 @@ void ConsoleListener::ClearScreen()
}
-/* Get window handle of console window to be able to resize it. We use
- GetConsoleTitle() and FindWindow() to locate the console window handle. */
+// Get window handle of console window to be able to resize it. We use
+// GetConsoleTitle() and FindWindow() to locate the console window handle.
#if defined(_WIN32)
HWND GetHwnd(void)
{
@@ -163,4 +180,3 @@ HWND GetHwnd(void)
return(hwndFound);
}
#endif // _WIN32
-
diff --git a/Source/Core/Common/Src/LogManager.h b/Source/Core/Common/Src/LogManager.h
index b911037101..e93db2e47b 100644
--- a/Source/Core/Common/Src/LogManager.h
+++ b/Source/Core/Common/Src/LogManager.h
@@ -70,10 +70,13 @@ private:
class ConsoleListener : public Listener
{
public:
- ConsoleListener(int Width = 150, int Height = 100,
- char * Name = "Console");
+ ConsoleListener();
~ConsoleListener();
+ void Open(int Width = 100, int Height = 100,
+ char * Name = "Console");
+ void Close();
+ bool IsOpen();
void Log(LogTypes::LOG_LEVELS, const char *text);
void ClearScreen();
diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp
index 8f00ceb47e..317d0187a8 100644
--- a/Source/Core/Core/Src/ConfigManager.cpp
+++ b/Source/Core/Core/Src/ConfigManager.cpp
@@ -79,6 +79,7 @@ void SConfig::SaveSettings()
ini.Set("Interface", "ShowToolbar", m_InterfaceToolbar);
ini.Set("Interface", "ShowStatusbar", m_InterfaceStatusbar);
ini.Set("Interface", "ShowLogWindow", m_InterfaceLogWindow);
+ ini.Set("Interface", "ShowConsole", m_InterfaceConsole);
// Core
ini.Set("Core", "HLEBios", m_LocalCoreStartupParameter.bHLEBios);
@@ -179,7 +180,8 @@ void SConfig::LoadSettings()
ini.Get("Interface", "Language", (int*)&m_InterfaceLanguage, 0);
ini.Get("Interface", "ShowToolbar", &m_InterfaceToolbar, true);
ini.Get("Interface", "ShowStatusbar", &m_InterfaceStatusbar, true);
- ini.Get("Interface", "ShowLogWindow", &m_InterfaceLogWindow, true);
+ ini.Get("Interface", "ShowLogWindow", &m_InterfaceLogWindow, false);
+ ini.Get("Interface", "ShowConsole", &m_InterfaceConsole, false);
// Core
ini.Get("Core", "HLEBios", &m_LocalCoreStartupParameter.bHLEBios, true);
diff --git a/Source/Core/Core/Src/ConfigManager.h b/Source/Core/Core/Src/ConfigManager.h
index e4f098fb3a..239836c3f9 100644
--- a/Source/Core/Core/Src/ConfigManager.h
+++ b/Source/Core/Core/Src/ConfigManager.h
@@ -65,6 +65,7 @@ struct SConfig
bool m_InterfaceToolbar;
bool m_InterfaceStatusbar;
bool m_InterfaceLogWindow;
+ bool m_InterfaceConsole;
// save settings
void SaveSettings();
diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp
index 0d7a0e93ec..4f2ed4ca63 100644
--- a/Source/Core/DolphinWX/Src/Frame.cpp
+++ b/Source/Core/DolphinWX/Src/Frame.cpp
@@ -272,8 +272,9 @@ EVT_MENU(IDM_TOGGLE_FULLSCREEN, CFrame::OnToggleFullscreen)
EVT_MENU(IDM_TOGGLE_DUALCORE, CFrame::OnToggleDualCore)
EVT_MENU(IDM_TOGGLE_SKIPIDLE, CFrame::OnToggleSkipIdle)
EVT_MENU(IDM_TOGGLE_TOOLBAR, CFrame::OnToggleToolbar)
-EVT_MENU(IDM_TOGGLE_LOGWINDOW, CFrame::OnToggleLogWindow)
EVT_MENU(IDM_TOGGLE_STATUSBAR, CFrame::OnToggleStatusbar)
+EVT_MENU(IDM_TOGGLE_LOGWINDOW, CFrame::OnToggleLogWindow)
+EVT_MENU(IDM_TOGGLE_CONSOLE, CFrame::OnToggleConsole)
EVT_MENU_RANGE(IDM_LOADSLOT1, IDM_LOADSLOT10, CFrame::OnLoadState)
EVT_MENU_RANGE(IDM_SAVESLOT1, IDM_SAVESLOT10, CFrame::OnSaveState)
@@ -334,6 +335,11 @@ CFrame::CFrame(bool showLogWindow,
// Give it a menu bar
CreateMenu();
+ // Give it a console
+ ConsoleListener *console = LogManager::GetInstance()->getConsoleListener();
+ 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);
diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h
index 632ccf8c43..9a98d2292c 100644
--- a/Source/Core/DolphinWX/Src/Frame.h
+++ b/Source/Core/DolphinWX/Src/Frame.h
@@ -25,6 +25,7 @@
#include <wx/wx.h> // wxWidgets
#include <wx/busyinfo.h>
#include <wx/mstream.h>
+#include <wx/listctrl.h>
////////////////////////////////
#include "CDUtils.h"
#include "LogWindow.h"
@@ -45,6 +46,7 @@ inline wxBitmap _wxGetBitmapFromMemory(const unsigned char* data, int length)
// Class declarations
// ŻŻŻŻŻŻŻŻŻŻ
class CGameListCtrl;
+class CLogWindow;
class CFrame : public wxFrame
{
public:
@@ -74,6 +76,8 @@ class CFrame : public wxFrame
void DoStop();
bool bRenderToMain;
void UpdateGUI();
+ void ToggleLogWindow(bool check);
+ void ToggleConsole(bool check);
// ---------------------------------------
// Wiimote leds
@@ -203,8 +207,9 @@ class CFrame : public wxFrame
void OnToggleThrottle(wxCommandEvent& event);
void OnResize(wxSizeEvent& event);
void OnToggleToolbar(wxCommandEvent& event);
- void OnToggleLogWindow(wxCommandEvent& event);
void OnToggleStatusbar(wxCommandEvent& event);
+ void OnToggleLogWindow(wxCommandEvent& event);
+ void OnToggleConsole(wxCommandEvent& event);
void OnKeyDown(wxKeyEvent& event); void OnKeyUp(wxKeyEvent& event);
void OnDoubleClick(wxMouseEvent& event); void OnMotion(wxMouseEvent& event);
diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp
index 1bcabf0d47..972ccda8fc 100644
--- a/Source/Core/DolphinWX/Src/FrameTools.cpp
+++ b/Source/Core/DolphinWX/Src/FrameTools.cpp
@@ -152,12 +152,14 @@ void CFrame::CreateMenu()
// Tools menu
wxMenu* toolsMenu = new wxMenu;
- toolsMenu->AppendCheckItem(IDM_TOGGLE_TOOLBAR, _T("View &Toolbar"));
+ toolsMenu->AppendCheckItem(IDM_TOGGLE_TOOLBAR, _T("Show &Toolbar"));
toolsMenu->Check(IDM_TOGGLE_TOOLBAR, SConfig::GetInstance().m_InterfaceToolbar);
- toolsMenu->AppendCheckItem(IDM_TOGGLE_STATUSBAR, _T("View &Statusbar"));
+ toolsMenu->AppendCheckItem(IDM_TOGGLE_STATUSBAR, _T("Show &Statusbar"));
toolsMenu->Check(IDM_TOGGLE_STATUSBAR, SConfig::GetInstance().m_InterfaceStatusbar);
- toolsMenu->AppendCheckItem(IDM_TOGGLE_LOGWINDOW, _T("View &Logwindow"));
+ toolsMenu->AppendCheckItem(IDM_TOGGLE_LOGWINDOW, _T("Show &Logwindow"));
toolsMenu->Check(IDM_TOGGLE_LOGWINDOW, m_bLogWindow);
+ toolsMenu->AppendCheckItem(IDM_TOGGLE_CONSOLE, _T("Show &Console"));
+ toolsMenu->Check(IDM_TOGGLE_CONSOLE, SConfig::GetInstance().m_InterfaceConsole);
toolsMenu->AppendSeparator();
toolsMenu->Append(IDM_MEMCARD, _T("&Memcard Manager"));
toolsMenu->Append(IDM_CHEATS, _T("Action &Replay Manager"));
@@ -731,7 +733,7 @@ void CFrame::OnSaveState(wxCommandEvent& event)
}
-// Let us enable and disable the toolbar
+// Enable and disable the toolbar
void CFrame::OnToggleToolbar(wxCommandEvent& event)
{
wxToolBarBase* toolBar = GetToolBar();
@@ -749,7 +751,7 @@ void CFrame::OnToggleToolbar(wxCommandEvent& event)
this->SendSizeEvent();
}
-// Let us enable and disable the status bar
+// Enable and disable the status bar
void CFrame::OnToggleStatusbar(wxCommandEvent& event)
{
if (SConfig::GetInstance().m_InterfaceStatusbar = event.IsChecked() == true)
@@ -760,17 +762,40 @@ void CFrame::OnToggleStatusbar(wxCommandEvent& event)
this->SendSizeEvent();
}
-// Let us enable and disable the log window
+// Enable and disable the log window
void CFrame::OnToggleLogWindow(wxCommandEvent& event)
{
- if (SConfig::GetInstance().m_InterfaceLogWindow = event.IsChecked() == true)
+ ToggleLogWindow(event.IsChecked());
+}
+
+void CFrame::ToggleLogWindow(bool check)
+{
+ if (SConfig::GetInstance().m_InterfaceLogWindow = check == true)
m_LogWindow->Show();
else
m_LogWindow->Hide();
- this->SendSizeEvent();
+ // Make sure the check is updated (if wxw isn't calling this func)
+ GetMenuBar()->FindItem(IDM_TOGGLE_LOGWINDOW)->Check(check);
}
+// Enable and disable the console
+void CFrame::OnToggleConsole(wxCommandEvent& event)
+{
+ ToggleConsole(event.IsChecked());
+}
+
+void CFrame::ToggleConsole(bool check)
+{
+ ConsoleListener *console = LogManager::GetInstance()->getConsoleListener();
+ if (SConfig::GetInstance().m_InterfaceConsole = check == true)
+ console->Open();
+ else
+ console->Close();
+
+ // Make sure the check is updated (if wxw isn't calling this func)
+ GetMenuBar()->FindItem(IDM_TOGGLE_CONSOLE)->Check(check);
+}
// Update the enabled/disabled status
void CFrame::UpdateGUI()
diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h
index c077d3684d..6985f61ce3 100644
--- a/Source/Core/DolphinWX/Src/Globals.h
+++ b/Source/Core/DolphinWX/Src/Globals.h
@@ -85,8 +85,9 @@ enum
IDM_TOGGLE_DUALCORE, // Other
IDM_TOGGLE_SKIPIDLE,
IDM_TOGGLE_TOOLBAR,
- IDM_TOGGLE_LOGWINDOW,
IDM_TOGGLE_STATUSBAR,
+ IDM_TOGGLE_LOGWINDOW,
+ IDM_TOGGLE_CONSOLE,
IDM_NOTIFYMAPLOADED,
IDM_OPENCONTAININGFOLDER,
IDM_SETDEFAULTGCM,
diff --git a/Source/Core/DolphinWX/Src/LogWindow.cpp b/Source/Core/DolphinWX/Src/LogWindow.cpp
index 701f31a039..694e0cc8e8 100644
--- a/Source/Core/DolphinWX/Src/LogWindow.cpp
+++ b/Source/Core/DolphinWX/Src/LogWindow.cpp
@@ -91,7 +91,9 @@ void CLogWindow::CreateGUIControls()
// Right side: Log viewer and submit row
m_log = new wxTextCtrl(this, IDM_LOG, wxEmptyString, wxDefaultPosition, wxDefaultSize,
- wxTE_RICH | wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
+ wxTE_RICH2 | wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
+ // FIXME See note in UpdateLog()
+ //m_log->SetBackgroundColour(*wxBLACK);
//m_log->SetFont(DebuggerFont);
m_cmdline = new wxTextCtrl(this, IDM_SUBMITCMD, wxEmptyString, wxDefaultPosition, wxDefaultSize,
@@ -152,7 +154,7 @@ void CLogWindow::LoadSettings()
ini.Get("LogWindow", "w", &w, GetSize().GetWidth());
ini.Get("LogWindow", "h", &h, GetSize().GetHeight());
SetSize(x, y, w, h);
- ini.Get("Options", "Verbosity", &verbosity, 2);
+ ini.Get("Options", "Verbosity", &verbosity, 0);
m_verbosity->SetSelection(verbosity);
ini.Get("Options", "WriteToFile", &m_writeFile, true);
m_writeFileCB->SetValue(m_writeFile);
@@ -298,6 +300,10 @@ void CLogWindow::OnOptionsCheck(wxCommandEvent& event)
m_logManager->removeListener((LogTypes::LOG_TYPE)i, m_console);
}
}
+ if (m_writeConsole && !m_console->IsOpen())
+ wxGetApp().GetCFrame()->ToggleConsole(true);
+ else if (!m_writeConsole && m_console->IsOpen())
+ wxGetApp().GetCFrame()->ToggleConsole(false);
break;
}
SaveSettings();
@@ -333,36 +339,45 @@ void CLogWindow::OnLogTimer(wxTimerEvent& WXUNUSED(event))
void CLogWindow::NotifyUpdate()
{
UpdateChecks();
- UpdateLog();
+ //UpdateLog();
}
void CLogWindow::UpdateLog()
{
m_logTimer->Stop();
- for (unsigned int i = 0; i < msgQueue.size(); i++)
+ u32 msgQueueSize = msgQueue.size();
+ for (u32 i = 0; i < msgQueueSize; i++)
{
- switch (msgQueue.front().first)
- {
- // AGGH why is this not working
- case ERROR_LEVEL: // red
- m_log->SetDefaultStyle(wxTextAttr(wxColour(255, 0, 0), wxColour(0, 0, 0)));
- break;
- case WARNING_LEVEL: // yellow
- m_log->SetDefaultStyle(wxTextAttr(wxColour(255, 255, 0), wxColour(0, 0, 0)));
- break;
- case NOTICE_LEVEL: // green
- m_log->SetDefaultStyle(wxTextAttr(wxColour(0, 255, 0), wxColour(0, 0, 0)));
- break;
- case INFO_LEVEL: // cyan
- m_log->SetDefaultStyle(wxTextAttr(wxColour(0, 255, 255), wxColour(0, 0, 0)));
- break;
- case DEBUG_LEVEL: // light gray
- m_log->SetDefaultStyle(wxTextAttr(wxColour(211, 211, 211), wxColour(0, 0, 0)));
- break;
- default: // white
- m_log->SetDefaultStyle(wxTextAttr(wxColour(255, 255, 255), wxColour(0, 0, 0)));
- break;
- }
+ // FIXME This looks horrible on windows: SetForegroundColour changes
+ // ALL text in the control, and SetDefaultStyle doesn't work at all
+// switch (msgQueue.front().first)
+// {
+// // red
+// case ERROR_LEVEL:
+// m_log->SetForegroundColour(*wxRED);
+// break;
+// // yellow
+// case WARNING_LEVEL:
+// m_log->SetForegroundColour(wxColour(255, 255, 0));
+// break;
+// // green
+// case NOTICE_LEVEL:
+// m_log->SetForegroundColour(*wxGREEN);
+// break;
+// // cyan
+// case INFO_LEVEL:
+// m_log->SetForegroundColour(*wxCYAN);
+// break;
+// // light gray
+// case DEBUG_LEVEL:
+// m_log->SetForegroundColour(wxColour(211, 211, 211));
+// break;
+// // white
+// default:
+// m_log->SetForegroundColour(*wxWHITE);
+// break;
+// }
+
m_log->AppendText(msgQueue.front().second);
msgQueue.pop();
}
diff --git a/Source/Core/DolphinWX/Src/LogWindow.h b/Source/Core/DolphinWX/Src/LogWindow.h
index 70cc761f46..da1e6eabca 100644
--- a/Source/Core/DolphinWX/Src/LogWindow.h
+++ b/Source/Core/DolphinWX/Src/LogWindow.h
@@ -17,6 +17,7 @@
#ifndef LOGWINDOW_H_
#define LOGWINDOW_H_
+#include "Main.h" // for wxGetApp
#include "LogManager.h"
#include "IniFile.h"
#include <queue>
diff --git a/Source/Core/DolphinWX/Src/Main.cpp b/Source/Core/DolphinWX/Src/Main.cpp
index c3be403226..e5e3370798 100644
--- a/Source/Core/DolphinWX/Src/Main.cpp
+++ b/Source/Core/DolphinWX/Src/Main.cpp
@@ -42,7 +42,6 @@
#include "Globals.h" // Local
#include "Main.h"
-#include "Frame.h"
#include "ConfigManager.h"
#include "CodeWindow.h"
#include "LogWindow.h"
@@ -300,8 +299,12 @@ bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int /*Style*
(yes_no)?wxYES_NO:wxOK);
}
#endif
-//////////////////////////////////
+// Accessor for the main window class
+CFrame* DolphinApp::GetCFrame()
+{
+ return main_frame;
+}
// OK, this thread boundary is DANGEROUS on linux
// wxPostEvent / wxAddPendingEvent is the solution.
diff --git a/Source/Core/DolphinWX/Src/Main.h b/Source/Core/DolphinWX/Src/Main.h
index fe3f4457c0..f2d64d367f 100644
--- a/Source/Core/DolphinWX/Src/Main.h
+++ b/Source/Core/DolphinWX/Src/Main.h
@@ -18,15 +18,18 @@
#ifndef __MAIN_H_
#define __MAIN_H_
+#include "Frame.h"
+
// Define a new application
-class DolphinApp
- : public wxApp
+class CFrame;
+class DolphinApp : public wxApp
{
- public:
-
- bool OnInit();
- void OnEndSession();
+public:
+ bool OnInit();
+ void OnEndSession();
+ CFrame* GetCFrame();
};
+DECLARE_APP(DolphinApp);
#endif