source: src/advtabs/Debug.hpp @ 307

Revision 307, 5.3 KB checked in by Eoin, 12 years ago (diff)
RevLine 
[120]1
[268]2//         Copyright Eóin O'Callaghan 2006 - 2007.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
[120]7#pragma once
8
9#include "../stdAfx.hpp"
[127]10#include "../global/string_conv.hpp"
11#include "../global/logger.hpp"
12
[120]13#include "../DdxEx.hpp"
14#include "../Halite.hpp"
[132]15#include "../halEvent.hpp"
[120]16
17#include "../HaliteTabPage.hpp"
[122]18#include "../HaliteListManager.hpp"
[201]19#include "../HaliteDialogBase.hpp"
[129]20#include "../HaliteIni.hpp"
[124]21#include "../HaliteListViewCtrl.hpp"
[120]22
23class LogEdit : public CWindowImpl<LogEdit, CEdit>
24{
25public:
[148]26    BEGIN_MSG_MAP_EX(CEditImpl)
[120]27    END_MSG_MAP()
[148]28
[120]29        LogEdit() :
[129]30                editLogger(hal::wlog().attach(bind(&LogEdit::log, this, _1)))
[120]31        {}
[148]32
33        void log(const std::wstring& text)
[120]34        {
35                int len = ::SendMessage(m_hWnd, WM_GETTEXTLENGTH, 0, 0);
36                SetSel(len, len);
37                ReplaceSel(text.c_str(), false);
38        }
[148]39
[120]40private:
41        boost::signals::scoped_connection editLogger;
42};
43
44class LogList : public CWindowImpl<LogList, CListBox>
45{
46public:
[148]47    BEGIN_MSG_MAP_EX(CListBox)
[120]48    END_MSG_MAP()
[148]49
[120]50        LogList() :
[129]51                listLogger(hal::wlog().attach(bind(&LogList::log, this, _1)))
[120]52        {}
[148]53
54        void log(const std::wstring& text)
[120]55        {
56                AddString(text.c_str());
57        }
[148]58
[120]59private:
60        boost::signals::scoped_connection listLogger;
61};
62
[148]63class LogListViewCtrl :
[256]64        public CHaliteSortListViewCtrl<LogListViewCtrl>,
[129]65        public CHaliteIni<LogListViewCtrl>,
[124]66        private boost::noncopyable
67{
[129]68protected:
69        typedef CHaliteIni<LogListViewCtrl> iniClass;
[256]70        typedef CHaliteSortListViewCtrl<LogListViewCtrl> listClass;
[148]71
[129]72        friend class listClass;
[124]73
[151]74public: 
75        enum { 
[236]76                LISTVIEW_ID_MENU = 0,
[256]77                LISTVIEW_ID_COLUMNNAMES = 0,
78                LISTVIEW_ID_COLUMNWIDTHS = 0
[151]79        };
[148]80
81        BEGIN_MSG_MAP_EX(LogListViewCtrl)
[129]82                MSG_WM_DESTROY(OnDestroy)
[148]83
[256]84                CHAIN_MSG_MAP(listClass)
[124]85                DEFAULT_REFLECTION_HANDLER()
86        END_MSG_MAP()
[148]87
[129]88        LogListViewCtrl() :
[256]89                listClass(false, false, false),
[129]90                iniClass("listviews/eventLog", "LogListView")
[235]91        {
[256]92                std::vector<wstring> names;     
93                wstring column_names = hal::app().res_wstr(HAL_DEBUG_LISTVIEW_COLUMNS);
94
95                // "Time;Message;Severity"
96                boost::split(names, column_names, boost::is_any_of(L";"));
97               
98                array<int, 3> widths = {67,419,69};
99                array<int, 3> order = {0,1,2};
100                array<bool, 3> visible = {true,true,true};
101               
102                SetDefaults(names, widths, order, visible, true);
103               
[129]104                load();
105        }
[248]106       
[249]107        ~LogListViewCtrl()
[248]108        {
109                if (conn_.connected()) conn_.disconnect();
110        }
[148]111
[129]112        void saveSettings()
113        {
[151]114                GetListViewDetails();
[129]115                save();
[124]116        }
[148]117
[129]118    friend class boost::serialization::access;
119    template<class Archive>
120    void serialize(Archive& ar, const unsigned int version)
121    {
[256]122                ar & boost::serialization::make_nvp("listview", 
123                        boost::serialization::base_object<listClass>(*this));
[129]124    }
[148]125
[128]126        void operator()(shared_ptr<hal::EventDetail> event)
[148]127        {
128                int itemPos = AddItem(0, 0, lexical_cast<wstring>(event->timeStamp()).c_str(), 0);
129
[132]130                SetItemText(itemPos, 1, event->msg().c_str());
[127]131
[132]132                SetItemText(itemPos, 2,
133                        hal::Event::eventLevelToStr(event->level()).c_str());
[307]134                       
135                if (halite().logListLen() <= GetItemCount())
136                        DeleteItem(halite().logListLen());
[127]137        }
[148]138
[124]139        void saveStatus() {}
140        void updateListView() {}
141
142private:
[129]143        void OnAttach()
[256]144        {               
145                SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);
146                SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS);
147               
148                ApplyDetails();
149               
[248]150                conn_ = hal::event().attach(bind(&LogListViewCtrl::operator(), this, _1));
[129]151        }
[148]152
[129]153        void OnDestroy()
154        {
[248]155                conn_.disconnect();
[129]156                saveSettings();
157        }
158
[248]159        boost::signals::connection conn_;
[124]160};
161
[120]162class AdvDebugDialog :
163        public CHalTabPageImpl<AdvDebugDialog>,
164        public CDialogResize<AdvDebugDialog>,
[201]165        public CHaliteDialogBase<AdvDebugDialog>,
[132]166        public CWinDataExchangeEx<AdvDebugDialog>,
167        private boost::noncopyable
[120]168{
169protected:
170        typedef AdvDebugDialog thisClass;
171        typedef CHalTabPageImpl<AdvDebugDialog> baseClass;
172        typedef CDialogResize<AdvDebugDialog> resizeClass;
[201]173        typedef CHaliteDialogBase<AdvDebugDialog> dialogBaseClass;
[148]174
[120]175public:
[148]176        enum { IDD = IDD_ADVDEBUGLOG };
177
[240]178        AdvDebugDialog(HaliteWindow& halWindow) :
179                dialogBaseClass(halWindow)
[201]180        {}
181       
[120]182        BOOL PreTranslateMessage(MSG* pMsg)
183        {
184                return this->IsDialogMessage(pMsg);
185        }
[148]186
187        BEGIN_MSG_MAP_EX(thisClass)
[120]188                MSG_WM_INITDIALOG(onInitDialog)
[148]189                MSG_WM_CLOSE(onClose)
[141]190
191                COMMAND_ID_HANDLER_EX(IDC_DEBUGFILECHECK, onFileCheck)
192                COMMAND_ID_HANDLER_EX(IDC_DEBUGDEBUGCHECK, onDebugCheck)
[148]193
[120]194                if (uMsg == WM_FORWARDMSG)
195                        if (PreTranslateMessage((LPMSG)lParam)) return TRUE;
[148]196
[120]197                CHAIN_MSG_MAP(resizeClass)
198                CHAIN_MSG_MAP(baseClass)
[236]199                REFLECT_NOTIFICATIONS()
[120]200        END_MSG_MAP()
[148]201
[120]202        BOOL DoDataExchange(BOOL bSaveAndValidate = FALSE, UINT nCtlID = (UINT)-1);
203
204        BEGIN_DLGRESIZE_MAP(thisClass)
[124]205                DLGRESIZE_CONTROL(IDC_DEBUGLISTVIEW, DLSZ_SIZE_X|DLSZ_SIZE_Y)
[120]206                DLGRESIZE_CONTROL(IDC_DEBUGFILECHECK, DLSZ_MOVE_Y)
[129]207                DLGRESIZE_CONTROL(IDC_DEBUGDEBUGCHECK, DLSZ_MOVE_Y)
[120]208        END_DLGRESIZE_MAP()
[148]209
[120]210        LRESULT onInitDialog(HWND, LPARAM);
[148]211        void onClose();
212
[120]213        void onLoginCheck(UINT, int, HWND hWnd);
[141]214        void onFileCheck(UINT, int, HWND hWnd) { DoDataExchange(true); }
215        void onDebugCheck(UINT, int, HWND hWnd) { DoDataExchange(true); }
[148]216
[120]217        void onDebugOption(UINT, int, HWND);
[148]218
219protected:
[124]220        LogListViewCtrl logList;
[120]221        int debugLevel;
222};
Note: See TracBrowser for help on using the repository browser.