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