| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/views/bookmark_bar_view.h" | 5 #include "chrome/browser/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 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 model_->RemoveObserver(this); | 437 model_->RemoveObserver(this); |
| 438 | 438 |
| 439 // Disable the other bookmarked button, we'll re-enable when the model is | 439 // Disable the other bookmarked button, we'll re-enable when the model is |
| 440 // loaded. | 440 // loaded. |
| 441 other_bookmarked_button_->SetEnabled(false); | 441 other_bookmarked_button_->SetEnabled(false); |
| 442 | 442 |
| 443 Source<Profile> ns_source(profile_->GetOriginalProfile()); | 443 Source<Profile> ns_source(profile_->GetOriginalProfile()); |
| 444 registrar_.Add(this, NotificationType::BOOKMARK_BUBBLE_SHOWN, ns_source); | 444 registrar_.Add(this, NotificationType::BOOKMARK_BUBBLE_SHOWN, ns_source); |
| 445 registrar_.Add(this, NotificationType::BOOKMARK_BUBBLE_HIDDEN, ns_source); | 445 registrar_.Add(this, NotificationType::BOOKMARK_BUBBLE_HIDDEN, ns_source); |
| 446 registrar_.Add(this, NotificationType::BOOKMARK_BAR_VISIBILITY_PREF_CHANGED, | 446 registrar_.Add(this, NotificationType::BOOKMARK_BAR_VISIBILITY_PREF_CHANGED, |
| 447 NotificationService::AllSources()); | 447 NotificationService::AllSources()); |
| 448 |
| 449 // Remove any existing bookmark buttons. |
| 450 while (GetBookmarkButtonCount()) |
| 451 delete GetChildViewAt(0); |
| 448 | 452 |
| 449 model_ = profile_->GetBookmarkModel(); | 453 model_ = profile_->GetBookmarkModel(); |
| 450 model_->AddObserver(this); | 454 model_->AddObserver(this); |
| 451 if (model_->IsLoaded()) | 455 if (model_->IsLoaded()) |
| 452 Loaded(model_); | 456 Loaded(model_); |
| 453 | |
| 454 // else case: we'll receive notification back from the BookmarkModel when done | 457 // else case: we'll receive notification back from the BookmarkModel when done |
| 455 // loading, then we'll populate the bar. | 458 // loading, then we'll populate the bar. |
| 456 } | 459 } |
| 457 | 460 |
| 458 void BookmarkBarView::SetPageNavigator(PageNavigator* navigator) { | 461 void BookmarkBarView::SetPageNavigator(PageNavigator* navigator) { |
| 459 page_navigator_ = navigator; | 462 page_navigator_ = navigator; |
| 460 } | 463 } |
| 461 | 464 |
| 462 gfx::Size BookmarkBarView::GetPreferredSize() { | 465 gfx::Size BookmarkBarView::GetPreferredSize() { |
| 463 // Extension apps don't show the bookmark bar. | 466 // Extension apps don't show the bookmark bar. |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 941 button->EnableCanvasFlippingForRTLUI(true); | 944 button->EnableCanvasFlippingForRTLUI(true); |
| 942 | 945 |
| 943 // Make visible as necessary. | 946 // Make visible as necessary. |
| 944 button->SetVisible(false); | 947 button->SetVisible(false); |
| 945 // Set accessibility name. | 948 // Set accessibility name. |
| 946 button->SetAccessibleName( | 949 button->SetAccessibleName( |
| 947 l10n_util::GetString(IDS_ACCNAME_BOOKMARKS_CHEVRON)); | 950 l10n_util::GetString(IDS_ACCNAME_BOOKMARKS_CHEVRON)); |
| 948 return button; | 951 return button; |
| 949 } | 952 } |
| 950 | 953 |
| 951 int BookmarkBarView::GetBookmarkButtonCount() { | |
| 952 // We contain at least four non-bookmark button views: other bookmarks, | |
| 953 // bookmarks separator, chevrons (for overflow), the instruction label and | |
| 954 // the sync error button. | |
| 955 return GetChildViewCount() - 5; | |
| 956 } | |
| 957 | |
| 958 void BookmarkBarView::Loaded(BookmarkModel* model) { | 954 void BookmarkBarView::Loaded(BookmarkModel* model) { |
| 955 volatile int button_count = GetBookmarkButtonCount(); |
| 956 CHECK(button_count == 0); // If non-zero it means Load was invoked more than |
| 957 // once, or we didn't properly clear things. Either |
| 958 // of which shouldn't happen |
| 959 const BookmarkNode* node = model_->GetBookmarkBarNode(); | 959 const BookmarkNode* node = model_->GetBookmarkBarNode(); |
| 960 DCHECK(node && model_->other_node()); | 960 DCHECK(node && model_->other_node()); |
| 961 // Create a button for each of the children on the bookmark bar. | 961 // Create a button for each of the children on the bookmark bar. |
| 962 for (int i = 0, child_count = node->GetChildCount(); i < child_count; ++i) | 962 for (int i = 0, child_count = node->GetChildCount(); i < child_count; ++i) |
| 963 AddChildView(i, CreateBookmarkButton(node->GetChild(i))); | 963 AddChildView(i, CreateBookmarkButton(node->GetChild(i))); |
| 964 UpdateColors(); | 964 UpdateColors(); |
| 965 other_bookmarked_button_->SetEnabled(true); | 965 other_bookmarked_button_->SetEnabled(true); |
| 966 | 966 |
| 967 Layout(); | 967 Layout(); |
| 968 SchedulePaint(); | 968 SchedulePaint(); |
| 969 |
| 970 CheckIntegrity(); |
| 969 } | 971 } |
| 970 | 972 |
| 971 void BookmarkBarView::BookmarkModelBeingDeleted(BookmarkModel* model) { | 973 void BookmarkBarView::BookmarkModelBeingDeleted(BookmarkModel* model) { |
| 972 // The bookmark model should never be deleted before us. This code exists | 974 // The bookmark model should never be deleted before us. This code exists |
| 973 // to check for regressions in shutdown code and not crash. | 975 // to check for regressions in shutdown code and not crash. |
| 974 NOTREACHED(); | 976 NOTREACHED(); |
| 975 | 977 |
| 976 // Do minimal cleanup, presumably we'll be deleted shortly. | 978 // Do minimal cleanup, presumably we'll be deleted shortly. |
| 977 NotifyModelChanged(); | 979 NotifyModelChanged(); |
| 978 model_->RemoveObserver(this); | 980 model_->RemoveObserver(this); |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1550 } | 1552 } |
| 1551 } else if (!overflow_only) { | 1553 } else if (!overflow_only) { |
| 1552 throbbing_view_ = other_bookmarked_button_; | 1554 throbbing_view_ = other_bookmarked_button_; |
| 1553 } | 1555 } |
| 1554 | 1556 |
| 1555 // Use a large number so that the button continues to throb. | 1557 // Use a large number so that the button continues to throb. |
| 1556 if (throbbing_view_) | 1558 if (throbbing_view_) |
| 1557 throbbing_view_->StartThrobbing(std::numeric_limits<int>::max()); | 1559 throbbing_view_->StartThrobbing(std::numeric_limits<int>::max()); |
| 1558 } | 1560 } |
| 1559 | 1561 |
| 1562 int BookmarkBarView::GetBookmarkButtonCount() { |
| 1563 // We contain at least four non-bookmark button views: other bookmarks, |
| 1564 // bookmarks separator, chevrons (for overflow), the instruction label and |
| 1565 // the sync error button. |
| 1566 return GetChildViewCount() - 5; |
| 1567 } |
| 1568 |
| 1560 void BookmarkBarView::StopThrobbing(bool immediate) { | 1569 void BookmarkBarView::StopThrobbing(bool immediate) { |
| 1561 if (!throbbing_view_) | 1570 if (!throbbing_view_) |
| 1562 return; | 1571 return; |
| 1563 | 1572 |
| 1564 // If not immediate, cycle through 2 more complete cycles. | 1573 // If not immediate, cycle through 2 more complete cycles. |
| 1565 throbbing_view_->StartThrobbing(immediate ? 0 : 4); | 1574 throbbing_view_->StartThrobbing(immediate ? 0 : 4); |
| 1566 throbbing_view_ = NULL; | 1575 throbbing_view_ = NULL; |
| 1567 } | 1576 } |
| 1568 | 1577 |
| 1569 void BookmarkBarView::UpdateColors() { | 1578 void BookmarkBarView::UpdateColors() { |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1734 | 1743 |
| 1735 void BookmarkBarView::CheckIntegrity() { | 1744 void BookmarkBarView::CheckIntegrity() { |
| 1736 // We better be on the ui thread. | 1745 // We better be on the ui thread. |
| 1737 CHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); | 1746 CHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
| 1738 | 1747 |
| 1739 // And the number of views on the bookmark bar better match that of the model. | 1748 // And the number of views on the bookmark bar better match that of the model. |
| 1740 volatile int model_count = model_->GetBookmarkBarNode()->GetChildCount(); | 1749 volatile int model_count = model_->GetBookmarkBarNode()->GetChildCount(); |
| 1741 volatile int view_count = GetBookmarkButtonCount(); | 1750 volatile int view_count = GetBookmarkButtonCount(); |
| 1742 CHECK_EQ(model_count, view_count); | 1751 CHECK_EQ(model_count, view_count); |
| 1743 } | 1752 } |
| OLD | NEW |