Index: chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
index a8dfc6fddcefd1cdfd71d6c657b23a4b64d584ce..daf652e5a70c1307f3745222e823cbb0d5b928ab 100644 |
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
sky
2013/09/09 15:00:30
nit: we don't need to update copyrights anymore.
|
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -163,6 +163,36 @@ class ExtensionInstallDialogView : public views::DialogDelegateView, |
DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogView); |
}; |
+// A simple view that pre-pends a view with a bullet with the help of a grid |
sky
2013/09/09 15:00:30
prepends
|
+// layout. |
+class BulletedView : public views::View { |
+ public: |
+ explicit BulletedView(views::View* view); |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(BulletedView); |
+}; |
+ |
+BulletedView::BulletedView(views::View* view) { |
+ views::GridLayout* layout = new views::GridLayout(this); |
+ SetLayoutManager(layout); |
+ views::ColumnSet* column_set = layout->AddColumnSet(0); |
+ column_set->AddColumn(views::GridLayout::LEADING, |
+ views::GridLayout::LEADING, |
+ 0, |
+ views::GridLayout::USE_PREF, |
+ 0, // no fixed width |
+ 0); |
+ column_set->AddColumn(views::GridLayout::LEADING, |
+ views::GridLayout::LEADING, |
+ 0, |
+ views::GridLayout::USE_PREF, |
+ 0, // no fixed width |
+ 0); |
+ layout->StartRow(0, 0); |
+ layout->AddView(new views::Label(PrepareForDisplay(string16(), true))); |
+ layout->AddView(view); |
+} |
Finnur
2013/09/09 14:34:03
So, to answer your question: No, I don't need to g
|
+ |
// A view to display text with an expandable details section. |
class ExpandableContainerView : public views::View, |
public views::ButtonListener, |
@@ -173,7 +203,7 @@ class ExpandableContainerView : public views::View, |
const string16& description, |
const PermissionDetails& details, |
int horizontal_space, |
- bool show_bullets); |
Finnur
2013/09/09 14:34:03
I discovered that this param was always set to fal
|
+ bool parent_bulleted); |
Finnur
2013/09/09 14:34:03
And then I needed a new param that unfortunately l
|
virtual ~ExpandableContainerView(); |
// views::View: |
@@ -194,7 +224,7 @@ class ExpandableContainerView : public views::View, |
// A view which displays all the details of an IssueAdviceInfoEntry. |
class DetailsView : public views::View { |
public: |
- explicit DetailsView(int horizontal_space, bool show_bullets); |
+ explicit DetailsView(int horizontal_space, bool parent_bulleted); |
virtual ~DetailsView() {} |
// views::View: |
@@ -209,8 +239,9 @@ class ExpandableContainerView : public views::View, |
views::GridLayout* layout_; |
double state_; |
- // Whether to show bullets in front of each item in the details. |
- bool show_bullets_; |
+ // Whether the parent item is showing bullets. This will determine how much |
+ // extra indentation is needed. |
+ bool parent_bulleted_; |
DISALLOW_COPY_AND_ASSIGN(DetailsView); |
}; |
@@ -481,12 +512,12 @@ ExtensionInstallDialogView::ExtensionInstallDialogView( |
for (size_t i = 0; i < prompt.GetPermissionCount(); ++i) { |
layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
layout->StartRow(0, column_set_id); |
- views::Label* permission_label = new views::Label(PrepareForDisplay( |
- prompt.GetPermission(i), true)); |
+ views::Label* permission_label = |
+ new views::Label(prompt.GetPermission(i)); |
permission_label->SetMultiLine(true); |
permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
permission_label->SizeToFit(left_column_width); |
- layout->AddView(permission_label); |
+ layout->AddView(new BulletedView(permission_label)); |
// If we have more details to provide, show them in collapsed form. |
if (!prompt.GetPermissionsDetails(i).empty()) { |
@@ -496,7 +527,7 @@ ExtensionInstallDialogView::ExtensionInstallDialogView( |
PrepareForDisplay(prompt.GetPermissionsDetails(i), false)); |
ExpandableContainerView* details_container = |
new ExpandableContainerView( |
- this, string16(), details, left_column_width, false); |
+ this, string16(), details, left_column_width, true); |
layout->AddView(details_container); |
} |
} |
@@ -548,7 +579,7 @@ ExtensionInstallDialogView::ExtensionInstallDialogView( |
details.push_back(entry.details[x]); |
ExpandableContainerView* issue_advice_view = |
new ExpandableContainerView( |
- this, entry.description, details, space_for_oauth, false); |
+ this, entry.description, details, space_for_oauth, true); |
layout->AddView(issue_advice_view); |
} |
} |
@@ -677,13 +708,18 @@ ExtensionInstallPrompt::GetDefaultShowDialogCallback() { |
// ExpandableContainerView::DetailsView ---------------------------------------- |
ExpandableContainerView::DetailsView::DetailsView(int horizontal_space, |
- bool show_bullets) |
+ bool parent_bulleted) |
: layout_(new views::GridLayout(this)), |
state_(0), |
- show_bullets_(show_bullets) { |
+ parent_bulleted_(parent_bulleted) { |
SetLayoutManager(layout_); |
views::ColumnSet* column_set = layout_->AddColumnSet(0); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ // If the parent is using bullets for its items, then a padding of one unit |
+ // will make the child item (which has no bullet) look like a sibling of its |
+ // parent. Therefore increase the indentation by one more unit to show that it |
+ // is in fact a child item (with no missing bullet) and not a sibling. |
+ column_set->AddPaddingColumn( |
+ 0, views::kRelatedControlHorizontalSpacing * (parent_bulleted ? 2 : 1)); |
column_set->AddColumn(views::GridLayout::LEADING, |
views::GridLayout::LEADING, |
0, |
@@ -696,7 +732,7 @@ void ExpandableContainerView::DetailsView::AddDetail(const string16& detail) { |
layout_->StartRowWithPadding(0, 0, |
0, views::kRelatedControlSmallVerticalSpacing); |
views::Label* detail_label = |
- new views::Label(PrepareForDisplay(detail, show_bullets_)); |
+ new views::Label(PrepareForDisplay(detail, false)); |
detail_label->SetMultiLine(true); |
detail_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
layout_->AddView(detail_label); |
@@ -720,7 +756,7 @@ ExpandableContainerView::ExpandableContainerView( |
const string16& description, |
const PermissionDetails& details, |
int horizontal_space, |
- bool show_bullets) |
+ bool parent_bulleted) |
: owner_(owner), |
details_view_(NULL), |
arrow_view_(NULL), |
@@ -739,18 +775,17 @@ ExpandableContainerView::ExpandableContainerView( |
if (!description.empty()) { |
layout->StartRow(0, column_set_id); |
- views::Label* description_label = |
- new views::Label(PrepareForDisplay(description, true)); |
+ views::Label* description_label = new views::Label(description); |
description_label->SetMultiLine(true); |
description_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
description_label->SizeToFit(horizontal_space); |
- layout->AddView(description_label); |
+ layout->AddView(new BulletedView(description_label)); |
} |
if (details.empty()) |
return; |
- details_view_ = new DetailsView(horizontal_space, show_bullets); |
+ details_view_ = new DetailsView(horizontal_space, parent_bulleted); |
layout->StartRow(0, column_set_id); |
layout->AddView(details_view_); |
@@ -758,33 +793,44 @@ ExpandableContainerView::ExpandableContainerView( |
for (size_t i = 0; i < details.size(); ++i) |
details_view_->AddDetail(details[i]); |
- // Prepare the columns for the More Details row. |
+ views::Link* link = new views::Link( |
+ l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_DETAILS)); |
+ |
+ // Make sure the link width column is as wide as needed for both Show and |
+ // Hide details, so that the arrow doesn't shift horizontally when we toggle. |
+ int link_col_width = |
+ views::kRelatedControlHorizontalSpacing + |
+ std::max(link->font_list().GetStringWidth( |
+ l10n_util::GetStringUTF16(IDS_EXTENSIONS_HIDE_DETAILS)), |
+ link->font_list().GetStringWidth( |
+ l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_DETAILS))); |
+ |
column_set = layout->AddColumnSet(++column_set_id); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ // Padding to the left of the More Details column. If the parent is using |
+ // bullets for its items, then a padding of one unit will make the child item |
+ // (which has no bullet) look like a sibling of its parent. Therefore increase |
+ // the indentation by one more unit to show that it is in fact a child item |
+ // (with no missing bullet) and not a sibling. |
+ column_set->AddPaddingColumn( |
+ 0, views::kRelatedControlHorizontalSpacing * (parent_bulleted ? 2 : 1)); |
+ // The More Details column. |
column_set->AddColumn(views::GridLayout::LEADING, |
views::GridLayout::LEADING, |
0, |
- views::GridLayout::USE_PREF, |
- 0, |
- 0); |
- column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ views::GridLayout::FIXED, |
+ link_col_width, |
+ link_col_width); |
+ // The Up/Down arrow column. |
column_set->AddColumn(views::GridLayout::LEADING, |
views::GridLayout::LEADING, |
0, |
views::GridLayout::USE_PREF, |
0, |
0); |
- column_set->AddColumn(views::GridLayout::LEADING, |
- views::GridLayout::LEADING, |
- 0, |
- views::GridLayout::USE_PREF, |
- 0, |
- 0); |
Finnur
2013/09/09 14:34:03
This column wasn't used, so I eated it.
|
// Add the More Details link. |
layout->StartRow(0, column_set_id); |
- more_details_ = new views::Link( |
- l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_DETAILS)); |
+ more_details_ = link; |
more_details_->set_listener(this); |
more_details_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
layout->AddView(more_details_); |