| 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_context_menu_controller_views.h" | 5 #include "chrome/browser/views/bookmark_context_menu_controller_views.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "chrome/browser/bookmarks/bookmark_editor.h" | 9 #include "chrome/browser/bookmarks/bookmark_editor.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_folder_editor_controller.h" | 10 #include "chrome/browser/bookmarks/bookmark_folder_editor_controller.h" |
| 11 #include "chrome/browser/bookmarks/bookmark_manager.h" | |
| 12 #include "chrome/browser/bookmarks/bookmark_model.h" | 11 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 13 #include "chrome/browser/bookmarks/bookmark_utils.h" | 12 #include "chrome/browser/bookmarks/bookmark_utils.h" |
| 14 #include "chrome/browser/browser.h" | 13 #include "chrome/browser/browser.h" |
| 15 #include "chrome/browser/browser_list.h" | 14 #include "chrome/browser/browser_list.h" |
| 16 #include "chrome/browser/metrics/user_metrics.h" | 15 #include "chrome/browser/metrics/user_metrics.h" |
| 17 #include "chrome/browser/pref_service.h" | 16 #include "chrome/browser/pref_service.h" |
| 18 #include "chrome/browser/profile.h" | 17 #include "chrome/browser/profile.h" |
| 19 #include "chrome/browser/tab_contents/page_navigator.h" | 18 #include "chrome/browser/tab_contents/page_navigator.h" |
| 20 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
| 21 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
| 22 | 21 |
| 23 namespace { | 22 namespace { |
| 24 | 23 |
| 25 // Returns true if the specified node is of type URL, or has a descendant | 24 // Returns true if the specified node is of type URL, or has a descendant |
| 26 // of type URL. | 25 // of type URL. |
| 27 bool NodeHasURLs(const BookmarkNode* node) { | 26 bool NodeHasURLs(const BookmarkNode* node) { |
| 28 if (node->is_url()) | 27 if (node->is_url()) |
| 29 return true; | 28 return true; |
| 30 | 29 |
| 31 for (int i = 0; i < node->GetChildCount(); ++i) { | 30 for (int i = 0; i < node->GetChildCount(); ++i) { |
| 32 if (NodeHasURLs(node->GetChild(i))) | 31 if (NodeHasURLs(node->GetChild(i))) |
| 33 return true; | 32 return true; |
| 34 } | 33 } |
| 35 return false; | 34 return false; |
| 36 } | 35 } |
| 37 | 36 |
| 38 // SelectOnCreationHandler ---------------------------------------------------- | |
| 39 | |
| 40 // Used when adding a new bookmark. If a new bookmark is created it is selected | |
| 41 // in the bookmark manager. | |
| 42 class SelectOnCreationHandler : public BookmarkEditor::Handler { | |
| 43 public: | |
| 44 explicit SelectOnCreationHandler(Profile* profile) : profile_(profile) { | |
| 45 } | |
| 46 | |
| 47 virtual void NodeCreated(const BookmarkNode* new_node) { | |
| 48 #if defined(OS_WIN) | |
| 49 BookmarkManager::SelectInTree(profile_, new_node); | |
| 50 #endif | |
| 51 } | |
| 52 | |
| 53 private: | |
| 54 Profile* profile_; | |
| 55 | |
| 56 DISALLOW_COPY_AND_ASSIGN(SelectOnCreationHandler); | |
| 57 }; | |
| 58 | |
| 59 } // namespace | 37 } // namespace |
| 60 | 38 |
| 61 BookmarkContextMenuControllerViews::BookmarkContextMenuControllerViews( | 39 BookmarkContextMenuControllerViews::BookmarkContextMenuControllerViews( |
| 62 gfx::NativeWindow parent_window, | 40 gfx::NativeWindow parent_window, |
| 63 BookmarkContextMenuControllerViewsDelegate* delegate, | 41 BookmarkContextMenuControllerViewsDelegate* delegate, |
| 64 Profile* profile, | 42 Profile* profile, |
| 65 PageNavigator* navigator, | 43 PageNavigator* navigator, |
| 66 const BookmarkNode* parent, | 44 const BookmarkNode* parent, |
| 67 const std::vector<const BookmarkNode*>& selection, | 45 const std::vector<const BookmarkNode*>& selection, |
| 68 ConfigurationType configuration) | 46 ConfigurationType configuration) |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 } | 78 } |
| 101 delegate_->AddSeparator(); | 79 delegate_->AddSeparator(); |
| 102 } | 80 } |
| 103 | 81 |
| 104 if (selection_.size() == 1 && selection_[0]->is_folder()) { | 82 if (selection_.size() == 1 && selection_[0]->is_folder()) { |
| 105 delegate_->AddItem(IDS_BOOKMARK_BAR_RENAME_FOLDER); | 83 delegate_->AddItem(IDS_BOOKMARK_BAR_RENAME_FOLDER); |
| 106 } else { | 84 } else { |
| 107 delegate_->AddItem(IDS_BOOKMARK_BAR_EDIT); | 85 delegate_->AddItem(IDS_BOOKMARK_BAR_EDIT); |
| 108 } | 86 } |
| 109 | 87 |
| 110 #if defined(OS_WIN) | |
| 111 if (configuration_ == BOOKMARK_MANAGER_TABLE || | |
| 112 configuration_ == BOOKMARK_MANAGER_TABLE_OTHER || | |
| 113 configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU || | |
| 114 configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU_OTHER) { | |
| 115 delegate_->AddItem(IDS_BOOKMARK_MANAGER_SHOW_IN_FOLDER); | |
| 116 } | |
| 117 #endif | |
| 118 | |
| 119 delegate_->AddSeparator(); | 88 delegate_->AddSeparator(); |
| 120 delegate_->AddItem(IDS_CUT); | 89 delegate_->AddItem(IDS_CUT); |
| 121 delegate_->AddItem(IDS_COPY); | 90 delegate_->AddItem(IDS_COPY); |
| 122 delegate_->AddItem(IDS_PASTE); | 91 delegate_->AddItem(IDS_PASTE); |
| 123 | 92 |
| 124 delegate_->AddSeparator(); | 93 delegate_->AddSeparator(); |
| 125 delegate_->AddItem(IDS_BOOKMARK_BAR_REMOVE); | 94 delegate_->AddItem(IDS_BOOKMARK_BAR_REMOVE); |
| 126 | 95 |
| 127 if (configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU) { | 96 if (configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU) { |
| 128 delegate_->AddSeparator(); | 97 delegate_->AddSeparator(); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 } | 175 } |
| 207 delegate_->DidRemoveBookmarks(); | 176 delegate_->DidRemoveBookmarks(); |
| 208 selection_.clear(); | 177 selection_.clear(); |
| 209 break; | 178 break; |
| 210 } | 179 } |
| 211 | 180 |
| 212 case IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK: { | 181 case IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK: { |
| 213 UserMetrics::RecordAction( | 182 UserMetrics::RecordAction( |
| 214 UserMetricsAction("BookmarkBar_ContextMenu_Add"), profile_); | 183 UserMetricsAction("BookmarkBar_ContextMenu_Add"), profile_); |
| 215 | 184 |
| 216 BookmarkEditor::Configuration editor_config; | 185 BookmarkEditor::Configuration editor_config = |
| 217 BookmarkEditor::Handler* handler = NULL; | 186 (configuration_ == BOOKMARK_BAR) ? BookmarkEditor::SHOW_TREE : |
| 218 if (configuration_ == BOOKMARK_BAR) { | 187 BookmarkEditor::NO_TREE; |
| 219 editor_config = BookmarkEditor::SHOW_TREE; | |
| 220 } else { | |
| 221 editor_config = BookmarkEditor::NO_TREE; | |
| 222 // This is owned by the BookmarkEditorView. | |
| 223 handler = new SelectOnCreationHandler(profile_); | |
| 224 } | |
| 225 // TODO: this should honor the index from GetParentForNewNodes. | 188 // TODO: this should honor the index from GetParentForNewNodes. |
| 226 BookmarkEditor::Show( | 189 BookmarkEditor::Show( |
| 227 parent_window_, profile_, | 190 parent_window_, profile_, |
| 228 bookmark_utils::GetParentForNewNodes(parent_, selection_, NULL), | 191 bookmark_utils::GetParentForNewNodes(parent_, selection_, NULL), |
| 229 BookmarkEditor::EditDetails(), editor_config, handler); | 192 BookmarkEditor::EditDetails(), editor_config, NULL); |
| 230 break; | 193 break; |
| 231 } | 194 } |
| 232 | 195 |
| 233 case IDS_BOOMARK_BAR_NEW_FOLDER: { | 196 case IDS_BOOMARK_BAR_NEW_FOLDER: { |
| 234 UserMetrics::RecordAction( | 197 UserMetrics::RecordAction( |
| 235 UserMetricsAction("BookmarkBar_ContextMenu_NewFolder"), | 198 UserMetricsAction("BookmarkBar_ContextMenu_NewFolder"), |
| 236 profile_); | 199 profile_); |
| 237 int index; | 200 int index; |
| 238 const BookmarkNode* parent = | 201 const BookmarkNode* parent = |
| 239 bookmark_utils::GetParentForNewNodes(parent_, selection_, &index); | 202 bookmark_utils::GetParentForNewNodes(parent_, selection_, &index); |
| 240 uint32 details = BookmarkFolderEditorController::IS_NEW; | 203 uint32 details = BookmarkFolderEditorController::IS_NEW; |
| 241 if (configuration_ != BOOKMARK_BAR) | 204 if (configuration_ != BOOKMARK_BAR) |
| 242 details |= BookmarkFolderEditorController::SHOW_IN_MANAGER; | 205 details |= BookmarkFolderEditorController::SHOW_IN_MANAGER; |
| 243 BookmarkFolderEditorController::Show(profile_, parent_window_, parent, | 206 BookmarkFolderEditorController::Show(profile_, parent_window_, parent, |
| 244 index, details); | 207 index, details); |
| 245 break; | 208 break; |
| 246 } | 209 } |
| 247 | 210 |
| 248 case IDS_BOOMARK_BAR_ALWAYS_SHOW: | 211 case IDS_BOOMARK_BAR_ALWAYS_SHOW: |
| 249 bookmark_utils::ToggleWhenVisible(profile_); | 212 bookmark_utils::ToggleWhenVisible(profile_); |
| 250 break; | 213 break; |
| 251 | 214 |
| 252 #if defined(OS_WIN) | |
| 253 case IDS_BOOKMARK_MANAGER_SHOW_IN_FOLDER: | |
| 254 UserMetrics::RecordAction( | |
| 255 UserMetricsAction("BookmarkBar_ContextMenu_ShowInFolder"), | |
| 256 profile_); | |
| 257 | |
| 258 if (selection_.size() != 1) { | |
| 259 NOTREACHED(); | |
| 260 return; | |
| 261 } | |
| 262 | |
| 263 BookmarkManager::SelectInTree(profile_, selection_[0]); | |
| 264 break; | |
| 265 #endif | |
| 266 | |
| 267 case IDS_BOOKMARK_MANAGER: | 215 case IDS_BOOKMARK_MANAGER: |
| 268 UserMetrics::RecordAction(UserMetricsAction("ShowBookmarkManager"), | 216 UserMetrics::RecordAction(UserMetricsAction("ShowBookmarkManager"), |
| 269 profile_); | 217 profile_); |
| 270 { | 218 { |
| 271 Browser* browser = BrowserList::GetLastActiveWithProfile(profile_); | 219 Browser* browser = BrowserList::GetLastActiveWithProfile(profile_); |
| 272 if (browser) | 220 if (browser) |
| 273 browser->OpenBookmarkManager(); | 221 browser->OpenBookmarkManager(); |
| 274 else | 222 else |
| 275 NOTREACHED(); | 223 NOTREACHED(); |
| 276 } | 224 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 case IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW: | 276 case IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW: |
| 329 return HasURLs(); | 277 return HasURLs(); |
| 330 | 278 |
| 331 case IDS_BOOKMARK_BAR_RENAME_FOLDER: | 279 case IDS_BOOKMARK_BAR_RENAME_FOLDER: |
| 332 case IDS_BOOKMARK_BAR_EDIT: | 280 case IDS_BOOKMARK_BAR_EDIT: |
| 333 return selection_.size() == 1 && !is_root_node; | 281 return selection_.size() == 1 && !is_root_node; |
| 334 | 282 |
| 335 case IDS_BOOKMARK_BAR_REMOVE: | 283 case IDS_BOOKMARK_BAR_REMOVE: |
| 336 return !selection_.empty() && !is_root_node; | 284 return !selection_.empty() && !is_root_node; |
| 337 | 285 |
| 338 #if defined(OS_WIN) | |
| 339 case IDS_BOOKMARK_MANAGER_SHOW_IN_FOLDER: | |
| 340 return (configuration_ == BOOKMARK_MANAGER_TABLE_OTHER || | |
| 341 configuration_ == BOOKMARK_MANAGER_ORGANIZE_MENU_OTHER) && | |
| 342 selection_.size() == 1; | |
| 343 #endif | |
| 344 | |
| 345 case IDS_BOOKMARK_MANAGER_SORT: | 286 case IDS_BOOKMARK_MANAGER_SORT: |
| 346 return parent_ && parent_ != model_->root_node(); | 287 return parent_ && parent_ != model_->root_node(); |
| 347 | 288 |
| 348 case IDS_BOOMARK_BAR_NEW_FOLDER: | 289 case IDS_BOOMARK_BAR_NEW_FOLDER: |
| 349 case IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK: | 290 case IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK: |
| 350 return bookmark_utils::GetParentForNewNodes( | 291 return bookmark_utils::GetParentForNewNodes( |
| 351 parent_, selection_, NULL) != NULL; | 292 parent_, selection_, NULL) != NULL; |
| 352 | 293 |
| 353 case IDS_COPY: | 294 case IDS_COPY: |
| 354 case IDS_CUT: | 295 case IDS_CUT: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 374 return model; | 315 return model; |
| 375 } | 316 } |
| 376 | 317 |
| 377 bool BookmarkContextMenuControllerViews::HasURLs() const { | 318 bool BookmarkContextMenuControllerViews::HasURLs() const { |
| 378 for (size_t i = 0; i < selection_.size(); ++i) { | 319 for (size_t i = 0; i < selection_.size(); ++i) { |
| 379 if (NodeHasURLs(selection_[i])) | 320 if (NodeHasURLs(selection_[i])) |
| 380 return true; | 321 return true; |
| 381 } | 322 } |
| 382 return false; | 323 return false; |
| 383 } | 324 } |
| OLD | NEW |