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

Side by Side Diff: chrome/browser/views/browser_actions_container.h

Issue 549224: Support reordering of Browser Actions within the container. Currently does no... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_ 5 #ifndef CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
6 #define CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_ 6 #define CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/task.h" 10 #include "base/task.h"
11 #include "chrome/browser/extensions/extension_toolbar_model.h" 11 #include "chrome/browser/extensions/extension_toolbar_model.h"
12 #include "chrome/browser/extensions/image_loading_tracker.h" 12 #include "chrome/browser/extensions/image_loading_tracker.h"
13 #include "chrome/browser/views/browser_bubble.h" 13 #include "chrome/browser/views/browser_bubble.h"
14 #include "chrome/browser/views/extensions/extension_action_context_menu.h" 14 #include "chrome/browser/views/extensions/extension_action_context_menu.h"
15 #include "chrome/common/notification_observer.h" 15 #include "chrome/common/notification_observer.h"
16 #include "chrome/common/notification_registrar.h" 16 #include "chrome/common/notification_registrar.h"
17 #include "views/controls/button/menu_button.h" 17 #include "views/controls/button/menu_button.h"
18 #include "views/controls/menu/view_menu_delegate.h" 18 #include "views/controls/menu/view_menu_delegate.h"
19 #include "views/controls/resize_gripper.h" 19 #include "views/controls/resize_gripper.h"
20 #include "views/view.h" 20 #include "views/view.h"
21 21
22 class BrowserActionOverflowMenuController;
22 class BrowserActionsContainer; 23 class BrowserActionsContainer;
23 class BrowserActionOverflowMenuController;
24 class Extension; 24 class Extension;
25 class ExtensionAction; 25 class ExtensionAction;
26 class ExtensionPopup; 26 class ExtensionPopup;
27 class PrefService; 27 class PrefService;
28 class Profile; 28 class Profile;
29 class SlideAnimation; 29 class SlideAnimation;
30 class ToolbarView; 30 class ToolbarView;
31 31
32 //////////////////////////////////////////////////////////////////////////////// 32 ////////////////////////////////////////////////////////////////////////////////
33 // BrowserActionButton 33 // BrowserActionButton
34 34
35 // The BrowserActionButton is a specialization of the MenuButton class. 35 // The BrowserActionButton is a specialization of the MenuButton class.
36 // It acts on a ExtensionAction, in this case a BrowserAction and handles 36 // It acts on a ExtensionAction, in this case a BrowserAction and handles
37 // loading the image for the button asynchronously on the file thread. 37 // loading the image for the button asynchronously on the file thread.
38 class BrowserActionButton : public views::MenuButton, 38 class BrowserActionButton : public views::MenuButton,
39 public views::ButtonListener, 39 public views::ButtonListener,
40 public ImageLoadingTracker::Observer, 40 public ImageLoadingTracker::Observer,
41 public NotificationObserver { 41 public NotificationObserver {
42 public: 42 public:
43 BrowserActionButton(Extension* extension, BrowserActionsContainer* panel); 43 BrowserActionButton(Extension* extension, BrowserActionsContainer* panel);
44 ~BrowserActionButton(); 44 ~BrowserActionButton();
45 45
46 ExtensionAction* browser_action() const { return browser_action_; } 46 ExtensionAction* browser_action() const { return browser_action_; }
47 Extension* extension() { return extension_; } 47 Extension* extension() { return extension_; }
48 48
49 // Called to update the display to match the browser action's state. 49 // Called to update the display to match the browser action's state.
50 void UpdateState(); 50 void UpdateState();
51 51
52 // Returns the default icon, if any.
53 const SkBitmap& default_icon() const { return default_icon_; }
54
52 // Overridden from views::View. Return a 0-inset so the icon can draw all the 55 // Overridden from views::View. Return a 0-inset so the icon can draw all the
53 // way to the edge of the view if it wants. 56 // way to the edge of the view if it wants.
54 virtual gfx::Insets GetInsets() const; 57 virtual gfx::Insets GetInsets() const;
55 58
56 // Overridden from views::ButtonListener: 59 // Overridden from views::ButtonListener:
57 virtual void ButtonPressed(views::Button* sender, const views::Event& event); 60 virtual void ButtonPressed(views::Button* sender, const views::Event& event);
58 61
59 // Overridden from ImageLoadingTracker. 62 // Overridden from ImageLoadingTracker.
60 virtual void OnImageLoaded(SkBitmap* image, size_t index); 63 virtual void OnImageLoaded(SkBitmap* image, size_t index);
61 64
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 virtual void Layout(); 133 virtual void Layout();
131 134
132 // Override PaintChildren so that we can paint the badge on top of children. 135 // Override PaintChildren so that we can paint the badge on top of children.
133 virtual void PaintChildren(gfx::Canvas* canvas); 136 virtual void PaintChildren(gfx::Canvas* canvas);
134 137
135 // The container for this view. 138 // The container for this view.
136 BrowserActionsContainer* panel_; 139 BrowserActionsContainer* panel_;
137 140
138 // The button this view contains. 141 // The button this view contains.
139 BrowserActionButton* button_; 142 BrowserActionButton* button_;
143
144 DISALLOW_COPY_AND_ASSIGN(BrowserActionView);
140 }; 145 };
141 146
142 //////////////////////////////////////////////////////////////////////////////// 147 ////////////////////////////////////////////////////////////////////////////////
143 // 148 //
144 // The BrowserActionsContainer is a container view, responsible for drawing the 149 // The BrowserActionsContainer is a container view, responsible for drawing the
145 // browser action icons (extensions that add icons to the toolbar). 150 // browser action icons (extensions that add icons to the toolbar).
146 // 151 //
147 // The BrowserActionsContainer (when it contains one or more icons) consists of 152 // The BrowserActionsContainer (when it contains one or more icons) consists of
148 // the following elements, numbered as seen below the line: 153 // the following elements, numbered as seen below the line:
149 // 154 //
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 // because we won't have enough space to show the new Browser Action until the 215 // because we won't have enough space to show the new Browser Action until the
211 // animation ends and we don't want the chevron to flash into view while we are 216 // animation ends and we don't want the chevron to flash into view while we are
212 // growing the container. 217 // growing the container.
213 // 218 //
214 //////////////////////////////////////////////////////////////////////////////// 219 ////////////////////////////////////////////////////////////////////////////////
215 class BrowserActionsContainer 220 class BrowserActionsContainer
216 : public views::View, 221 : public views::View,
217 public NotificationObserver, 222 public NotificationObserver,
218 public BrowserBubble::Delegate, 223 public BrowserBubble::Delegate,
219 public views::ViewMenuDelegate, 224 public views::ViewMenuDelegate,
225 public views::DragController,
220 public views::ResizeGripper::ResizeGripperDelegate, 226 public views::ResizeGripper::ResizeGripperDelegate,
221 public AnimationDelegate, 227 public AnimationDelegate,
222 public ExtensionToolbarModel::Observer { 228 public ExtensionToolbarModel::Observer {
223 public: 229 public:
224 BrowserActionsContainer(Profile* profile, ToolbarView* toolbar); 230 BrowserActionsContainer(Profile* profile, ToolbarView* toolbar);
225 virtual ~BrowserActionsContainer(); 231 virtual ~BrowserActionsContainer();
226 232
227 static void RegisterUserPrefs(PrefService* prefs); 233 static void RegisterUserPrefs(PrefService* prefs);
228 234
229 // Get the number of browser actions being displayed. 235 // Get the number of browser actions being displayed.
(...skipping 12 matching lines...) Expand all
242 BrowserActionView* GetBrowserActionViewAt(int index) { 248 BrowserActionView* GetBrowserActionViewAt(int index) {
243 return browser_action_views_[index]; 249 return browser_action_views_[index];
244 } 250 }
245 251
246 // Retrieve the BrowserActionView for |extension|. 252 // Retrieve the BrowserActionView for |extension|.
247 BrowserActionView* GetBrowserActionView(Extension* extension); 253 BrowserActionView* GetBrowserActionView(Extension* extension);
248 254
249 // Update the views to reflect the state of the browser action icons. 255 // Update the views to reflect the state of the browser action icons.
250 void RefreshBrowserActionViews(); 256 void RefreshBrowserActionViews();
251 257
258 // Sets up the browser action view vector.
259 void CreateBrowserActionViews();
260
252 // Delete all browser action views. 261 // Delete all browser action views.
253 void DeleteBrowserActionViews(); 262 void DeleteBrowserActionViews();
254 263
255 // Called when a browser action becomes visible/hidden. 264 // Called when a browser action becomes visible/hidden.
256 void OnBrowserActionVisibilityChanged(); 265 void OnBrowserActionVisibilityChanged();
257 266
258 // Called when the user clicks on the browser action icon. 267 // Called when the user clicks on the browser action icon.
259 void OnBrowserActionExecuted(BrowserActionButton* button); 268 void OnBrowserActionExecuted(BrowserActionButton* button);
260 269
261 // Overridden from views::View: 270 // Overridden from views::View:
262 virtual gfx::Size GetPreferredSize(); 271 virtual gfx::Size GetPreferredSize();
263 virtual void Layout(); 272 virtual void Layout();
264 virtual void Paint(gfx::Canvas* canvas); 273 virtual void Paint(gfx::Canvas* canvas);
265 virtual void ViewHierarchyChanged(bool is_add, 274 virtual void ViewHierarchyChanged(bool is_add,
266 views::View* parent, 275 views::View* parent,
267 views::View* child); 276 views::View* child);
277 virtual bool GetDropFormats(
278 int* formats, std::set<OSExchangeData::CustomFormat>* custom_formats);
279 virtual bool AreDropTypesRequired();
280 virtual bool CanDrop(const OSExchangeData& data);
281 virtual void OnDragEntered(const views::DropTargetEvent& event);
282 virtual int OnDragUpdated(const views::DropTargetEvent& event);
283 virtual void OnDragExited();
284 virtual int OnPerformDrop(const views::DropTargetEvent& event);
268 285
269 // Overridden from NotificationObserver: 286 // Overridden from NotificationObserver:
270 virtual void Observe(NotificationType type, 287 virtual void Observe(NotificationType type,
271 const NotificationSource& source, 288 const NotificationSource& source,
272 const NotificationDetails& details); 289 const NotificationDetails& details);
273 290
274 // BrowserBubble::Delegate methods. 291 // BrowserBubble::Delegate methods.
275 virtual void BubbleBrowserWindowMoved(BrowserBubble* bubble); 292 virtual void BubbleBrowserWindowMoved(BrowserBubble* bubble);
276 virtual void BubbleBrowserWindowClosing(BrowserBubble* bubble); 293 virtual void BubbleBrowserWindowClosing(BrowserBubble* bubble);
277 virtual void BubbleGotFocus(BrowserBubble* bubble); 294 virtual void BubbleGotFocus(BrowserBubble* bubble);
278 virtual void BubbleLostFocus(BrowserBubble* bubble, 295 virtual void BubbleLostFocus(BrowserBubble* bubble,
279 gfx::NativeView focused_view); 296 gfx::NativeView focused_view);
280 297
281 // Overridden from views::ViewMenuDelegate: 298 // Overridden from views::ViewMenuDelegate:
282 virtual void RunMenu(View* source, const gfx::Point& pt); 299 virtual void RunMenu(View* source, const gfx::Point& pt);
283 300
301 // Overridden from views::DragController:
302 virtual void WriteDragData(View* sender,
303 int press_x,
304 int press_y,
305 OSExchangeData* data);
306 virtual int GetDragOperations(View* sender, int x, int y);
307 virtual bool CanStartDrag(View* sender,
308 int press_x,
309 int press_y,
310 int x,
311 int y);
312
284 // Overridden from ResizeGripper::ResizeGripperDelegate: 313 // Overridden from ResizeGripper::ResizeGripperDelegate:
285 virtual void OnResize(int resize_amount, bool done_resizing); 314 virtual void OnResize(int resize_amount, bool done_resizing);
286 315
287 // Overridden from AnimationDelegate: 316 // Overridden from AnimationDelegate:
288 virtual void AnimationProgressed(const Animation* animation); 317 virtual void AnimationProgressed(const Animation* animation);
289 virtual void AnimationEnded(const Animation* animation); 318 virtual void AnimationEnded(const Animation* animation);
290 319
291 // Hide the current popup. 320 // Hide the current popup.
292 void HidePopup(); 321 void HidePopup();
293 322
294 // Simulate a click on a browser action button. This should only be 323 // Simulate a click on a browser action button. This should only be
295 // used by unit tests. 324 // used by unit tests.
296 void TestExecuteBrowserAction(int index); 325 void TestExecuteBrowserAction(int index);
297 326
298 // Retrieve the current popup. This should only be used by unit tests. 327 // Retrieve the current popup. This should only be used by unit tests.
299 ExtensionPopup* TestGetPopup() { return popup_; } 328 ExtensionPopup* TestGetPopup() { return popup_; }
300 329
301 private: 330 private:
302 // ExtensionToolbarModel::Observer implementation. 331 // ExtensionToolbarModel::Observer implementation.
303 virtual void BrowserActionAdded(Extension* extension, int index); 332 virtual void BrowserActionAdded(Extension* extension, int index);
304 virtual void BrowserActionRemoved(Extension* extension); 333 virtual void BrowserActionRemoved(Extension* extension);
334 virtual void BrowserActionMoved(Extension* extension, int index);
305 335
306 // Closes the overflow menu if open. 336 // Closes the overflow menu if open.
307 void CloseOverflowMenu(); 337 void CloseOverflowMenu();
308 338
309 // Takes a width in pixels, calculates how many icons fit within that space 339 // Takes a width in pixels, calculates how many icons fit within that space
310 // (up to the maximum number of icons in our vector) and shaves off the 340 // (up to the maximum number of icons in our vector) and shaves off the
311 // excess pixels. 341 // excess pixels. |allow_shrink_to_minimum| specifies whether this function
312 int ClampToNearestIconCount(int pixels) const; 342 // clamps the size down further (down to ContainerMinSize()) if there is not
343 // room for even one icon. When determining how large the container should be
344 // this should be |true|. When determining where to place items, such as the
345 // drop indicator, this should be |false|.
346 int ClampToNearestIconCount(int pixels, bool allow_shrink_to_minimum) const;
313 347
314 // Calculates the width of the container area NOT used to show the icons (the 348 // Calculates the width of the container area NOT used to show the icons (the
315 // controls to the left and to the right of the icons). 349 // controls to the left and to the right of the icons).
316 int WidthOfNonIconArea() const; 350 int WidthOfNonIconArea() const;
317 351
318 // Given a number of |icons| return the amount of pixels needed to draw it, 352 // Given a number of |icons| return the amount of pixels needed to draw it,
319 // including the controls (chevron if visible and resize gripper). 353 // including the controls (chevron if visible and resize gripper).
320 int IconCountToWidth(int icons) const; 354 int IconCountToWidth(int icons) const;
321 355
322 // Returns the absolute minimum size you can shrink the container down to and 356 // Returns the absolute minimum size you can shrink the container down to and
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 401
368 // This is used while the user is resizing (and when the animations are in 402 // This is used while the user is resizing (and when the animations are in
369 // progress) to know how wide the delta is between the current state and what 403 // progress) to know how wide the delta is between the current state and what
370 // we should draw. 404 // we should draw.
371 int resize_amount_; 405 int resize_amount_;
372 406
373 // Keeps track of the absolute pixel width the container should have when we 407 // Keeps track of the absolute pixel width the container should have when we
374 // are done animating. 408 // are done animating.
375 int animation_target_size_; 409 int animation_target_size_;
376 410
411 // The x position for where to draw the drop indicator. -1 if no indicator.
412 int drop_indicator_position_;
413
377 ScopedRunnableMethodFactory<BrowserActionsContainer> task_factory_; 414 ScopedRunnableMethodFactory<BrowserActionsContainer> task_factory_;
378 415
379 DISALLOW_COPY_AND_ASSIGN(BrowserActionsContainer); 416 DISALLOW_COPY_AND_ASSIGN(BrowserActionsContainer);
380 }; 417 };
381 418
382 #endif // CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_ 419 #endif // CHROME_BROWSER_VIEWS_BROWSER_ACTIONS_CONTAINER_H_
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_toolbar_model.h ('k') | chrome/browser/views/browser_actions_container.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698