summaryrefslogtreecommitdiff
path: root/Source/Core/DebuggerWX/Src/LogWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DebuggerWX/Src/LogWindow.cpp')
-rw-r--r--Source/Core/DebuggerWX/Src/LogWindow.cpp131
1 files changed, 104 insertions, 27 deletions
diff --git a/Source/Core/DebuggerWX/Src/LogWindow.cpp b/Source/Core/DebuggerWX/Src/LogWindow.cpp
index 7e23dbf19b..69508c572f 100644
--- a/Source/Core/DebuggerWX/Src/LogWindow.cpp
+++ b/Source/Core/DebuggerWX/Src/LogWindow.cpp
@@ -23,16 +23,21 @@
#include <wx/listbox.h>
#include <wx/checklst.h>
+#include "Core.h" // for Core::GetState()
#include "LogWindow.h"
#include "Console.h"
#include "IniFile.h"
+// declare this now to be able to use it in Load()
+CDebugger_LogSettings* LogManager::m_LogSettings;
+
BEGIN_EVENT_TABLE(CLogWindow, wxDialog)
EVT_BUTTON(IDM_SUBMITCMD, CLogWindow::OnSubmit)
EVT_BUTTON(IDM_UPDATELOG, CLogWindow::OnUpdateLog)
EVT_BUTTON(IDM_CLEARLOG, CLogWindow::OnClear)
EVT_BUTTON(IDM_ENABLEALL, CLogWindow::OnEnableAll)
EVT_CHECKLISTBOX(IDM_LOGCHECKS, CLogWindow::OnLogCheck)
+ EVT_RADIOBOX(IDM_RADIO0, CLogWindow::OnRadioChange)
END_EVENT_TABLE()
@@ -40,11 +45,24 @@ CLogWindow::CLogWindow(wxWindow* parent)
: wxDialog(parent, wxID_ANY, _T("Log/Console"), wxPoint(100, 700), wxSize(800, 270),
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
- wxBoxSizer* sizerTop = new wxBoxSizer(wxHORIZONTAL),
- * sizerUber = new wxBoxSizer(wxHORIZONTAL),
- * sizerBig = new wxBoxSizer(wxVERTICAL),
- * sizerBottom = new wxBoxSizer(wxHORIZONTAL);
+ wxBoxSizer* sizerTop = new wxBoxSizer(wxHORIZONTAL), // buttons
+ * sizerUber = new wxBoxSizer(wxHORIZONTAL), // whole plane
+ * sizerBig = new wxBoxSizer(wxVERTICAL), // RIGHT sizer
+ * sizerBottom = new wxBoxSizer(wxHORIZONTAL), // submit row
+ * sizerLeft = new wxBoxSizer(wxVERTICAL); // LEFT sizer
+
+ // left checkboxes and radio boxes -----------------------------------
+ m_checks = new wxCheckListBox(this, IDM_LOGCHECKS, wxDefaultPosition, wxSize(120, 280));
+
+ int m_radioBoxNChoices[1];
+ wxString m_radioBoxChoices0[] = { wxT("0"), wxT("1"), wxT("2"), wxT("3") };
+ m_radioBoxNChoices[0] = sizeof( m_radioBoxChoices0 ) / sizeof( wxString );
+ m_RadioBox[0] = new wxRadioBox( this, IDM_RADIO0, wxT("Verbosity"),
+ wxDefaultPosition, wxDefaultSize, m_radioBoxNChoices[0], m_radioBoxChoices0, 1, wxRA_SPECIFY_ROWS);
+ sizerLeft->Add(m_RadioBox[0], 0, wxGROW);
+ sizerLeft->Add(m_checks, 1, wxGROW);
+ // right windows -----------------------------------------------------
m_log = new wxTextCtrl(this, IDM_LOG, _T(""), wxDefaultPosition, wxSize(600, 120), wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
m_cmdline = new wxTextCtrl(this, wxID_ANY, _T(""), wxDefaultPosition);
wxButton* btn = new wxButton(this, IDM_SUBMITCMD, _T("Submit"));
@@ -52,7 +70,7 @@ CLogWindow::CLogWindow(wxWindow* parent)
sizerTop->Add(new wxButton(this, IDM_UPDATELOG, _T("Update")));
sizerTop->Add(new wxButton(this, IDM_CLEARLOG, _T("Clear")));
sizerTop->Add(new wxButton(this, IDM_ENABLEALL, _T("Enable all")));
- m_checks = new wxCheckListBox(this, IDM_LOGCHECKS, wxDefaultPosition, wxSize(120, 280));
+
sizerBottom->Add(m_cmdline, 8, wxGROW | wxRIGHT, 5);
sizerBottom->Add(btn, 1, wxGROW, 0);
@@ -60,12 +78,15 @@ CLogWindow::CLogWindow(wxWindow* parent)
sizerBig->Add(m_log, 1, wxGROW | wxSHRINK);
sizerBig->Add(sizerBottom, 0, wxGROW);
- sizerUber->Add(m_checks, 0, wxGROW);
+ sizerUber->Add(sizerLeft, 0, wxGROW);
sizerUber->Add(sizerBig, 1, wxGROW);
SetSizer(sizerUber);
SetAffirmativeId(IDM_SUBMITCMD);
+ // declare this now to be able to use it in Load()
+ LogManager::m_LogSettings = new CDebugger_LogSettings;
+
//sizerTop->SetSizeHints(this);
//sizerTop->Fit(this);
UpdateChecks();
@@ -91,6 +112,12 @@ void CLogWindow::Load(IniFile& _IniFile)
_IniFile.Get("LogWindow", "w", &w, GetSize().GetWidth());
_IniFile.Get("LogWindow", "h", &h, GetSize().GetHeight());
SetSize(x, y, w, h);
+
+ // load verbosity setting
+ int v;
+ _IniFile.Get("LogWindow", "Verbosity", &v, m_RadioBox[0]->GetSelection());
+ m_RadioBox[0]->SetSelection(v);
+ LogManager::m_LogSettings->m_iVerbosity = v;
}
void CLogWindow::OnSubmit(wxCommandEvent& event)
@@ -103,9 +130,12 @@ void CLogWindow::OnSubmit(wxCommandEvent& event)
void CLogWindow::OnClear(wxCommandEvent& event)
{
- LogManager::Clear();
- LOG(MASTER_LOG, "(log cleared).");
- NotifyUpdate();
+ if (Core::GetState() != Core::CORE_UNINITIALIZED) // avoid crash
+ {
+ LogManager::Clear();
+ LOG(MASTER_LOG, "(log cleared).");
+ NotifyUpdate();
+ }
}
void CLogWindow::OnEnableAll(wxCommandEvent& event)
@@ -113,20 +143,24 @@ void CLogWindow::OnEnableAll(wxCommandEvent& event)
if (!LogManager::m_Log[0])
return;
static bool enable = true;
+ int v = LogManager::m_LogSettings->m_iVerbosity;
IniFile ini;
- ini.Load("Dolphin.ini");
+ ini.Load("Debugger.ini");
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
{
m_checks->Check(i, enable);
- LogManager::m_Log[i]->m_bEnable = enable;
- LogManager::m_Log[i]->m_bShowInLog = enable;
- ini.Set("LogManager", LogManager::m_Log[i]->m_szShortName, enable);
+ LogManager::m_Log[i + v*100]->m_bEnable = enable;
+ LogManager::m_Log[i + v*100]->m_bShowInLog = enable;
+ ini.Set("LogManager", LogManager::m_Log[i + v*100]->m_szShortName, enable);
}
- ini.Save("Dolphin.ini");
+ ini.Save("Debugger.ini");
enable = !enable;
}
+// ----------------------------------------------------------------------------------------
+// enable or disable logging groups
+// ---------------
void CLogWindow::OnLogCheck(wxCommandEvent& event)
{
if (!LogManager::m_bInitialized)
@@ -135,24 +169,60 @@ void CLogWindow::OnLogCheck(wxCommandEvent& event)
}
IniFile ini;
- ini.Load("Dolphin.ini");
+ ini.Load("Debugger.ini");
+ int v = LogManager::m_LogSettings->m_iVerbosity;
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
{
+ // update groups to enabled or disabled
bool Enabled = m_checks->IsChecked(i);
- LogManager::m_Log[i]->m_bEnable = Enabled;
- LogManager::m_Log[i]->m_bShowInLog = Enabled;
+ LogManager::m_Log[i + 100*v]->m_bEnable = Enabled;
+ LogManager::m_Log[i + 100*v]->m_bShowInLog = Enabled;
- ini.Set("LogManager", LogManager::m_Log[i]->m_szShortName, Enabled);
+ ini.Set("LogManager", LogManager::m_Log[i + 100*v]->m_szShortName, Enabled);
}
- ini.Save("Dolphin.ini");
+ ini.Save("Debugger.ini");
m_bCheckDirty = true;
- UpdateLog();
+ if (Core::GetState() != Core::CORE_UNINITIALIZED) UpdateLog();
}
+// ----------------------------------------------------------------------------------------
+// Change verbosity level
+// -------------
+void CLogWindow::OnRadioChange(wxCommandEvent& event)
+{
+ // get selection
+ int v = m_RadioBox[0]->GetSelection();
+
+ // save it
+ LogManager::m_LogSettings->m_iVerbosity = v;
+ IniFile ini;
+ ini.Load("Debugger.ini");
+ ini.Set("LogWindow", "Verbosity", v);
+ ini.Save("Debugger.ini");
+
+ if (Core::GetState() != Core::CORE_UNINITIALIZED)
+ {
+ for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
+ {
+ // update groups to enabled or disabled
+ bool Enabled;
+ ini.Get("LogManager", LogManager::m_Log[i + 100*v]->m_szShortName, &Enabled, false);
+ LogManager::m_Log[i + 100*v]->m_bEnable = Enabled;
+ LogManager::m_Log[i + 100*v]->m_bShowInLog = Enabled;
+ m_checks->Check(i, Enabled);
+ }
+
+ UpdateLog();
+ }
+}
+
+// ----------------------------------------------------------------------------------------
+// Update checked groups.
+// -------------
void CLogWindow::UpdateChecks()
{
if (!LogManager::m_bInitialized)
@@ -160,9 +230,11 @@ void CLogWindow::UpdateChecks()
return;
}
+ // This is only run once to append checkboxes to the wxCheckListBox.
if (m_checks->GetCount() == 0)
{
- // [F|RES] hide the window while we fill it... wxwidgets gets trouble if you don't do it (at least the win version)
+ // [F|RES] hide the window while we fill it... wxwidgets gets trouble if you don't do it
+ // (at least the win version)
m_checks->Show(false);
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
@@ -173,13 +245,17 @@ void CLogWindow::UpdateChecks()
m_checks->Show(true);
}
+ // ----------------------------------------------------------------------------------------
+ // Load the correct values
+ // -------------
+ int v = LogManager::m_LogSettings->m_iVerbosity;
IniFile ini;
- ini.Load("Dolphin.ini");
+ ini.Load("Debugger.ini");
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
{
bool Enabled = false;
- ini.Get("LogManager", LogManager::m_Log[i]->m_szShortName, &Enabled, false);
+ ini.Get("LogManager", LogManager::m_Log[i + v*100]->m_szShortName, &Enabled, false);
m_checks->Check(i, Enabled);
@@ -188,13 +264,12 @@ void CLogWindow::UpdateChecks()
}
m_bCheckDirty = true;
- UpdateLog();
}
void CLogWindow::OnUpdateLog(wxCommandEvent& event)
{
- NotifyUpdate();
+ if (Core::GetState() != Core::CORE_UNINITIALIZED) NotifyUpdate();
}
@@ -208,7 +283,8 @@ void CLogWindow::NotifyUpdate()
void CLogWindow::UpdateLog()
{
static int last = -1;
- int i = LogManager::m_nextMessages;
+ int v = LogManager::m_LogSettings->m_iVerbosity;
+ int i = LogManager::m_nextMessages[v];
if ((last == i) && !m_bCheckDirty)
{
@@ -221,10 +297,11 @@ void CLogWindow::UpdateLog()
int count = 0;
char* p = m_logBuffer;
+ // go through all rows
while (count < MAX_MESSAGES)
{
count++;
- const LogManager::SMessage& message = LogManager::m_Messages[i];
+ const LogManager::SMessage& message = LogManager::m_Messages[v][i];
if (message.m_bInUse)
{