Develop and Download Open Source Software

Browse CVS Repository

Contents of /tombo/Tombo/Src/Win32Platform.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.8 - (show annotations) (download) (as text)
Wed Sep 6 17:25:10 2006 UTC (17 years, 7 months ago) by hirami
Branch: MAIN
CVS Tags: Tombo_2_0b2, Tombo_2_0b3, Tombo_2_0b1, Tombo_2_0b4, B228, B229, B226, B227, B231, B230, HEAD
Changes since 1.7: +6 -2 lines
File MIME type: text/x-c++src
* disable open note when starting.
- support menubar label's L9N.
- FIX: Menu checking is not worked.(WM5)

1 #if defined(PLATFORM_WIN32)
2 #include <windows.h>
3 #include <commctrl.h>
4 #include <tchar.h>
5
6 #include "Tombo.h"
7 #include "resource.h"
8 #include "PlatformLayer.h"
9 #include "Win32Platform.h"
10 #include "StatusBar.h"
11 #include "Property.h"
12 #include "Message.h"
13
14 #define NUM_MY_TOOLBAR_BMPS 12
15
16 #define NUM_TOOLBAR_BUTTONS 19
17 static TBBUTTON aToolbarButtons[NUM_TOOLBAR_BUTTONS] = {
18 {STD_FILENEW + NUM_MY_TOOLBAR_BMPS, IDM_NEWMEMO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
19 {STD_FILESAVE + NUM_MY_TOOLBAR_BMPS, IDM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
20 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
21 {STD_CUT + NUM_MY_TOOLBAR_BMPS, IDM_CUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
22 {STD_COPY + NUM_MY_TOOLBAR_BMPS, IDM_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
23 {STD_PASTE + NUM_MY_TOOLBAR_BMPS, IDM_PASTE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
24 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
25 {STD_DELETE + NUM_MY_TOOLBAR_BMPS, IDM_DELETEITEM, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
26 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
27 {3, IDM_INSDATE1, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
28 {4, IDM_INSDATE2, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
29 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
30 {9, IDM_SEARCH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
31 {7, IDM_SEARCH_PREV, 0, TBSTYLE_BUTTON, 0, 0, 0, -1},
32 {8, IDM_SEARCH_NEXT, 0, TBSTYLE_BUTTON, 0, 0, 0, -1},
33 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
34 {6, IDM_TOGGLEPANE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
35 {10, IDM_TOPMOST, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
36 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
37 };
38
39 Win32Platform::Win32Platform() : pStatusBar(NULL)
40 {
41 }
42
43 Win32Platform::~Win32Platform()
44 {
45 delete pStatusBar;
46 }
47
48 static HWND CreateToolBar(HWND hParent, HINSTANCE hInst)
49 {
50 HWND hwndTB;
51 TBADDBITMAP tbab;
52
53 hwndTB = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, (LPSTR)NULL,
54 WS_CHILD |
55 WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NODIVIDER | CCS_NORESIZE |
56 TBSTYLE_FLAT | TBSTYLE_ALTDRAG |
57 TBSTYLE_TOOLTIPS| CCS_ADJUSTABLE ,
58 0, 0, 0, 0,
59 hParent, (HMENU)IDC_TOOLBAR, hInst, NULL);
60 SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
61
62 tbab.hInst = hInst;
63 tbab.nID = IDB_TOOLBAR;
64 SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) 3, (LPARAM) &tbab);
65
66 tbab.hInst = HINST_COMMCTRL;
67 tbab.nID = IDB_STD_SMALL_COLOR;
68 SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) NUM_TOOLBAR_BUTTONS, (LPARAM) &tbab);
69
70
71 SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) NUM_TOOLBAR_BUTTONS,
72 (LPARAM) (LPTBBUTTON) &aToolbarButtons);
73 return hwndTB;
74 }
75
76 void Win32Platform::Create(HWND hWnd, HINSTANCE hInst)
77 {
78 pStatusBar = new StatusBar();
79 pStatusBar->Create(hWnd, g_Property.GetUseTwoPane());
80
81 hRebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL,
82 WS_BORDER | RBS_BANDBORDERS | RBS_AUTOSIZE |
83 WS_CHILD | WS_CLIPSIBLINGS| RBS_TOOLTIPS |
84 WS_CLIPCHILDREN|RBS_VARHEIGHT,
85 0, 0, 0, 0,
86 hWnd, NULL, hInst, NULL);
87 REBARINFO rbi;
88 rbi.cbSize = sizeof(rbi);
89 rbi.fMask = 0;
90 rbi.himl = NULL;
91 SendMessage(hRebar, RB_SETBARINFO, 0, (LPARAM)&rbi);
92
93 hToolBar = CreateToolBar(hRebar, hInst);
94
95 REBARBANDINFO rbband;
96 rbband.cbSize = sizeof(rbband);
97 rbband.fMask = RBBIM_SIZE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_STYLE ;
98 rbband.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS;
99
100 DWORD dwBtnSize = SendMessage(hToolBar, TB_GETBUTTONSIZE, 0, 0);
101
102 rbband.cbSize = sizeof(rbband);
103 rbband.hwndChild = hToolBar;
104 rbband.cxMinChild = 0;
105 rbband.cyMinChild = HIWORD(dwBtnSize);
106 rbband.cx = 250;
107
108 SendMessage(hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbband);
109 SendMessage(hRebar, RB_MAXIMIZEBAND, 0, 0);
110 }
111
112 void Win32Platform::EnableMenu(UINT uId, BOOL bEnable)
113 {
114 BOOL bTB = FALSE;
115 HWND hTB;
116
117 switch (uId) {
118 case IDM_DELETEITEM:
119 case IDM_NEWMEMO:
120 case IDM_CUT:
121 case IDM_COPY:
122 case IDM_PASTE:
123 case IDM_SAVE:
124 bTB = TRUE;
125 hTB = GetMainToolBar();
126 default:
127 break;
128 }
129
130 HMENU hMenu = GetMainMenu();
131
132 UINT uFlg1;
133 if (bEnable) {
134 uFlg1 = MF_BYCOMMAND | MF_ENABLED;
135 } else {
136 uFlg1 = MF_BYCOMMAND | MF_GRAYED | MF_DISABLED;
137 }
138 EnableMenuItem(hMenu, uId, uFlg1);
139
140 if (bTB) {
141 int x = SendMessage(hTB, TB_ENABLEBUTTON, uId, MAKELONG(bEnable, 0));
142 }
143 }
144
145 void Win32Platform::ControlMenu(BOOL bTreeActive)
146 {
147 HMENU hMenu = GetMainMenu();
148
149 UINT uDisableFlg = MF_BYCOMMAND | MF_GRAYED;
150 #if defined(PLATFORM_WIN32)
151 uDisableFlg |= MF_DISABLED;
152 #endif
153
154 UINT uFlg1, uFlg2;
155 if (bTreeActive) {
156 uFlg1 = MF_BYCOMMAND | MF_ENABLED;
157 uFlg2 = uDisableFlg;
158 } else {
159 uFlg1 = uDisableFlg;
160 uFlg2 = MF_BYCOMMAND | MF_ENABLED;
161 }
162
163 EnableMenuItem(hMenu, IDM_FORGETPASS, uFlg1);
164 EnableMenuItem(hMenu, IDM_PROPERTY, uFlg1);
165
166 EnableMenuItem(hMenu, IDM_INSDATE1, uFlg2);
167 EnableMenuItem(hMenu, IDM_INSDATE2, uFlg2);
168 EnableMenuItem(hMenu, IDM_DETAILS_HSCROLL, uFlg2);
169 }
170
171 void Win32Platform::ControlToolbar(BOOL bTreeActive)
172 {
173 SendMessage(hToolBar, TB_ENABLEBUTTON, IDM_INSDATE1, MAKELONG(!bTreeActive, 0));
174 SendMessage(hToolBar, TB_ENABLEBUTTON, IDM_INSDATE2, MAKELONG(!bTreeActive, 0));
175 }
176
177 void Win32Platform::OpenDetailsView()
178 {
179 ControlMenu(FALSE);
180 ControlToolbar(FALSE);
181 }
182
183 void Win32Platform::CloseDetailsView()
184 {
185 ControlMenu(TRUE);
186 ControlToolbar(TRUE);
187 }
188
189 void Win32Platform::EnableSearchNext()
190 {
191 SendMessage(hToolBar, TB_SETSTATE, IDM_SEARCH_PREV, MAKELONG(TBSTATE_ENABLED, 0));
192 SendMessage(hToolBar, TB_SETSTATE, IDM_SEARCH_NEXT, MAKELONG(TBSTATE_ENABLED, 0));
193 }
194
195 void Win32Platform::AdjustUserRect(RECT *pRect)
196 {
197 // get rebar height
198 WORD nRebarH;
199
200 if (g_Property.GetHideRebar()) {
201 nRebarH = 0;
202 } else {
203 RECT r;
204 GetWindowRect(hRebar, &r);
205 nRebarH = (WORD)(r.bottom - r.top);
206 }
207
208 // get statusbar height
209 WORD nStatusHeight;
210 if (g_Property.GetHideStatusBar()) {
211 nStatusHeight = 0;
212 } else {
213 nStatusHeight = GetStatusBarHeight();
214 }
215
216 pRect->top = nRebarH;
217 pRect->bottom -= (nRebarH + nStatusHeight);
218
219 }
220
221 void Win32Platform::CheckMenu(UINT uid, BOOL bCheck)
222 {
223 HMENU hMenu;
224 BOOL bNegButton = FALSE;
225 switch(uid) {
226 case IDM_TOGGLEPANE:
227 bNegButton = TRUE;
228 hMenu = GetMainMenu();
229 break;
230 case IDM_DETAILS_HSCROLL:
231 hMenu = GetMDToolMenu();
232 break;
233 default:
234 return;
235 }
236
237 BOOL bButton = bNegButton ? !bCheck : bCheck;
238
239 // CheckMenuItem is superseeded funcs, but in CE, SetMenuItemInfo can't set values, so use it.
240 CheckMenuItem(hMenu, uid, MF_BYCOMMAND | (bCheck ? MF_CHECKED : MF_UNCHECKED));
241 SendMessage(hToolBar, TB_PRESSBUTTON, uid, MAKELONG(bButton, 0));
242 }
243
244 void Win32Platform::ShowStatusBar(BOOL bShow)
245 {
246 pStatusBar->Show(bShow);
247 }
248
249 void Win32Platform::ShowRebar(BOOL bShow)
250 {
251 if (bShow) {
252 ShowWindow(hRebar, SW_SHOW);
253 } else {
254 ShowWindow(hRebar, SW_HIDE);
255 }
256 }
257
258 void Win32Platform::SetStatusIndicator(DWORD nPos, LPCTSTR pText, BOOL bDisp)
259 {
260 pStatusBar->SetStatusIndicator(nPos, pText, bDisp);
261 }
262
263 WORD Win32Platform::GetStatusBarHeight()
264 {
265 return pStatusBar->GetHeight();
266 }
267
268 void Win32Platform::ResizeStatusBar(WPARAM wParam, LPARAM lParam)
269 {
270 SendMessage(hRebar, WM_SIZE, wParam, lParam);
271
272 pStatusBar->SendSize(wParam, lParam);
273 pStatusBar->ResizeStatusBar();
274 }
275
276 void Win32Platform::GetStatusWindowRect(RECT *pRect)
277 {
278 pStatusBar->GetWindowRect(pRect);
279 }
280
281 ///////////////////////////////////////////////////
282 // Load i18nized menu
283 ///////////////////////////////////////////////////
284
285 static void InsertBaseMenu(HMENU hMain, int pos, LPCTSTR pText, HMENU hSub)
286 {
287 MENUITEMINFO mii;
288 memset(&mii, 0, sizeof(mii));
289 mii.cbSize = sizeof(mii);
290
291 mii.fMask = MIIM_DATA | MIIM_TYPE | MIIM_SUBMENU;
292 mii.fType = MFT_STRING;
293 mii.dwTypeData = (LPTSTR)pText;
294 mii.cch = _tcslen(pText);
295 mii.hSubMenu = hSub;
296 InsertMenuItem(hMain, pos, FALSE, &mii);
297 }
298
299 static MenuMsgRes aFileMenu[] = {
300 { 0, IDM_NEWMEMO, 0, MSG_ID_MENUITEM_W32_F_NEWMEMO },
301 { 1, IDM_NEWFOLDER, 0, MSG_ID_MENUITEM_W32_F_NEWFOLDER },
302 { 2, IDM_RENAME, 0, MSG_ID_MENUITEM_W32_F_RENAME },
303 { 3, IDM_DELETEITEM, 0, MSG_ID_MENUITEM_W32_F_DEL },
304 { 4, -1, 0, 0},
305 { 5, IDM_SAVE, 0, MSG_ID_MENUITEM_W32_F_SAVE },
306 { 6, IDM_EXIT, 0, MSG_ID_MENUITEM_W32_F_EXIT},
307 };
308
309 static MenuMsgRes aEditMenu[] = {
310 { 0, IDM_CUT, 0, MSG_ID_MENUITEM_W32_E_CUT },
311 { 1, IDM_COPY, 0, MSG_ID_MENUITEM_W32_E_COPY },
312 { 2, IDM_PASTE, 0, MSG_ID_MENUITEM_W32_E_PASTE },
313 { 3, -1, 0, 0 },
314 { 4, IDM_SELALL, 0, MSG_ID_MENUITEM_W32_E_SELALL },
315 { 5, -1, 0, 0 },
316 { 6, IDM_SEARCH, 0, MSG_ID_MENUITEM_W32_E_FIND },
317 { 7, IDM_SEARCH_NEXT, 0, MSG_ID_MENUITEM_W32_E_FINDNEXT },
318 { 8, IDM_SEARCH_PREV, 0, MSG_ID_MENUITEM_W32_E_FINDPREV },
319 { 9, -1, 0, 0 },
320 { 10, IDM_GREP, 0, MSG_ID_MENUITEM_W32_E_QFILTER },
321 { 11, -1, 0, 0 },
322 { 12, IDM_INSDATE1, MF_GRAYED, MSG_ID_MENUITEM_W32_E_DATE1 },
323 { 13, IDM_INSDATE2, MF_GRAYED, MSG_ID_MENUITEM_W32_E_DATE2 },
324 };
325
326 static MenuMsgRes aBookMarkMenu[] = {
327 { 0, IDM_BOOKMARK_ADD, 0, MSG_ID_MENUITEM_W32_B_ADDBM },
328 { 1, IDM_BOOKMARK_CONFIG, 0, MSG_ID_MENUITEM_W32_B_EDITBM },
329 { 2, -1, 0, 0 },
330 };
331
332 static MenuMsgRes aToolMenu[] = {
333 { 0, IDM_DETAILS_HSCROLL, MF_CHECKED | MF_GRAYED, MSG_ID_MENUITEM_W32_T_WRAPTEXT },
334 { 1, IDM_TOGGLEPANE, MF_CHECKED, MSG_ID_MENUITEM_W32_T_TWOPANE },
335 { 2, IDM_SHOWREBAR, MF_CHECKED, MSG_ID_MENUITEM_W32_T_REBAR },
336 { 3, IDM_SHOWSTATUSBAR, MF_CHECKED, MSG_ID_MENUITEM_W32_T_STATUSBAR },
337 { 4, IDM_TOPMOST, 0, MSG_ID_MENUITEM_W32_T_STAYTOPMOST },
338 { 5, -1, 0, 0 },
339 { 6, IDM_ENCRYPT, MF_GRAYED, MSG_ID_MENUITEM_W32_T_ENCRYPT },
340 { 7, IDM_DECRYPT, MF_GRAYED, MSG_ID_MENUITEM_W32_T_DECRYPT },
341 { 8, -1, 0, 0 },
342 { 9, IDM_FORGETPASS, 0, MSG_ID_MENUITEM_W32_T_ERASEPASS },
343 { 10, -1, 0, 0 },
344 { 11, IDM_VFOLDER_DEF, 0, MSG_ID_MENUITEM_W32_T_VIRTUALFOLDER },
345 { 12, IDM_PROPERTY, 0, MSG_ID_MENUITEM_W32_T_OPTIONS },
346 };
347
348 static MenuMsgRes aHelpMenu[] = {
349 { 0, IDM_ABOUT, 0, MSG_ID_MENUITEM_W32_H_ABOUT },
350 };
351
352
353 HMENU Win32Platform::LoadMainMenu()
354 {
355 HMENU hMainM = CreateMenu();
356
357 HMENU hSub;
358 OverrideMenuTitle(hSub = CreateMenu(), aFileMenu, sizeof(aFileMenu)/sizeof(MenuMsgRes));
359 InsertBaseMenu(hMainM, 0, MSG_MENUITEM_W32B_FILE, hSub);
360 OverrideMenuTitle(hSub = CreateMenu(), aEditMenu, sizeof(aEditMenu)/sizeof(MenuMsgRes));
361 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_EDIT, hSub);
362 OverrideMenuTitle(hSub = CreateMenu(), aBookMarkMenu, sizeof(aBookMarkMenu)/sizeof(MenuMsgRes));
363 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_BOOKMARK, hSub);
364 OverrideMenuTitle(hSub = CreateMenu(), aToolMenu, sizeof(aToolMenu)/sizeof(MenuMsgRes));
365 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_TOOL, hSub);
366 OverrideMenuTitle(hSub = CreateMenu(), aHelpMenu, sizeof(aHelpMenu)/sizeof(MenuMsgRes));
367 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_HELP, hSub);
368 return hMainM;
369 }
370
371 #endif // PLATFORM_WIN32

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26