1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/weak_ptr.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/scoped_observer.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/views/toolbar/browser_actions_container_observer.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/view.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Browser;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BrowserActionsContainer;
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WrenchMenu;
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// ExtensionToolbarMenuView is the view containing the extension actions that
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// overflowed from the BrowserActionsContainer, and is contained in and owned by
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// the wrench menu.
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// In the event that the WrenchMenu was opened for an Extension Action drag-and-
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// drop, this will also close the menu upon completion.
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ExtensionToolbarMenuView : public views::View,
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 public BrowserActionsContainerObserver {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ExtensionToolbarMenuView(Browser* browser, WrenchMenu* wrench_menu);
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~ExtensionToolbarMenuView();
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns whether the wrench menu should show this view. This is true when
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // either |container_| has icons to display or the menu was opened for a drag-
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // and-drop operation.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool ShouldShow();
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // views::View:
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual gfx::Size GetPreferredSize() const OVERRIDE;
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual int GetHeightForWidth(int width) const OVERRIDE;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Layout() OVERRIDE;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // BrowserActionsContainerObserver:
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnBrowserActionDragDone() OVERRIDE;
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Closes the |wrench_menu_|.
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void CloseWrenchMenu();
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // The associated browser.
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Browser* browser_;
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // The WrenchMenu, which may need to be closed after a drag-and-drop.
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  WrenchMenu* wrench_menu_;
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // The overflow BrowserActionsContainer which is nested in this view.
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  BrowserActionsContainer* container_;
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ScopedObserver<BrowserActionsContainer, BrowserActionsContainerObserver>
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      browser_actions_container_observer_;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtrFactory<ExtensionToolbarMenuView> weak_factory_;
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(ExtensionToolbarMenuView);
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_
63