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