extension_toolbar_menu_view.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_
6#define CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_
7
8#include "base/memory/weak_ptr.h"
9#include "base/scoped_observer.h"
10#include "chrome/browser/ui/views/toolbar/browser_actions_container_observer.h"
11#include "ui/views/view.h"
12
13class Browser;
14class BrowserActionsContainer;
15class WrenchMenu;
16
17// ExtensionToolbarMenuView is the view containing the extension actions that
18// overflowed from the BrowserActionsContainer, and is contained in and owned by
19// the wrench menu.
20// In the event that the WrenchMenu was opened for an Extension Action drag-and-
21// drop, this will also close the menu upon completion.
22class ExtensionToolbarMenuView : public views::View,
23                                 public BrowserActionsContainerObserver {
24 public:
25  ExtensionToolbarMenuView(Browser* browser, WrenchMenu* wrench_menu);
26  virtual ~ExtensionToolbarMenuView();
27
28  // Returns whether the wrench menu should show this view. This is true when
29  // either |container_| has icons to display or the menu was opened for a drag-
30  // and-drop operation.
31  bool ShouldShow();
32
33  // views::View:
34  virtual gfx::Size GetPreferredSize() const OVERRIDE;
35  virtual int GetHeightForWidth(int width) const OVERRIDE;
36  virtual void Layout() OVERRIDE;
37
38 private:
39  // BrowserActionsContainerObserver:
40  virtual void OnBrowserActionDragDone() OVERRIDE;
41
42  // Closes the |wrench_menu_|.
43  void CloseWrenchMenu();
44
45  // The associated browser.
46  Browser* browser_;
47
48  // The WrenchMenu, which may need to be closed after a drag-and-drop.
49  WrenchMenu* wrench_menu_;
50
51  // The overflow BrowserActionsContainer which is nested in this view.
52  BrowserActionsContainer* container_;
53
54  ScopedObserver<BrowserActionsContainer, BrowserActionsContainerObserver>
55      browser_actions_container_observer_;
56
57  base::WeakPtrFactory<ExtensionToolbarMenuView> weak_factory_;
58
59  DISALLOW_COPY_AND_ASSIGN(ExtensionToolbarMenuView);
60};
61
62#endif  // CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_
63