1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_STATUS_STATUS_AREA_BUTTON_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_STATUS_STATUS_AREA_BUTTON_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/status/status_area_host.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/menu_button.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/menu/view_menu_delegate.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Button to be used to represent status and allow menus to be popped up. 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Shows current button state by drawing a border around the current icon. 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass StatusAreaButton : public views::MenuButton { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit StatusAreaButton(StatusAreaHost* host, 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::ViewMenuDelegate* menu_delegate); 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~StatusAreaButton() {} 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void PaintButton(gfx::Canvas* canvas, PaintButtonMode mode); 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Overrides TextButton's SetText to clear max text size before seting new 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // text content so that the button size would fit the new text size. 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void SetText(const std::wstring& text); 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void set_use_menu_button_paint(bool use_menu_button_paint) { 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick use_menu_button_paint_ = use_menu_button_paint; 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // views::MenuButton overrides. 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool Activate() OVERRIDE; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // View overrides. 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::Size GetPreferredSize() OVERRIDE; 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::Insets GetInsets() const OVERRIDE; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnThemeChanged() OVERRIDE; 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Controls whether or not this status area button is able to be pressed. 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void set_active(bool active) { active_ = active; } 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool active() const { return active_; } 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Subclasses should override these methods to return the correct dimensions. 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual int icon_height() { return 24; } 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual int icon_width() { return 23; } 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 49513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Subclasses can override this method to return more or less padding. 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The padding is added to both the left and right side. 51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual int horizontal_padding() { return 1; } 52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // True if the button wants to use views::MenuButton drawings. 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool use_menu_button_paint_; 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Insets to use for this button. 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gfx::Insets insets_; 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Indicates when this button can be pressed. Independent of 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // IsEnabled state, so that when IsEnabled is true, this can still 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // be false, and vice versa. 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool active_; 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The status area host, 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StatusAreaHost* host_; 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void UpdateTextStyle(); 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(StatusAreaButton); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_STATUS_STATUS_AREA_BUTTON_H_ 76