Home | History | Annotate | Download | only in shell
      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"  // ASCIIToUTF16
      7 #include "ui/aura/root_window.h"
      8 #include "ui/aura/window.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() 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, ASCIIToUTF16("Button"))),
     57       disabled_button_(
     58           new views::LabelButton(NULL, ASCIIToUTF16("Disabled button"))),
     59       checkbox_(new views::Checkbox(ASCIIToUTF16("Checkbox"))),
     60       checkbox_disabled_(new views::Checkbox(
     61           ASCIIToUTF16("Checkbox disabled"))),
     62       checkbox_checked_(new views::Checkbox(ASCIIToUTF16("Checkbox checked"))),
     63       checkbox_checked_disabled_(new views::Checkbox(
     64           ASCIIToUTF16("Checkbox checked disabled"))),
     65       radio_button_(new views::RadioButton(ASCIIToUTF16("Radio button"), 0)),
     66       radio_button_disabled_(new views::RadioButton(
     67           ASCIIToUTF16("Radio button disabled"), 0)),
     68       radio_button_selected_(new views::RadioButton(
     69           ASCIIToUTF16("Radio button selected"), 0)),
     70       radio_button_selected_disabled_(new views::RadioButton(
     71           ASCIIToUTF16("Radio button selected disabled"), 1)) {
     72   button_->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON);
     73   AddChildView(button_);
     74   disabled_button_->SetEnabled(false);
     75   disabled_button_->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON);
     76   AddChildView(disabled_button_);
     77   AddChildView(checkbox_);
     78   checkbox_disabled_->SetEnabled(false);
     79   AddChildView(checkbox_disabled_);
     80   checkbox_checked_->SetChecked(true);
     81   AddChildView(checkbox_checked_);
     82   checkbox_checked_disabled_->SetChecked(true);
     83   checkbox_checked_disabled_->SetEnabled(false);
     84   AddChildView(checkbox_checked_disabled_);
     85   AddChildView(radio_button_);
     86   radio_button_disabled_->SetEnabled(false);
     87   AddChildView(radio_button_disabled_);
     88   radio_button_selected_->SetChecked(true);
     89   AddChildView(radio_button_selected_);
     90   radio_button_selected_disabled_->SetChecked(true);
     91   radio_button_selected_disabled_->SetEnabled(false);
     92   AddChildView(radio_button_selected_disabled_);
     93 }
     94 
     95 WidgetsWindow::~WidgetsWindow() {
     96 }
     97 
     98 void WidgetsWindow::OnPaint(gfx::Canvas* canvas) {
     99   canvas->FillRect(GetLocalBounds(), SK_ColorWHITE);
    100 }
    101 
    102 void WidgetsWindow::Layout() {
    103   const int kVerticalPad = 5;
    104   int left = 5;
    105   int top = kVerticalPad;
    106   for (int i = 0; i < child_count(); ++i) {
    107     views::View* view = child_at(i);
    108     gfx::Size preferred = view->GetPreferredSize();
    109     view->SetBounds(left, top, preferred.width(), preferred.height());
    110     top += preferred.height() + kVerticalPad;
    111   }
    112 }
    113 
    114 gfx::Size WidgetsWindow::GetPreferredSize() {
    115   return gfx::Size(kWindowWidth, kWindowHeight);
    116 }
    117 
    118 views::View* WidgetsWindow::GetContentsView() {
    119   return this;
    120 }
    121 
    122 base::string16 WidgetsWindow::GetWindowTitle() const {
    123   return ASCIIToUTF16("Examples: Widgets");
    124 }
    125 
    126 bool WidgetsWindow::CanResize() const {
    127   return true;
    128 }
    129 
    130 }  // namespace
    131 
    132 namespace ash {
    133 namespace shell {
    134 
    135 void CreateWidgetsWindow() {
    136   gfx::Rect bounds(kWindowLeft, kWindowTop, kWindowWidth, kWindowHeight);
    137   views::Widget* widget =
    138       views::Widget::CreateWindowWithContextAndBounds(
    139           new WidgetsWindow, Shell::GetPrimaryRootWindow(), bounds);
    140   widget->GetNativeView()->SetName("WidgetsWindow");
    141   widget->Show();
    142 }
    143 
    144 }  // namespace shell
    145 }  // namespace ash
    146