OLD | NEW |
| (Empty) |
1 // Copyright 2005-2009 Google Inc. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 // ======================================================================== | |
15 | |
16 #ifndef OMAHA_COMMON_POPUP_MENU_H_ | |
17 #define OMAHA_COMMON_POPUP_MENU_H_ | |
18 | |
19 #include "omaha/base/debug.h" | |
20 #include "omaha/base/scoped_any.h" | |
21 | |
22 namespace omaha { | |
23 | |
24 struct MenuItemDrawStyle { | |
25 bool is_bold; | |
26 HICON icon; | |
27 | |
28 MenuItemDrawStyle() : is_bold(false), icon(NULL) {} | |
29 }; | |
30 | |
31 | |
32 class PopupMenu { | |
33 public: | |
34 PopupMenu(); | |
35 PopupMenu(HINSTANCE inst, const TCHAR* name); | |
36 | |
37 ~PopupMenu(); | |
38 | |
39 // Load from resource | |
40 bool LoadFromResource(HINSTANCE inst, const TCHAR* name); | |
41 | |
42 // Append menu item | |
43 bool AppendMenuItem(int menu_item_id, const TCHAR* text); | |
44 bool AppendMenuItem(int menu_item_id, | |
45 const TCHAR* text, | |
46 const MenuItemDrawStyle* style); | |
47 | |
48 // Append separator | |
49 bool AppendSeparator(); | |
50 | |
51 // Helper function that populates the MENUITEMINFO structure and sets | |
52 // accelerator keys for OWNERDRAW menu items | |
53 MENUITEMINFO PrepareMenuItemInfo(int menu_item_id, | |
54 const TCHAR* text, | |
55 const MenuItemDrawStyle* style); | |
56 | |
57 // Insert menu item | |
58 bool InsertMenuItem(int menu_item_id, | |
59 int before_item, | |
60 bool by_pos, | |
61 const TCHAR* text); | |
62 | |
63 bool InsertMenuItem(int menu_item_id, | |
64 int before_item, | |
65 bool by_pos, | |
66 const TCHAR* text, | |
67 const MenuItemDrawStyle* style); | |
68 | |
69 // Insert separator | |
70 bool InsertSeparator(int before_item, bool by_pos); | |
71 | |
72 // Modify a given menu item | |
73 bool ModifyMenuItem(int menu_item, | |
74 bool by_pos, | |
75 const TCHAR* text, | |
76 const MenuItemDrawStyle* style); | |
77 | |
78 // Remove menu item | |
79 bool RemoveMenuItem(int menu_item, bool by_pos); | |
80 | |
81 // Enable menu item | |
82 bool EnableMenuItem(int menu_item, bool by_pos, bool enabled); | |
83 | |
84 // Get menu state | |
85 bool GetMenuState(int menu_item, bool by_pos, int* menu_state); | |
86 | |
87 // Exists a menu item | |
88 bool ExistsMenuItem(int menu_item_id); | |
89 | |
90 // Get menu pos from ID | |
91 int GetMenuPosFromID(int id); | |
92 | |
93 // Attach to the window | |
94 void AttachToWindow(HWND wnd) { | |
95 ASSERT1(wnd); | |
96 wnd_ = wnd; | |
97 } | |
98 | |
99 // Redraw menu | |
100 bool Redraw(); | |
101 | |
102 // Track menu | |
103 bool Track(); | |
104 | |
105 // Handle WM_MEASUREITEM message | |
106 bool OnMeasureItem(MEASUREITEMSTRUCT* mi); | |
107 | |
108 // Handle WM_MDRAWITEM message | |
109 bool OnDrawItem(DRAWITEMSTRUCT* di); | |
110 | |
111 // Handle WM_MENUCHAR message | |
112 int OnMenuChar(TCHAR key); | |
113 | |
114 private: | |
115 // Get bold font | |
116 HFONT GetBoldFont(); | |
117 | |
118 // Draw the text | |
119 bool DrawText(const CString& text, | |
120 DRAWITEMSTRUCT* di, | |
121 int fg_color_idx, | |
122 int bg_color_idx); | |
123 | |
124 HWND wnd_; // HWND associated with this menu | |
125 scoped_hmenu menu_; // HMENU associated with this menu | |
126 | |
127 // Bold font used in owner draw menu-item | |
128 scoped_hfont bold_font_; | |
129 | |
130 // Accelerator key used in owner draw menu-item | |
131 CSimpleMap<TCHAR, int> accelerator_keys_; | |
132 | |
133 DISALLOW_EVIL_CONSTRUCTORS(PopupMenu); | |
134 }; | |
135 | |
136 } // namespace omaha | |
137 | |
138 #endif // OMAHA_COMMON_POPUP_MENU_H_ | |
139 | |
OLD | NEW |