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