| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/bookmark_bar_context_menu_controller.h" | 5 #include "chrome/browser/bookmark_bar_context_menu_controller.h" |
| 6 | 6 |
| 7 #include "chrome/browser/bookmarks/bookmark_model.h" | 7 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 8 #include "chrome/browser/browser.h" | 8 #include "chrome/browser/browser.h" |
| 9 #include "chrome/browser/browser_list.h" | 9 #include "chrome/browser/browser_list.h" |
| 10 #include "chrome/browser/page_navigator.h" | 10 #include "chrome/browser/page_navigator.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 bool is_new_; | 186 bool is_new_; |
| 187 ChromeViews::Window* window_; | 187 ChromeViews::Window* window_; |
| 188 | 188 |
| 189 DISALLOW_EVIL_CONSTRUCTORS(EditFolderController); | 189 DISALLOW_EVIL_CONSTRUCTORS(EditFolderController); |
| 190 }; | 190 }; |
| 191 | 191 |
| 192 } // namespace | 192 } // namespace |
| 193 | 193 |
| 194 // BookmarkBarContextMenuController ------------------------------------------- | 194 // BookmarkBarContextMenuController ------------------------------------------- |
| 195 | 195 |
| 196 const int BookmarkBarContextMenuController::always_show_command_id = 1; | |
| 197 const int BookmarkBarContextMenuController::open_bookmark_id = 2; | |
| 198 const int BookmarkBarContextMenuController::open_bookmark_in_new_window_id = 3; | |
| 199 const int BookmarkBarContextMenuController::open_bookmark_in_new_tab_id = 4; | |
| 200 const int BookmarkBarContextMenuController::open_all_bookmarks_id = 5; | |
| 201 const int | |
| 202 BookmarkBarContextMenuController::open_all_bookmarks_in_new_window_id = 6; | |
| 203 const int BookmarkBarContextMenuController::edit_bookmark_id = 7; | |
| 204 const int BookmarkBarContextMenuController::delete_bookmark_id = 8; | |
| 205 const int BookmarkBarContextMenuController::add_bookmark_id = 9; | |
| 206 const int BookmarkBarContextMenuController::new_folder_id = 10; | |
| 207 | |
| 208 // static | 196 // static |
| 209 void BookmarkBarContextMenuController::OpenAll( | 197 void BookmarkBarContextMenuController::OpenAll( |
| 210 HWND parent, | 198 HWND parent, |
| 211 PageNavigator* navigator, | 199 PageNavigator* navigator, |
| 212 BookmarkNode* node, | 200 BookmarkNode* node, |
| 213 WindowOpenDisposition initial_disposition) { | 201 WindowOpenDisposition initial_disposition) { |
| 214 if (!ShouldOpenAll(parent, node)) | 202 if (!ShouldOpenAll(parent, node)) |
| 215 return; | 203 return; |
| 216 | 204 |
| 217 PageNavigator* nav = navigator; | 205 PageNavigator* nav = navigator; |
| 218 bool opened_url = false; | 206 bool opened_url = false; |
| 219 OpenAllImpl(node, initial_disposition, &nav, &opened_url); | 207 OpenAllImpl(node, initial_disposition, &nav, &opened_url); |
| 220 } | 208 } |
| 221 | 209 |
| 222 BookmarkBarContextMenuController::BookmarkBarContextMenuController( | 210 BookmarkBarContextMenuController::BookmarkBarContextMenuController( |
| 223 BookmarkBarView* view, | 211 BookmarkBarView* view, |
| 224 BookmarkNode* node) | 212 BookmarkNode* node) |
| 225 : view_(view), | 213 : view_(view), |
| 226 node_(node), | 214 node_(node), |
| 227 menu_(this) { | 215 menu_(this) { |
| 228 if (node->GetType() == history::StarredEntry::URL) { | 216 if (node->GetType() == history::StarredEntry::URL) { |
| 229 menu_.AppendMenuItemWithLabel( | 217 menu_.AppendMenuItemWithLabel( |
| 230 open_bookmark_id, | 218 IDS_BOOMARK_BAR_OPEN_IN_NEW_TAB, |
| 231 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN)); | |
| 232 menu_.AppendMenuItemWithLabel( | |
| 233 open_bookmark_in_new_tab_id, | |
| 234 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_IN_NEW_TAB)); | 219 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_IN_NEW_TAB)); |
| 235 menu_.AppendMenuItemWithLabel( | 220 menu_.AppendMenuItemWithLabel( |
| 236 open_bookmark_in_new_window_id, | 221 IDS_BOOMARK_BAR_OPEN_IN_NEW_WINDOW, |
| 237 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_IN_NEW_WINDOW)); | 222 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_IN_NEW_WINDOW)); |
| 223 menu_.AppendMenuItemWithLabel( |
| 224 IDS_BOOMARK_BAR_OPEN_INCOGNITO, |
| 225 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_INCOGNITO)); |
| 238 } else { | 226 } else { |
| 239 menu_.AppendMenuItemWithLabel( | 227 menu_.AppendMenuItemWithLabel( |
| 240 open_all_bookmarks_id, | 228 IDS_BOOMARK_BAR_OPEN_ALL, |
| 241 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_ALL)); | 229 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_ALL)); |
| 242 menu_.AppendMenuItemWithLabel( | 230 menu_.AppendMenuItemWithLabel( |
| 243 open_all_bookmarks_in_new_window_id, | 231 IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW, |
| 244 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW)); | 232 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW)); |
| 233 menu_.AppendMenuItemWithLabel( |
| 234 IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO, |
| 235 l10n_util::GetString(IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO)); |
| 245 } | 236 } |
| 246 menu_.AppendSeparator(); | 237 menu_.AppendSeparator(); |
| 247 | 238 |
| 248 if (node->GetParent() != | 239 if (node->GetParent() != |
| 249 view->GetProfile()->GetBookmarkModel()->root_node()) { | 240 view->GetProfile()->GetBookmarkModel()->root_node()) { |
| 250 menu_.AppendMenuItemWithLabel(edit_bookmark_id, | 241 menu_.AppendMenuItemWithLabel(IDS_BOOKMARK_BAR_EDIT, |
| 251 l10n_util::GetString(IDS_BOOKMARK_BAR_EDIT)); | 242 l10n_util::GetString(IDS_BOOKMARK_BAR_EDIT)); |
| 252 menu_.AppendMenuItemWithLabel( | 243 menu_.AppendMenuItemWithLabel( |
| 253 delete_bookmark_id, | 244 IDS_BOOKMARK_BAR_REMOVE, |
| 254 l10n_util::GetString(IDS_BOOKMARK_BAR_REMOVE)); | 245 l10n_util::GetString(IDS_BOOKMARK_BAR_REMOVE)); |
| 255 } | 246 } |
| 256 | 247 |
| 257 menu_.AppendMenuItemWithLabel( | 248 menu_.AppendMenuItemWithLabel( |
| 258 add_bookmark_id, | 249 IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK, |
| 259 l10n_util::GetString(IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK)); | 250 l10n_util::GetString(IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK)); |
| 260 menu_.AppendMenuItemWithLabel( | 251 menu_.AppendMenuItemWithLabel( |
| 261 new_folder_id, | 252 IDS_BOOMARK_BAR_NEW_FOLDER, |
| 262 l10n_util::GetString(IDS_BOOMARK_BAR_NEW_FOLDER)); | 253 l10n_util::GetString(IDS_BOOMARK_BAR_NEW_FOLDER)); |
| 263 menu_.AppendSeparator(); | 254 menu_.AppendSeparator(); |
| 264 menu_.AppendMenuItem(always_show_command_id, | 255 menu_.AppendMenuItem(IDS_BOOMARK_BAR_ALWAYS_SHOW, |
| 265 l10n_util::GetString(IDS_BOOMARK_BAR_ALWAYS_SHOW), | 256 l10n_util::GetString(IDS_BOOMARK_BAR_ALWAYS_SHOW), |
| 266 ChromeViews::MenuItemView::CHECKBOX); | 257 ChromeViews::MenuItemView::CHECKBOX); |
| 267 } | 258 } |
| 268 | 259 |
| 269 void BookmarkBarContextMenuController::RunMenuAt(int x, int y) { | 260 void BookmarkBarContextMenuController::RunMenuAt(int x, int y) { |
| 270 // Record the current ModelChangedListener. It will be non-null when we're | 261 // Record the current ModelChangedListener. It will be non-null when we're |
| 271 // used as the context menu for another menu. | 262 // used as the context menu for another menu. |
| 272 ModelChangedListener* last_listener = view_->GetModelChangedListener(); | 263 ModelChangedListener* last_listener = view_->GetModelChangedListener(); |
| 273 | 264 |
| 274 view_->SetModelChangedListener(this); | 265 view_->SetModelChangedListener(this); |
| 275 | 266 |
| 276 // width/height don't matter here. | 267 // width/height don't matter here. |
| 277 menu_.RunMenuAt(view_->GetViewContainer()->GetHWND(), gfx::Rect(x, y, 0, 0), | 268 menu_.RunMenuAt(view_->GetViewContainer()->GetHWND(), gfx::Rect(x, y, 0, 0), |
| 278 ChromeViews::MenuItemView::TOPLEFT, true); | 269 ChromeViews::MenuItemView::TOPLEFT, true); |
| 279 | 270 |
| 280 if (view_->GetModelChangedListener() == this) | 271 if (view_->GetModelChangedListener() == this) |
| 281 view_->SetModelChangedListener(last_listener); | 272 view_->SetModelChangedListener(last_listener); |
| 282 } | 273 } |
| 283 | 274 |
| 284 void BookmarkBarContextMenuController::ModelChanged() { | 275 void BookmarkBarContextMenuController::ModelChanged() { |
| 285 menu_.Cancel(); | 276 menu_.Cancel(); |
| 286 } | 277 } |
| 287 | 278 |
| 288 void BookmarkBarContextMenuController::ExecuteCommand(int id) { | 279 void BookmarkBarContextMenuController::ExecuteCommand(int id) { |
| 289 Profile* profile = view_->GetProfile(); | 280 Profile* profile = view_->GetProfile(); |
| 290 | 281 |
| 291 switch (id) { | 282 switch (id) { |
| 292 case open_bookmark_id: | 283 case IDS_BOOMARK_BAR_OPEN_INCOGNITO: |
| 293 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Open", profile); | 284 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenInIncognito", |
| 285 profile); |
| 294 | 286 |
| 295 view_->GetPageNavigator()->OpenURL(node_->GetURL(), CURRENT_TAB, | 287 view_->GetPageNavigator()->OpenURL(node_->GetURL(), OFF_THE_RECORD, |
| 296 PageTransition::AUTO_BOOKMARK); | 288 PageTransition::AUTO_BOOKMARK); |
| 297 break; | 289 break; |
| 298 | 290 |
| 299 case open_bookmark_in_new_window_id: | 291 case IDS_BOOMARK_BAR_OPEN_IN_NEW_WINDOW: |
| 300 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenInNewWindow", | 292 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenInNewWindow", |
| 301 profile); | 293 profile); |
| 302 | 294 |
| 303 view_->GetPageNavigator()->OpenURL(node_->GetURL(), NEW_WINDOW, | 295 view_->GetPageNavigator()->OpenURL(node_->GetURL(), NEW_WINDOW, |
| 304 PageTransition::AUTO_BOOKMARK); | 296 PageTransition::AUTO_BOOKMARK); |
| 305 break; | 297 break; |
| 306 | 298 |
| 307 case open_bookmark_in_new_tab_id: | 299 case IDS_BOOMARK_BAR_OPEN_IN_NEW_TAB: |
| 308 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenInNewTab", | 300 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenInNewTab", |
| 309 profile); | 301 profile); |
| 310 | 302 |
| 311 view_->GetPageNavigator()->OpenURL(node_->GetURL(), NEW_FOREGROUND_TAB, | 303 view_->GetPageNavigator()->OpenURL(node_->GetURL(), NEW_FOREGROUND_TAB, |
| 312 PageTransition::AUTO_BOOKMARK); | 304 PageTransition::AUTO_BOOKMARK); |
| 313 break; | 305 break; |
| 314 | 306 |
| 315 case open_all_bookmarks_id: | 307 case IDS_BOOMARK_BAR_OPEN_ALL: |
| 316 case open_all_bookmarks_in_new_window_id: { | 308 case IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO: |
| 317 if (id == open_all_bookmarks_id) { | 309 case IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW: { |
| 310 WindowOpenDisposition initial_disposition; |
| 311 if (id == IDS_BOOMARK_BAR_OPEN_ALL) { |
| 312 initial_disposition = CURRENT_TAB; |
| 318 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenAll", | 313 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_OpenAll", |
| 319 profile); | 314 profile); |
| 320 } else { | 315 } else if (id == IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW) { |
| 316 initial_disposition = NEW_WINDOW; |
| 321 UserMetrics::RecordAction( | 317 UserMetrics::RecordAction( |
| 322 L"BookmarkBar_ContextMenu_OpenAllInNewWindow", profile); | 318 L"BookmarkBar_ContextMenu_OpenAllInNewWindow", profile); |
| 319 } else { |
| 320 initial_disposition = OFF_THE_RECORD; |
| 321 UserMetrics::RecordAction( |
| 322 L"BookmarkBar_ContextMenu_OpenAllIncognito", profile); |
| 323 } | 323 } |
| 324 | 324 |
| 325 WindowOpenDisposition initial_disposition; | |
| 326 if (id == open_all_bookmarks_in_new_window_id) | |
| 327 initial_disposition = NEW_WINDOW; | |
| 328 else | |
| 329 initial_disposition = CURRENT_TAB; | |
| 330 | |
| 331 // GetViewContainer is NULL during testing. | 325 // GetViewContainer is NULL during testing. |
| 332 HWND parent_hwnd = view_->GetViewContainer() ? | 326 HWND parent_hwnd = view_->GetViewContainer() ? |
| 333 view_->GetViewContainer()->GetHWND() : 0; | 327 view_->GetViewContainer()->GetHWND() : 0; |
| 334 | 328 |
| 335 OpenAll(parent_hwnd, view_->GetPageNavigator(), node_, | 329 OpenAll(parent_hwnd, view_->GetPageNavigator(), node_, |
| 336 initial_disposition); | 330 initial_disposition); |
| 337 break; | 331 break; |
| 338 } | 332 } |
| 339 | 333 |
| 340 case edit_bookmark_id: | 334 case IDS_BOOKMARK_BAR_EDIT: |
| 341 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Edit", profile); | 335 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Edit", profile); |
| 342 | 336 |
| 343 if (node_->GetType() == history::StarredEntry::URL) { | 337 if (node_->GetType() == history::StarredEntry::URL) { |
| 344 BookmarkEditorView::Show(view_->GetViewContainer()->GetHWND(), | 338 BookmarkEditorView::Show(view_->GetViewContainer()->GetHWND(), |
| 345 view_->GetProfile(), NULL, node_); | 339 view_->GetProfile(), NULL, node_); |
| 346 } else { | 340 } else { |
| 347 // Controller deletes itself when done. | 341 // Controller deletes itself when done. |
| 348 EditFolderController* controller = new EditFolderController( | 342 EditFolderController* controller = new EditFolderController( |
| 349 view_, node_, -1, false); | 343 view_, node_, -1, false); |
| 350 controller->Show(); | 344 controller->Show(); |
| 351 } | 345 } |
| 352 break; | 346 break; |
| 353 | 347 |
| 354 case delete_bookmark_id: { | 348 case IDS_BOOKMARK_BAR_REMOVE: { |
| 355 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Remove", profile); | 349 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Remove", profile); |
| 356 | 350 |
| 357 view_->GetModel()->Remove(node_->GetParent(), | 351 view_->GetModel()->Remove(node_->GetParent(), |
| 358 node_->GetParent()->IndexOfChild(node_)); | 352 node_->GetParent()->IndexOfChild(node_)); |
| 359 break; | 353 break; |
| 360 } | 354 } |
| 361 | 355 |
| 362 case add_bookmark_id: { | 356 case IDS_BOOMARK_BAR_ADD_NEW_BOOKMARK: { |
| 363 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Add", profile); | 357 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_Add", profile); |
| 364 | 358 |
| 365 BookmarkEditorView::Show(view_->GetViewContainer()->GetHWND(), | 359 BookmarkEditorView::Show(view_->GetViewContainer()->GetHWND(), |
| 366 view_->GetProfile(), node_, NULL); | 360 view_->GetProfile(), node_, NULL); |
| 367 break; | 361 break; |
| 368 } | 362 } |
| 369 | 363 |
| 370 case new_folder_id: { | 364 case IDS_BOOMARK_BAR_NEW_FOLDER: { |
| 371 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_NewFolder", | 365 UserMetrics::RecordAction(L"BookmarkBar_ContextMenu_NewFolder", |
| 372 profile); | 366 profile); |
| 373 | 367 |
| 374 int visual_order; | 368 int visual_order; |
| 375 BookmarkNode* parent = | 369 BookmarkNode* parent = |
| 376 GetParentAndVisualOrderForNewNode(&visual_order); | 370 GetParentAndVisualOrderForNewNode(&visual_order); |
| 377 GetParentAndVisualOrderForNewNode(&visual_order); | 371 GetParentAndVisualOrderForNewNode(&visual_order); |
| 378 // Controller deletes itself when done. | 372 // Controller deletes itself when done. |
| 379 EditFolderController* controller = | 373 EditFolderController* controller = |
| 380 new EditFolderController(view_, parent, visual_order, true); | 374 new EditFolderController(view_, parent, visual_order, true); |
| 381 controller->Show(); | 375 controller->Show(); |
| 382 break; | 376 break; |
| 383 } | 377 } |
| 384 | 378 |
| 385 case always_show_command_id: | 379 case IDS_BOOMARK_BAR_ALWAYS_SHOW: |
| 386 view_->ToggleWhenVisible(); | 380 view_->ToggleWhenVisible(); |
| 387 break; | 381 break; |
| 388 | 382 |
| 389 default: | 383 default: |
| 390 NOTREACHED(); | 384 NOTREACHED(); |
| 391 } | 385 } |
| 392 } | 386 } |
| 393 | 387 |
| 394 bool BookmarkBarContextMenuController::IsItemChecked(int id) const { | 388 bool BookmarkBarContextMenuController::IsItemChecked(int id) const { |
| 395 DCHECK(id == always_show_command_id); | 389 DCHECK(id == IDS_BOOMARK_BAR_ALWAYS_SHOW); |
| 396 return view_->GetProfile()->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); | 390 return view_->GetProfile()->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); |
| 397 } | 391 } |
| 398 | 392 |
| 399 bool BookmarkBarContextMenuController::IsCommandEnabled(int id) const { | 393 bool BookmarkBarContextMenuController::IsCommandEnabled(int id) const { |
| 400 if (id == open_all_bookmarks_id || id == open_all_bookmarks_in_new_window_id) | 394 switch (id) { |
| 401 return NodeHasURLs(node_); | 395 case IDS_BOOMARK_BAR_OPEN_INCOGNITO: |
| 396 return !view_->GetProfile()->IsOffTheRecord(); |
| 402 | 397 |
| 398 case IDS_BOOMARK_BAR_OPEN_ALL_INCOGNITO: |
| 399 return NodeHasURLs(node_) && !view_->GetProfile()->IsOffTheRecord(); |
| 400 |
| 401 case IDS_BOOMARK_BAR_OPEN_ALL: |
| 402 case IDS_BOOMARK_BAR_OPEN_ALL_NEW_WINDOW: |
| 403 return NodeHasURLs(node_); |
| 404 } |
| 403 return true; | 405 return true; |
| 404 } | 406 } |
| 405 | 407 |
| 406 // Returns the parent node and visual_order to use when adding new | 408 // Returns the parent node and visual_order to use when adding new |
| 407 // bookmarks/folders. | 409 // bookmarks/folders. |
| 408 BookmarkNode* BookmarkBarContextMenuController:: | 410 BookmarkNode* BookmarkBarContextMenuController:: |
| 409 GetParentAndVisualOrderForNewNode(int* visual_order) { | 411 GetParentAndVisualOrderForNewNode(int* visual_order) { |
| 410 if (node_->GetType() != history::StarredEntry::URL) { | 412 if (node_->GetType() != history::StarredEntry::URL) { |
| 411 // Adding to a group always adds to the end. | 413 // Adding to a group always adds to the end. |
| 412 *visual_order = node_->GetChildCount(); | 414 *visual_order = node_->GetChildCount(); |
| 413 return node_; | 415 return node_; |
| 414 } else { | 416 } else { |
| 415 DCHECK(node_->GetParent()); | 417 DCHECK(node_->GetParent()); |
| 416 *visual_order = node_->GetParent()->IndexOfChild(node_) + 1; | 418 *visual_order = node_->GetParent()->IndexOfChild(node_) + 1; |
| 417 return node_->GetParent(); | 419 return node_->GetParent(); |
| 418 } | 420 } |
| 419 } | 421 } |
| OLD | NEW |