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

Side by Side Diff: chrome/browser/bookmark_bar_context_menu_controller.cc

Issue 7357: Makes the following changes to the bookmark bar context menu:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 2 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) 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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698