OSDN Git Service

invoke yamy{64,32} and yamyd32 from same directory of yamy.exe instead of current...
[yamy/yamy.git] / dlglog.cpp
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
2 // dlglog.cpp\r
3 \r
4 \r
5 #include "misc.h"\r
6 #include "mayu.h"\r
7 #include "mayurc.h"\r
8 #include "registry.h"\r
9 #include "windowstool.h"\r
10 #include "msgstream.h"\r
11 #include "layoutmanager.h"\r
12 #include "dlglog.h"\r
13 #include <windowsx.h>\r
14 \r
15 \r
16 ///\r
17 class DlgLog : public LayoutManager\r
18 {\r
19         HWND m_hwndEdit;                                ///\r
20         HWND m_hwndTaskTray;                            /// tasktray window\r
21         LOGFONT m_lf;                                   ///\r
22         HFONT m_hfontOriginal;                  ///\r
23         HFONT m_hfont;                          ///\r
24         tomsgstream *m_log;                             ///\r
25 \r
26 public:\r
27         ///\r
28         DlgLog(HWND i_hwnd)\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
33                         m_hfont(NULL) {\r
34         }\r
35 \r
36         /// WM_INITDIALOG\r
37         BOOL wmInitDialog(HWND /* i_focus */, LPARAM i_lParam) {\r
38                 DlgLogData *dld = reinterpret_cast<DlgLogData *>(i_lParam);\r
39                 m_log = dld->m_log;\r
40                 m_hwndTaskTray = dld->m_hwndTaskTray;\r
41 \r
42                 // set icons\r
43                 setSmallIcon(m_hwnd, IDI_ICON_mayu);\r
44                 setBigIcon(m_hwnd, IDI_ICON_mayu);\r
45 \r
46                 // set font\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
51 \r
52                 // resize\r
53                 RECT rc;\r
54                 CHECK_TRUE( GetClientRect(m_hwnd, &rc) );\r
55                 wmSize(0, (short)rc.right, (short)rc.bottom);\r
56 \r
57                 // debug level\r
58                 bool isChecked =\r
59                         (IsDlgButtonChecked(m_hwnd, IDC_CHECK_detail) == BST_CHECKED);\r
60                 m_log->setDebugLevel(isChecked ? 1 : 0);\r
61 \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
80 \r
81                 // enlarge window\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
86                 return TRUE;\r
87         }\r
88 \r
89         /// WM_DESTROY\r
90         BOOL wmDestroy() {\r
91                 // unset font\r
92                 SetWindowFont(m_hwndEdit, m_hfontOriginal, false);\r
93                 DeleteObject(m_hfont);\r
94 \r
95                 // unset icons\r
96                 unsetBigIcon(m_hwnd);\r
97                 unsetSmallIcon(m_hwnd);\r
98                 return TRUE;\r
99         }\r
100 \r
101         /// WM_CLOSE\r
102         BOOL wmClose() {\r
103                 ShowWindow(m_hwnd, SW_HIDE);\r
104                 return TRUE;\r
105         }\r
106 \r
107         /// WM_COMMAND\r
108         BOOL wmCommand(int /* i_notifyCode */, int i_id, HWND /* i_hwndControl */) {\r
109                 switch (i_id) {\r
110                 case IDOK: {\r
111                         ShowWindow(m_hwnd, SW_HIDE);\r
112                         return TRUE;\r
113                 }\r
114 \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
120                         return TRUE;\r
121                 }\r
122 \r
123                 case IDC_BUTTON_changeFont: {\r
124                         CHOOSEFONT cf;\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
136                         }\r
137                         return TRUE;\r
138                 }\r
139 \r
140                 case IDC_CHECK_detail: {\r
141                         bool isChecked =\r
142                                 (IsDlgButtonChecked(m_hwnd, IDC_CHECK_detail) == BST_CHECKED);\r
143                         m_log->setDebugLevel(isChecked ? 1 : 0);\r
144                         return TRUE;\r
145                 }\r
146                 }\r
147                 return FALSE;\r
148         }\r
149 };\r
150 \r
151 \r
152 //\r
153 #ifdef MAYU64\r
154 INT_PTR CALLBACK dlgLog_dlgProc(HWND i_hwnd, UINT i_message,\r
155 #else\r
156 BOOL CALLBACK dlgLog_dlgProc(HWND i_hwnd, UINT i_message,\r
157 #endif\r
158                                                                 WPARAM i_wParam, LPARAM i_lParam)\r
159 {\r
160         DlgLog *wc;\r
161         getUserData(i_hwnd, &wc);\r
162         if (!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
167                 }\r
168         else\r
169                 switch (i_message) {\r
170                 case WM_COMMAND:\r
171                         return wc->wmCommand(HIWORD(i_wParam), LOWORD(i_wParam),\r
172                                                                  reinterpret_cast<HWND>(i_lParam));\r
173                 case WM_CLOSE:\r
174                         return wc->wmClose();\r
175                 case WM_DESTROY:\r
176                         return wc->wmDestroy();\r
177                 case WM_NCDESTROY:\r
178                         delete wc;\r
179                         return TRUE;\r
180                 default:\r
181                         return wc->defaultWMHandler(i_message, i_wParam, i_lParam);\r
182                 }\r
183         return FALSE;\r
184 }\r