| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/window/dialog_client_view.h" | 5 #include "ui/views/window/dialog_client_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "ui/base/material_design/material_design_controller.h" | 10 #include "ui/base/material_design/material_design_controller.h" |
| 11 #include "ui/events/keycodes/keyboard_codes.h" | 11 #include "ui/events/keycodes/keyboard_codes.h" |
| 12 #include "ui/views/background.h" | 12 #include "ui/views/background.h" |
| 13 #include "ui/views/border.h" |
| 13 #include "ui/views/controls/button/blue_button.h" | 14 #include "ui/views/controls/button/blue_button.h" |
| 14 #include "ui/views/controls/button/custom_button.h" | 15 #include "ui/views/controls/button/custom_button.h" |
| 15 #include "ui/views/controls/button/label_button.h" | 16 #include "ui/views/controls/button/label_button.h" |
| 16 #include "ui/views/controls/button/md_text_button.h" | 17 #include "ui/views/controls/button/md_text_button.h" |
| 17 #include "ui/views/layout/layout_constants.h" | 18 #include "ui/views/layout/layout_constants.h" |
| 18 #include "ui/views/style/platform_style.h" | 19 #include "ui/views/style/platform_style.h" |
| 19 #include "ui/views/views_delegate.h" | 20 #include "ui/views/views_delegate.h" |
| 20 #include "ui/views/widget/widget.h" | 21 #include "ui/views/widget/widget.h" |
| 21 #include "ui/views/window/dialog_delegate.h" | 22 #include "ui/views/window/dialog_delegate.h" |
| 22 | 23 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 row_bounds->set_width(row_bounds->width() - spacing); | 62 row_bounds->set_width(row_bounds->width() - spacing); |
| 62 } | 63 } |
| 63 | 64 |
| 64 } // namespace | 65 } // namespace |
| 65 | 66 |
| 66 /////////////////////////////////////////////////////////////////////////////// | 67 /////////////////////////////////////////////////////////////////////////////// |
| 67 // DialogClientView, public: | 68 // DialogClientView, public: |
| 68 | 69 |
| 69 DialogClientView::DialogClientView(Widget* owner, View* contents_view) | 70 DialogClientView::DialogClientView(Widget* owner, View* contents_view) |
| 70 : ClientView(owner, contents_view), | 71 : ClientView(owner, contents_view), |
| 71 button_row_insets_(0, | |
| 72 kButtonHEdgeMarginNew, | |
| 73 kButtonVEdgeMarginNew, | |
| 74 kButtonHEdgeMarginNew), | |
| 75 ok_button_(nullptr), | 72 ok_button_(nullptr), |
| 76 cancel_button_(nullptr), | 73 cancel_button_(nullptr), |
| 77 extra_view_(nullptr), | 74 extra_view_(nullptr), |
| 78 delegate_allowed_close_(false) { | 75 delegate_allowed_close_(false) { |
| 76 button_row_insets_ = |
| 77 ViewsDelegate::GetInstance() |
| 78 ? ViewsDelegate::GetInstance()->GetDialogButtonInsets() |
| 79 : gfx::Insets(0, kButtonHEdgeMarginNew, kButtonVEdgeMarginNew, |
| 80 kButtonHEdgeMarginNew); |
| 79 // Doing this now ensures this accelerator will have lower priority than | 81 // Doing this now ensures this accelerator will have lower priority than |
| 80 // one set by the contents view. | 82 // one set by the contents view. |
| 81 AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); | 83 AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); |
| 82 | 84 |
| 83 if (ViewsDelegate::GetInstance()) | 85 if (ViewsDelegate::GetInstance()) |
| 84 button_row_insets_ = ViewsDelegate::GetInstance()->GetDialogButtonInsets(); | 86 button_row_insets_ = ViewsDelegate::GetInstance()->GetDialogButtonInsets(); |
| 85 } | 87 } |
| 86 | 88 |
| 87 DialogClientView::~DialogClientView() { | 89 DialogClientView::~DialogClientView() { |
| 88 } | 90 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 return this; | 154 return this; |
| 153 } | 155 } |
| 154 | 156 |
| 155 //////////////////////////////////////////////////////////////////////////////// | 157 //////////////////////////////////////////////////////////////////////////////// |
| 156 // DialogClientView, View overrides: | 158 // DialogClientView, View overrides: |
| 157 | 159 |
| 158 gfx::Size DialogClientView::GetPreferredSize() const { | 160 gfx::Size DialogClientView::GetPreferredSize() const { |
| 159 // Initialize the size to fit the buttons and extra view row. | 161 // Initialize the size to fit the buttons and extra view row. |
| 160 int extra_view_padding = 0; | 162 int extra_view_padding = 0; |
| 161 if (!GetDialogDelegate()->GetExtraViewPadding(&extra_view_padding)) | 163 if (!GetDialogDelegate()->GetExtraViewPadding(&extra_view_padding)) |
| 162 extra_view_padding = kRelatedButtonHSpacing; | 164 extra_view_padding = ViewsDelegate::GetInstance() |
| 165 ? ViewsDelegate::GetInstance() |
| 166 ->GetDialogRelatedButtonHorizontalSpacing() |
| 167 : kRelatedButtonHSpacing; |
| 163 gfx::Size size( | 168 gfx::Size size( |
| 164 (ok_button_ ? ok_button_->GetPreferredSize().width() : 0) + | 169 (ok_button_ ? ok_button_->GetPreferredSize().width() : 0) + |
| 165 (cancel_button_ ? cancel_button_->GetPreferredSize().width() : 0) + | 170 (cancel_button_ ? cancel_button_->GetPreferredSize().width() : 0) + |
| 166 (cancel_button_ && ok_button_ ? kRelatedButtonHSpacing : 0) + | 171 (cancel_button_ && ok_button_ |
| 172 ? (ViewsDelegate::GetInstance() |
| 173 ? ViewsDelegate::GetInstance() |
| 174 ->GetDialogRelatedButtonHorizontalSpacing() |
| 175 : kRelatedButtonHSpacing) : 0) + |
| 167 (ShouldShow(extra_view_) ? extra_view_->GetPreferredSize().width() : 0) + | 176 (ShouldShow(extra_view_) ? extra_view_->GetPreferredSize().width() : 0) + |
| 168 (ShouldShow(extra_view_) && has_dialog_buttons() ? | 177 (ShouldShow(extra_view_) && has_dialog_buttons() ? extra_view_padding |
| 169 extra_view_padding : 0), | 178 : 0), |
| 170 0); | 179 0); |
| 171 | 180 |
| 172 int buttons_height = GetButtonsAndExtraViewRowHeight(); | 181 int buttons_height = GetButtonsAndExtraViewRowHeight(); |
| 173 if (buttons_height != 0) { | 182 if (buttons_height != 0) { |
| 174 size.Enlarge(0, buttons_height + GetButtonsAndExtraViewRowTopPadding()); | 183 size.Enlarge(0, buttons_height + GetButtonsAndExtraViewRowTopPadding()); |
| 175 // Inset the buttons and extra view. | 184 // Inset the buttons and extra view. |
| 176 const gfx::Insets insets = GetButtonRowInsets(); | 185 const gfx::Insets insets = GetButtonRowInsets(); |
| 177 size.Enlarge(insets.width(), insets.height()); | 186 size.Enlarge(insets.width(), insets.height()); |
| 178 } | 187 } |
| 179 | 188 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 gfx::Insets DialogClientView::GetButtonRowInsets() const { | 369 gfx::Insets DialogClientView::GetButtonRowInsets() const { |
| 361 return GetButtonsAndExtraViewRowHeight() == 0 ? gfx::Insets() | 370 return GetButtonsAndExtraViewRowHeight() == 0 ? gfx::Insets() |
| 362 : button_row_insets_; | 371 : button_row_insets_; |
| 363 } | 372 } |
| 364 | 373 |
| 365 int DialogClientView::GetButtonsAndExtraViewRowTopPadding() const { | 374 int DialogClientView::GetButtonsAndExtraViewRowTopPadding() const { |
| 366 int spacing = button_row_insets_.top(); | 375 int spacing = button_row_insets_.top(); |
| 367 // Some subclasses of DialogClientView, in order to do their own layout, set | 376 // Some subclasses of DialogClientView, in order to do their own layout, set |
| 368 // button_row_insets_ to gfx::Insets(). To avoid breaking behavior of those | 377 // button_row_insets_ to gfx::Insets(). To avoid breaking behavior of those |
| 369 // dialogs, supplying 0 for the top inset of the row falls back to | 378 // dialogs, supplying 0 for the top inset of the row falls back to |
| 379 // ViewsDelegate::GetRelatedControlVerticalSpacing or |
| 370 // kRelatedControlVerticalSpacing. | 380 // kRelatedControlVerticalSpacing. |
| 371 // TODO(ellyjones): Figure out a more principled way to approach that issue. | |
| 372 if (!spacing) | 381 if (!spacing) |
| 373 spacing = kRelatedControlVerticalSpacing; | 382 spacing = ViewsDelegate::GetInstance() |
| 383 ? ViewsDelegate::GetInstance() |
| 384 ->GetDialogRelatedControlVerticalSpacing() |
| 385 : kRelatedControlVerticalSpacing; |
| 374 return spacing; | 386 return spacing; |
| 375 } | 387 } |
| 376 | 388 |
| 377 void DialogClientView::SetupFocusChain() { | 389 void DialogClientView::SetupFocusChain() { |
| 378 // Create a vector of child views in the order of intended focus. | 390 // Create a vector of child views in the order of intended focus. |
| 379 std::vector<View*> child_views; | 391 std::vector<View*> child_views; |
| 380 child_views.push_back(contents_view()); | 392 child_views.push_back(contents_view()); |
| 381 child_views.push_back(extra_view_); | 393 child_views.push_back(extra_view_); |
| 382 if (kIsOkButtonOnLeftSide) { | 394 if (kIsOkButtonOnLeftSide) { |
| 383 child_views.push_back(ok_button_); | 395 child_views.push_back(ok_button_); |
| 384 child_views.push_back(cancel_button_); | 396 child_views.push_back(cancel_button_); |
| 385 } else { | 397 } else { |
| 386 child_views.push_back(cancel_button_); | 398 child_views.push_back(cancel_button_); |
| 387 child_views.push_back(ok_button_); | 399 child_views.push_back(ok_button_); |
| 388 } | 400 } |
| 389 | 401 |
| 390 // Remove all null views from the vector. | 402 // Remove all null views from the vector. |
| 391 child_views.erase( | 403 child_views.erase( |
| 392 std::remove(child_views.begin(), child_views.end(), nullptr), | 404 std::remove(child_views.begin(), child_views.end(), nullptr), |
| 393 child_views.end()); | 405 child_views.end()); |
| 394 | 406 |
| 395 // Setup focus by reordering views. It is not safe to use SetNextFocusableView | 407 // Setup focus by reordering views. It is not safe to use SetNextFocusableView |
| 396 // since child views may be added externally to this view. | 408 // since child views may be added externally to this view. |
| 397 for (size_t i = 0; i < child_views.size(); i++) | 409 for (size_t i = 0; i < child_views.size(); i++) |
| 398 ReorderChildView(child_views[i], i); | 410 ReorderChildView(child_views[i], i); |
| 399 } | 411 } |
| 400 | 412 |
| 401 } // namespace views | 413 } // namespace views |
| OLD | NEW |