| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/views/examples/widget_example.h" |
| |
| #include "base/macros.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "build/build_config.h" |
| #include "ui/views/background.h" |
| #include "ui/views/controls/button/label_button.h" |
| #include "ui/views/controls/label.h" |
| #include "ui/views/layout/box_layout.h" |
| #include "ui/views/view.h" |
| #include "ui/views/widget/widget.h" |
| #include "ui/views/window/dialog_delegate.h" |
| |
| using base::ASCIIToUTF16; |
| |
| namespace views { |
| namespace examples { |
| |
| namespace { |
| |
| class DialogExample : public DialogDelegateView { |
| public: |
| DialogExample(); |
| ~DialogExample() override; |
| base::string16 GetWindowTitle() const override; |
| View* CreateExtraView() override; |
| View* CreateTitlebarExtraView() override; |
| View* CreateFootnoteView() override; |
| }; |
| |
| class ModalDialogExample : public DialogExample { |
| public: |
| ModalDialogExample() {} |
| |
| // WidgetDelegate: |
| ui::ModalType GetModalType() const override { return ui::MODAL_TYPE_WINDOW; } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ModalDialogExample); |
| }; |
| |
| DialogExample::DialogExample() { |
| set_background(Background::CreateSolidBackground(SK_ColorGRAY)); |
| SetLayoutManager(new BoxLayout(BoxLayout::kVertical, 10, 10, 10)); |
| AddChildView(new Label(ASCIIToUTF16("Dialog contents label!"))); |
| } |
| |
| DialogExample::~DialogExample() {} |
| |
| base::string16 DialogExample::GetWindowTitle() const { |
| return ASCIIToUTF16("Dialog Widget Example"); |
| } |
| |
| View* DialogExample::CreateExtraView() { |
| LabelButton* button = new LabelButton(NULL, ASCIIToUTF16("Extra button!")); |
| button->SetStyle(Button::STYLE_BUTTON); |
| return button; |
| } |
| |
| View* DialogExample::CreateTitlebarExtraView() { |
| Label* label = new Label(ASCIIToUTF16("Extra view!")); |
| label->SetEnabledColor(SK_ColorBLUE); |
| return label; |
| } |
| |
| View* DialogExample::CreateFootnoteView() { |
| return new Label(ASCIIToUTF16("Footnote label!")); |
| } |
| |
| } // namespace |
| |
| WidgetExample::WidgetExample() : ExampleBase("Widget") { |
| } |
| |
| WidgetExample::~WidgetExample() { |
| } |
| |
| void WidgetExample::CreateExampleView(View* container) { |
| container->SetLayoutManager(new BoxLayout(BoxLayout::kHorizontal, 0, 0, 10)); |
| BuildButton(container, "Popup widget", POPUP); |
| BuildButton(container, "Dialog widget", DIALOG); |
| BuildButton(container, "Modal Dialog", MODAL_DIALOG); |
| #if defined(OS_LINUX) |
| // Windows does not support TYPE_CONTROL top-level widgets. |
| BuildButton(container, "Child widget", CHILD); |
| #endif |
| } |
| |
| void WidgetExample::BuildButton(View* container, |
| const std::string& label, |
| int tag) { |
| LabelButton* button = new LabelButton(this, ASCIIToUTF16(label)); |
| button->SetFocusable(true); |
| button->set_tag(tag); |
| container->AddChildView(button); |
| } |
| |
| void WidgetExample::ShowWidget(View* sender, Widget::InitParams params) { |
| // Setup shared Widget heirarchy and bounds parameters. |
| params.parent = sender->GetWidget()->GetNativeView(); |
| params.bounds = gfx::Rect(sender->GetBoundsInScreen().CenterPoint(), |
| gfx::Size(300, 200)); |
| |
| Widget* widget = new Widget(); |
| widget->Init(params); |
| |
| // If the Widget has no contents by default, add a view with a 'Close' button. |
| if (!widget->GetContentsView()) { |
| View* contents = new View(); |
| contents->SetLayoutManager(new BoxLayout(BoxLayout::kHorizontal, 0, 0, 0)); |
| contents->set_background(Background::CreateSolidBackground(SK_ColorGRAY)); |
| BuildButton(contents, "Close", CLOSE_WIDGET); |
| widget->SetContentsView(contents); |
| } |
| |
| widget->Show(); |
| } |
| |
| void WidgetExample::ButtonPressed(Button* sender, const ui::Event& event) { |
| switch (sender->tag()) { |
| case POPUP: |
| ShowWidget(sender, Widget::InitParams(Widget::InitParams::TYPE_POPUP)); |
| break; |
| case DIALOG: { |
| DialogDelegate::CreateDialogWidget(new DialogExample(), NULL, |
| sender->GetWidget()->GetNativeView())->Show(); |
| break; |
| } |
| case MODAL_DIALOG: { |
| DialogDelegate::CreateDialogWidget(new ModalDialogExample(), NULL, |
| sender->GetWidget()->GetNativeView())->Show(); |
| break; |
| } |
| case CHILD: |
| ShowWidget(sender, Widget::InitParams(Widget::InitParams::TYPE_CONTROL)); |
| break; |
| case CLOSE_WIDGET: |
| sender->GetWidget()->Close(); |
| break; |
| } |
| } |
| |
| } // namespace examples |
| } // namespace views |