diff options
| author | John Peterson <jpeterson57@gmail.com> | 2008-10-20 07:39:40 +0000 |
|---|---|---|
| committer | John Peterson <jpeterson57@gmail.com> | 2008-10-20 07:39:40 +0000 |
| commit | f59ed4a8c9f0620c3ca27ddae337a2a75f510ee7 (patch) | |
| tree | 03ed867ec7cc2ae31a512ce9bdf1b03e63f586a7 /Source/Core | |
| parent | d7358df7fec828bccee3acb38c4e6f8a6260c0d7 (diff) | |
Some fixes for the log manager. Small change to breakpoint manager.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@918 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/HW/CommandProcessor.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/Core/Src/LogManager.cpp | 42 | ||||
| -rw-r--r-- | Source/Core/Core/Src/LogManager.h | 4 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/SignatureDB.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/DebuggerWX/Src/BreakpointWindow.cpp | 18 | ||||
| -rw-r--r-- | Source/Core/DebuggerWX/Src/Debugger.h | 1 | ||||
| -rw-r--r-- | Source/Core/DebuggerWX/Src/LogWindow.cpp | 172 | ||||
| -rw-r--r-- | Source/Core/DebuggerWX/Src/LogWindow.h | 2 |
8 files changed, 164 insertions, 79 deletions
diff --git a/Source/Core/Core/Src/HW/CommandProcessor.cpp b/Source/Core/Core/Src/HW/CommandProcessor.cpp index d88366e2f6..cbd0cd0bb1 100644 --- a/Source/Core/Core/Src/HW/CommandProcessor.cpp +++ b/Source/Core/Core/Src/HW/CommandProcessor.cpp @@ -426,7 +426,7 @@ void GatherPipeBursted() while (!(fifo.bFF_BPEnable && fifo.bFF_Breakpoint) && fifo.CPReadWriteDistance > (s32)fifo.CPHiWatermark)
//Common::SleepCurrentThread(1000); // 1s for test. We shouldn't fall here ever
ct++;
- if (ct) {LOG(COMMANDPROCESSOR, "(GatherPipeBursted): %lu cycle for nothing :[ ", ct);}
+ if (ct) {LOG(COMMANDPROCESSOR + 100, "(GatherPipeBursted): %lu cycle for nothing :[ ", ct);}
#ifdef _WIN32
diff --git a/Source/Core/Core/Src/LogManager.cpp b/Source/Core/Core/Src/LogManager.cpp index 781b41af23..6d146ead9c 100644 --- a/Source/Core/Core/Src/LogManager.cpp +++ b/Source/Core/Core/Src/LogManager.cpp @@ -46,7 +46,7 @@ void __Log(int log, const char *format, ...) }
CDebugger_Log::CDebugger_Log(const char* _szShortName, const char* _szName, int a) :
- m_bLogToFile(true),
+ m_bLogToFile(true), // write to file or not
m_bShowInLog(false),
m_bEnable(false),
m_pFile(NULL)
@@ -125,11 +125,12 @@ void LogManager::Init() m_nextMessages[i] = 0; // initiate to zero
}
+ // create the files
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
{
for (int j = 0; j <= LogManager::VERBOSITY_LEVELS; j++)
{
- m_Log[i]->Init();
+ m_Log[j*100 + i]->Init();
}
}
m_bInitialized = true;
@@ -180,15 +181,16 @@ std::string lastSymbol; void LogManager::Log(LogTypes::LOG_TYPE _type, const char *_fmt, ...)
{
// declarations
- int v = m_LogSettings->m_iVerbosity;
- int vv;
+ int v; // verbosity level
+ int type; // the log type, CONSOLE etc.
char cvv[20];
std::string svv;
- // get the current verbosity level
+ // get the current verbosity level and type
sprintf(cvv, "%03i", (int)_type);
svv = cvv;
- vv = atoi(svv.substr(0, 1).c_str());
+ v = atoi(svv.substr(0, 1).c_str());
+ type = atoi(svv.substr(1, 2).c_str());
// security checks
if (m_Log[_type] == NULL || !m_Log[_type]->m_bEnable || PC == 0
@@ -219,13 +221,13 @@ void LogManager::Log(LogTypes::LOG_TYPE _type, const char *_fmt, ...) // question again.
std::string symbol;
- if ((vv == 0 || vv == 1) && lastPC != PC)
+ if ((v == 0 || v == 1) && lastPC != PC && LogManager::m_LogSettings->bResolve)
{
symbol = g_symbolDB.GetDescription(PC);
lastSymbol = symbol;
lastPC = PC;
}
- else if(lastPC == PC)
+ else if(lastPC == PC && LogManager::m_LogSettings->bResolve)
{
symbol = lastSymbol;
}
@@ -243,7 +245,7 @@ void LogManager::Log(LogTypes::LOG_TYPE _type, const char *_fmt, ...) datetime.GetMinute(), datetime.GetSecond(), datetime.GetMillisecond(),
PowerPC::ppcState.DebugCount,
m_Log[_type]->m_szShortName_, // (CONSOLE etc)
- symbol.c_str(), PC, // (name, 0xaddress)
+ symbol.c_str(), PC, // current PC location (name, address)
Msg, eol);
}
@@ -251,29 +253,33 @@ void LogManager::Log(LogTypes::LOG_TYPE _type, const char *_fmt, ...) // Level 0 verbosity logs will be written to all verbosity levels. Given that logging is enabled
// for that level. Level 1 verbosity will only be written to level 1, 2, 3 and so on.
// ---------------
- int type = _type;
- for (int i = LogManager::VERBOSITY_LEVELS; i >= vv ; i--)
+ int id;
+ for (int i = LogManager::VERBOSITY_LEVELS; i >= v ; i--)
{
+ // prepare the right id
+ id = i*100 + type;
+
// write to memory
- m_Messages[i][m_nextMessages[i]].Set(_type, Msg2);
+ m_Messages[i][m_nextMessages[i]].Set((LogTypes::LOG_TYPE)id, Msg2);
// ----------------------------------------------------------------------------------------
// write to file
// ---------------
- if (m_Log[_type]->m_pFile && m_Log[_type]->m_bLogToFile)
- fprintf(m_Log[_type]->m_pFile, "%s", Msg2);
- if (m_Log[LogTypes::MASTER_LOG] && m_Log[LogTypes::MASTER_LOG]->m_pFile && m_Log[_type]->m_bShowInLog)
- fprintf(m_Log[LogTypes::MASTER_LOG]->m_pFile, "%s", Msg2);
+ if (m_Log[id]->m_pFile && m_Log[id]->m_bLogToFile)
+ fprintf(m_Log[id]->m_pFile, "%s", Msg2);
+ if (m_Log[i*100 + LogTypes::MASTER_LOG] && m_Log[i*100 + LogTypes::MASTER_LOG]->m_pFile
+ && LogManager::m_LogSettings->bWriteMaster)
+ fprintf(m_Log[i*100 + LogTypes::MASTER_LOG]->m_pFile, "%s", Msg2);
printf("%s", Msg2); // write to console screen
// this limits the memory space used for the memory logs to MAX_MESSAGES rows
m_nextMessages[i]++;
if (m_nextMessages[i] >= MAX_MESSAGES)
- m_nextMessages[i] = 0;
- m_bDirty = true;
+ m_nextMessages[i] = 0;
// ---------------
}
+ m_bDirty = true; // tell LogWindow that the log has been updated
}
bool IsLoggingActivated()
diff --git a/Source/Core/Core/Src/LogManager.h b/Source/Core/Core/Src/LogManager.h index 53ad50a6c3..1fbe2bdc57 100644 --- a/Source/Core/Core/Src/LogManager.h +++ b/Source/Core/Core/Src/LogManager.h @@ -51,6 +51,8 @@ struct CDebugger_Log struct CDebugger_LogSettings
{
int m_iVerbosity; // verbosity level 0 - 2
+ bool bResolve;
+ bool bWriteMaster;
// constructor
CDebugger_LogSettings();
@@ -93,7 +95,7 @@ public: m_szMessage[m_dwMsgLen] = 0;
m_type = _type;
- m_bInUse = true;
+ m_bInUse = true; // turn on this message line
}
//
static void Log(LogTypes::LOG_TYPE _type, const char *_fmt, ...);
diff --git a/Source/Core/Core/Src/PowerPC/SignatureDB.cpp b/Source/Core/Core/Src/PowerPC/SignatureDB.cpp index 5c955f8632..31d2323fd5 100644 --- a/Source/Core/Core/Src/PowerPC/SignatureDB.cpp +++ b/Source/Core/Core/Src/PowerPC/SignatureDB.cpp @@ -123,7 +123,7 @@ void SignatureDB::Apply(SymbolDB *symbol_db) if (iter->second.size == (unsigned int)function->size)
{
function->name = iter->second.name;
- LOG(HLE, "Found %s at %08x (size: %08x)!", iter->second.name.c_str(), function->address, function->size);
+ LOG(HLE + 100, "Found %s at %08x (size: %08x)!", iter->second.name.c_str(), function->address, function->size);
}
else
{
diff --git a/Source/Core/DebuggerWX/Src/BreakpointWindow.cpp b/Source/Core/DebuggerWX/Src/BreakpointWindow.cpp index 64f12ba3f6..7b9271ebef 100644 --- a/Source/Core/DebuggerWX/Src/BreakpointWindow.cpp +++ b/Source/Core/DebuggerWX/Src/BreakpointWindow.cpp @@ -299,7 +299,7 @@ CBreakPointWindow::OnAddMemoryCheckMany(wxCommandEvent& event) bool doCommon = false;
// ------------------------------------------------------------------------------------------
- // Decide if we have a range or just one address
+ // Decide if we have a range or just one address, and if we should break or not
// --------------
if (
pieces.size() == 1
@@ -311,6 +311,7 @@ CBreakPointWindow::OnAddMemoryCheckMany(wxCommandEvent& event) MemCheck.StartAddress = sAddress;
MemCheck.EndAddress = sAddress;
doCommon = true;
+ MemCheck.Break = false;
}
else if(
pieces.size() == 2
@@ -322,6 +323,19 @@ CBreakPointWindow::OnAddMemoryCheckMany(wxCommandEvent& event) MemCheck.StartAddress = sAddress;
MemCheck.EndAddress = eAddress;
doCommon = true;
+ MemCheck.Break = false;
+ }
+ else if(
+ pieces.size() == 3
+ && AsciiToHex(pieces[0].c_str(), sAddress) && AsciiToHex(pieces[1].c_str(), eAddress)
+ && pieces[0].size() == 8 && pieces[1].size() == 8 && pieces[2].size() == 1
+ )
+ {
+ // address range
+ MemCheck.StartAddress = sAddress;
+ MemCheck.EndAddress = eAddress;
+ doCommon = true;
+ MemCheck.Break = true;
}
if(doCommon)
@@ -330,7 +344,7 @@ CBreakPointWindow::OnAddMemoryCheckMany(wxCommandEvent& event) MemCheck.OnRead = true;
MemCheck.OnWrite = true;
MemCheck.Log = true;
- MemCheck.Break = false; // this is also what sets Active "on" in the breakpoint window
+ //MemCheck.Break = false; // this is also what sets Active "on" in the breakpoint window
// so don't think it's off because we are only writing this to the log
CBreakPoints::AddMemoryCheck(MemCheck);
}
diff --git a/Source/Core/DebuggerWX/Src/Debugger.h b/Source/Core/DebuggerWX/Src/Debugger.h index dd7bdce235..dcc71e40af 100644 --- a/Source/Core/DebuggerWX/Src/Debugger.h +++ b/Source/Core/DebuggerWX/Src/Debugger.h @@ -24,6 +24,7 @@ enum IDM_UPDATELOG,
IDM_CLEARLOG,
IDM_LOGCHECKS,
+ IDM_OPTIONS,
IDM_ENABLEALL,
IDM_RADIO0,
IDM_SUBMITCMD = 300,
diff --git a/Source/Core/DebuggerWX/Src/LogWindow.cpp b/Source/Core/DebuggerWX/Src/LogWindow.cpp index 69508c572f..67b250d481 100644 --- a/Source/Core/DebuggerWX/Src/LogWindow.cpp +++ b/Source/Core/DebuggerWX/Src/LogWindow.cpp @@ -36,6 +36,7 @@ BEGIN_EVENT_TABLE(CLogWindow, wxDialog) EVT_BUTTON(IDM_UPDATELOG, CLogWindow::OnUpdateLog)
EVT_BUTTON(IDM_CLEARLOG, CLogWindow::OnClear)
EVT_BUTTON(IDM_ENABLEALL, CLogWindow::OnEnableAll)
+ EVT_CHECKLISTBOX(IDM_OPTIONS, CLogWindow::OnOptionsCheck)
EVT_CHECKLISTBOX(IDM_LOGCHECKS, CLogWindow::OnLogCheck)
EVT_RADIOBOX(IDM_RADIO0, CLogWindow::OnRadioChange)
END_EVENT_TABLE()
@@ -52,18 +53,37 @@ CLogWindow::CLogWindow(wxWindow* parent) * 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);
+
+ wxStaticBoxSizer * m_optionsSizer = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Settings"));
+ m_options = new wxCheckListBox(this, IDM_OPTIONS, wxDefaultPosition, wxDefaultSize,
+ 0, NULL, wxNO_BORDER);
+ m_options->Append(wxT("Resolve symbols"));
+ m_options->Append(wxT("Write master"));
+ m_optionsSizer->Add(m_options, 0, 0, 0);
+
+ // I could not find any transparency setting and it would not automatically space correctly
+ m_options->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
+ m_options->SetMinSize(wxSize(m_options->GetSize().GetWidth() - 40,
+ m_options->GetCount() * 15));
+ for (int i = 0; i < m_options->GetCount(); ++i)
+ m_options->GetItem(i)->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
+
+ m_checks = new wxCheckListBox(this, IDM_LOGCHECKS, wxDefaultPosition, wxSize(120, 280));
+
+ // finally add it to the sizer
sizerLeft->Add(m_RadioBox[0], 0, wxGROW);
+ sizerLeft->Add(m_optionsSizer, 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_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"));
@@ -118,6 +138,12 @@ void CLogWindow::Load(IniFile& _IniFile) _IniFile.Get("LogWindow", "Verbosity", &v, m_RadioBox[0]->GetSelection());
m_RadioBox[0]->SetSelection(v);
LogManager::m_LogSettings->m_iVerbosity = v;
+
+ // load options
+ _IniFile.Get("LogWindow", "ResolveSymbols", &LogManager::m_LogSettings->bResolve, false);
+ _IniFile.Get("LogWindow", "WriteMaster", &LogManager::m_LogSettings->bWriteMaster, false);
+ m_options->Check(0, LogManager::m_LogSettings->bResolve);
+ m_options->Check(1, LogManager::m_LogSettings->bWriteMaster);
}
void CLogWindow::OnSubmit(wxCommandEvent& event)
@@ -138,6 +164,10 @@ void CLogWindow::OnClear(wxCommandEvent& event) }
}
+
+// ----------------------------------------------------------------------------------------
+// Enable or disable all boxes for the current verbosity level and save the changes.
+// -------------
void CLogWindow::OnEnableAll(wxCommandEvent& event)
{
if (!LogManager::m_Log[0])
@@ -159,7 +189,73 @@ void CLogWindow::OnEnableAll(wxCommandEvent& event) // ----------------------------------------------------------------------------------------
-// enable or disable logging groups
+// Append checkboxes and update checked groups.
+// -------------
+void CLogWindow::UpdateChecks()
+{
+ if (!LogManager::m_bInitialized)
+ {
+ 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)
+ m_checks->Show(false);
+
+ for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
+ {
+ m_checks->Append(wxString::FromAscii(LogManager::m_Log[i]->m_szName));
+ }
+
+ m_checks->Show(true);
+ }
+
+ // ----------------------------------------------------------------------------------------
+ // Load the correct values and enable/disable the right groups
+ // -------------
+ int v = LogManager::m_LogSettings->m_iVerbosity;
+ IniFile ini;
+ ini.Load("Debugger.ini");
+
+ for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
+ {
+ for (int j = 0; j <= LogManager::VERBOSITY_LEVELS; j++)
+ {
+ bool Enabled = false;
+ ini.Get("LogManager", LogManager::m_Log[i + j*100]->m_szShortName, &Enabled, false);
+
+ m_checks->Check(i, Enabled);
+
+ LogManager::m_Log[i + j*100]->m_bEnable = Enabled;
+ LogManager::m_Log[i + j*100]->m_bShowInLog = Enabled;
+ }
+ }
+
+ m_bCheckDirty = true;
+}
+
+
+// ----------------------------------------------------------------------------------------
+// When an option is changed
+// ---------------
+void CLogWindow::OnOptionsCheck(wxCommandEvent& event)
+{
+ IniFile ini;
+ ini.Load("Debugger.ini");
+ LogManager::m_LogSettings->bResolve = m_options->IsChecked(0);
+ LogManager::m_LogSettings->bWriteMaster = m_options->IsChecked(1);
+ ini.Set("LogWindow", "ResolveSymbols", m_options->IsChecked(0));
+ ini.Set("LogWindow", "WriteMaster", m_options->IsChecked(1));
+ ini.Save("Debugger.ini");
+ if (Core::GetState() != Core::CORE_UNINITIALIZED) UpdateLog();
+}
+
+
+// ----------------------------------------------------------------------------------------
+// When a checkbox is changed
// ---------------
void CLogWindow::OnLogCheck(wxCommandEvent& event)
{
@@ -188,8 +284,9 @@ void CLogWindow::OnLogCheck(wxCommandEvent& event) if (Core::GetState() != Core::CORE_UNINITIALIZED) UpdateLog();
}
+
// ----------------------------------------------------------------------------------------
-// Change verbosity level
+// When the verbosity level is changed
// -------------
void CLogWindow::OnRadioChange(wxCommandEvent& event)
{
@@ -203,6 +300,8 @@ void CLogWindow::OnRadioChange(wxCommandEvent& event) ini.Set("LogWindow", "Verbosity", v);
ini.Save("Debugger.ini");
+ // This check is because we allow this to be changed before a game has been loaded so
+ // that the boxes do not exist yet
if (Core::GetState() != Core::CORE_UNINITIALIZED)
{
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
@@ -220,56 +319,9 @@ void CLogWindow::OnRadioChange(wxCommandEvent& event) }
-// ----------------------------------------------------------------------------------------
-// Update checked groups.
-// -------------
-void CLogWindow::UpdateChecks()
-{
- if (!LogManager::m_bInitialized)
- {
- 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)
- m_checks->Show(false);
-
- for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
- {
- m_checks->Append(wxString::FromAscii(LogManager::m_Log[i]->m_szName));
- }
-
- m_checks->Show(true);
- }
-
- // ----------------------------------------------------------------------------------------
- // Load the correct values
- // -------------
- int v = LogManager::m_LogSettings->m_iVerbosity;
- IniFile 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 + v*100]->m_szShortName, &Enabled, false);
-
- m_checks->Check(i, Enabled);
-
- LogManager::m_Log[i]->m_bEnable = Enabled;
- LogManager::m_Log[i]->m_bShowInLog = Enabled;
- }
-
- m_bCheckDirty = true;
-}
-
-
void CLogWindow::OnUpdateLog(wxCommandEvent& event)
{
- if (Core::GetState() != Core::CORE_UNINITIALIZED) NotifyUpdate();
+ if (Core::GetState() != Core::CORE_UNINITIALIZED) UpdateLog();
}
@@ -286,14 +338,17 @@ void CLogWindow::UpdateLog() int v = LogManager::m_LogSettings->m_iVerbosity;
int i = LogManager::m_nextMessages[v];
+ // check if the the log has been updated (ie if it's dirty)
if ((last == i) && !m_bCheckDirty)
{
return;
}
-
m_bCheckDirty = false;
last = i;
- //bash together a log buffer really fast (no slow strcpy here, just memcpys)
+
+ // ----------------------------------------------------------------------------------------
+ // Prepare a selection of the memory log to show to screen
+ // ---------------
int count = 0;
char* p = m_logBuffer;
@@ -303,14 +358,17 @@ void CLogWindow::UpdateLog() count++;
const LogManager::SMessage& message = LogManager::m_Messages[v][i];
- if (message.m_bInUse)
+ if (message.m_bInUse) // check if the line has a value
{
int len = message.m_dwMsgLen;
+ // this is what we use, I'm not sure why we have this option
if (LogManager::m_activeLog == LogTypes::MASTER_LOG)
{
+ // only show checkboxed logs
if (LogManager::m_Log[message.m_type]->m_bShowInLog)
{
+ // memcpy is faster than strcpy
memcpy(p, message.m_szMessage, len);
p += len;
}
@@ -332,10 +390,12 @@ void CLogWindow::UpdateLog() i = 0;
}
}
+ // ---------------
*p = 0; //end the string
m_log->SetValue(wxString::FromAscii(m_logBuffer));
m_log->SetInsertionPoint(p - m_logBuffer - 1);
+ m_log->ShowPosition( m_log->GetLastPosition()); // show last line
}
diff --git a/Source/Core/DebuggerWX/Src/LogWindow.h b/Source/Core/DebuggerWX/Src/LogWindow.h index ab65e3aa0c..cd1ead4719 100644 --- a/Source/Core/DebuggerWX/Src/LogWindow.h +++ b/Source/Core/DebuggerWX/Src/LogWindow.h @@ -39,12 +39,14 @@ class CLogWindow char m_logBuffer[LogBufferSize];
wxTextCtrl* m_log, * m_cmdline;
wxCheckListBox* m_checks;
+ wxCheckListBox* m_options;
wxRadioBox *m_RadioBox[1]; // radio boxes
bool m_bCheckDirty;
DECLARE_EVENT_TABLE()
void OnSubmit(wxCommandEvent& event);
void OnUpdateLog(wxCommandEvent& event);
+ void OnOptionsCheck(wxCommandEvent& event);
void OnLogCheck(wxCommandEvent& event);
void OnRadioChange(wxCommandEvent& event); // verbosity buttons
void OnClear(wxCommandEvent& event);
|
