| 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/bookmarks/bookmark_menu_delegate.h" | 5 #include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h" |
| 6 | 6 |
| 7 #include "base/stl_util-inl.h" | 7 #include "base/stl_util-inl.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "chrome/browser/bookmarks/bookmark_model.h" | 9 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_node_data.h" | 10 #include "chrome/browser/bookmarks/bookmark_node_data.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 BookmarkMenuDelegate::BookmarkMenuDelegate(Profile* profile, | 35 BookmarkMenuDelegate::BookmarkMenuDelegate(Profile* profile, |
| 36 PageNavigator* navigator, | 36 PageNavigator* navigator, |
| 37 gfx::NativeWindow parent, | 37 gfx::NativeWindow parent, |
| 38 int first_menu_id) | 38 int first_menu_id) |
| 39 : profile_(profile), | 39 : profile_(profile), |
| 40 page_navigator_(navigator), | 40 page_navigator_(navigator), |
| 41 parent_(parent), | 41 parent_(parent), |
| 42 menu_(NULL), | 42 menu_(NULL), |
| 43 for_drop_(false), | 43 for_drop_(false), |
| 44 parent_menu_item_(NULL), |
| 44 next_menu_id_(first_menu_id), | 45 next_menu_id_(first_menu_id), |
| 45 real_delegate_(NULL), | 46 real_delegate_(NULL), |
| 46 is_mutating_model_(false) { | 47 is_mutating_model_(false) { |
| 47 } | 48 } |
| 48 | 49 |
| 49 BookmarkMenuDelegate::~BookmarkMenuDelegate() { | 50 BookmarkMenuDelegate::~BookmarkMenuDelegate() { |
| 50 profile_->GetBookmarkModel()->RemoveObserver(this); | 51 profile_->GetBookmarkModel()->RemoveObserver(this); |
| 51 STLDeleteValues(&node_to_menu_map_); | 52 STLDeleteValues(&node_to_menu_map_); |
| 52 } | 53 } |
| 53 | 54 |
| 54 void BookmarkMenuDelegate::Init(views::MenuDelegate* real_delegate, | 55 void BookmarkMenuDelegate::Init(views::MenuDelegate* real_delegate, |
| 55 MenuItemView* parent, | 56 MenuItemView* parent, |
| 56 const BookmarkNode* node, | 57 const BookmarkNode* node, |
| 57 int start_child_index, | 58 int start_child_index, |
| 58 ShowOptions show_options) { | 59 ShowOptions show_options) { |
| 59 profile_->GetBookmarkModel()->AddObserver(this); | 60 profile_->GetBookmarkModel()->AddObserver(this); |
| 60 real_delegate_ = real_delegate; | 61 real_delegate_ = real_delegate; |
| 61 if (parent) { | 62 if (parent) { |
| 63 parent_menu_item_ = parent; |
| 62 BuildMenu(node, start_child_index, parent, &next_menu_id_); | 64 BuildMenu(node, start_child_index, parent, &next_menu_id_); |
| 63 if (show_options == SHOW_OTHER_FOLDER) | 65 if (show_options == SHOW_OTHER_FOLDER) |
| 64 BuildOtherFolderMenu(parent, &next_menu_id_); | 66 BuildOtherFolderMenu(parent, &next_menu_id_); |
| 65 } else { | 67 } else { |
| 66 menu_ = CreateMenu(node, start_child_index, show_options); | 68 menu_ = CreateMenu(node, start_child_index, show_options); |
| 67 } | 69 } |
| 68 } | 70 } |
| 69 | 71 |
| 70 void BookmarkMenuDelegate::SetActiveMenu(const BookmarkNode* node, | 72 void BookmarkMenuDelegate::SetActiveMenu(const BookmarkNode* node, |
| 71 int start_index) { | 73 int start_index) { |
| 74 DCHECK(!parent_menu_item_); |
| 72 if (!node_to_menu_map_[node]) | 75 if (!node_to_menu_map_[node]) |
| 73 CreateMenu(node, start_index, HIDE_OTHER_FOLDER); | 76 CreateMenu(node, start_index, HIDE_OTHER_FOLDER); |
| 74 menu_ = node_to_menu_map_[node]; | 77 menu_ = node_to_menu_map_[node]; |
| 75 } | 78 } |
| 76 | 79 |
| 77 std::wstring BookmarkMenuDelegate::GetTooltipText( | 80 std::wstring BookmarkMenuDelegate::GetTooltipText( |
| 78 int id, | 81 int id, |
| 79 const gfx::Point& screen_loc) { | 82 const gfx::Point& screen_loc) { |
| 80 DCHECK(menu_id_to_node_map_.find(id) != menu_id_to_node_map_.end()); | 83 DCHECK(menu_id_to_node_map_.find(id) != menu_id_to_node_map_.end()); |
| 81 | 84 |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 | 275 |
| 273 // Iterate through the menus looking for the menu containing node. | 276 // Iterate through the menus looking for the menu containing node. |
| 274 for (NodeToMenuMap::iterator i = node_to_menu_map_.begin(); | 277 for (NodeToMenuMap::iterator i = node_to_menu_map_.begin(); |
| 275 i != node_to_menu_map_.end(); ++i) { | 278 i != node_to_menu_map_.end(); ++i) { |
| 276 MenuItemView* menu_item = i->second->GetMenuItemByID(menu_pair->second); | 279 MenuItemView* menu_item = i->second->GetMenuItemByID(menu_pair->second); |
| 277 if (menu_item) { | 280 if (menu_item) { |
| 278 menu_item->SetIcon(model->GetFavicon(node)); | 281 menu_item->SetIcon(model->GetFavicon(node)); |
| 279 return; | 282 return; |
| 280 } | 283 } |
| 281 } | 284 } |
| 285 |
| 286 if (parent_menu_item_) { |
| 287 MenuItemView* menu_item = parent_menu_item_->GetMenuItemByID( |
| 288 menu_pair->second); |
| 289 if (menu_item) |
| 290 menu_item->SetIcon(model->GetFavicon(node)); |
| 291 } |
| 282 } | 292 } |
| 283 | 293 |
| 284 void BookmarkMenuDelegate::WillRemoveBookmarks( | 294 void BookmarkMenuDelegate::WillRemoveBookmarks( |
| 285 const std::vector<const BookmarkNode*>& bookmarks) { | 295 const std::vector<const BookmarkNode*>& bookmarks) { |
| 286 DCHECK(!is_mutating_model_); | 296 DCHECK(!is_mutating_model_); |
| 287 is_mutating_model_ = true; | 297 is_mutating_model_ = true; |
| 288 std::set<MenuItemView*> removed_menus; | 298 std::set<MenuItemView*> removed_menus; |
| 289 WillRemoveBookmarksImpl(bookmarks, &removed_menus); | 299 WillRemoveBookmarksImpl(bookmarks, &removed_menus); |
| 290 STLDeleteElements(&removed_menus); | 300 STLDeleteElements(&removed_menus); |
| 291 } | 301 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 } | 369 } |
| 360 } | 370 } |
| 361 | 371 |
| 362 MenuItemView* BookmarkMenuDelegate::GetMenuByID(int id) { | 372 MenuItemView* BookmarkMenuDelegate::GetMenuByID(int id) { |
| 363 for (NodeToMenuMap::const_iterator i = node_to_menu_map_.begin(); | 373 for (NodeToMenuMap::const_iterator i = node_to_menu_map_.begin(); |
| 364 i != node_to_menu_map_.end(); ++i) { | 374 i != node_to_menu_map_.end(); ++i) { |
| 365 MenuItemView* menu = i->second->GetMenuItemByID(id); | 375 MenuItemView* menu = i->second->GetMenuItemByID(id); |
| 366 if (menu) | 376 if (menu) |
| 367 return menu; | 377 return menu; |
| 368 } | 378 } |
| 369 return NULL; | 379 |
| 380 return parent_menu_item_ ? parent_menu_item_->GetMenuItemByID(id) : NULL; |
| 370 } | 381 } |
| 371 | 382 |
| 372 void BookmarkMenuDelegate::WillRemoveBookmarksImpl( | 383 void BookmarkMenuDelegate::WillRemoveBookmarksImpl( |
| 373 const std::vector<const BookmarkNode*>& bookmarks, | 384 const std::vector<const BookmarkNode*>& bookmarks, |
| 374 std::set<views::MenuItemView*>* removed_menus) { | 385 std::set<views::MenuItemView*>* removed_menus) { |
| 375 // Remove the observer so that when the remove happens we don't prematurely | 386 // Remove the observer so that when the remove happens we don't prematurely |
| 376 // cancel the menu. The observer ias added back in DidRemoveBookmarks. | 387 // cancel the menu. The observer ias added back in DidRemoveBookmarks. |
| 377 profile_->GetBookmarkModel()->RemoveObserver(this); | 388 profile_->GetBookmarkModel()->RemoveObserver(this); |
| 378 | 389 |
| 379 // Remove the menu items. | 390 // Remove the menu items. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 break; | 425 break; |
| 415 } | 426 } |
| 416 } | 427 } |
| 417 if (ancestor_removed) { | 428 if (ancestor_removed) { |
| 418 node_to_menu_id_map_.erase(i++); | 429 node_to_menu_id_map_.erase(i++); |
| 419 } else { | 430 } else { |
| 420 ++i; | 431 ++i; |
| 421 } | 432 } |
| 422 } | 433 } |
| 423 } | 434 } |
| OLD | NEW |