| 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" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 if (!button) | 48 if (!button) |
| 49 return; | 49 return; |
| 50 | 50 |
| 51 const gfx::Size size = button->GetPreferredSize(); | 51 const gfx::Size size = button->GetPreferredSize(); |
| 52 row_bounds->set_width(row_bounds->width() - size.width()); | 52 row_bounds->set_width(row_bounds->width() - size.width()); |
| 53 DCHECK_LE(button_height, row_bounds->height()); | 53 DCHECK_LE(button_height, row_bounds->height()); |
| 54 button->SetBounds( | 54 button->SetBounds( |
| 55 row_bounds->right(), | 55 row_bounds->right(), |
| 56 row_bounds->y() + (row_bounds->height() - button_height) / 2, | 56 row_bounds->y() + (row_bounds->height() - button_height) / 2, |
| 57 size.width(), button_height); | 57 size.width(), button_height); |
| 58 int spacing = ViewsDelegate::GetInstance() | 58 int spacing = |
| 59 ? ViewsDelegate::GetInstance() | 59 ViewsDelegate::GetInstance() |
| 60 ->GetDialogRelatedButtonHorizontalSpacing() | 60 ? ViewsDelegate::GetInstance()->GetSpacingMetric( |
| 61 : kRelatedButtonHSpacing; | 61 ViewsDelegate::SpacingMetric::RELATED_HORIZONTAL_BUTTON) |
| 62 : kRelatedButtonHSpacing; |
| 62 row_bounds->set_width(row_bounds->width() - spacing); | 63 row_bounds->set_width(row_bounds->width() - spacing); |
| 63 } | 64 } |
| 64 | 65 |
| 65 } // namespace | 66 } // namespace |
| 66 | 67 |
| 67 /////////////////////////////////////////////////////////////////////////////// | 68 /////////////////////////////////////////////////////////////////////////////// |
| 68 // DialogClientView, public: | 69 // DialogClientView, public: |
| 69 | 70 |
| 70 DialogClientView::DialogClientView(Widget* owner, View* contents_view) | 71 DialogClientView::DialogClientView(Widget* owner, View* contents_view) |
| 71 : ClientView(owner, contents_view) { | 72 : ClientView(owner, contents_view) { |
| 72 button_row_insets_ = | 73 button_row_insets_ = |
| 73 ViewsDelegate::GetInstance() | 74 ViewsDelegate::GetInstance() |
| 74 ? ViewsDelegate::GetInstance()->GetDialogButtonInsets() | 75 ? ViewsDelegate::GetInstance()->GetInsetsMetric( |
| 76 ViewsDelegate::InsetsMetric::DIALOG_BUTTON) |
| 75 : gfx::Insets(0, kButtonHEdgeMarginNew, kButtonVEdgeMarginNew, | 77 : gfx::Insets(0, kButtonHEdgeMarginNew, kButtonVEdgeMarginNew, |
| 76 kButtonHEdgeMarginNew); | 78 kButtonHEdgeMarginNew); |
| 77 // Doing this now ensures this accelerator will have lower priority than | 79 // Doing this now ensures this accelerator will have lower priority than |
| 78 // one set by the contents view. | 80 // one set by the contents view. |
| 79 AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); | 81 AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); |
| 80 | |
| 81 if (ViewsDelegate::GetInstance()) | |
| 82 button_row_insets_ = ViewsDelegate::GetInstance()->GetDialogButtonInsets(); | |
| 83 } | 82 } |
| 84 | 83 |
| 85 DialogClientView::~DialogClientView() { | 84 DialogClientView::~DialogClientView() { |
| 86 } | 85 } |
| 87 | 86 |
| 88 void DialogClientView::AcceptWindow() { | 87 void DialogClientView::AcceptWindow() { |
| 89 // Only notify the delegate once. See |delegate_allowed_close_|'s comment. | 88 // Only notify the delegate once. See |delegate_allowed_close_|'s comment. |
| 90 if (!delegate_allowed_close_ && GetDialogDelegate()->Accept()) { | 89 if (!delegate_allowed_close_ && GetDialogDelegate()->Accept()) { |
| 91 delegate_allowed_close_ = true; | 90 delegate_allowed_close_ = true; |
| 92 GetWidget()->Close(); | 91 GetWidget()->Close(); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 return this; | 149 return this; |
| 151 } | 150 } |
| 152 | 151 |
| 153 //////////////////////////////////////////////////////////////////////////////// | 152 //////////////////////////////////////////////////////////////////////////////// |
| 154 // DialogClientView, View overrides: | 153 // DialogClientView, View overrides: |
| 155 | 154 |
| 156 gfx::Size DialogClientView::GetPreferredSize() const { | 155 gfx::Size DialogClientView::GetPreferredSize() const { |
| 157 // Initialize the size to fit the buttons and extra view row. | 156 // Initialize the size to fit the buttons and extra view row. |
| 158 int extra_view_padding = 0; | 157 int extra_view_padding = 0; |
| 159 if (!GetDialogDelegate()->GetExtraViewPadding(&extra_view_padding)) | 158 if (!GetDialogDelegate()->GetExtraViewPadding(&extra_view_padding)) |
| 160 extra_view_padding = ViewsDelegate::GetInstance() | 159 extra_view_padding = |
| 161 ? ViewsDelegate::GetInstance() | 160 ViewsDelegate::GetInstance() |
| 162 ->GetDialogRelatedButtonHorizontalSpacing() | 161 ? ViewsDelegate::GetInstance()->GetSpacingMetric( |
| 163 : kRelatedButtonHSpacing; | 162 ViewsDelegate::SpacingMetric::RELATED_HORIZONTAL_BUTTON) |
| 163 : kRelatedButtonHSpacing; |
| 164 gfx::Size size( | 164 gfx::Size size( |
| 165 (ok_button_ ? ok_button_->GetPreferredSize().width() : 0) + | 165 (ok_button_ ? ok_button_->GetPreferredSize().width() : 0) + |
| 166 (cancel_button_ ? cancel_button_->GetPreferredSize().width() : 0) + | 166 (cancel_button_ ? cancel_button_->GetPreferredSize().width() : 0) + |
| 167 (cancel_button_ && ok_button_ | 167 (cancel_button_ && ok_button_ |
| 168 ? (ViewsDelegate::GetInstance() | 168 ? (ViewsDelegate::GetInstance() |
| 169 ? ViewsDelegate::GetInstance() | 169 ? ViewsDelegate::GetInstance()->GetSpacingMetric( |
| 170 ->GetDialogRelatedButtonHorizontalSpacing() | 170 ViewsDelegate::SpacingMetric:: |
| 171 : kRelatedButtonHSpacing) : 0) + | 171 RELATED_HORIZONTAL_BUTTON) |
| 172 (ShouldShow(extra_view_) ? extra_view_->GetPreferredSize().width() : 0) + | 172 : kRelatedButtonHSpacing) |
| 173 (ShouldShow(extra_view_) && has_dialog_buttons() ? extra_view_padding | 173 : 0) + |
| 174 : 0), | 174 (ShouldShow(extra_view_) ? extra_view_->GetPreferredSize().width() |
| 175 : 0) + |
| 176 (ShouldShow(extra_view_) && has_dialog_buttons() ? extra_view_padding |
| 177 : 0), |
| 175 0); | 178 0); |
| 176 | 179 |
| 177 int buttons_height = GetButtonsAndExtraViewRowHeight(); | 180 int buttons_height = GetButtonsAndExtraViewRowHeight(); |
| 178 if (buttons_height != 0) { | 181 if (buttons_height != 0) { |
| 179 size.Enlarge(0, buttons_height + GetButtonsAndExtraViewRowTopPadding()); | 182 size.Enlarge(0, buttons_height + GetButtonsAndExtraViewRowTopPadding()); |
| 180 // Inset the buttons and extra view. | 183 // Inset the buttons and extra view. |
| 181 const gfx::Insets insets = GetButtonRowInsets(); | 184 const gfx::Insets insets = GetButtonRowInsets(); |
| 182 size.Enlarge(insets.width(), insets.height()); | 185 size.Enlarge(insets.width(), insets.height()); |
| 183 } | 186 } |
| 184 | 187 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 gfx::Insets DialogClientView::GetButtonRowInsets() const { | 370 gfx::Insets DialogClientView::GetButtonRowInsets() const { |
| 368 return GetButtonsAndExtraViewRowHeight() == 0 ? gfx::Insets() | 371 return GetButtonsAndExtraViewRowHeight() == 0 ? gfx::Insets() |
| 369 : button_row_insets_; | 372 : button_row_insets_; |
| 370 } | 373 } |
| 371 | 374 |
| 372 int DialogClientView::GetButtonsAndExtraViewRowTopPadding() const { | 375 int DialogClientView::GetButtonsAndExtraViewRowTopPadding() const { |
| 373 int spacing = button_row_insets_.top(); | 376 int spacing = button_row_insets_.top(); |
| 374 // Some subclasses of DialogClientView, in order to do their own layout, set | 377 // Some subclasses of DialogClientView, in order to do their own layout, set |
| 375 // button_row_insets_ to gfx::Insets(). To avoid breaking behavior of those | 378 // button_row_insets_ to gfx::Insets(). To avoid breaking behavior of those |
| 376 // dialogs, supplying 0 for the top inset of the row falls back to | 379 // dialogs, supplying 0 for the top inset of the row falls back to |
| 377 // ViewsDelegate::GetRelatedControlVerticalSpacing or | 380 // ViewsDelegate::GetSpacingMetric( |
| 381 // ViewsDelegate::SpacingMetric::RELATED_VERTICAL_CONTROL) or |
| 378 // kRelatedControlVerticalSpacing. | 382 // kRelatedControlVerticalSpacing. |
| 379 if (!spacing) | 383 if (!spacing) |
| 380 spacing = ViewsDelegate::GetInstance() | 384 spacing = ViewsDelegate::GetInstance() |
| 381 ? ViewsDelegate::GetInstance() | 385 ? ViewsDelegate::GetInstance()->GetSpacingMetric( |
| 382 ->GetDialogRelatedControlVerticalSpacing() | 386 ViewsDelegate::SpacingMetric::RELATED_VERTICAL_CONTROL) |
| 383 : kRelatedControlVerticalSpacing; | 387 : kRelatedControlVerticalSpacing; |
| 384 return spacing; | 388 return spacing; |
| 385 } | 389 } |
| 386 | 390 |
| 387 void DialogClientView::SetupFocusChain() { | 391 void DialogClientView::SetupFocusChain() { |
| 388 // Create a vector of child views in the order of intended focus. | 392 // Create a vector of child views in the order of intended focus. |
| 389 std::vector<View*> child_views; | 393 std::vector<View*> child_views; |
| 390 child_views.push_back(contents_view()); | 394 child_views.push_back(contents_view()); |
| 391 child_views.push_back(extra_view_); | 395 child_views.push_back(extra_view_); |
| 392 if (kIsOkButtonOnLeftSide) { | 396 if (kIsOkButtonOnLeftSide) { |
| 393 child_views.push_back(ok_button_); | 397 child_views.push_back(ok_button_); |
| 394 child_views.push_back(cancel_button_); | 398 child_views.push_back(cancel_button_); |
| 395 } else { | 399 } else { |
| 396 child_views.push_back(cancel_button_); | 400 child_views.push_back(cancel_button_); |
| 397 child_views.push_back(ok_button_); | 401 child_views.push_back(ok_button_); |
| 398 } | 402 } |
| 399 | 403 |
| 400 // Remove all null views from the vector. | 404 // Remove all null views from the vector. |
| 401 child_views.erase( | 405 child_views.erase( |
| 402 std::remove(child_views.begin(), child_views.end(), nullptr), | 406 std::remove(child_views.begin(), child_views.end(), nullptr), |
| 403 child_views.end()); | 407 child_views.end()); |
| 404 | 408 |
| 405 // Setup focus by reordering views. It is not safe to use SetNextFocusableView | 409 // Setup focus by reordering views. It is not safe to use SetNextFocusableView |
| 406 // since child views may be added externally to this view. | 410 // since child views may be added externally to this view. |
| 407 for (size_t i = 0; i < child_views.size(); i++) | 411 for (size_t i = 0; i < child_views.size(); i++) |
| 408 ReorderChildView(child_views[i], i); | 412 ReorderChildView(child_views[i], i); |
| 409 } | 413 } |
| 410 | 414 |
| 411 } // namespace views | 415 } // namespace views |
| OLD | NEW |