widgets.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright (c) 2012 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#include "ash/shell.h"
6#include "base/strings/utf_string_conversions.h"
7#include "ui/aura/window.h"
8#include "ui/aura/window_event_dispatcher.h"
9#include "ui/gfx/canvas.h"
10#include "ui/views/controls/button/checkbox.h"
11#include "ui/views/controls/button/label_button.h"
12#include "ui/views/controls/button/radio_button.h"
13#include "ui/views/widget/widget.h"
14#include "ui/views/widget/widget_delegate.h"
15
16namespace {
17
18// Default window position.
19const int kWindowLeft = 170;
20const int kWindowTop = 200;
21
22// Default window size.
23const int kWindowWidth = 400;
24const int kWindowHeight = 400;
25
26// A window showing samples of commonly used widgets.
27class WidgetsWindow : public views::WidgetDelegateView {
28 public:
29  WidgetsWindow();
30  virtual ~WidgetsWindow();
31
32  // Overridden from views::View:
33  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
34  virtual void Layout() OVERRIDE;
35  virtual gfx::Size GetPreferredSize() OVERRIDE;
36
37  // Overridden from views::WidgetDelegate:
38  virtual views::View* GetContentsView() OVERRIDE;
39  virtual base::string16 GetWindowTitle() const OVERRIDE;
40  virtual bool CanResize() const OVERRIDE;
41
42 private:
43  views::LabelButton* button_;
44  views::LabelButton* disabled_button_;
45  views::Checkbox* checkbox_;
46  views::Checkbox* checkbox_disabled_;
47  views::Checkbox* checkbox_checked_;
48  views::Checkbox* checkbox_checked_disabled_;
49  views::RadioButton* radio_button_;
50  views::RadioButton* radio_button_disabled_;
51  views::RadioButton* radio_button_selected_;
52  views::RadioButton* radio_button_selected_disabled_;
53};
54
55WidgetsWindow::WidgetsWindow()
56    : button_(new views::LabelButton(NULL, base::ASCIIToUTF16("Button"))),
57      disabled_button_(
58          new views::LabelButton(NULL, base::ASCIIToUTF16("Disabled button"))),
59      checkbox_(new views::Checkbox(base::ASCIIToUTF16("Checkbox"))),
60      checkbox_disabled_(new views::Checkbox(
61          base::ASCIIToUTF16("Checkbox disabled"))),
62      checkbox_checked_(new views::Checkbox(
63          base::ASCIIToUTF16("Checkbox checked"))),
64      checkbox_checked_disabled_(new views::Checkbox(
65          base::ASCIIToUTF16("Checkbox checked disabled"))),
66      radio_button_(new views::RadioButton(
67          base::ASCIIToUTF16("Radio button"), 0)),
68      radio_button_disabled_(new views::RadioButton(
69          base::ASCIIToUTF16("Radio button disabled"), 0)),
70      radio_button_selected_(new views::RadioButton(
71          base::ASCIIToUTF16("Radio button selected"), 0)),
72      radio_button_selected_disabled_(new views::RadioButton(
73          base::ASCIIToUTF16("Radio button selected disabled"), 1)) {
74  button_->SetStyle(views::Button::STYLE_BUTTON);
75  AddChildView(button_);
76  disabled_button_->SetEnabled(false);
77  disabled_button_->SetStyle(views::Button::STYLE_BUTTON);
78  AddChildView(disabled_button_);
79  AddChildView(checkbox_);
80  checkbox_disabled_->SetEnabled(false);
81  AddChildView(checkbox_disabled_);
82  checkbox_checked_->SetChecked(true);
83  AddChildView(checkbox_checked_);
84  checkbox_checked_disabled_->SetChecked(true);
85  checkbox_checked_disabled_->SetEnabled(false);
86  AddChildView(checkbox_checked_disabled_);
87  AddChildView(radio_button_);
88  radio_button_disabled_->SetEnabled(false);
89  AddChildView(radio_button_disabled_);
90  radio_button_selected_->SetChecked(true);
91  AddChildView(radio_button_selected_);
92  radio_button_selected_disabled_->SetChecked(true);
93  radio_button_selected_disabled_->SetEnabled(false);
94  AddChildView(radio_button_selected_disabled_);
95}
96
97WidgetsWindow::~WidgetsWindow() {
98}
99
100void WidgetsWindow::OnPaint(gfx::Canvas* canvas) {
101  canvas->FillRect(GetLocalBounds(), SK_ColorWHITE);
102}
103
104void WidgetsWindow::Layout() {
105  const int kVerticalPad = 5;
106  int left = 5;
107  int top = kVerticalPad;
108  for (int i = 0; i < child_count(); ++i) {
109    views::View* view = child_at(i);
110    gfx::Size preferred = view->GetPreferredSize();
111    view->SetBounds(left, top, preferred.width(), preferred.height());
112    top += preferred.height() + kVerticalPad;
113  }
114}
115
116gfx::Size WidgetsWindow::GetPreferredSize() {
117  return gfx::Size(kWindowWidth, kWindowHeight);
118}
119
120views::View* WidgetsWindow::GetContentsView() {
121  return this;
122}
123
124base::string16 WidgetsWindow::GetWindowTitle() const {
125  return base::ASCIIToUTF16("Examples: Widgets");
126}
127
128bool WidgetsWindow::CanResize() const {
129  return true;
130}
131
132}  // namespace
133
134namespace ash {
135namespace shell {
136
137void CreateWidgetsWindow() {
138  gfx::Rect bounds(kWindowLeft, kWindowTop, kWindowWidth, kWindowHeight);
139  views::Widget* widget =
140      views::Widget::CreateWindowWithContextAndBounds(
141          new WidgetsWindow, Shell::GetPrimaryRootWindow(), bounds);
142  widget->GetNativeView()->SetName("WidgetsWindow");
143  widget->Show();
144}
145
146}  // namespace shell
147}  // namespace ash
148