Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Side by Side Diff: views/controls/menu/menu_controller.h

Issue 7720012: Moves ownership of MenuItemView to MenuRunner as well as responbility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef VIEWS_CONTROLS_MENU_MENU_CONTROLLER_H_ 5 #ifndef VIEWS_CONTROLS_MENU_MENU_CONTROLLER_H_
6 #define VIEWS_CONTROLS_MENU_MENU_CONTROLLER_H_ 6 #define VIEWS_CONTROLS_MENU_MENU_CONTROLLER_H_
7 #pragma once 7 #pragma once
8 8
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 10
(...skipping 14 matching lines...) Expand all
25 25
26 namespace views { 26 namespace views {
27 27
28 class DropTargetEvent; 28 class DropTargetEvent;
29 class MenuButton; 29 class MenuButton;
30 class MenuHostRootView; 30 class MenuHostRootView;
31 class MouseEvent; 31 class MouseEvent;
32 class SubmenuView; 32 class SubmenuView;
33 class View; 33 class View;
34 34
35 namespace internal {
36 class MenuControllerDelegate;
37 class MenuRunnerImpl;
38 }
39
35 // MenuController ------------------------------------------------------------- 40 // MenuController -------------------------------------------------------------
36 41
37 // MenuController is used internally by the various menu classes to manage 42 // MenuController is used internally by the various menu classes to manage
38 // showing, selecting and drag/drop for menus. All relevant events are 43 // showing, selecting and drag/drop for menus. All relevant events are
39 // forwarded to the MenuController from SubmenuView and MenuHost. 44 // forwarded to the MenuController from SubmenuView and MenuHost.
40 class VIEWS_EXPORT MenuController : public MessageLoop::Dispatcher { 45 class VIEWS_EXPORT MenuController : public MessageLoop::Dispatcher {
41 public: 46 public:
42 friend class MenuHostRootView;
43 friend class MenuItemView;
44 friend class SubmenuView;
45
46 // Enumeration of how the menu should exit. 47 // Enumeration of how the menu should exit.
47 enum ExitType { 48 enum ExitType {
48 // Don't exit. 49 // Don't exit.
49 EXIT_NONE, 50 EXIT_NONE,
50 51
51 // All menus, including nested, should be exited. 52 // All menus, including nested, should be exited.
52 EXIT_ALL, 53 EXIT_ALL,
53 54
54 // Only the outermost menu should be exited. 55 // Only the outermost menu should be exited.
55 EXIT_OUTERMOST, 56 EXIT_OUTERMOST,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 116
116 // Invoked from the scroll buttons of the MenuScrollViewContainer. 117 // Invoked from the scroll buttons of the MenuScrollViewContainer.
117 void OnDragEnteredScrollButton(SubmenuView* source, bool is_up); 118 void OnDragEnteredScrollButton(SubmenuView* source, bool is_up);
118 void OnDragExitedScrollButton(SubmenuView* source); 119 void OnDragExitedScrollButton(SubmenuView* source);
119 120
120 // Invoked once for any Widget activation change. This allows the menu 121 // Invoked once for any Widget activation change. This allows the menu
121 // to be canceled if the window manager changes the active window. 122 // to be canceled if the window manager changes the active window.
122 void OnWidgetActivationChanged(); 123 void OnWidgetActivationChanged();
123 124
124 private: 125 private:
126 friend class internal::MenuRunnerImpl;
127 friend class MenuHostRootView;
128 friend class MenuItemView;
129 friend class SubmenuView;
130
125 class MenuScrollTask; 131 class MenuScrollTask;
126 132
127 struct SelectByCharDetails; 133 struct SelectByCharDetails;
128 134
129 // Values supplied to SetSelection. 135 // Values supplied to SetSelection.
130 enum SetSelectionTypes { 136 enum SetSelectionTypes {
131 SELECTION_DEFAULT = 0, 137 SELECTION_DEFAULT = 0,
132 138
133 // If set submenus are opened immediately, otherwise submenus are only 139 // If set submenus are opened immediately, otherwise submenus are only
134 // openned after a timer fires. 140 // openned after a timer fires.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 208
203 // Sets the selection to menu_item a value of NULL unselects 209 // Sets the selection to menu_item a value of NULL unselects
204 // everything. |types| is a bitmask of |SetSelectionTypes|. 210 // everything. |types| is a bitmask of |SetSelectionTypes|.
205 // 211 //
206 // Internally this updates pending_state_ immediatley. state_ is only updated 212 // Internally this updates pending_state_ immediatley. state_ is only updated
207 // immediately if SELECTION_UPDATE_IMMEDIATELY is set. If 213 // immediately if SELECTION_UPDATE_IMMEDIATELY is set. If
208 // SELECTION_UPDATE_IMMEDIATELY is not set CommitPendingSelection is invoked 214 // SELECTION_UPDATE_IMMEDIATELY is not set CommitPendingSelection is invoked
209 // to show/hide submenus and update state_. 215 // to show/hide submenus and update state_.
210 void SetSelection(MenuItemView* menu_item, int types); 216 void SetSelection(MenuItemView* menu_item, int types);
211 217
212 // Sets the active MenuController.
213 static void SetActiveInstance(MenuController* controller);
214
215 #if defined(OS_WIN) 218 #if defined(OS_WIN)
216 // Dispatcher method. This returns true if the menu was canceled, or 219 // Dispatcher method. This returns true if the menu was canceled, or
217 // if the message is such that the menu should be closed. 220 // if the message is such that the menu should be closed.
218 virtual bool Dispatch(const MSG& msg); 221 virtual bool Dispatch(const MSG& msg);
219 #elif defined(TOUCH_UI) 222 #elif defined(TOUCH_UI)
220 virtual base::MessagePumpDispatcher::DispatchStatus Dispatch(XEvent* xevent); 223 virtual base::MessagePumpDispatcher::DispatchStatus Dispatch(XEvent* xevent);
221 #else 224 #else
222 virtual bool Dispatch(GdkEvent* event); 225 virtual bool Dispatch(GdkEvent* event);
223 #endif 226 #endif
224 227
225 // Key processing. The return value of this is returned from Dispatch. 228 // Key processing. The return value of this is returned from Dispatch.
226 // In other words, if this returns false (which happens if escape was 229 // In other words, if this returns false (which happens if escape was
227 // pressed, or a matching mnemonic was found) the message loop returns. 230 // pressed, or a matching mnemonic was found) the message loop returns.
228 #if defined(OS_WIN) 231 #if defined(OS_WIN)
229 bool OnKeyDown(int key_code, const MSG& msg); 232 bool OnKeyDown(int key_code, const MSG& msg);
230 #else 233 #else
231 bool OnKeyDown(int key_code); 234 bool OnKeyDown(int key_code);
232 #endif 235 #endif
233 236
234 // Creates a MenuController. If blocking is true, Run blocks the caller 237 // Creates a MenuController. If |blocking| is true a nested message loop is
235 explicit MenuController(bool blocking); 238 // started in |Run|.
239 MenuController(bool blocking, internal::MenuControllerDelegate* delegate);
236 240
237 virtual ~MenuController(); 241 virtual ~MenuController();
238 242
239 // If there is a hot tracked view AcceleratorPressed is invoked on it and 243 // If there is a hot tracked view AcceleratorPressed is invoked on it and
240 // true is returned. 244 // true is returned.
241 bool SendAcceleratorToHotTrackedView(); 245 bool SendAcceleratorToHotTrackedView();
242 246
243 void UpdateInitialLocation(const gfx::Rect& bounds, 247 void UpdateInitialLocation(const gfx::Rect& bounds,
244 MenuItemView::AnchorPosition position); 248 MenuItemView::AnchorPosition position);
245 249
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 // Task for scrolling the menu. If non-null indicates a scroll is currently 491 // Task for scrolling the menu. If non-null indicates a scroll is currently
488 // underway. 492 // underway.
489 scoped_ptr<MenuScrollTask> scroll_task_; 493 scoped_ptr<MenuScrollTask> scroll_task_;
490 494
491 MenuButton* menu_button_; 495 MenuButton* menu_button_;
492 496
493 // If non-null mouse drag events are forwarded to this view. See 497 // If non-null mouse drag events are forwarded to this view. See
494 // UpdateActiveMouseView for details. 498 // UpdateActiveMouseView for details.
495 View* active_mouse_view_; 499 View* active_mouse_view_;
496 500
501 internal::MenuControllerDelegate* delegate_;
502
497 DISALLOW_COPY_AND_ASSIGN(MenuController); 503 DISALLOW_COPY_AND_ASSIGN(MenuController);
498 }; 504 };
499 505
500 } // namespace views 506 } // namespace views
501 507
502 #endif // VIEWS_CONTROLS_MENU_MENU_CONTROLLER_H_ 508 #endif // VIEWS_CONTROLS_MENU_MENU_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698