diff options
author | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-19 21:41:39 +0000 |
---|---|---|
committer | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-19 21:41:39 +0000 |
commit | 7894b78eafb59d0cd5a9138db8d72315637b9fb7 (patch) | |
tree | 3662f5b280d869cc5e1c664a3f3bc1ae45624481 /ui/views/examples/widget_example.cc | |
parent | e0281af2fe7687aa615a8a4c5bb621767c6cd111 (diff) | |
download | chromium_src-7894b78eafb59d0cd5a9138db8d72315637b9fb7.zip chromium_src-7894b78eafb59d0cd5a9138db8d72315637b9fb7.tar.gz chromium_src-7894b78eafb59d0cd5a9138db8d72315637b9fb7.tar.bz2 |
Move ash/wm's DialogFrameView to ui/views/window; etc.
Move ash/wm/dialog_frame_view.[h|cc] to ui/views/window/.
Move DialogFrameView to views namespace; export; cleanup.
Expose static DialogDelegate::UseNewStyle() for commandline flag.
OVERRIDE DialogDelegate::CreateNonClientFrameView to use DialogFrameView with flag.
OVERRIDE DialogDelegateView::GetContentsView to return |this|.
(nix redundant GetContentsView() OVERRIDEs from subclasses)
Cleanup DialogClientView ctor; encapsulate StyleParams struct.
Rewrite WidgetExample; nix transparency, add dialog widget, consolidate.
BUG=166075
TEST=views_examples WidgetExample changes with --enabled-new-dialog-style
R=sky@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11571023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173993 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views/examples/widget_example.cc')
-rw-r--r-- | ui/views/examples/widget_example.cc | 139 |
1 files changed, 27 insertions, 112 deletions
diff --git a/ui/views/examples/widget_example.cc b/ui/views/examples/widget_example.cc index f3ab572..112f57a 100644 --- a/ui/views/examples/widget_example.cc +++ b/ui/views/examples/widget_example.cc @@ -7,39 +7,12 @@ #include "base/utf_string_conversions.h" #include "ui/views/controls/button/text_button.h" #include "ui/views/layout/box_layout.h" -#include "ui/views/layout/layout_manager.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" +#include "ui/views/window/dialog_delegate.h" namespace views { namespace examples { -namespace { - -// A layout manager that layouts a single child at -// the center of the host view. -class CenterLayout : public LayoutManager { - public: - CenterLayout() {} - virtual ~CenterLayout() {} - - // Overridden from LayoutManager: - virtual void Layout(View* host) { - View* child = host->child_at(0); - gfx::Size size = child->GetPreferredSize(); - child->SetBounds((host->width() - size.width()) / 2, - (host->height() - size.height()) / 2, - size.width(), size.height()); - } - - virtual gfx::Size GetPreferredSize(View* host) { - return gfx::Size(); - } - - private: - DISALLOW_COPY_AND_ASSIGN(CenterLayout); -}; - -} // namespace WidgetExample::WidgetExample() : ExampleBase("Widget") { } @@ -48,19 +21,12 @@ WidgetExample::~WidgetExample() { } void WidgetExample::CreateExampleView(View* container) { - container->SetLayoutManager( - new BoxLayout(BoxLayout::kHorizontal, 0, 0, 2)); - BuildButton(container, "Create a popup widget", POPUP); - BuildButton(container, "Create a transparent popup widget", - TRANSPARENT_POPUP); + container->SetLayoutManager(new BoxLayout(BoxLayout::kHorizontal, 0, 0, 2)); + BuildButton(container, "Popup widget", POPUP); + BuildButton(container, "Dialog widget", DIALOG); #if defined(OS_LINUX) - View* vert_container = new View(); - container->AddChildView(vert_container); - vert_container->SetLayoutManager( - new BoxLayout(BoxLayout::kVertical, 0, 0, 20)); - BuildButton(vert_container, "Create a child widget", CHILD); - BuildButton(vert_container, "Create a transparent child widget", - TRANSPARENT_CHILD); + // Windows does not support TYPE_CONTROL top-level widgets. + BuildButton(container, "Child widget", CHILD); #endif } @@ -72,92 +38,41 @@ void WidgetExample::BuildButton(View* container, container->AddChildView(button); } -void WidgetExample::InitWidget(Widget* widget, bool transparent) { - // Add view/native buttons to close the popup widget. - TextButton* close_button = new TextButton( - this, ASCIIToUTF16("Close")); - close_button->set_tag(CLOSE_WIDGET); - // TODO(oshima): support transparent native view. - NativeTextButton* native_button = new NativeTextButton( - this, ASCIIToUTF16("Native Close")); - native_button->set_tag(CLOSE_WIDGET); - - View* button_container = new View(); - button_container->SetLayoutManager( - new BoxLayout(BoxLayout::kHorizontal, 0, 0, 1)); - button_container->AddChildView(close_button); - button_container->AddChildView(native_button); - - View* widget_container = new View(); - widget_container->SetLayoutManager(new CenterLayout); - widget_container->AddChildView(button_container); +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(200, 100)); - widget->SetContentsView(widget_container); + Widget* widget = new Widget(); + widget->Init(params); - if (!transparent) { - widget_container->set_background( - Background::CreateStandardPanelBackground()); + // 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); } - // Show the widget. widget->Show(); } -#if defined(OS_LINUX) -void WidgetExample::CreateChild(View* parent, bool transparent) { - Widget* widget = new Widget; - // Compute where to place the child widget. - // We'll place it at the center of the root widget. - Widget* parent_widget = parent->GetWidget(); - gfx::Rect bounds = parent_widget->GetClientAreaBoundsInScreen(); - // Child widget is 200x200 square. - bounds.SetRect((bounds.width() - 200) / 2, (bounds.height() - 200) / 2, - 200, 200); - // Initialize the child widget with the computed bounds. - Widget::InitParams params(Widget::InitParams::TYPE_CONTROL); - params.transparent = transparent; - params.parent = parent_widget->GetNativeView(); - widget->Init(params); - InitWidget(widget, transparent); -} -#endif - -void WidgetExample::CreatePopup(View* parent, bool transparent) { - Widget* widget = new Widget; - - // Compute where to place the popup widget. - // We'll place it right below the create button. - gfx::Point point = parent->GetMirroredPosition(); - // The position in point is relative to the parent. Make it absolute. - View::ConvertPointToScreen(parent, &point); - // Add the height of create_button_. - point.Offset(0, parent->size().height()); - - // Initialize the popup widget with the computed bounds. - Widget::InitParams params(Widget::InitParams::TYPE_POPUP); - params.transparent = transparent; - params.parent = parent->GetWidget()->GetNativeView(); - params.bounds = gfx::Rect(point.x(), point.y(), 200, 300); - widget->Init(params); - InitWidget(widget, transparent); -} - void WidgetExample::ButtonPressed(Button* sender, const ui::Event& event) { switch (sender->tag()) { case POPUP: - CreatePopup(sender, false); + ShowWidget(sender, Widget::InitParams(Widget::InitParams::TYPE_POPUP)); break; - case TRANSPARENT_POPUP: - CreatePopup(sender, true); + case DIALOG: { + Widget::InitParams params(Widget::InitParams::TYPE_WINDOW); + params.delegate = new DialogDelegateView(); + ShowWidget(sender, params); break; -#if defined(OS_LINUX) + } case CHILD: - CreateChild(sender, false); + ShowWidget(sender, Widget::InitParams(Widget::InitParams::TYPE_CONTROL)); break; - case TRANSPARENT_CHILD: - CreateChild(sender, true); - break; -#endif case CLOSE_WIDGET: sender->GetWidget()->Close(); break; |