Home | History | Annotate | Download | only in toolbar
      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 
     13 class Browser;
     14 class BrowserActionsContainer;
     15 class 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.
     22 class 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