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 16 namespace { 17 18 // Default window position. 19 const int kWindowLeft = 170; 20 const int kWindowTop = 200; 21 22 // Default window size. 23 const int kWindowWidth = 400; 24 const int kWindowHeight = 400; 25 26 // A window showing samples of commonly used widgets. 27 class 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() const 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 55 WidgetsWindow::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 97 WidgetsWindow::~WidgetsWindow() { 98 } 99 100 void WidgetsWindow::OnPaint(gfx::Canvas* canvas) { 101 canvas->FillRect(GetLocalBounds(), SK_ColorWHITE); 102 } 103 104 void 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 116 gfx::Size WidgetsWindow::GetPreferredSize() const { 117 return gfx::Size(kWindowWidth, kWindowHeight); 118 } 119 120 views::View* WidgetsWindow::GetContentsView() { 121 return this; 122 } 123 124 base::string16 WidgetsWindow::GetWindowTitle() const { 125 return base::ASCIIToUTF16("Examples: Widgets"); 126 } 127 128 bool WidgetsWindow::CanResize() const { 129 return true; 130 } 131 132 } // namespace 133 134 namespace ash { 135 namespace shell { 136 137 void 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