| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/ui/views/bookmark_bar_view.h" | 5 #include "chrome/browser/ui/views/bookmark_bar_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 volatile int button_count = GetBookmarkButtonCount(); | 967 volatile int button_count = GetBookmarkButtonCount(); |
| 968 DCHECK(button_count == 0); // If non-zero it means Load was invoked more than | 968 DCHECK(button_count == 0); // If non-zero it means Load was invoked more than |
| 969 // once, or we didn't properly clear things. | 969 // once, or we didn't properly clear things. |
| 970 // Either of which shouldn't happen | 970 // Either of which shouldn't happen |
| 971 const BookmarkNode* node = model_->GetBookmarkBarNode(); | 971 const BookmarkNode* node = model_->GetBookmarkBarNode(); |
| 972 DCHECK(node && model_->other_node()); | 972 DCHECK(node && model_->other_node()); |
| 973 // Create a button for each of the children on the bookmark bar. | 973 // Create a button for each of the children on the bookmark bar. |
| 974 for (int i = 0, child_count = node->GetChildCount(); i < child_count; ++i) | 974 for (int i = 0, child_count = node->GetChildCount(); i < child_count; ++i) |
| 975 AddChildView(i, CreateBookmarkButton(node->GetChild(i))); | 975 AddChildView(i, CreateBookmarkButton(node->GetChild(i))); |
| 976 UpdateColors(); | 976 UpdateColors(); |
| 977 other_bookmarked_button_->SetVisible( |
| 978 model->other_node()->GetChildCount() > 0); |
| 977 other_bookmarked_button_->SetEnabled(true); | 979 other_bookmarked_button_->SetEnabled(true); |
| 978 | 980 |
| 979 Layout(); | 981 Layout(); |
| 980 SchedulePaint(); | 982 SchedulePaint(); |
| 981 } | 983 } |
| 982 | 984 |
| 983 void BookmarkBarView::BookmarkModelBeingDeleted(BookmarkModel* model) { | 985 void BookmarkBarView::BookmarkModelBeingDeleted(BookmarkModel* model) { |
| 984 // In normal shutdown The bookmark model should never be deleted before us. | 986 // In normal shutdown The bookmark model should never be deleted before us. |
| 985 // When X exits suddenly though, it can happen, This code exists | 987 // When X exits suddenly though, it can happen, This code exists |
| 986 // to check for regressions in shutdown code and not crash. | 988 // to check for regressions in shutdown code and not crash. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1004 | 1006 |
| 1005 void BookmarkBarView::BookmarkNodeAdded(BookmarkModel* model, | 1007 void BookmarkBarView::BookmarkNodeAdded(BookmarkModel* model, |
| 1006 const BookmarkNode* parent, | 1008 const BookmarkNode* parent, |
| 1007 int index) { | 1009 int index) { |
| 1008 BookmarkNodeAddedImpl(model, parent, index); | 1010 BookmarkNodeAddedImpl(model, parent, index); |
| 1009 } | 1011 } |
| 1010 | 1012 |
| 1011 void BookmarkBarView::BookmarkNodeAddedImpl(BookmarkModel* model, | 1013 void BookmarkBarView::BookmarkNodeAddedImpl(BookmarkModel* model, |
| 1012 const BookmarkNode* parent, | 1014 const BookmarkNode* parent, |
| 1013 int index) { | 1015 int index) { |
| 1016 other_bookmarked_button_->SetVisible( |
| 1017 model->other_node()->GetChildCount() > 0); |
| 1014 NotifyModelChanged(); | 1018 NotifyModelChanged(); |
| 1015 if (parent != model_->GetBookmarkBarNode()) { | 1019 if (parent != model_->GetBookmarkBarNode()) { |
| 1016 // We only care about nodes on the bookmark bar. | 1020 // We only care about nodes on the bookmark bar. |
| 1017 return; | 1021 return; |
| 1018 } | 1022 } |
| 1019 DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); | 1023 DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); |
| 1020 const BookmarkNode* node = parent->GetChild(index); | 1024 const BookmarkNode* node = parent->GetChild(index); |
| 1021 if (!throbbing_view_ && sync_service_ && sync_service_->SetupInProgress()) { | 1025 if (!throbbing_view_ && sync_service_ && sync_service_->SetupInProgress()) { |
| 1022 StartThrobbing(node, true); | 1026 StartThrobbing(node, true); |
| 1023 } | 1027 } |
| 1024 AddChildView(index, CreateBookmarkButton(node)); | 1028 AddChildView(index, CreateBookmarkButton(node)); |
| 1025 UpdateColors(); | 1029 UpdateColors(); |
| 1026 Layout(); | 1030 Layout(); |
| 1027 SchedulePaint(); | 1031 SchedulePaint(); |
| 1028 } | 1032 } |
| 1029 | 1033 |
| 1030 void BookmarkBarView::BookmarkNodeRemoved(BookmarkModel* model, | 1034 void BookmarkBarView::BookmarkNodeRemoved(BookmarkModel* model, |
| 1031 const BookmarkNode* parent, | 1035 const BookmarkNode* parent, |
| 1032 int old_index, | 1036 int old_index, |
| 1033 const BookmarkNode* node) { | 1037 const BookmarkNode* node) { |
| 1034 BookmarkNodeRemovedImpl(model, parent, old_index); | 1038 BookmarkNodeRemovedImpl(model, parent, old_index); |
| 1035 } | 1039 } |
| 1036 | 1040 |
| 1037 void BookmarkBarView::BookmarkNodeRemovedImpl(BookmarkModel* model, | 1041 void BookmarkBarView::BookmarkNodeRemovedImpl(BookmarkModel* model, |
| 1038 const BookmarkNode* parent, | 1042 const BookmarkNode* parent, |
| 1039 int index) { | 1043 int index) { |
| 1044 other_bookmarked_button_->SetVisible( |
| 1045 model->other_node()->GetChildCount() > 0); |
| 1046 |
| 1040 StopThrobbing(true); | 1047 StopThrobbing(true); |
| 1041 // No need to start throbbing again as the bookmark bubble can't be up at | 1048 // No need to start throbbing again as the bookmark bubble can't be up at |
| 1042 // the same time as the user reorders. | 1049 // the same time as the user reorders. |
| 1043 | 1050 |
| 1044 NotifyModelChanged(); | 1051 NotifyModelChanged(); |
| 1045 if (parent != model_->GetBookmarkBarNode()) { | 1052 if (parent != model_->GetBookmarkBarNode()) { |
| 1046 // We only care about nodes on the bookmark bar. | 1053 // We only care about nodes on the bookmark bar. |
| 1047 return; | 1054 return; |
| 1048 } | 1055 } |
| 1049 DCHECK(index >= 0 && index < GetBookmarkButtonCount()); | 1056 DCHECK(index >= 0 && index < GetBookmarkButtonCount()); |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1553 } else if (!overflow_only) { | 1560 } else if (!overflow_only) { |
| 1554 throbbing_view_ = other_bookmarked_button_; | 1561 throbbing_view_ = other_bookmarked_button_; |
| 1555 } | 1562 } |
| 1556 | 1563 |
| 1557 // Use a large number so that the button continues to throb. | 1564 // Use a large number so that the button continues to throb. |
| 1558 if (throbbing_view_) | 1565 if (throbbing_view_) |
| 1559 throbbing_view_->StartThrobbing(std::numeric_limits<int>::max()); | 1566 throbbing_view_->StartThrobbing(std::numeric_limits<int>::max()); |
| 1560 } | 1567 } |
| 1561 | 1568 |
| 1562 int BookmarkBarView::GetBookmarkButtonCount() { | 1569 int BookmarkBarView::GetBookmarkButtonCount() { |
| 1563 // We contain at least four non-bookmark button views: other bookmarks, | 1570 // We contain five non-bookmark button views: other bookmarks, bookmarks |
| 1564 // bookmarks separator, chevrons (for overflow), the instruction label and | 1571 // separator, chevrons (for overflow), the instruction label and the sync |
| 1565 // the sync error button. | 1572 // error button. |
| 1566 return GetChildViewCount() - 5; | 1573 return GetChildViewCount() - 5; |
| 1567 } | 1574 } |
| 1568 | 1575 |
| 1569 void BookmarkBarView::StopThrobbing(bool immediate) { | 1576 void BookmarkBarView::StopThrobbing(bool immediate) { |
| 1570 if (!throbbing_view_) | 1577 if (!throbbing_view_) |
| 1571 return; | 1578 return; |
| 1572 | 1579 |
| 1573 // If not immediate, cycle through 2 more complete cycles. | 1580 // If not immediate, cycle through 2 more complete cycles. |
| 1574 throbbing_view_->StartThrobbing(immediate ? 0 : 4); | 1581 throbbing_view_->StartThrobbing(immediate ? 0 : 4); |
| 1575 throbbing_view_ = NULL; | 1582 throbbing_view_ = NULL; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1607 (kNewtabVerticalPadding) * current_state); | 1614 (kNewtabVerticalPadding) * current_state); |
| 1608 width -= static_cast<int>(static_cast<double> | 1615 width -= static_cast<int>(static_cast<double> |
| 1609 (kNewtabHorizontalPadding) * current_state); | 1616 (kNewtabHorizontalPadding) * current_state); |
| 1610 height -= static_cast<int>(static_cast<double> | 1617 height -= static_cast<int>(static_cast<double> |
| 1611 (kNewtabVerticalPadding * 2) * current_state); | 1618 (kNewtabVerticalPadding * 2) * current_state); |
| 1612 separator_margin -= static_cast<int>(static_cast<double> | 1619 separator_margin -= static_cast<int>(static_cast<double> |
| 1613 (kSeparatorMargin) * current_state); | 1620 (kSeparatorMargin) * current_state); |
| 1614 } | 1621 } |
| 1615 | 1622 |
| 1616 gfx::Size other_bookmarked_pref = | 1623 gfx::Size other_bookmarked_pref = |
| 1617 other_bookmarked_button_->GetPreferredSize(); | 1624 other_bookmarked_button_->IsVisible() ? |
| 1625 other_bookmarked_button_->GetPreferredSize() : gfx::Size(); |
| 1618 gfx::Size overflow_pref = overflow_button_->GetPreferredSize(); | 1626 gfx::Size overflow_pref = overflow_button_->GetPreferredSize(); |
| 1619 gfx::Size bookmarks_separator_pref = | 1627 gfx::Size bookmarks_separator_pref = |
| 1620 bookmarks_separator_view_->GetPreferredSize(); | 1628 bookmarks_separator_view_->GetPreferredSize(); |
| 1621 | 1629 |
| 1622 int sync_error_total_width = 0; | 1630 int sync_error_total_width = 0; |
| 1623 gfx::Size sync_error_button_pref = sync_error_button_->GetPreferredSize(); | 1631 gfx::Size sync_error_button_pref = sync_error_button_->GetPreferredSize(); |
| 1624 if (sync_ui_util::ShouldShowSyncErrorButton(sync_service_)) { | 1632 if (sync_ui_util::ShouldShowSyncErrorButton(sync_service_)) { |
| 1625 sync_error_total_width += kButtonPadding + sync_error_button_pref.width(); | 1633 sync_error_total_width += kButtonPadding + sync_error_button_pref.width(); |
| 1626 } | 1634 } |
| 1627 const int max_x = width - other_bookmarked_pref.width() - kButtonPadding - | 1635 int max_x = width - overflow_pref.width() - kButtonPadding - |
| 1628 overflow_pref.width() - kButtonPadding - | |
| 1629 bookmarks_separator_pref.width() - sync_error_total_width; | 1636 bookmarks_separator_pref.width() - sync_error_total_width; |
| 1637 if (other_bookmarked_button_->IsVisible()) |
| 1638 max_x -= other_bookmarked_pref.width() + kButtonPadding; |
| 1630 | 1639 |
| 1631 // Next, layout out the buttons. Any buttons that are placed beyond the | 1640 // Next, layout out the buttons. Any buttons that are placed beyond the |
| 1632 // visible region and made invisible. | 1641 // visible region and made invisible. |
| 1633 if (GetBookmarkButtonCount() == 0 && model_ && model_->IsLoaded()) { | 1642 if (GetBookmarkButtonCount() == 0 && model_ && model_->IsLoaded()) { |
| 1634 gfx::Size pref = instructions_->GetPreferredSize(); | 1643 gfx::Size pref = instructions_->GetPreferredSize(); |
| 1635 if (!compute_bounds_only) { | 1644 if (!compute_bounds_only) { |
| 1636 instructions_->SetBounds( | 1645 instructions_->SetBounds( |
| 1637 x + kInstructionsPadding, y, | 1646 x + kInstructionsPadding, y, |
| 1638 std::min(static_cast<int>(pref.width()), | 1647 std::min(static_cast<int>(pref.width()), |
| 1639 max_x - x), | 1648 max_x - x), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1679 bookmarks_separator_view_->SetBounds(x, | 1688 bookmarks_separator_view_->SetBounds(x, |
| 1680 y - top_margin, | 1689 y - top_margin, |
| 1681 bookmarks_separator_pref.width(), | 1690 bookmarks_separator_pref.width(), |
| 1682 height + top_margin + kBottomMargin - | 1691 height + top_margin + kBottomMargin - |
| 1683 separator_margin); | 1692 separator_margin); |
| 1684 } | 1693 } |
| 1685 | 1694 |
| 1686 x += bookmarks_separator_pref.width(); | 1695 x += bookmarks_separator_pref.width(); |
| 1687 | 1696 |
| 1688 // The other bookmarks button. | 1697 // The other bookmarks button. |
| 1689 if (!compute_bounds_only) { | 1698 if (other_bookmarked_button_->IsVisible()) { |
| 1690 other_bookmarked_button_->SetBounds(x, y, other_bookmarked_pref.width(), | 1699 if (!compute_bounds_only) { |
| 1691 height); | 1700 other_bookmarked_button_->SetBounds(x, y, other_bookmarked_pref.width(), |
| 1701 height); |
| 1702 } |
| 1703 x += other_bookmarked_pref.width() + kButtonPadding; |
| 1692 } | 1704 } |
| 1693 x += other_bookmarked_pref.width() + kButtonPadding; | |
| 1694 | 1705 |
| 1695 // Set the real bounds of the sync error button only if it needs to appear on | 1706 // Set the real bounds of the sync error button only if it needs to appear on |
| 1696 // the bookmarks bar. | 1707 // the bookmarks bar. |
| 1697 if (sync_ui_util::ShouldShowSyncErrorButton(sync_service_)) { | 1708 if (sync_ui_util::ShouldShowSyncErrorButton(sync_service_)) { |
| 1698 x += kButtonPadding; | 1709 x += kButtonPadding; |
| 1699 if (!compute_bounds_only) { | 1710 if (!compute_bounds_only) { |
| 1700 sync_error_button_->SetBounds( | 1711 sync_error_button_->SetBounds( |
| 1701 x, y, sync_error_button_pref.width(), height); | 1712 x, y, sync_error_button_pref.width(), height); |
| 1702 sync_error_button_->SetVisible(true); | 1713 sync_error_button_->SetVisible(true); |
| 1703 } | 1714 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1734 // The tooltip is the only way we have to display text explaining the error | 1745 // The tooltip is the only way we have to display text explaining the error |
| 1735 // to the user. | 1746 // to the user. |
| 1736 sync_error_button->SetTooltipText( | 1747 sync_error_button->SetTooltipText( |
| 1737 UTF16ToWide(l10n_util::GetStringUTF16(IDS_SYNC_BOOKMARK_BAR_ERROR_DESC))); | 1748 UTF16ToWide(l10n_util::GetStringUTF16(IDS_SYNC_BOOKMARK_BAR_ERROR_DESC))); |
| 1738 sync_error_button->SetAccessibleName( | 1749 sync_error_button->SetAccessibleName( |
| 1739 l10n_util::GetStringUTF16(IDS_ACCNAME_SYNC_ERROR_BUTTON)); | 1750 l10n_util::GetStringUTF16(IDS_ACCNAME_SYNC_ERROR_BUTTON)); |
| 1740 sync_error_button->SetIcon( | 1751 sync_error_button->SetIcon( |
| 1741 *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING)); | 1752 *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING)); |
| 1742 return sync_error_button; | 1753 return sync_error_button; |
| 1743 } | 1754 } |
| OLD | NEW |