1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\r
8 #include "registry.h"
\r
9 #include "windowstool.h"
\r
10 #include "msgstream.h"
\r
11 #include "layoutmanager.h"
\r
13 #include <windowsx.h>
\r
17 class DlgLog : public LayoutManager
\r
19 HWND m_hwndEdit; ///
\r
20 HWND m_hwndTaskTray; /// tasktray window
\r
22 HFONT m_hfontOriginal; ///
\r
24 tomsgstream *m_log; ///
\r
29 : LayoutManager(i_hwnd),
\r
30 m_hwndEdit(GetDlgItem(m_hwnd, IDC_EDIT_log)),
\r
31 m_hwndTaskTray(NULL),
\r
32 m_hfontOriginal(GetWindowFont(m_hwnd)),
\r
37 BOOL wmInitDialog(HWND /* i_focus */, LPARAM i_lParam) {
\r
38 DlgLogData *dld = reinterpret_cast<DlgLogData *>(i_lParam);
\r
40 m_hwndTaskTray = dld->m_hwndTaskTray;
\r
43 setSmallIcon(m_hwnd, IDI_ICON_mayu);
\r
44 setBigIcon(m_hwnd, IDI_ICON_mayu);
\r
47 Registry::read(MAYU_REGISTRY_ROOT, _T("logFont"), &m_lf,
\r
48 loadString(IDS_logFont));
\r
49 m_hfont = CreateFontIndirect(&m_lf);
\r
50 SetWindowFont(m_hwndEdit, m_hfont, false);
\r
54 CHECK_TRUE( GetClientRect(m_hwnd, &rc) );
\r
55 wmSize(0, (short)rc.right, (short)rc.bottom);
\r
59 (IsDlgButtonChecked(m_hwnd, IDC_CHECK_detail) == BST_CHECKED);
\r
60 m_log->setDebugLevel(isChecked ? 1 : 0);
\r
62 // set layout manager
\r
63 typedef LayoutManager LM;
\r
64 addItem(GetDlgItem(m_hwnd, IDOK),
\r
65 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE,
\r
66 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE);
\r
67 addItem(GetDlgItem(m_hwnd, IDC_EDIT_log),
\r
68 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_TOP_EDGE,
\r
69 LM::ORIGIN_RIGHT_EDGE, LM::ORIGIN_BOTTOM_EDGE);
\r
70 addItem(GetDlgItem(m_hwnd, IDC_BUTTON_clearLog),
\r
71 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE,
\r
72 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE);
\r
73 addItem(GetDlgItem(m_hwnd, IDC_BUTTON_changeFont),
\r
74 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE,
\r
75 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE);
\r
76 addItem(GetDlgItem(m_hwnd, IDC_CHECK_detail),
\r
77 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE,
\r
78 LM::ORIGIN_LEFT_EDGE, LM::ORIGIN_BOTTOM_EDGE);
\r
79 restrictSmallestSize();
\r
82 GetWindowRect(m_hwnd, &rc);
\r
83 rc.bottom += (rc.bottom - rc.top) * 3;
\r
84 MoveWindow(m_hwnd, rc.left, rc.top,
\r
85 rc.right - rc.left, rc.bottom - rc.top, true);
\r
92 SetWindowFont(m_hwndEdit, m_hfontOriginal, false);
\r
93 DeleteObject(m_hfont);
\r
96 unsetBigIcon(m_hwnd);
\r
97 unsetSmallIcon(m_hwnd);
\r
103 ShowWindow(m_hwnd, SW_HIDE);
\r
108 BOOL wmCommand(int /* i_notifyCode */, int i_id, HWND /* i_hwndControl */) {
\r
111 ShowWindow(m_hwnd, SW_HIDE);
\r
115 case IDC_BUTTON_clearLog: {
\r
116 Edit_SetSel(m_hwndEdit, 0, Edit_GetTextLength(m_hwndEdit));
\r
117 Edit_ReplaceSel(m_hwndEdit, _T(""));
\r
118 SendMessage(m_hwndTaskTray, WM_APP_dlglogNotify,
\r
119 DlgLogNotify_logCleared, 0);
\r
123 case IDC_BUTTON_changeFont: {
\r
125 memset(&cf, 0, sizeof(cf));
\r
126 cf.lStructSize = sizeof(cf);
\r
127 cf.hwndOwner = m_hwnd;
\r
128 cf.lpLogFont = &m_lf;
\r
129 cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
\r
130 if (ChooseFont(&cf)) {
\r
131 HFONT hfontNew = CreateFontIndirect(&m_lf);
\r
132 SetWindowFont(m_hwnd, hfontNew, true);
\r
133 DeleteObject(m_hfont);
\r
134 m_hfont = hfontNew;
\r
135 Registry::write(MAYU_REGISTRY_ROOT, _T("logFont"), m_lf);
\r
140 case IDC_CHECK_detail: {
\r
142 (IsDlgButtonChecked(m_hwnd, IDC_CHECK_detail) == BST_CHECKED);
\r
143 m_log->setDebugLevel(isChecked ? 1 : 0);
\r
154 INT_PTR CALLBACK dlgLog_dlgProc(HWND i_hwnd, UINT i_message,
\r
156 BOOL CALLBACK dlgLog_dlgProc(HWND i_hwnd, UINT i_message,
\r
158 WPARAM i_wParam, LPARAM i_lParam)
\r
161 getUserData(i_hwnd, &wc);
\r
163 switch (i_message) {
\r
164 case WM_INITDIALOG:
\r
165 wc = setUserData(i_hwnd, new DlgLog(i_hwnd));
\r
166 return wc->wmInitDialog(reinterpret_cast<HWND>(i_wParam), i_lParam);
\r
169 switch (i_message) {
\r
171 return wc->wmCommand(HIWORD(i_wParam), LOWORD(i_wParam),
\r
172 reinterpret_cast<HWND>(i_lParam));
\r
174 return wc->wmClose();
\r
176 return wc->wmDestroy();
\r
181 return wc->defaultWMHandler(i_message, i_wParam, i_lParam);
\r