/*
* crakter [at] gmail [dot] com
*/
#if !defined(DEBUGFRAME_H)
#define DEBUGFRAME_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define HUB_COMMAND_MESSAGE_MAP 15
#define CLIENT_COMMAND_MESSAGE_MAP 16
#define DEBUG_FILTER_MESSAGE_MAP 17
#define DEBUG_FILTER_TEXT_MESSAGE_MAP 18
#define CLEAR_MESSAGE_MAP 19
#include "FlatTabCtrl.h"
#include "WinUtil.h"
#include "../client/DebugManager.h"
class DebugFrame : private DebugManagerListener, public MDITabChildWindowImpl<DebugFrame>, public StaticFrame<DebugFrame, ResourceManager::DEBUG_FRAME>
{
public:
DECLARE_FRAME_WND_CLASS_EX(_T("DebugFrame"), IDR_DEBUG_FRAME, 0, COLOR_3DFACE);
DebugFrame() : closed(false), showHubCommands(false), showClientCommands(false), bFilterIp(false),
hubContainer(WC_BUTTON, this, HUB_COMMAND_MESSAGE_MAP),
clientContainer(WC_BUTTON, this, CLIENT_COMMAND_MESSAGE_MAP),
cFilterContainer(WC_BUTTON, this, DEBUG_FILTER_MESSAGE_MAP),
eFilterContainer(WC_EDIT, this, DEBUG_FILTER_TEXT_MESSAGE_MAP),
clearContainer(WC_BUTTON, this, CLEAR_MESSAGE_MAP),
statusContainer(STATUSCLASSNAME, this, CLEAR_MESSAGE_MAP)
{
DebugManager::getInstance()->addListener(this);
}
virtual ~DebugFrame() { }
typedef MDITabChildWindowImpl<DebugFrame> baseClass;
BEGIN_MSG_MAP(DebugFrame)
MESSAGE_HANDLER(WM_SETFOCUS, OnFocus)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_CLOSE, onClose)
MESSAGE_HANDLER(WM_CTLCOLOREDIT, onCtlColor)
MESSAGE_HANDLER(WM_CTLCOLORSTATIC, onCtlColor)
CHAIN_MSG_MAP(baseClass)
ALT_MSG_MAP(HUB_COMMAND_MESSAGE_MAP)
MESSAGE_HANDLER(BM_SETCHECK, onSetCheckHubCommand)
ALT_MSG_MAP(CLIENT_COMMAND_MESSAGE_MAP)
MESSAGE_HANDLER(BM_SETCHECK, onSetCheckClientCommand)
ALT_MSG_MAP(DEBUG_FILTER_MESSAGE_MAP)
MESSAGE_HANDLER(BM_SETCHECK, onSetCheckFilter)
ALT_MSG_MAP(DEBUG_FILTER_TEXT_MESSAGE_MAP)
COMMAND_HANDLER(IDC_DEBUG_FILTER_TEXT, EN_CHANGE, onChange)
ALT_MSG_MAP(CLEAR_MESSAGE_MAP)
COMMAND_ID_HANDLER(IDC_CLEAR, onClear)
END_MSG_MAP()
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);
LRESULT onClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);
LRESULT onClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
void UpdateLayout(BOOL bResizeBars = TRUE);
LRESULT onCtlColor(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
HWND hWnd = (HWND)lParam;
HDC hDC = (HDC)wParam;
if(hWnd == ctrlPad.m_hWnd) {
::SetBkColor(hDC, WinUtil::bgColor);
::SetTextColor(hDC, WinUtil::textColor);
return (LRESULT)WinUtil::bgBrush;
}
bHandled = FALSE;
return FALSE;
};
LRESULT OnFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) {
ctrlPad.SetFocus();
return 0;
}
LRESULT onSetCheckHubCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) {
showHubCommands = wParam == BST_CHECKED;
bHandled = FALSE;
return 0;
}
LRESULT onSetCheckClientCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) {
showClientCommands = wParam == BST_CHECKED;
bHandled = FALSE;
return 0;
}
LRESULT onSetCheckFilter(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) {
bFilterIp = wParam == BST_CHECKED;
UpdateLayout();
bHandled = FALSE;
return 0;
}
LRESULT onChange(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
AutoArray<TCHAR> buf(ctrlFilterText.GetWindowTextLength() + 1);
ctrlFilterText.GetWindowText(buf, ctrlFilterText.GetWindowTextLength() + 1);
sFilterIp = buf;
UpdateLayout();
return 0;
}
void addLine(const tstring& aLine);
private:
CEdit ctrlPad, ctrlFilterText;
CStatusBarCtrl ctrlStatus;
CButton ctrlClear, ctrlHubCommands, ctrlClientCommands, ctrlFilterIp;
CContainedWindow clearContainer, statusContainer, hubContainer, clientContainer, cFilterContainer, eFilterContainer;
bool showHubCommands, showClientCommands, bFilterIp;
tstring sFilterIp;
CriticalSection cs;
bool closed;
void on(DebugManagerListener::DebugCommand, const string& aLine, int typeDir, const string& theip) throw() {
tstring ip = Text::toT(theip);
tstring message = Text::toT(aLine);
switch(typeDir) {
case DebugManager::HUB_IN:
if((!bFilterIp || ip == sFilterIp) && showHubCommands) {
addLine(_T("[") + Util::getShortTimeString() + _T("] Hub:\t[") + ip + _T("]\t IN \t") + message + _T("|"));
}
break;
case DebugManager::HUB_OUT:
if((!bFilterIp || ip == sFilterIp) && showHubCommands) {
addLine(_T("[") + Util::getShortTimeString() + _T("] Hub:\t[") + ip + _T("]\t OUT \t") + message);
}
break;
case DebugManager::CLIENT_IN:
if((!bFilterIp || ip == sFilterIp) && showClientCommands) {
addLine(_T("[") + Util::getShortTimeString() + _T("] Client:\t[") + ip + _T("]\t IN \t") + message + _T("|"));
}
break;
case DebugManager::CLIENT_OUT:
if((!bFilterIp || ip == sFilterIp) && showClientCommands) {
addLine(_T("[") + Util::getShortTimeString() + _T("] Client:\t[") + ip + _T("]\t OUT \t") + message);
}
break;
default: dcassert(0);
}
}
};
#endif // !defined(DEBUGFRAME_H)
/**
* @file
* $Id: DebugFrame.h 106 2006-10-26 20:18:17Z crakter $
*/