1 #if defined(PLATFORM_WIN32)
\r
3 #include <commctrl.h>
\r
7 #include "resource.h"
\r
8 #include "PlatformLayer.h"
\r
9 #include "Win32Platform.h"
\r
10 #include "StatusBar.h"
\r
11 #include "Property.h"
\r
12 #include "Message.h"
\r
14 #define NUM_MY_TOOLBAR_BMPS 12
\r
16 #define NUM_TOOLBAR_BUTTONS 19
\r
17 static TBBUTTON aToolbarButtons[NUM_TOOLBAR_BUTTONS] = {
\r
18 {STD_FILENEW + NUM_MY_TOOLBAR_BMPS, IDM_NEWMEMO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
19 {STD_FILESAVE + NUM_MY_TOOLBAR_BMPS, IDM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
20 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
\r
21 {STD_CUT + NUM_MY_TOOLBAR_BMPS, IDM_CUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
22 {STD_COPY + NUM_MY_TOOLBAR_BMPS, IDM_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
23 {STD_PASTE + NUM_MY_TOOLBAR_BMPS, IDM_PASTE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
24 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
\r
25 {STD_DELETE + NUM_MY_TOOLBAR_BMPS, IDM_DELETEITEM, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
26 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
\r
27 {3, IDM_INSDATE1, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
28 {4, IDM_INSDATE2, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
29 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
\r
30 {9, IDM_SEARCH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
31 {7, IDM_SEARCH_PREV, 0, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
32 {8, IDM_SEARCH_NEXT, 0, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
33 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
\r
34 {6, IDM_TOGGLEPANE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
35 {10, IDM_TOPMOST, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
\r
36 {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},
\r
39 Win32Platform::Win32Platform() : pStatusBar(NULL)
\r
43 Win32Platform::~Win32Platform()
\r
48 static HWND CreateToolBar(HWND hParent, HINSTANCE hInst)
\r
53 hwndTB = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, (LPSTR)NULL,
\r
55 WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NODIVIDER | CCS_NORESIZE |
\r
56 TBSTYLE_FLAT | TBSTYLE_ALTDRAG |
\r
57 TBSTYLE_TOOLTIPS| CCS_ADJUSTABLE ,
\r
59 hParent, (HMENU)IDC_TOOLBAR, hInst, NULL);
\r
60 SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
\r
63 tbab.nID = IDB_TOOLBAR;
\r
64 SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) 3, (LPARAM) &tbab);
\r
66 tbab.hInst = HINST_COMMCTRL;
\r
67 tbab.nID = IDB_STD_SMALL_COLOR;
\r
68 SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) NUM_TOOLBAR_BUTTONS, (LPARAM) &tbab);
\r
71 SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) NUM_TOOLBAR_BUTTONS,
\r
72 (LPARAM) (LPTBBUTTON) &aToolbarButtons);
\r
76 void Win32Platform::Create(HWND hWnd, HINSTANCE hInst)
\r
78 pStatusBar = new StatusBar();
\r
79 pStatusBar->Create(hWnd, g_Property.GetUseTwoPane());
\r
81 hRebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL,
\r
82 WS_BORDER | RBS_BANDBORDERS | RBS_AUTOSIZE |
\r
83 WS_CHILD | WS_CLIPSIBLINGS| RBS_TOOLTIPS |
\r
84 WS_CLIPCHILDREN|RBS_VARHEIGHT,
\r
86 hWnd, NULL, hInst, NULL);
\r
88 rbi.cbSize = sizeof(rbi);
\r
91 SendMessage(hRebar, RB_SETBARINFO, 0, (LPARAM)&rbi);
\r
93 hToolBar = CreateToolBar(hRebar, hInst);
\r
95 REBARBANDINFO rbband;
\r
96 rbband.cbSize = sizeof(rbband);
\r
97 rbband.fMask = RBBIM_SIZE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_STYLE ;
\r
98 rbband.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS;
\r
100 DWORD dwBtnSize = SendMessage(hToolBar, TB_GETBUTTONSIZE, 0, 0);
\r
102 rbband.cbSize = sizeof(rbband);
\r
103 rbband.hwndChild = hToolBar;
\r
104 rbband.cxMinChild = 0;
\r
105 rbband.cyMinChild = HIWORD(dwBtnSize);
\r
108 SendMessage(hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbband);
\r
109 SendMessage(hRebar, RB_MAXIMIZEBAND, 0, 0);
\r
112 void Win32Platform::EnableMenu(UINT uId, BOOL bEnable)
\r
118 case IDM_DELETEITEM:
\r
125 hTB = GetMainToolBar();
\r
130 HMENU hMenu = GetMainMenu();
\r
134 uFlg1 = MF_BYCOMMAND | MF_ENABLED;
\r
136 uFlg1 = MF_BYCOMMAND | MF_GRAYED | MF_DISABLED;
\r
138 EnableMenuItem(hMenu, uId, uFlg1);
\r
141 int x = SendMessage(hTB, TB_ENABLEBUTTON, uId, MAKELONG(bEnable, 0));
\r
145 void Win32Platform::ControlMenu(BOOL bTreeActive)
\r
147 HMENU hMenu = GetMainMenu();
\r
149 UINT uDisableFlg = MF_BYCOMMAND | MF_GRAYED;
\r
150 #if defined(PLATFORM_WIN32)
\r
151 uDisableFlg |= MF_DISABLED;
\r
156 uFlg1 = MF_BYCOMMAND | MF_ENABLED;
\r
157 uFlg2 = uDisableFlg;
\r
159 uFlg1 = uDisableFlg;
\r
160 uFlg2 = MF_BYCOMMAND | MF_ENABLED;
\r
163 EnableMenuItem(hMenu, IDM_FORGETPASS, uFlg1);
\r
164 EnableMenuItem(hMenu, IDM_PROPERTY, uFlg1);
\r
166 EnableMenuItem(hMenu, IDM_INSDATE1, uFlg2);
\r
167 EnableMenuItem(hMenu, IDM_INSDATE2, uFlg2);
\r
168 EnableMenuItem(hMenu, IDM_DETAILS_HSCROLL, uFlg2);
\r
171 void Win32Platform::ControlToolbar(BOOL bTreeActive)
\r
173 SendMessage(hToolBar, TB_ENABLEBUTTON, IDM_INSDATE1, MAKELONG(!bTreeActive, 0));
\r
174 SendMessage(hToolBar, TB_ENABLEBUTTON, IDM_INSDATE2, MAKELONG(!bTreeActive, 0));
\r
177 void Win32Platform::OpenDetailsView()
\r
179 ControlMenu(FALSE);
\r
180 ControlToolbar(FALSE);
\r
183 void Win32Platform::CloseDetailsView()
\r
186 ControlToolbar(TRUE);
\r
189 void Win32Platform::EnableSearchNext()
\r
191 SendMessage(hToolBar, TB_SETSTATE, IDM_SEARCH_PREV, MAKELONG(TBSTATE_ENABLED, 0));
\r
192 SendMessage(hToolBar, TB_SETSTATE, IDM_SEARCH_NEXT, MAKELONG(TBSTATE_ENABLED, 0));
\r
195 void Win32Platform::AdjustUserRect(RECT *pRect)
\r
197 // get rebar height
\r
200 if (g_Property.GetHideRebar()) {
\r
204 GetWindowRect(hRebar, &r);
\r
205 nRebarH = (WORD)(r.bottom - r.top);
\r
208 // get statusbar height
\r
209 WORD nStatusHeight;
\r
210 if (g_Property.GetHideStatusBar()) {
\r
213 nStatusHeight = GetStatusBarHeight();
\r
216 pRect->top = nRebarH;
\r
217 pRect->bottom -= (nRebarH + nStatusHeight);
\r
221 void Win32Platform::CheckMenu(UINT uid, BOOL bCheck)
\r
224 BOOL bNegButton = FALSE;
\r
226 case IDM_TOGGLEPANE:
\r
228 hMenu = GetMainMenu();
\r
230 case IDM_DETAILS_HSCROLL:
\r
231 hMenu = GetMDToolMenu();
\r
237 BOOL bButton = bNegButton ? !bCheck : bCheck;
\r
239 // CheckMenuItem is superseeded funcs, but in CE, SetMenuItemInfo can't set values, so use it.
\r
240 CheckMenuItem(hMenu, uid, MF_BYCOMMAND | (bCheck ? MF_CHECKED : MF_UNCHECKED));
\r
241 SendMessage(hToolBar, TB_PRESSBUTTON, uid, MAKELONG(bButton, 0));
\r
244 void Win32Platform::ShowStatusBar(BOOL bShow)
\r
246 pStatusBar->Show(bShow);
\r
249 void Win32Platform::ShowRebar(BOOL bShow)
\r
252 ShowWindow(hRebar, SW_SHOW);
\r
254 ShowWindow(hRebar, SW_HIDE);
\r
258 void Win32Platform::SetStatusIndicator(DWORD nPos, LPCTSTR pText, BOOL bDisp)
\r
260 pStatusBar->SetStatusIndicator(nPos, pText, bDisp);
\r
263 WORD Win32Platform::GetStatusBarHeight()
\r
265 return pStatusBar->GetHeight();
\r
268 void Win32Platform::ResizeStatusBar(WPARAM wParam, LPARAM lParam)
\r
270 SendMessage(hRebar, WM_SIZE, wParam, lParam);
\r
272 pStatusBar->SendSize(wParam, lParam);
\r
273 pStatusBar->ResizeStatusBar();
\r
276 void Win32Platform::GetStatusWindowRect(RECT *pRect)
\r
278 pStatusBar->GetWindowRect(pRect);
\r
281 ///////////////////////////////////////////////////
\r
282 // Load i18nized menu
\r
283 ///////////////////////////////////////////////////
\r
285 static void InsertBaseMenu(HMENU hMain, int pos, LPCTSTR pText, HMENU hSub)
\r
288 memset(&mii, 0, sizeof(mii));
\r
289 mii.cbSize = sizeof(mii);
\r
291 mii.fMask = MIIM_DATA | MIIM_TYPE | MIIM_SUBMENU;
\r
292 mii.fType = MFT_STRING;
\r
293 mii.dwTypeData = (LPTSTR)pText;
\r
294 mii.cch = _tcslen(pText);
\r
295 mii.hSubMenu = hSub;
\r
296 InsertMenuItem(hMain, pos, FALSE, &mii);
\r
299 static MenuMsgRes aFileMenu[] = {
\r
300 { 0, IDM_NEWMEMO, 0, MSG_ID_MENUITEM_W32_F_NEWMEMO },
\r
301 { 1, IDM_NEWFOLDER, 0, MSG_ID_MENUITEM_W32_F_NEWFOLDER },
\r
302 { 2, IDM_RENAME, 0, MSG_ID_MENUITEM_W32_F_RENAME },
\r
303 { 3, IDM_DELETEITEM, 0, MSG_ID_MENUITEM_W32_F_DEL },
\r
305 { 5, IDM_SAVE, 0, MSG_ID_MENUITEM_W32_F_SAVE },
\r
306 { 6, IDM_EXIT, 0, MSG_ID_MENUITEM_W32_F_EXIT},
\r
309 static MenuMsgRes aEditMenu[] = {
\r
310 { 0, IDM_CUT, 0, MSG_ID_MENUITEM_W32_E_CUT },
\r
311 { 1, IDM_COPY, 0, MSG_ID_MENUITEM_W32_E_COPY },
\r
312 { 2, IDM_PASTE, 0, MSG_ID_MENUITEM_W32_E_PASTE },
\r
314 { 4, IDM_SELALL, 0, MSG_ID_MENUITEM_W32_E_SELALL },
\r
316 { 6, IDM_SEARCH, 0, MSG_ID_MENUITEM_W32_E_FIND },
\r
317 { 7, IDM_SEARCH_NEXT, 0, MSG_ID_MENUITEM_W32_E_FINDNEXT },
\r
318 { 8, IDM_SEARCH_PREV, 0, MSG_ID_MENUITEM_W32_E_FINDPREV },
\r
320 { 10, IDM_GREP, 0, MSG_ID_MENUITEM_W32_E_QFILTER },
\r
322 { 12, IDM_INSDATE1, MF_GRAYED, MSG_ID_MENUITEM_W32_E_DATE1 },
\r
323 { 13, IDM_INSDATE2, MF_GRAYED, MSG_ID_MENUITEM_W32_E_DATE2 },
\r
326 static MenuMsgRes aBookMarkMenu[] = {
\r
327 { 0, IDM_BOOKMARK_ADD, 0, MSG_ID_MENUITEM_W32_B_ADDBM },
\r
328 { 1, IDM_BOOKMARK_CONFIG, 0, MSG_ID_MENUITEM_W32_B_EDITBM },
\r
332 static MenuMsgRes aToolMenu[] = {
\r
333 { 0, IDM_DETAILS_HSCROLL, MF_CHECKED | MF_GRAYED, MSG_ID_MENUITEM_W32_T_WRAPTEXT },
\r
334 { 1, IDM_TOGGLEPANE, MF_CHECKED, MSG_ID_MENUITEM_W32_T_TWOPANE },
\r
335 { 2, IDM_SHOWREBAR, MF_CHECKED, MSG_ID_MENUITEM_W32_T_REBAR },
\r
336 { 3, IDM_SHOWSTATUSBAR, MF_CHECKED, MSG_ID_MENUITEM_W32_T_STATUSBAR },
\r
337 { 4, IDM_TOPMOST, 0, MSG_ID_MENUITEM_W32_T_STAYTOPMOST },
\r
339 { 6, IDM_ENCRYPT, MF_GRAYED, MSG_ID_MENUITEM_W32_T_ENCRYPT },
\r
340 { 7, IDM_DECRYPT, MF_GRAYED, MSG_ID_MENUITEM_W32_T_DECRYPT },
\r
342 { 9, IDM_FORGETPASS, 0, MSG_ID_MENUITEM_W32_T_ERASEPASS },
\r
344 { 11, IDM_VFOLDER_DEF, 0, MSG_ID_MENUITEM_W32_T_VIRTUALFOLDER },
\r
345 { 12, IDM_PROPERTY, 0, MSG_ID_MENUITEM_W32_T_OPTIONS },
\r
348 static MenuMsgRes aHelpMenu[] = {
\r
349 { 0, IDM_ABOUT, 0, MSG_ID_MENUITEM_W32_H_ABOUT },
\r
353 HMENU Win32Platform::LoadMainMenu()
\r
355 HMENU hMainM = CreateMenu();
\r
358 OverrideMenuTitle(hSub = CreateMenu(), aFileMenu, sizeof(aFileMenu)/sizeof(MenuMsgRes));
\r
359 InsertBaseMenu(hMainM, 0, MSG_MENUITEM_W32B_FILE, hSub);
\r
360 OverrideMenuTitle(hSub = CreateMenu(), aEditMenu, sizeof(aEditMenu)/sizeof(MenuMsgRes));
\r
361 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_EDIT, hSub);
\r
362 OverrideMenuTitle(hSub = CreateMenu(), aBookMarkMenu, sizeof(aBookMarkMenu)/sizeof(MenuMsgRes));
\r
363 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_BOOKMARK, hSub);
\r
364 OverrideMenuTitle(hSub = CreateMenu(), aToolMenu, sizeof(aToolMenu)/sizeof(MenuMsgRes));
\r
365 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_TOOL, hSub);
\r
366 OverrideMenuTitle(hSub = CreateMenu(), aHelpMenu, sizeof(aHelpMenu)/sizeof(MenuMsgRes));
\r
367 InsertBaseMenu(hMainM, 1, MSG_MENUITEM_W32B_HELP, hSub);
\r
371 #endif // PLATFORM_WIN32