Home | History | Annotate | Download | only in toolbar
      1 // Copyright 2013 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_WRENCH_TOOLBAR_BUTTON_H_
      6 #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_WRENCH_TOOLBAR_BUTTON_H_
      7 
      8 #include "base/macros.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/memory/weak_ptr.h"
     11 #include "chrome/browser/ui/toolbar/wrench_icon_painter.h"
     12 #include "ui/views/controls/button/menu_button.h"
     13 
     14 class ToolbarView;
     15 
     16 // TODO(gbillock): Rename this? No longer a wrench.
     17 class WrenchToolbarButton : public views::MenuButton,
     18                             public WrenchIconPainter::Delegate {
     19  public:
     20   explicit WrenchToolbarButton(ToolbarView* toolbar_view);
     21   virtual ~WrenchToolbarButton();
     22 
     23   void SetSeverity(WrenchIconPainter::Severity severity, bool animate);
     24 
     25   // views::MenuButton:
     26   virtual gfx::Size GetPreferredSize() const OVERRIDE;
     27   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
     28 
     29   // WrenchIconPainter::Delegate:
     30   virtual void ScheduleWrenchIconPaint() OVERRIDE;
     31 
     32   // Opens the wrench menu immediately during a drag-and-drop operation.
     33   // Used only in testing.
     34   static bool g_open_wrench_immediately_for_testing;
     35 
     36  private:
     37   // views::View:
     38   virtual bool GetDropFormats(int* formats,
     39       std::set<ui::OSExchangeData::CustomFormat>* custom_formats) OVERRIDE;
     40   virtual bool AreDropTypesRequired() OVERRIDE;
     41   virtual bool CanDrop(const ui::OSExchangeData& data) OVERRIDE;
     42   virtual void OnDragEntered(const ui::DropTargetEvent& event) OVERRIDE;
     43   virtual int OnDragUpdated(const ui::DropTargetEvent& event) OVERRIDE;
     44   virtual void OnDragExited() OVERRIDE;
     45   virtual int OnPerformDrop(const ui::DropTargetEvent& event) OVERRIDE;
     46 
     47   // Show the extension action overflow menu (which is in the app menu).
     48   void ShowOverflowMenu();
     49 
     50   scoped_ptr<WrenchIconPainter> wrench_icon_painter_;
     51 
     52   // Our owning toolbar view.
     53   ToolbarView* toolbar_view_;
     54 
     55   // Whether or not we should allow dragging extension icons onto this button
     56   // (in order to open the overflow in the app/wrench menu).
     57   bool allow_extension_dragging_;
     58 
     59   // Used to spawn weak pointers for delayed tasks to open the overflow menu.
     60   base::WeakPtrFactory<WrenchToolbarButton> weak_factory_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(WrenchToolbarButton);
     63 };
     64 
     65 #endif  // CHROME_BROWSER_UI_VIEWS_TOOLBAR_WRENCH_TOOLBAR_BUTTON_H_
     66