Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc

Issue 7574021: Remove frontend code that allows for dynamic profile setting, and read the profile off the browse... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/bookmarks/bookmark_bar_view.h" 5 #include "chrome/browser/ui/views/bookmarks/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 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 355
356 // Returns the bitmap to use for starred folders. 356 // Returns the bitmap to use for starred folders.
357 static const SkBitmap& GetFolderIcon() { 357 static const SkBitmap& GetFolderIcon() {
358 if (!kFolderIcon) { 358 if (!kFolderIcon) {
359 kFolderIcon = ResourceBundle::GetSharedInstance(). 359 kFolderIcon = ResourceBundle::GetSharedInstance().
360 GetBitmapNamed(IDR_BOOKMARK_BAR_FOLDER); 360 GetBitmapNamed(IDR_BOOKMARK_BAR_FOLDER);
361 } 361 }
362 return *kFolderIcon; 362 return *kFolderIcon;
363 } 363 }
364 364
365 BookmarkBarView::BookmarkBarView(Profile* profile, Browser* browser) 365 BookmarkBarView::BookmarkBarView(Browser* browser)
366 : profile_(NULL), 366 : page_navigator_(NULL),
367 page_navigator_(NULL),
368 model_(NULL), 367 model_(NULL),
369 bookmark_menu_(NULL), 368 bookmark_menu_(NULL),
370 bookmark_drop_menu_(NULL), 369 bookmark_drop_menu_(NULL),
371 other_bookmarked_button_(NULL), 370 other_bookmarked_button_(NULL),
372 ALLOW_THIS_IN_INITIALIZER_LIST(show_folder_method_factory_(this)), 371 ALLOW_THIS_IN_INITIALIZER_LIST(show_folder_method_factory_(this)),
373 sync_error_button_(NULL), 372 sync_error_button_(NULL),
374 sync_service_(NULL), 373 sync_service_(browser->profile()->GetProfileSyncService()),
375 overflow_button_(NULL), 374 overflow_button_(NULL),
376 instructions_(NULL), 375 instructions_(NULL),
377 bookmarks_separator_view_(NULL), 376 bookmarks_separator_view_(NULL),
378 browser_(browser), 377 browser_(browser),
379 infobar_visible_(false), 378 infobar_visible_(false),
380 throbbing_view_(NULL), 379 throbbing_view_(NULL),
381 bookmark_bar_state_(BookmarkBar::SHOW), 380 bookmark_bar_state_(BookmarkBar::SHOW),
382 animating_detached_(false) { 381 animating_detached_(false) {
383 if (profile->GetProfileSyncService()) { 382 if (sync_service_)
384 // Obtain a pointer to the profile sync service and add our instance as an
385 // observer.
386 sync_service_ = profile->GetProfileSyncService();
387 sync_service_->AddObserver(this); 383 sync_service_->AddObserver(this);
388 }
389 384
390 set_id(VIEW_ID_BOOKMARK_BAR); 385 set_id(VIEW_ID_BOOKMARK_BAR);
391 Init(); 386 Init();
392 SetProfile(profile);
393 387
394 size_animation_->Reset(1); 388 size_animation_->Reset(1);
395 } 389 }
396 390
397 BookmarkBarView::~BookmarkBarView() { 391 BookmarkBarView::~BookmarkBarView() {
398 if (model_) 392 if (model_)
399 model_->RemoveObserver(this); 393 model_->RemoveObserver(this);
400 394
401 // It's possible for the menu to outlive us, reset the observer to make sure 395 // It's possible for the menu to outlive us, reset the observer to make sure
402 // it doesn't have a reference to us. 396 // it doesn't have a reference to us.
403 if (bookmark_menu_) 397 if (bookmark_menu_)
404 bookmark_menu_->set_observer(NULL); 398 bookmark_menu_->set_observer(NULL);
405 399
406 StopShowFolderDropMenuTimer(); 400 StopShowFolderDropMenuTimer();
407 401
408 if (sync_service_) 402 if (sync_service_)
409 sync_service_->RemoveObserver(this); 403 sync_service_->RemoveObserver(this);
410 } 404 }
411 405
412 void BookmarkBarView::SetProfile(Profile* profile) {
413 DCHECK(profile);
414 if (profile_ == profile)
415 return;
416
417 StopThrobbing(true);
418
419 // Cancels the current cancelable.
420 registrar_.RemoveAll();
421
422 profile_ = profile;
423
424 if (model_)
425 model_->RemoveObserver(this);
426
427 // Disable the other bookmarked button, we'll re-enable when the model is
428 // loaded.
429 other_bookmarked_button_->SetEnabled(false);
430
431 Source<Profile> ns_source(profile_->GetOriginalProfile());
432 registrar_.Add(this, chrome::NOTIFICATION_BOOKMARK_BUBBLE_SHOWN, ns_source);
433 registrar_.Add(this, chrome::NOTIFICATION_BOOKMARK_BUBBLE_HIDDEN, ns_source);
434
435 // Remove any existing bookmark buttons.
436 while (GetBookmarkButtonCount())
437 delete child_at(0);
438
439 model_ = profile_->GetBookmarkModel();
440 if (model_) {
441 model_->AddObserver(this);
442 if (model_->IsLoaded())
443 Loaded(model_, false);
444 // else case: we'll receive notification back from the BookmarkModel when
445 // done loading, then we'll populate the bar.
446 }
447 }
448
449 void BookmarkBarView::SetPageNavigator(PageNavigator* navigator) { 406 void BookmarkBarView::SetPageNavigator(PageNavigator* navigator) {
450 page_navigator_ = navigator; 407 page_navigator_ = navigator;
451 } 408 }
452 409
453 void BookmarkBarView::SetBookmarkBarState( 410 void BookmarkBarView::SetBookmarkBarState(
454 BookmarkBar::State state, 411 BookmarkBar::State state,
455 BookmarkBar::AnimateChangeType animate_type) { 412 BookmarkBar::AnimateChangeType animate_type) {
456 if (animate_type == BookmarkBar::ANIMATE_STATE_CHANGE) { 413 if (animate_type == BookmarkBar::ANIMATE_STATE_CHANGE) {
457 animating_detached_ = (state == BookmarkBar::DETACHED || 414 animating_detached_ = (state == BookmarkBar::DETACHED ||
458 bookmark_bar_state_ == BookmarkBar::DETACHED); 415 bookmark_bar_state_ == BookmarkBar::DETACHED);
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 custom_formats->insert(BookmarkNodeData::GetBookmarkCustomFormat()); 675 custom_formats->insert(BookmarkNodeData::GetBookmarkCustomFormat());
719 return true; 676 return true;
720 } 677 }
721 678
722 bool BookmarkBarView::AreDropTypesRequired() { 679 bool BookmarkBarView::AreDropTypesRequired() {
723 return true; 680 return true;
724 } 681 }
725 682
726 bool BookmarkBarView::CanDrop(const ui::OSExchangeData& data) { 683 bool BookmarkBarView::CanDrop(const ui::OSExchangeData& data) {
727 if (!model_ || !model_->IsLoaded() || 684 if (!model_ || !model_->IsLoaded() ||
728 !profile_->GetPrefs()->GetBoolean(prefs::kEditBookmarksEnabled)) 685 !browser_->profile()->GetPrefs()->GetBoolean(
686 prefs::kEditBookmarksEnabled))
729 return false; 687 return false;
730 688
731 if (!drop_info_.get()) 689 if (!drop_info_.get())
732 drop_info_.reset(new DropInfo()); 690 drop_info_.reset(new DropInfo());
733 691
734 // Only accept drops of 1 node, which is the case for all data dragged from 692 // Only accept drops of 1 node, which is the case for all data dragged from
735 // bookmark bar and menus. 693 // bookmark bar and menus.
736 return drop_info_->data.Read(data) && drop_info_->data.size() == 1; 694 return drop_info_->data.Read(data) && drop_info_->data.size() == 1;
737 } 695 }
738 696
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 index = parent_node->child_count(); 788 index = parent_node->child_count();
831 } else if (drop_info_->location.on) { 789 } else if (drop_info_->location.on) {
832 parent_node = root->GetChild(index); 790 parent_node = root->GetChild(index);
833 index = parent_node->child_count(); 791 index = parent_node->child_count();
834 } else { 792 } else {
835 parent_node = root; 793 parent_node = root;
836 } 794 }
837 const BookmarkNodeData data = drop_info_->data; 795 const BookmarkNodeData data = drop_info_->data;
838 DCHECK(data.is_valid()); 796 DCHECK(data.is_valid());
839 drop_info_.reset(); 797 drop_info_.reset();
840 return bookmark_utils::PerformBookmarkDrop(profile_, data, parent_node, 798 return bookmark_utils::PerformBookmarkDrop(browser_->profile(), data,
841 index); 799 parent_node, index);
842 } 800 }
843 801
844 void BookmarkBarView::ShowContextMenu(const gfx::Point& p, 802 void BookmarkBarView::ShowContextMenu(const gfx::Point& p,
845 bool is_mouse_gesture) { 803 bool is_mouse_gesture) {
846 ShowContextMenuForView(this, p, is_mouse_gesture); 804 ShowContextMenuForView(this, p, is_mouse_gesture);
847 } 805 }
848 806
849 void BookmarkBarView::OnThemeChanged() { 807 void BookmarkBarView::OnThemeChanged() {
850 UpdateColors(); 808 UpdateColors();
851 } 809 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 // Don't let the user drag while animating open or we're closed (and not 970 // Don't let the user drag while animating open or we're closed (and not
1013 // detached, when detached size_animation_ is always 0). This typically is 971 // detached, when detached size_animation_ is always 0). This typically is
1014 // only hit if the user does something to inadvertently trigger DnD such as 972 // only hit if the user does something to inadvertently trigger DnD such as
1015 // pressing the mouse and hitting control-b. 973 // pressing the mouse and hitting control-b.
1016 return ui::DragDropTypes::DRAG_NONE; 974 return ui::DragDropTypes::DRAG_NONE;
1017 } 975 }
1018 976
1019 for (int i = 0; i < GetBookmarkButtonCount(); ++i) { 977 for (int i = 0; i < GetBookmarkButtonCount(); ++i) {
1020 if (sender == GetBookmarkButton(i)) { 978 if (sender == GetBookmarkButton(i)) {
1021 return bookmark_utils::BookmarkDragOperation( 979 return bookmark_utils::BookmarkDragOperation(
1022 profile_, model_->bookmark_bar_node()->GetChild(i)); 980 browser_->profile(), model_->bookmark_bar_node()->GetChild(i));
1023 } 981 }
1024 } 982 }
1025 NOTREACHED(); 983 NOTREACHED();
1026 return ui::DragDropTypes::DRAG_NONE; 984 return ui::DragDropTypes::DRAG_NONE;
1027 } 985 }
1028 986
1029 bool BookmarkBarView::CanStartDragForView(views::View* sender, 987 bool BookmarkBarView::CanStartDragForView(views::View* sender,
1030 const gfx::Point& press_pt, 988 const gfx::Point& press_pt,
1031 const gfx::Point& p) { 989 const gfx::Point& p) {
1032 // Check if we have not moved enough horizontally but we have moved downward 990 // Check if we have not moved enough horizontally but we have moved downward
(...skipping 25 matching lines...) Expand all
1058 node = model_->other_node(); 1016 node = model_->other_node();
1059 } else if (view == overflow_button_) { 1017 } else if (view == overflow_button_) {
1060 node = model_->bookmark_bar_node(); 1018 node = model_->bookmark_bar_node();
1061 start_index = GetFirstHiddenNodeIndex(); 1019 start_index = GetFirstHiddenNodeIndex();
1062 } else { 1020 } else {
1063 int button_index = GetIndexOf(view); 1021 int button_index = GetIndexOf(view);
1064 DCHECK_NE(-1, button_index); 1022 DCHECK_NE(-1, button_index);
1065 node = model_->bookmark_bar_node()->GetChild(button_index); 1023 node = model_->bookmark_bar_node()->GetChild(button_index);
1066 } 1024 }
1067 1025
1068 bookmark_menu_ = new BookmarkMenuController( 1026 bookmark_menu_ = new BookmarkMenuController(browser_->profile(),
1069 profile_, page_navigator_, GetWidget(), node, start_index); 1027 page_navigator_, GetWidget(), node, start_index);
1070 bookmark_menu_->set_observer(this); 1028 bookmark_menu_->set_observer(this);
1071 bookmark_menu_->RunMenuAt(this, false); 1029 bookmark_menu_->RunMenuAt(this, false);
1072 } 1030 }
1073 1031
1074 void BookmarkBarView::ButtonPressed(views::Button* sender, 1032 void BookmarkBarView::ButtonPressed(views::Button* sender,
1075 const views::Event& event) { 1033 const views::Event& event) {
1076 // Show the login wizard if the user clicked the re-login button. 1034 // Show the login wizard if the user clicked the re-login button.
1077 if (sender->tag() == kSyncErrorButtonTag) { 1035 if (sender->tag() == kSyncErrorButtonTag) {
1078 DCHECK(sender == sync_error_button_); 1036 DCHECK(sender == sync_error_button_);
1079 DCHECK(sync_service_ && !sync_service_->IsManaged()); 1037 DCHECK(sync_service_ && !sync_service_->IsManaged());
1080 sync_service_->ShowErrorUI(); 1038 sync_service_->ShowErrorUI();
1081 return; 1039 return;
1082 } 1040 }
1083 1041
1084 const BookmarkNode* node; 1042 const BookmarkNode* node;
1085 if (sender->tag() == kOtherFolderButtonTag) { 1043 if (sender->tag() == kOtherFolderButtonTag) {
1086 node = model_->other_node(); 1044 node = model_->other_node();
1087 } else { 1045 } else {
1088 int index = GetIndexOf(sender); 1046 int index = GetIndexOf(sender);
1089 DCHECK_NE(-1, index); 1047 DCHECK_NE(-1, index);
1090 node = model_->bookmark_bar_node()->GetChild(index); 1048 node = model_->bookmark_bar_node()->GetChild(index);
1091 } 1049 }
1092 DCHECK(page_navigator_); 1050 DCHECK(page_navigator_);
1093 1051
1094 WindowOpenDisposition disposition_from_event_flags = 1052 WindowOpenDisposition disposition_from_event_flags =
1095 event_utils::DispositionFromEventFlags(sender->mouse_event_flags()); 1053 event_utils::DispositionFromEventFlags(sender->mouse_event_flags());
1096 1054
1055 Profile* profile = browser_->profile();
1097 if (node->is_url()) { 1056 if (node->is_url()) {
1098 RecordAppLaunch(profile_, node->url()); 1057 RecordAppLaunch(profile, node->url());
1099 page_navigator_->OpenURL(node->url(), GURL(), 1058 page_navigator_->OpenURL(node->url(), GURL(),
1100 disposition_from_event_flags, PageTransition::AUTO_BOOKMARK); 1059 disposition_from_event_flags, PageTransition::AUTO_BOOKMARK);
1101 } else { 1060 } else {
1102 bookmark_utils::OpenAll(GetWidget()->GetNativeWindow(), profile_, 1061 bookmark_utils::OpenAll(GetWidget()->GetNativeWindow(), profile,
1103 page_navigator_, node, disposition_from_event_flags); 1062 page_navigator_, node, disposition_from_event_flags);
1104 } 1063 }
1105 UserMetrics::RecordAction(UserMetricsAction("ClickedBookmarkBarURLButton")); 1064 UserMetrics::RecordAction(UserMetricsAction("ClickedBookmarkBarURLButton"));
1106 } 1065 }
1107 1066
1108 void BookmarkBarView::ShowContextMenuForView(View* source, 1067 void BookmarkBarView::ShowContextMenuForView(View* source,
1109 const gfx::Point& p, 1068 const gfx::Point& p,
1110 bool is_mouse_gesture) { 1069 bool is_mouse_gesture) {
1111 if (!model_->IsLoaded()) { 1070 if (!model_->IsLoaded()) {
1112 // Don't do anything if the model isn't loaded. 1071 // Don't do anything if the model isn't loaded.
(...skipping 14 matching lines...) Expand all
1127 DCHECK(bookmark_button_index != -1 && 1086 DCHECK(bookmark_button_index != -1 &&
1128 bookmark_button_index < GetBookmarkButtonCount()); 1087 bookmark_button_index < GetBookmarkButtonCount());
1129 const BookmarkNode* node = 1088 const BookmarkNode* node =
1130 model_->bookmark_bar_node()->GetChild(bookmark_button_index); 1089 model_->bookmark_bar_node()->GetChild(bookmark_button_index);
1131 nodes.push_back(node); 1090 nodes.push_back(node);
1132 parent = node->parent(); 1091 parent = node->parent();
1133 } else { 1092 } else {
1134 parent = model_->bookmark_bar_node(); 1093 parent = model_->bookmark_bar_node();
1135 nodes.push_back(parent); 1094 nodes.push_back(parent);
1136 } 1095 }
1137 // Browser may be null during testing. 1096 Profile* profile = browser_->profile();
1138 PageNavigator* navigator =
1139 browser() ? browser()->GetSelectedTabContents() : NULL;
1140 bool close_on_remove = 1097 bool close_on_remove =
1141 (parent == profile_->GetBookmarkModel()->other_node() && 1098 (parent == profile->GetBookmarkModel()->other_node()) &&
1142 parent->child_count() == 1); 1099 (parent->child_count() == 1);
1143 BookmarkContextMenu controller(GetWidget(), profile_, 1100 BookmarkContextMenu controller(GetWidget(), profile,
1144 navigator, parent, nodes, close_on_remove); 1101 browser_->GetSelectedTabContents(), parent, nodes, close_on_remove);
1145 controller.RunMenuAt(p); 1102 controller.RunMenuAt(p);
1146 } 1103 }
1147 1104
1148 void BookmarkBarView::Observe(int type, 1105 void BookmarkBarView::Observe(int type,
1149 const NotificationSource& source, 1106 const NotificationSource& source,
1150 const NotificationDetails& details) { 1107 const NotificationDetails& details) {
1151 DCHECK(profile_); 1108 DCHECK(browser_->profile());
1152 switch (type) { 1109 switch (type) {
1153 case chrome::NOTIFICATION_BOOKMARK_BUBBLE_SHOWN: { 1110 case chrome::NOTIFICATION_BOOKMARK_BUBBLE_SHOWN: {
1154 StopThrobbing(true); 1111 StopThrobbing(true);
1155 GURL url = *(Details<GURL>(details).ptr()); 1112 GURL url = *(Details<GURL>(details).ptr());
1156 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url); 1113 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url);
1157 if (!node) 1114 if (!node)
1158 return; // Generally shouldn't happen. 1115 return; // Generally shouldn't happen.
1159 StartThrobbing(node, false); 1116 StartThrobbing(node, false);
1160 break; 1117 break;
1161 } 1118 }
(...skipping 20 matching lines...) Expand all
1182 1139
1183 // Child views are traversed in the order they are added. Make sure the order 1140 // Child views are traversed in the order they are added. Make sure the order
1184 // they are added matches the visual order. 1141 // they are added matches the visual order.
1185 sync_error_button_ = CreateSyncErrorButton(); 1142 sync_error_button_ = CreateSyncErrorButton();
1186 AddChildView(sync_error_button_); 1143 AddChildView(sync_error_button_);
1187 1144
1188 overflow_button_ = CreateOverflowButton(); 1145 overflow_button_ = CreateOverflowButton();
1189 AddChildView(overflow_button_); 1146 AddChildView(overflow_button_);
1190 1147
1191 other_bookmarked_button_ = CreateOtherBookmarkedButton(); 1148 other_bookmarked_button_ = CreateOtherBookmarkedButton();
1149 // We'll re-enable when the model is loaded.
1150 other_bookmarked_button_->SetEnabled(false);
1192 AddChildView(other_bookmarked_button_); 1151 AddChildView(other_bookmarked_button_);
1193 1152
1194 bookmarks_separator_view_ = new ButtonSeparatorView(); 1153 bookmarks_separator_view_ = new ButtonSeparatorView();
1195 AddChildView(bookmarks_separator_view_); 1154 AddChildView(bookmarks_separator_view_);
1196 1155
1197 instructions_ = new BookmarkBarInstructionsView(this); 1156 instructions_ = new BookmarkBarInstructionsView(this);
1198 AddChildView(instructions_); 1157 AddChildView(instructions_);
1199 1158
1200 set_context_menu_controller(this); 1159 set_context_menu_controller(this);
1201 1160
1202 size_animation_.reset(new ui::SlideAnimation(this)); 1161 size_animation_.reset(new ui::SlideAnimation(this));
1162
1163 Profile* profile = browser_->profile();
1164 Source<Profile> ns_source(profile->GetOriginalProfile());
1165 registrar_.Add(this, chrome::NOTIFICATION_BOOKMARK_BUBBLE_SHOWN, ns_source);
1166 registrar_.Add(this, chrome::NOTIFICATION_BOOKMARK_BUBBLE_HIDDEN, ns_source);
1167
1168 model_ = profile->GetBookmarkModel();
1169 if (model_) {
1170 model_->AddObserver(this);
1171 if (model_->IsLoaded())
1172 Loaded(model_, false);
1173 // else case: we'll receive notification back from the BookmarkModel when
1174 // done loading, then we'll populate the bar.
1175 }
1203 } 1176 }
1204 1177
1205 int BookmarkBarView::GetBookmarkButtonCount() { 1178 int BookmarkBarView::GetBookmarkButtonCount() {
1206 // We contain five non-bookmark button views: other bookmarks, bookmarks 1179 // We contain five non-bookmark button views: other bookmarks, bookmarks
1207 // separator, chevrons (for overflow), the instruction label and the sync 1180 // separator, chevrons (for overflow), the instruction label and the sync
1208 // error button. 1181 // error button.
1209 return child_count() - 5; 1182 return child_count() - 5;
1210 } 1183 }
1211 1184
1212 views::TextButton* BookmarkBarView::GetBookmarkButton(int index) { 1185 views::TextButton* BookmarkBarView::GetBookmarkButton(int index) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 sync_error_button->SetAccessibleName( 1246 sync_error_button->SetAccessibleName(
1274 l10n_util::GetStringUTF16(IDS_ACCNAME_SYNC_ERROR_BUTTON)); 1247 l10n_util::GetStringUTF16(IDS_ACCNAME_SYNC_ERROR_BUTTON));
1275 sync_error_button->SetIcon( 1248 sync_error_button->SetIcon(
1276 *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING)); 1249 *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING));
1277 return sync_error_button; 1250 return sync_error_button;
1278 } 1251 }
1279 1252
1280 views::View* BookmarkBarView::CreateBookmarkButton(const BookmarkNode* node) { 1253 views::View* BookmarkBarView::CreateBookmarkButton(const BookmarkNode* node) {
1281 if (node->is_url()) { 1254 if (node->is_url()) {
1282 BookmarkButton* button = new BookmarkButton(this, node->url(), 1255 BookmarkButton* button = new BookmarkButton(this, node->url(),
1283 UTF16ToWide(node->GetTitle()), profile_); 1256 UTF16ToWide(node->GetTitle()), browser_->profile());
1284 ConfigureButton(node, button); 1257 ConfigureButton(node, button);
1285 return button; 1258 return button;
1286 } else { 1259 } else {
1287 views::MenuButton* button = new BookmarkFolderButton(this, 1260 views::MenuButton* button = new BookmarkFolderButton(this,
1288 UTF16ToWide(node->GetTitle()), this, false); 1261 UTF16ToWide(node->GetTitle()), this, false);
1289 button->SetIcon(GetFolderIcon()); 1262 button->SetIcon(GetFolderIcon());
1290 ConfigureButton(node, button); 1263 ConfigureButton(node, button);
1291 return button; 1264 return button;
1292 } 1265 }
1293 } 1266 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 1359
1387 views::MenuButton* menu_button = GetMenuButtonForNode(node); 1360 views::MenuButton* menu_button = GetMenuButtonForNode(node);
1388 if (!menu_button) 1361 if (!menu_button)
1389 return; 1362 return;
1390 1363
1391 int start_index = 0; 1364 int start_index = 0;
1392 if (node == model_->bookmark_bar_node()) 1365 if (node == model_->bookmark_bar_node())
1393 start_index = GetFirstHiddenNodeIndex(); 1366 start_index = GetFirstHiddenNodeIndex();
1394 1367
1395 drop_info_->is_menu_showing = true; 1368 drop_info_->is_menu_showing = true;
1396 bookmark_drop_menu_ = new BookmarkMenuController( 1369 bookmark_drop_menu_ = new BookmarkMenuController(browser_->profile(),
1397 profile_, page_navigator_, GetWidget(), node, start_index); 1370 page_navigator_, GetWidget(), node, start_index);
1398 bookmark_drop_menu_->set_observer(this); 1371 bookmark_drop_menu_->set_observer(this);
1399 bookmark_drop_menu_->RunMenuAt(this, true); 1372 bookmark_drop_menu_->RunMenuAt(this, true);
1400 } 1373 }
1401 1374
1402 void BookmarkBarView::StopShowFolderDropMenuTimer() { 1375 void BookmarkBarView::StopShowFolderDropMenuTimer() {
1403 show_folder_method_factory_.RevokeAll(); 1376 show_folder_method_factory_.RevokeAll();
1404 } 1377 }
1405 1378
1406 void BookmarkBarView::StartShowFolderDropMenuTimer(const BookmarkNode* node) { 1379 void BookmarkBarView::StartShowFolderDropMenuTimer(const BookmarkNode* node) {
1407 if (testing_) { 1380 if (testing_) {
(...skipping 21 matching lines...) Expand all
1429 1402
1430 // The drop event uses the screen coordinates while the child Views are 1403 // The drop event uses the screen coordinates while the child Views are
1431 // always laid out from left to right (even though they are rendered from 1404 // always laid out from left to right (even though they are rendered from
1432 // right-to-left on RTL locales). Thus, in order to make sure the drop 1405 // right-to-left on RTL locales). Thus, in order to make sure the drop
1433 // coordinates calculation works, we mirror the event's X coordinate if the 1406 // coordinates calculation works, we mirror the event's X coordinate if the
1434 // locale is RTL. 1407 // locale is RTL.
1435 int mirrored_x = GetMirroredXInView(event.x()); 1408 int mirrored_x = GetMirroredXInView(event.x());
1436 1409
1437 bool found = false; 1410 bool found = false;
1438 const int other_delta_x = mirrored_x - other_bookmarked_button_->x(); 1411 const int other_delta_x = mirrored_x - other_bookmarked_button_->x();
1412 Profile* profile = browser_->profile();
1439 if (other_bookmarked_button_->IsVisible() && other_delta_x >= 0 && 1413 if (other_bookmarked_button_->IsVisible() && other_delta_x >= 0 &&
1440 other_delta_x < other_bookmarked_button_->width()) { 1414 other_delta_x < other_bookmarked_button_->width()) {
1441 // Mouse is over 'other' folder. 1415 // Mouse is over 'other' folder.
1442 location->button_type = DROP_OTHER_FOLDER; 1416 location->button_type = DROP_OTHER_FOLDER;
1443 location->on = true; 1417 location->on = true;
1444 found = true; 1418 found = true;
1445 } else if (!GetBookmarkButtonCount()) { 1419 } else if (!GetBookmarkButtonCount()) {
1446 // No bookmarks, accept the drop. 1420 // No bookmarks, accept the drop.
1447 location->index = 0; 1421 location->index = 0;
1448 int ops = data.GetFirstNode(profile_) 1422 int ops = data.GetFirstNode(profile) ? ui::DragDropTypes::DRAG_MOVE :
1449 ? ui::DragDropTypes::DRAG_MOVE 1423 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK;
1450 : ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK;
1451 location->operation = 1424 location->operation =
1452 bookmark_utils::PreferredDropOperation(event.source_operations(), ops); 1425 bookmark_utils::PreferredDropOperation(event.source_operations(), ops);
1453 return; 1426 return;
1454 } 1427 }
1455 1428
1456 for (int i = 0; i < GetBookmarkButtonCount() && 1429 for (int i = 0; i < GetBookmarkButtonCount() &&
1457 GetBookmarkButton(i)->IsVisible() && !found; i++) { 1430 GetBookmarkButton(i)->IsVisible() && !found; i++) {
1458 views::TextButton* button = GetBookmarkButton(i); 1431 views::TextButton* button = GetBookmarkButton(i);
1459 int button_x = mirrored_x - button->x(); 1432 int button_x = mirrored_x - button->x();
1460 int button_w = button->width(); 1433 int button_w = button->width();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 } else { 1476 } else {
1504 return; 1477 return;
1505 } 1478 }
1506 } 1479 }
1507 1480
1508 if (location->on) { 1481 if (location->on) {
1509 const BookmarkNode* parent = (location->button_type == DROP_OTHER_FOLDER) ? 1482 const BookmarkNode* parent = (location->button_type == DROP_OTHER_FOLDER) ?
1510 model_->other_node() : 1483 model_->other_node() :
1511 model_->bookmark_bar_node()->GetChild(location->index); 1484 model_->bookmark_bar_node()->GetChild(location->index);
1512 location->operation = 1485 location->operation =
1513 bookmark_utils::BookmarkDropOperation(profile_, event, data, parent, 1486 bookmark_utils::BookmarkDropOperation(profile, event, data, parent,
1514 parent->child_count()); 1487 parent->child_count());
1515 if (!location->operation && !data.has_single_url() && 1488 if (!location->operation && !data.has_single_url() &&
1516 data.GetFirstNode(profile_) == parent) { 1489 data.GetFirstNode(profile) == parent) {
1517 // Don't open a menu if the node being dragged is the menu to open. 1490 // Don't open a menu if the node being dragged is the menu to open.
1518 location->on = false; 1491 location->on = false;
1519 } 1492 }
1520 } else { 1493 } else {
1521 location->operation = 1494 location->operation = bookmark_utils::BookmarkDropOperation(profile, event,
1522 bookmark_utils::BookmarkDropOperation(profile_, event, data, 1495 data, model_->bookmark_bar_node(), location->index);
1523 model_->bookmark_bar_node(),
1524 location->index);
1525 } 1496 }
1526 } 1497 }
1527 1498
1528 void BookmarkBarView::WriteBookmarkDragData(const BookmarkNode* node, 1499 void BookmarkBarView::WriteBookmarkDragData(const BookmarkNode* node,
1529 ui::OSExchangeData* data) { 1500 ui::OSExchangeData* data) {
1530 DCHECK(node && data); 1501 DCHECK(node && data);
1531 BookmarkNodeData drag_data(node); 1502 BookmarkNodeData drag_data(node);
1532 drag_data.Write(profile_, data); 1503 drag_data.Write(browser_->profile(), data);
1533 } 1504 }
1534 1505
1535 void BookmarkBarView::StartThrobbing(const BookmarkNode* node, 1506 void BookmarkBarView::StartThrobbing(const BookmarkNode* node,
1536 bool overflow_only) { 1507 bool overflow_only) {
1537 DCHECK(!throbbing_view_); 1508 DCHECK(!throbbing_view_);
1538 1509
1539 // Determine which visible button is showing the bookmark (or is an ancestor 1510 // Determine which visible button is showing the bookmark (or is an ancestor
1540 // of the bookmark). 1511 // of the bookmark).
1541 const BookmarkNode* bbn = model_->bookmark_bar_node(); 1512 const BookmarkNode* bbn = model_->bookmark_bar_node();
1542 const BookmarkNode* parent_on_bb = node; 1513 const BookmarkNode* parent_on_bb = node;
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1753 (1 - size_animation_->GetCurrentValue()))); 1724 (1 - size_animation_->GetCurrentValue())));
1754 } else { 1725 } else {
1755 prefsize.set_height( 1726 prefsize.set_height(
1756 static_cast<int>( 1727 static_cast<int>(
1757 browser_defaults::kBookmarkBarHeight * 1728 browser_defaults::kBookmarkBarHeight *
1758 size_animation_->GetCurrentValue())); 1729 size_animation_->GetCurrentValue()));
1759 } 1730 }
1760 } 1731 }
1761 return prefsize; 1732 return prefsize;
1762 } 1733 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/bookmarks/bookmark_bar_view.h ('k') | chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698