Index: ui/aura_shell/examples/window_type_launcher.cc |
=================================================================== |
--- ui/aura_shell/examples/window_type_launcher.cc (revision 110305) |
+++ ui/aura_shell/examples/window_type_launcher.cc (working copy) |
@@ -24,6 +24,120 @@ |
namespace aura_shell { |
namespace examples { |
+namespace { |
+ |
+SkColor g_colors[] = { SK_ColorRED, |
+ SK_ColorYELLOW, |
+ SK_ColorBLUE, |
+ SK_ColorGREEN }; |
+int g_color_index = 0; |
+ |
+class ModalWindow : public views::WidgetDelegateView, |
+ public views::ButtonListener { |
+ public: |
+ ModalWindow() |
+ : color_(g_colors[g_color_index]), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(open_button_( |
+ new views::NativeTextButton(this, ASCIIToUTF16("Moar!")))) { |
+ g_color_index = ++g_color_index % arraysize(g_colors); |
+ AddChildView(open_button_); |
+ } |
+ virtual ~ModalWindow() { |
+ } |
+ |
+ static void OpenModalWindow(aura::Window* parent) { |
+ views::Widget* widget = |
+ views::Widget::CreateWindowWithParent(new ModalWindow, parent); |
+ widget->GetNativeView()->set_name("ModalWindow"); |
+ widget->Show(); |
+ } |
+ |
+ // Overridden from views::View: |
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { |
+ canvas->FillRect(color_, GetLocalBounds()); |
+ } |
+ virtual gfx::Size GetPreferredSize() OVERRIDE { |
+ return gfx::Size(200, 200); |
+ } |
+ virtual void Layout() OVERRIDE { |
+ gfx::Size open_ps = open_button_->GetPreferredSize(); |
+ gfx::Rect local_bounds = GetLocalBounds(); |
+ open_button_->SetBounds( |
+ 5, local_bounds.bottom() - open_ps.height() - 5, |
+ open_ps.width(), open_ps.height()); |
+ } |
+ |
+ // Overridden from views::WidgetDelegate: |
+ virtual views::View* GetContentsView() OVERRIDE { |
+ return this; |
+ } |
+ virtual bool CanResize() const OVERRIDE { |
+ return true; |
+ } |
+ virtual string16 GetWindowTitle() const OVERRIDE { |
+ return L"Modal Window"; |
+ } |
+ virtual bool IsModal() const OVERRIDE { |
+ return true; |
+ } |
+ |
+ // Overridden from views::ButtonListener: |
+ virtual void ButtonPressed(views::Button* sender, |
+ const views::Event& event) OVERRIDE { |
+ DCHECK(sender == open_button_); |
+ OpenModalWindow(GetWidget()->GetNativeView()); |
+ } |
+ |
+ private: |
+ SkColor color_; |
+ views::NativeTextButton* open_button_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ModalWindow); |
+}; |
+ |
+class NonModalTransient : public views::WidgetDelegateView { |
+ public: |
+ NonModalTransient() |
+ : color_(g_colors[g_color_index]) { |
+ g_color_index = ++g_color_index % arraysize(g_colors); |
+ } |
+ virtual ~NonModalTransient() { |
+ } |
+ |
+ static void OpenNonModalTransient(aura::Window* parent) { |
+ views::Widget* widget = |
+ views::Widget::CreateWindowWithParent(new NonModalTransient, parent); |
+ widget->GetNativeView()->set_name("NonModalTransient"); |
+ widget->Show(); |
+ } |
+ |
+ // Overridden from views::View: |
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { |
+ canvas->FillRect(color_, GetLocalBounds()); |
+ } |
+ virtual gfx::Size GetPreferredSize() OVERRIDE { |
+ return gfx::Size(250, 250); |
+ } |
+ |
+ // Overridden from views::WidgetDelegate: |
+ virtual views::View* GetContentsView() OVERRIDE { |
+ return this; |
+ } |
+ virtual bool CanResize() const OVERRIDE { |
+ return true; |
+ } |
+ virtual string16 GetWindowTitle() const OVERRIDE { |
+ return L"Non-Modal Transient"; |
+ } |
+ |
+ private: |
+ SkColor color_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NonModalTransient); |
+}; |
+ |
+} // namespace |
+ |
void InitWindowTypeLauncher() { |
views::Widget* widget = |
views::Widget::CreateWindowWithBounds(new WindowTypeLauncher, |
@@ -45,12 +159,20 @@ |
new views::NativeTextButton(this, ASCIIToUTF16("Lock Screen")))), |
ALLOW_THIS_IN_INITIALIZER_LIST(widgets_button_( |
new views::NativeTextButton( |
- this, ASCIIToUTF16("Show Example Widgets")))) { |
+ this, ASCIIToUTF16("Show Example Widgets")))), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(modal_button_( |
+ new views::NativeTextButton( |
+ this, ASCIIToUTF16("Open Modal Window")))), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(transient_button_( |
+ new views::NativeTextButton( |
+ this, ASCIIToUTF16("Open Non-Modal Transient Window")))) { |
AddChildView(create_button_); |
AddChildView(create_nonresizable_button_); |
AddChildView(bubble_button_); |
AddChildView(lock_button_); |
AddChildView(widgets_button_); |
+ AddChildView(modal_button_); |
+ AddChildView(transient_button_); |
set_context_menu_controller(this); |
} |
@@ -88,6 +210,16 @@ |
widgets_button_->SetBounds( |
5, lock_button_->y() - widgets_ps.height() - 5, |
widgets_ps.width(), widgets_ps.height()); |
+ |
+ gfx::Size modal_ps = modal_button_->GetPreferredSize(); |
+ modal_button_->SetBounds( |
+ 5, widgets_button_->y() - modal_ps.height() - 5, |
+ modal_ps.width(), modal_ps.height()); |
+ |
+ gfx::Size transient_ps = transient_button_->GetPreferredSize(); |
+ transient_button_->SetBounds( |
+ 5, modal_button_->y() - transient_ps.height() - 5, |
+ transient_ps.width(), transient_ps.height()); |
} |
gfx::Size WindowTypeLauncher::GetPreferredSize() { |
@@ -129,6 +261,10 @@ |
CreateLock(); |
} else if (sender == widgets_button_) { |
CreateWidgetsWindow(); |
+ } else if (sender == modal_button_) { |
+ ModalWindow::OpenModalWindow(GetWidget()->GetNativeView()); |
+ } else if (sender == transient_button_) { |
+ NonModalTransient::OpenNonModalTransient(GetWidget()->GetNativeView()); |
} |
} |