source: src/advtabs/Debug.hpp @ 268

Revision 268, 5.2 KB checked in by Eoin, 12 years ago (diff)

Added copyright eventually.

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