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 |