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 14class ToolbarView; 15 16// TODO(gbillock): Rename this? No longer a wrench. 17class 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