OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // 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.
| |
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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
156 | 156 |
157 // The container view for the scroll view. | 157 // The container view for the scroll view. |
158 CustomScrollableView* scrollable_; | 158 CustomScrollableView* scrollable_; |
159 | 159 |
160 // The preferred size of the dialog. | 160 // The preferred size of the dialog. |
161 gfx::Size dialog_size_; | 161 gfx::Size dialog_size_; |
162 | 162 |
163 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogView); | 163 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogView); |
164 }; | 164 }; |
165 | 165 |
166 // 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
| |
167 // layout. | |
168 class BulletedView : public views::View { | |
169 public: | |
170 explicit BulletedView(views::View* view); | |
171 private: | |
172 DISALLOW_COPY_AND_ASSIGN(BulletedView); | |
173 }; | |
174 | |
175 BulletedView::BulletedView(views::View* view) { | |
176 views::GridLayout* layout = new views::GridLayout(this); | |
177 SetLayoutManager(layout); | |
178 views::ColumnSet* column_set = layout->AddColumnSet(0); | |
179 column_set->AddColumn(views::GridLayout::LEADING, | |
180 views::GridLayout::LEADING, | |
181 0, | |
182 views::GridLayout::USE_PREF, | |
183 0, // no fixed width | |
184 0); | |
185 column_set->AddColumn(views::GridLayout::LEADING, | |
186 views::GridLayout::LEADING, | |
187 0, | |
188 views::GridLayout::USE_PREF, | |
189 0, // no fixed width | |
190 0); | |
191 layout->StartRow(0, 0); | |
192 layout->AddView(new views::Label(PrepareForDisplay(string16(), true))); | |
193 layout->AddView(view); | |
194 } | |
Finnur
2013/09/09 14:34:03
So, to answer your question: No, I don't need to g
| |
195 | |
166 // A view to display text with an expandable details section. | 196 // A view to display text with an expandable details section. |
167 class ExpandableContainerView : public views::View, | 197 class ExpandableContainerView : public views::View, |
168 public views::ButtonListener, | 198 public views::ButtonListener, |
169 public views::LinkListener, | 199 public views::LinkListener, |
170 public ui::AnimationDelegate { | 200 public ui::AnimationDelegate { |
171 public: | 201 public: |
172 ExpandableContainerView(ExtensionInstallDialogView* owner, | 202 ExpandableContainerView(ExtensionInstallDialogView* owner, |
173 const string16& description, | 203 const string16& description, |
174 const PermissionDetails& details, | 204 const PermissionDetails& details, |
175 int horizontal_space, | 205 int horizontal_space, |
176 bool show_bullets); | 206 bool parent_bulleted); |
Finnur
2013/09/09 14:34:03
I discovered that this param was always set to fal
|
Finnur
2013/09/09 14:34:03
And then I needed a new param that unfortunately l
|
177 virtual ~ExpandableContainerView(); | 207 virtual ~ExpandableContainerView(); |
178 | 208 |
179 // views::View: | 209 // views::View: |
180 virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE; | 210 virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE; |
181 | 211 |
182 // views::ButtonListener: | 212 // views::ButtonListener: |
183 virtual void ButtonPressed(views::Button* sender, | 213 virtual void ButtonPressed(views::Button* sender, |
184 const ui::Event& event) OVERRIDE; | 214 const ui::Event& event) OVERRIDE; |
185 | 215 |
186 // views::LinkListener: | 216 // views::LinkListener: |
187 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; | 217 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; |
188 | 218 |
189 // ui::AnimationDelegate: | 219 // ui::AnimationDelegate: |
190 virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE; | 220 virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE; |
191 virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE; | 221 virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE; |
192 | 222 |
193 private: | 223 private: |
194 // A view which displays all the details of an IssueAdviceInfoEntry. | 224 // A view which displays all the details of an IssueAdviceInfoEntry. |
195 class DetailsView : public views::View { | 225 class DetailsView : public views::View { |
196 public: | 226 public: |
197 explicit DetailsView(int horizontal_space, bool show_bullets); | 227 explicit DetailsView(int horizontal_space, bool parent_bulleted); |
198 virtual ~DetailsView() {} | 228 virtual ~DetailsView() {} |
199 | 229 |
200 // views::View: | 230 // views::View: |
201 virtual gfx::Size GetPreferredSize() OVERRIDE; | 231 virtual gfx::Size GetPreferredSize() OVERRIDE; |
202 | 232 |
203 void AddDetail(const string16& detail); | 233 void AddDetail(const string16& detail); |
204 | 234 |
205 // Animates this to be a height proportional to |state|. | 235 // Animates this to be a height proportional to |state|. |
206 void AnimateToState(double state); | 236 void AnimateToState(double state); |
207 | 237 |
208 private: | 238 private: |
209 views::GridLayout* layout_; | 239 views::GridLayout* layout_; |
210 double state_; | 240 double state_; |
211 | 241 |
212 // Whether to show bullets in front of each item in the details. | 242 // Whether the parent item is showing bullets. This will determine how much |
213 bool show_bullets_; | 243 // extra indentation is needed. |
244 bool parent_bulleted_; | |
214 | 245 |
215 DISALLOW_COPY_AND_ASSIGN(DetailsView); | 246 DISALLOW_COPY_AND_ASSIGN(DetailsView); |
216 }; | 247 }; |
217 | 248 |
218 // Expand/Collapse the detail section for this ExpandableContainerView. | 249 // Expand/Collapse the detail section for this ExpandableContainerView. |
219 void ToggleDetailLevel(); | 250 void ToggleDetailLevel(); |
220 | 251 |
221 // The dialog that owns |this|. It's also an ancestor in the View hierarchy. | 252 // The dialog that owns |this|. It's also an ancestor in the View hierarchy. |
222 ExtensionInstallDialogView* owner_; | 253 ExtensionInstallDialogView* owner_; |
223 | 254 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
474 permissions_header = new views::Label(prompt.GetPermissionsHeading()); | 505 permissions_header = new views::Label(prompt.GetPermissionsHeading()); |
475 } | 506 } |
476 permissions_header->SetMultiLine(true); | 507 permissions_header->SetMultiLine(true); |
477 permissions_header->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 508 permissions_header->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
478 permissions_header->SizeToFit(left_column_width); | 509 permissions_header->SizeToFit(left_column_width); |
479 layout->AddView(permissions_header); | 510 layout->AddView(permissions_header); |
480 | 511 |
481 for (size_t i = 0; i < prompt.GetPermissionCount(); ++i) { | 512 for (size_t i = 0; i < prompt.GetPermissionCount(); ++i) { |
482 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 513 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
483 layout->StartRow(0, column_set_id); | 514 layout->StartRow(0, column_set_id); |
484 views::Label* permission_label = new views::Label(PrepareForDisplay( | 515 views::Label* permission_label = |
485 prompt.GetPermission(i), true)); | 516 new views::Label(prompt.GetPermission(i)); |
486 permission_label->SetMultiLine(true); | 517 permission_label->SetMultiLine(true); |
487 permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 518 permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
488 permission_label->SizeToFit(left_column_width); | 519 permission_label->SizeToFit(left_column_width); |
489 layout->AddView(permission_label); | 520 layout->AddView(new BulletedView(permission_label)); |
490 | 521 |
491 // If we have more details to provide, show them in collapsed form. | 522 // If we have more details to provide, show them in collapsed form. |
492 if (!prompt.GetPermissionsDetails(i).empty()) { | 523 if (!prompt.GetPermissionsDetails(i).empty()) { |
493 layout->StartRow(0, column_set_id); | 524 layout->StartRow(0, column_set_id); |
494 PermissionDetails details; | 525 PermissionDetails details; |
495 details.push_back( | 526 details.push_back( |
496 PrepareForDisplay(prompt.GetPermissionsDetails(i), false)); | 527 PrepareForDisplay(prompt.GetPermissionsDetails(i), false)); |
497 ExpandableContainerView* details_container = | 528 ExpandableContainerView* details_container = |
498 new ExpandableContainerView( | 529 new ExpandableContainerView( |
499 this, string16(), details, left_column_width, false); | 530 this, string16(), details, left_column_width, true); |
500 layout->AddView(details_container); | 531 layout->AddView(details_container); |
501 } | 532 } |
502 } | 533 } |
503 } else { | 534 } else { |
504 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 535 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
505 layout->StartRow(0, column_set_id); | 536 layout->StartRow(0, column_set_id); |
506 views::Label* permission_label = new views::Label( | 537 views::Label* permission_label = new views::Label( |
507 l10n_util::GetStringUTF16(IDS_EXTENSION_NO_SPECIAL_PERMISSIONS)); | 538 l10n_util::GetStringUTF16(IDS_EXTENSION_NO_SPECIAL_PERMISSIONS)); |
508 permission_label->SetMultiLine(true); | 539 permission_label->SetMultiLine(true); |
509 permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 540 permission_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
541 layout->StartRowWithPadding( | 572 layout->StartRowWithPadding( |
542 0, column_set_id, | 573 0, column_set_id, |
543 0, views::kRelatedControlVerticalSpacing); | 574 0, views::kRelatedControlVerticalSpacing); |
544 | 575 |
545 PermissionDetails details; | 576 PermissionDetails details; |
546 const IssueAdviceInfoEntry& entry = prompt.GetOAuthIssue(i); | 577 const IssueAdviceInfoEntry& entry = prompt.GetOAuthIssue(i); |
547 for (size_t x = 0; x < entry.details.size(); ++x) | 578 for (size_t x = 0; x < entry.details.size(); ++x) |
548 details.push_back(entry.details[x]); | 579 details.push_back(entry.details[x]); |
549 ExpandableContainerView* issue_advice_view = | 580 ExpandableContainerView* issue_advice_view = |
550 new ExpandableContainerView( | 581 new ExpandableContainerView( |
551 this, entry.description, details, space_for_oauth, false); | 582 this, entry.description, details, space_for_oauth, true); |
552 layout->AddView(issue_advice_view); | 583 layout->AddView(issue_advice_view); |
553 } | 584 } |
554 } | 585 } |
555 if (prompt.GetRetainedFileCount()) { | 586 if (prompt.GetRetainedFileCount()) { |
556 // Slide in under the permissions or OAuth, if there are any. If there are | 587 // Slide in under the permissions or OAuth, if there are any. If there are |
557 // either, the retained files prompt stretches all the way to the right of | 588 // either, the retained files prompt stretches all the way to the right of |
558 // the dialog. If there are no permissions or OAuth, the retained files | 589 // the dialog. If there are no permissions or OAuth, the retained files |
559 // prompt just takes up the left column. | 590 // prompt just takes up the left column. |
560 int space_for_files = left_column_width; | 591 int space_for_files = left_column_width; |
561 if (prompt.GetPermissionCount() || prompt.GetOAuthIssueCount()) { | 592 if (prompt.GetPermissionCount() || prompt.GetOAuthIssueCount()) { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
670 | 701 |
671 // static | 702 // static |
672 ExtensionInstallPrompt::ShowDialogCallback | 703 ExtensionInstallPrompt::ShowDialogCallback |
673 ExtensionInstallPrompt::GetDefaultShowDialogCallback() { | 704 ExtensionInstallPrompt::GetDefaultShowDialogCallback() { |
674 return base::Bind(&ShowExtensionInstallDialogImpl); | 705 return base::Bind(&ShowExtensionInstallDialogImpl); |
675 } | 706 } |
676 | 707 |
677 // ExpandableContainerView::DetailsView ---------------------------------------- | 708 // ExpandableContainerView::DetailsView ---------------------------------------- |
678 | 709 |
679 ExpandableContainerView::DetailsView::DetailsView(int horizontal_space, | 710 ExpandableContainerView::DetailsView::DetailsView(int horizontal_space, |
680 bool show_bullets) | 711 bool parent_bulleted) |
681 : layout_(new views::GridLayout(this)), | 712 : layout_(new views::GridLayout(this)), |
682 state_(0), | 713 state_(0), |
683 show_bullets_(show_bullets) { | 714 parent_bulleted_(parent_bulleted) { |
684 SetLayoutManager(layout_); | 715 SetLayoutManager(layout_); |
685 views::ColumnSet* column_set = layout_->AddColumnSet(0); | 716 views::ColumnSet* column_set = layout_->AddColumnSet(0); |
686 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); | 717 // If the parent is using bullets for its items, then a padding of one unit |
718 // will make the child item (which has no bullet) look like a sibling of its | |
719 // parent. Therefore increase the indentation by one more unit to show that it | |
720 // is in fact a child item (with no missing bullet) and not a sibling. | |
721 column_set->AddPaddingColumn( | |
722 0, views::kRelatedControlHorizontalSpacing * (parent_bulleted ? 2 : 1)); | |
687 column_set->AddColumn(views::GridLayout::LEADING, | 723 column_set->AddColumn(views::GridLayout::LEADING, |
688 views::GridLayout::LEADING, | 724 views::GridLayout::LEADING, |
689 0, | 725 0, |
690 views::GridLayout::FIXED, | 726 views::GridLayout::FIXED, |
691 horizontal_space, | 727 horizontal_space, |
692 0); | 728 0); |
693 } | 729 } |
694 | 730 |
695 void ExpandableContainerView::DetailsView::AddDetail(const string16& detail) { | 731 void ExpandableContainerView::DetailsView::AddDetail(const string16& detail) { |
696 layout_->StartRowWithPadding(0, 0, | 732 layout_->StartRowWithPadding(0, 0, |
697 0, views::kRelatedControlSmallVerticalSpacing); | 733 0, views::kRelatedControlSmallVerticalSpacing); |
698 views::Label* detail_label = | 734 views::Label* detail_label = |
699 new views::Label(PrepareForDisplay(detail, show_bullets_)); | 735 new views::Label(PrepareForDisplay(detail, false)); |
700 detail_label->SetMultiLine(true); | 736 detail_label->SetMultiLine(true); |
701 detail_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 737 detail_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
702 layout_->AddView(detail_label); | 738 layout_->AddView(detail_label); |
703 } | 739 } |
704 | 740 |
705 gfx::Size ExpandableContainerView::DetailsView::GetPreferredSize() { | 741 gfx::Size ExpandableContainerView::DetailsView::GetPreferredSize() { |
706 gfx::Size size = views::View::GetPreferredSize(); | 742 gfx::Size size = views::View::GetPreferredSize(); |
707 return gfx::Size(size.width(), size.height() * state_); | 743 return gfx::Size(size.width(), size.height() * state_); |
708 } | 744 } |
709 | 745 |
710 void ExpandableContainerView::DetailsView::AnimateToState(double state) { | 746 void ExpandableContainerView::DetailsView::AnimateToState(double state) { |
711 state_ = state; | 747 state_ = state; |
712 PreferredSizeChanged(); | 748 PreferredSizeChanged(); |
713 SchedulePaint(); | 749 SchedulePaint(); |
714 } | 750 } |
715 | 751 |
716 // ExpandableContainerView ----------------------------------------------------- | 752 // ExpandableContainerView ----------------------------------------------------- |
717 | 753 |
718 ExpandableContainerView::ExpandableContainerView( | 754 ExpandableContainerView::ExpandableContainerView( |
719 ExtensionInstallDialogView* owner, | 755 ExtensionInstallDialogView* owner, |
720 const string16& description, | 756 const string16& description, |
721 const PermissionDetails& details, | 757 const PermissionDetails& details, |
722 int horizontal_space, | 758 int horizontal_space, |
723 bool show_bullets) | 759 bool parent_bulleted) |
724 : owner_(owner), | 760 : owner_(owner), |
725 details_view_(NULL), | 761 details_view_(NULL), |
726 arrow_view_(NULL), | 762 arrow_view_(NULL), |
727 slide_animation_(this), | 763 slide_animation_(this), |
728 expanded_(false) { | 764 expanded_(false) { |
729 views::GridLayout* layout = new views::GridLayout(this); | 765 views::GridLayout* layout = new views::GridLayout(this); |
730 SetLayoutManager(layout); | 766 SetLayoutManager(layout); |
731 int column_set_id = 0; | 767 int column_set_id = 0; |
732 views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); | 768 views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); |
733 column_set->AddColumn(views::GridLayout::LEADING, | 769 column_set->AddColumn(views::GridLayout::LEADING, |
734 views::GridLayout::LEADING, | 770 views::GridLayout::LEADING, |
735 0, | 771 0, |
736 views::GridLayout::USE_PREF, | 772 views::GridLayout::USE_PREF, |
737 0, | 773 0, |
738 0); | 774 0); |
739 if (!description.empty()) { | 775 if (!description.empty()) { |
740 layout->StartRow(0, column_set_id); | 776 layout->StartRow(0, column_set_id); |
741 | 777 |
742 views::Label* description_label = | 778 views::Label* description_label = new views::Label(description); |
743 new views::Label(PrepareForDisplay(description, true)); | |
744 description_label->SetMultiLine(true); | 779 description_label->SetMultiLine(true); |
745 description_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 780 description_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
746 description_label->SizeToFit(horizontal_space); | 781 description_label->SizeToFit(horizontal_space); |
747 layout->AddView(description_label); | 782 layout->AddView(new BulletedView(description_label)); |
748 } | 783 } |
749 | 784 |
750 if (details.empty()) | 785 if (details.empty()) |
751 return; | 786 return; |
752 | 787 |
753 details_view_ = new DetailsView(horizontal_space, show_bullets); | 788 details_view_ = new DetailsView(horizontal_space, parent_bulleted); |
754 | 789 |
755 layout->StartRow(0, column_set_id); | 790 layout->StartRow(0, column_set_id); |
756 layout->AddView(details_view_); | 791 layout->AddView(details_view_); |
757 | 792 |
758 for (size_t i = 0; i < details.size(); ++i) | 793 for (size_t i = 0; i < details.size(); ++i) |
759 details_view_->AddDetail(details[i]); | 794 details_view_->AddDetail(details[i]); |
760 | 795 |
761 // Prepare the columns for the More Details row. | 796 views::Link* link = new views::Link( |
797 l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_DETAILS)); | |
798 | |
799 // Make sure the link width column is as wide as needed for both Show and | |
800 // Hide details, so that the arrow doesn't shift horizontally when we toggle. | |
801 int link_col_width = | |
802 views::kRelatedControlHorizontalSpacing + | |
803 std::max(link->font_list().GetStringWidth( | |
804 l10n_util::GetStringUTF16(IDS_EXTENSIONS_HIDE_DETAILS)), | |
805 link->font_list().GetStringWidth( | |
806 l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_DETAILS))); | |
807 | |
762 column_set = layout->AddColumnSet(++column_set_id); | 808 column_set = layout->AddColumnSet(++column_set_id); |
763 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); | 809 // Padding to the left of the More Details column. If the parent is using |
810 // bullets for its items, then a padding of one unit will make the child item | |
811 // (which has no bullet) look like a sibling of its parent. Therefore increase | |
812 // the indentation by one more unit to show that it is in fact a child item | |
813 // (with no missing bullet) and not a sibling. | |
814 column_set->AddPaddingColumn( | |
815 0, views::kRelatedControlHorizontalSpacing * (parent_bulleted ? 2 : 1)); | |
816 // The More Details column. | |
764 column_set->AddColumn(views::GridLayout::LEADING, | 817 column_set->AddColumn(views::GridLayout::LEADING, |
765 views::GridLayout::LEADING, | 818 views::GridLayout::LEADING, |
766 0, | 819 0, |
767 views::GridLayout::USE_PREF, | 820 views::GridLayout::FIXED, |
768 0, | 821 link_col_width, |
769 0); | 822 link_col_width); |
770 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); | 823 // The Up/Down arrow column. |
771 column_set->AddColumn(views::GridLayout::LEADING, | 824 column_set->AddColumn(views::GridLayout::LEADING, |
772 views::GridLayout::LEADING, | 825 views::GridLayout::LEADING, |
773 0, | 826 0, |
774 views::GridLayout::USE_PREF, | 827 views::GridLayout::USE_PREF, |
775 0, | 828 0, |
776 0); | 829 0); |
777 column_set->AddColumn(views::GridLayout::LEADING, | |
778 views::GridLayout::LEADING, | |
779 0, | |
780 views::GridLayout::USE_PREF, | |
781 0, | |
782 0); | |
Finnur
2013/09/09 14:34:03
This column wasn't used, so I eated it.
| |
783 | 830 |
784 // Add the More Details link. | 831 // Add the More Details link. |
785 layout->StartRow(0, column_set_id); | 832 layout->StartRow(0, column_set_id); |
786 more_details_ = new views::Link( | 833 more_details_ = link; |
787 l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_DETAILS)); | |
788 more_details_->set_listener(this); | 834 more_details_->set_listener(this); |
789 more_details_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 835 more_details_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
790 layout->AddView(more_details_); | 836 layout->AddView(more_details_); |
791 | 837 |
792 // Add the arrow after the More Details link. | 838 // Add the arrow after the More Details link. |
793 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 839 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
794 arrow_toggle_ = new views::ImageButton(this); | 840 arrow_toggle_ = new views::ImageButton(this); |
795 arrow_toggle_->SetImage(views::Button::STATE_NORMAL, | 841 arrow_toggle_->SetImage(views::Button::STATE_NORMAL, |
796 rb.GetImageSkiaNamed(IDR_DOWN_ARROW)); | 842 rb.GetImageSkiaNamed(IDR_DOWN_ARROW)); |
797 layout->AddView(arrow_toggle_); | 843 layout->AddView(arrow_toggle_); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
840 } | 886 } |
841 | 887 |
842 void ExpandableContainerView::ToggleDetailLevel() { | 888 void ExpandableContainerView::ToggleDetailLevel() { |
843 expanded_ = !expanded_; | 889 expanded_ = !expanded_; |
844 | 890 |
845 if (slide_animation_.IsShowing()) | 891 if (slide_animation_.IsShowing()) |
846 slide_animation_.Hide(); | 892 slide_animation_.Hide(); |
847 else | 893 else |
848 slide_animation_.Show(); | 894 slide_animation_.Show(); |
849 } | 895 } |
OLD | NEW |