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

Side by Side Diff: chrome/browser/views/bookmark_editor_view.cc

Issue 1912: Renames BoomarkBarModel to BookmarkModel. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 3 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/views/bookmark_editor_view.h" 5 #include "chrome/browser/views/bookmark_editor_view.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "chrome/app/locales/locale_settings.h" 10 #include "chrome/app/locales/locale_settings.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 } 142 }
143 } 143 }
144 144
145 void BookmarkEditorView::OnTreeViewSelectionChanged( 145 void BookmarkEditorView::OnTreeViewSelectionChanged(
146 ChromeViews::TreeView* tree_view) { 146 ChromeViews::TreeView* tree_view) {
147 } 147 }
148 148
149 bool BookmarkEditorView::CanEdit(ChromeViews::TreeView* tree_view, 149 bool BookmarkEditorView::CanEdit(ChromeViews::TreeView* tree_view,
150 ChromeViews::TreeModelNode* node) { 150 ChromeViews::TreeModelNode* node) {
151 // Only allow editting of children of the bookmark bar node and other node. 151 // Only allow editting of children of the bookmark bar node and other node.
152 BookmarkNode* bb_node = tree_model_->AsNode(node); 152 EditorNode* bb_node = tree_model_->AsNode(node);
153 return (bb_node->GetParent() && bb_node->GetParent()->GetParent()); 153 return (bb_node->GetParent() && bb_node->GetParent()->GetParent());
154 } 154 }
155 155
156 void BookmarkEditorView::ContentsChanged(TextField* sender, 156 void BookmarkEditorView::ContentsChanged(TextField* sender,
157 const std::wstring& new_contents) { 157 const std::wstring& new_contents) {
158 UserInputChanged(); 158 UserInputChanged();
159 } 159 }
160 160
161 void BookmarkEditorView::ButtonPressed(NativeButton* sender) { 161 void BookmarkEditorView::ButtonPressed(NativeButton* sender) {
162 DCHECK(sender); 162 DCHECK(sender);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 context_menu_->AppendMenuItemWithLabel(IDS_EDIT, 216 context_menu_->AppendMenuItemWithLabel(IDS_EDIT,
217 l10n_util::GetString(IDS_EDIT)); 217 l10n_util::GetString(IDS_EDIT));
218 context_menu_->AppendMenuItemWithLabel( 218 context_menu_->AppendMenuItemWithLabel(
219 IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM, 219 IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM,
220 l10n_util::GetString(IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM)); 220 l10n_util::GetString(IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM));
221 context_menu_->RunMenuAt(x, y); 221 context_menu_->RunMenuAt(x, y);
222 } 222 }
223 223
224 void BookmarkEditorView::Init() { 224 void BookmarkEditorView::Init() {
225 tree_view_.SetContextMenuController(this); 225 tree_view_.SetContextMenuController(this);
226 bb_model_ = profile_->GetBookmarkBarModel(); 226 bb_model_ = profile_->GetBookmarkModel();
227 DCHECK(bb_model_); 227 DCHECK(bb_model_);
228 bb_model_->AddObserver(this); 228 bb_model_->AddObserver(this);
229 229
230 tree_view_.SetRootShown(false); 230 tree_view_.SetRootShown(false);
231 // Tell View not to delete all Views declared by value. 231 // Tell View not to delete all Views declared by value.
232 tree_view_.SetParentOwned(false); 232 tree_view_.SetParentOwned(false);
233 new_group_button_.SetParentOwned(false); 233 new_group_button_.SetParentOwned(false);
234 url_tf_.SetParentOwned(false); 234 url_tf_.SetParentOwned(false);
235 title_tf_.SetParentOwned(false); 235 title_tf_.SetParentOwned(false);
236 236
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 288
289 layout->StartRow(1, single_column_view_set_id); 289 layout->StartRow(1, single_column_view_set_id);
290 layout->AddView(&tree_view_); 290 layout->AddView(&tree_view_);
291 291
292 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); 292 layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
293 293
294 if (bb_model_->IsLoaded()) 294 if (bb_model_->IsLoaded())
295 Loaded(bb_model_); 295 Loaded(bb_model_);
296 } 296 }
297 297
298 void BookmarkEditorView::Loaded(BookmarkBarModel* model) { 298 void BookmarkEditorView::Loaded(BookmarkModel* model) {
299 Reset(true); 299 Reset(true);
300 } 300 }
301 301
302 void BookmarkEditorView::BookmarkNodeMoved(BookmarkBarModel* model, 302 void BookmarkEditorView::BookmarkNodeMoved(BookmarkModel* model,
303 BookmarkBarNode* old_parent, 303 BookmarkNode* old_parent,
304 int old_index, 304 int old_index,
305 BookmarkBarNode* new_parent, 305 BookmarkNode* new_parent,
306 int new_index) { 306 int new_index) {
307 Reset(false); 307 Reset(false);
308 } 308 }
309 309
310 void BookmarkEditorView::BookmarkNodeAdded(BookmarkBarModel* model, 310 void BookmarkEditorView::BookmarkNodeAdded(BookmarkModel* model,
311 BookmarkBarNode* parent, 311 BookmarkNode* parent,
312 int index) { 312 int index) {
313 Reset(false); 313 Reset(false);
314 } 314 }
315 315
316 void BookmarkEditorView::BookmarkNodeRemoved(BookmarkBarModel* model, 316 void BookmarkEditorView::BookmarkNodeRemoved(BookmarkModel* model,
317 BookmarkBarNode* parent, 317 BookmarkNode* parent,
318 int index) { 318 int index) {
319 Reset(false); 319 Reset(false);
320 } 320 }
321 321
322 void BookmarkEditorView::Reset(bool first_time) { 322 void BookmarkEditorView::Reset(bool first_time) {
323 BookmarkBarNode* node_editing = bb_model_->GetNodeByURL(url_); 323 BookmarkNode* node_editing = bb_model_->GetNodeByURL(url_);
324 324
325 // If the title is empty we need to fetch it from the node. 325 // If the title is empty we need to fetch it from the node.
326 if (first_time && title_.empty()) { 326 if (first_time && title_.empty()) {
327 if (node_editing) { 327 if (node_editing) {
328 title_ = node_editing->GetTitle(); 328 title_ = node_editing->GetTitle();
329 title_tf_.SetText(title_); 329 title_tf_.SetText(title_);
330 } 330 }
331 } 331 }
332 332
333 // Do this first, otherwise when we invoke SetModel with the real one 333 // Do this first, otherwise when we invoke SetModel with the real one
334 // tree_view will try to invoke something on the model we just deleted. 334 // tree_view will try to invoke something on the model we just deleted.
335 tree_view_.SetModel(NULL); 335 tree_view_.SetModel(NULL);
336 336
337 BookmarkNode* root_node = CreateRootNode(); 337 EditorNode* root_node = CreateRootNode();
338 tree_model_.reset(new BookmarkTreeModel(root_node)); 338 tree_model_.reset(new EditorTreeModel(root_node));
339 339
340 tree_view_.SetModel(tree_model_.get()); 340 tree_view_.SetModel(tree_model_.get());
341 tree_view_.SetController(this); 341 tree_view_.SetController(this);
342 342
343 new_group_button_.SetEnabled(true); 343 new_group_button_.SetEnabled(true);
344 344
345 context_menu_.reset(); 345 context_menu_.reset();
346 346
347 if (GetParent()) { 347 if (GetParent()) {
348 ExpandAndSelect(); 348 ExpandAndSelect();
(...skipping 18 matching lines...) Expand all
367 if (!url.is_valid()) 367 if (!url.is_valid())
368 url_tf_.SetBackgroundColor(kErrorColor); 368 url_tf_.SetBackgroundColor(kErrorColor);
369 else 369 else
370 url_tf_.SetDefaultBackgroundColor(); 370 url_tf_.SetDefaultBackgroundColor();
371 GetDialogClientView()->UpdateDialogButtons(); 371 GetDialogClientView()->UpdateDialogButtons();
372 } 372 }
373 373
374 void BookmarkEditorView::NewGroup() { 374 void BookmarkEditorView::NewGroup() {
375 // Create a new entry parented to the selected item, or the bookmark 375 // Create a new entry parented to the selected item, or the bookmark
376 // bar if nothing is selected. 376 // bar if nothing is selected.
377 BookmarkNode* parent = tree_model_->AsNode(tree_view_.GetSelectedNode()); 377 EditorNode* parent = tree_model_->AsNode(tree_view_.GetSelectedNode());
378 if (!parent) { 378 if (!parent) {
379 NOTREACHED(); 379 NOTREACHED();
380 return; 380 return;
381 } 381 }
382 382
383 tree_view_.StartEditing(AddNewGroup(parent)); 383 tree_view_.StartEditing(AddNewGroup(parent));
384 } 384 }
385 385
386 BookmarkEditorView::BookmarkNode* BookmarkEditorView::AddNewGroup( 386 BookmarkEditorView::EditorNode* BookmarkEditorView::AddNewGroup(
387 BookmarkNode* parent) { 387 EditorNode* parent) {
388 BookmarkNode* new_node = new BookmarkNode(); 388 EditorNode* new_node = new EditorNode();
389 new_node->SetTitle(l10n_util::GetString(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME)); 389 new_node->SetTitle(l10n_util::GetString(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME));
390 new_node->value = 0; 390 new_node->value = 0;
391 // new_node is now owned by parent. 391 // new_node is now owned by parent.
392 tree_model_->Add(parent, parent->GetChildCount(), new_node); 392 tree_model_->Add(parent, parent->GetChildCount(), new_node);
393 return new_node; 393 return new_node;
394 } 394 }
395 395
396 void BookmarkEditorView::ExpandAndSelect() { 396 void BookmarkEditorView::ExpandAndSelect() {
397 tree_view_.ExpandAll(); 397 tree_view_.ExpandAll();
398 398
399 BookmarkBarNode* to_select = bb_model_->GetNodeByURL(url_); 399 BookmarkNode* to_select = bb_model_->GetNodeByURL(url_);
400 int group_id_to_select = 400 int group_id_to_select =
401 to_select ? to_select->GetParent()->id() : 401 to_select ? to_select->GetParent()->id() :
402 bb_model_->GetParentForNewNodes()->id(); 402 bb_model_->GetParentForNewNodes()->id();
403 403
404 DCHECK(group_id_to_select); // GetMostRecentParent should never return NULL. 404 DCHECK(group_id_to_select); // GetMostRecentParent should never return NULL.
405 BookmarkNode* b_node = 405 EditorNode* b_node =
406 FindNodeWithID(tree_model_->GetRoot(), group_id_to_select); 406 FindNodeWithID(tree_model_->GetRoot(), group_id_to_select);
407 if (!b_node) 407 if (!b_node)
408 b_node = tree_model_->GetRoot()->GetChild(0); // Bookmark bar node. 408 b_node = tree_model_->GetRoot()->GetChild(0); // Bookmark bar node.
409 409
410 tree_view_.SetSelectedNode(b_node); 410 tree_view_.SetSelectedNode(b_node);
411 } 411 }
412 412
413 BookmarkEditorView::BookmarkNode* BookmarkEditorView::CreateRootNode() { 413 BookmarkEditorView::EditorNode* BookmarkEditorView::CreateRootNode() {
414 BookmarkNode* root_node = new BookmarkNode(std::wstring(), 0); 414 EditorNode* root_node = new EditorNode(std::wstring(), 0);
415 BookmarkBarNode* bb_root_node = bb_model_->root_node(); 415 BookmarkNode* bb_root_node = bb_model_->root_node();
416 CreateNodes(bb_root_node, root_node); 416 CreateNodes(bb_root_node, root_node);
417 DCHECK(root_node->GetChildCount() == 2); 417 DCHECK(root_node->GetChildCount() == 2);
418 DCHECK(bb_root_node->GetChild(0)->GetType() == 418 DCHECK(bb_root_node->GetChild(0)->GetType() ==
419 history::StarredEntry::BOOKMARK_BAR); 419 history::StarredEntry::BOOKMARK_BAR);
420 DCHECK(bb_root_node->GetChild(1)->GetType() == history::StarredEntry::OTHER); 420 DCHECK(bb_root_node->GetChild(1)->GetType() == history::StarredEntry::OTHER);
421 return root_node; 421 return root_node;
422 } 422 }
423 423
424 void BookmarkEditorView::CreateNodes(BookmarkBarNode* bb_node, 424 void BookmarkEditorView::CreateNodes(BookmarkNode* bb_node,
425 BookmarkEditorView::BookmarkNode* b_node) { 425 BookmarkEditorView::EditorNode* b_node) {
426 for (int i = 0; i < bb_node->GetChildCount(); ++i) { 426 for (int i = 0; i < bb_node->GetChildCount(); ++i) {
427 BookmarkBarNode* child_bb_node = bb_node->GetChild(i); 427 BookmarkNode* child_bb_node = bb_node->GetChild(i);
428 if (child_bb_node->is_folder()) { 428 if (child_bb_node->is_folder()) {
429 BookmarkNode* new_b_node = new BookmarkNode(child_bb_node->GetTitle(), 429 EditorNode* new_b_node = new EditorNode(child_bb_node->GetTitle(),
430 child_bb_node->id()); 430 child_bb_node->id());
431 b_node->Add(b_node->GetChildCount(), new_b_node); 431 b_node->Add(b_node->GetChildCount(), new_b_node);
432 CreateNodes(child_bb_node, new_b_node); 432 CreateNodes(child_bb_node, new_b_node);
433 } 433 }
434 } 434 }
435 } 435 }
436 436
437 BookmarkEditorView::BookmarkNode* BookmarkEditorView::FindNodeWithID( 437 BookmarkEditorView::EditorNode* BookmarkEditorView::FindNodeWithID(
438 BookmarkEditorView::BookmarkNode* node, 438 BookmarkEditorView::EditorNode* node,
439 int id) { 439 int id) {
440 if (node->value == id) 440 if (node->value == id)
441 return node; 441 return node;
442 for (int i = 0; i < node->GetChildCount(); ++i) { 442 for (int i = 0; i < node->GetChildCount(); ++i) {
443 BookmarkNode* result = FindNodeWithID(node->GetChild(i), id); 443 EditorNode* result = FindNodeWithID(node->GetChild(i), id);
444 if (result) 444 if (result)
445 return result; 445 return result;
446 } 446 }
447 return NULL; 447 return NULL;
448 } 448 }
449 449
450 void BookmarkEditorView::ApplyEdits() { 450 void BookmarkEditorView::ApplyEdits() {
451 DCHECK(bb_model_->IsLoaded()); 451 DCHECK(bb_model_->IsLoaded());
452 452
453 if (!tree_view_.GetSelectedNode()) { 453 if (!tree_view_.GetSelectedNode()) {
454 NOTREACHED(); 454 NOTREACHED();
455 return; 455 return;
456 } 456 }
457 ApplyEdits(tree_model_->AsNode(tree_view_.GetSelectedNode())); 457 ApplyEdits(tree_model_->AsNode(tree_view_.GetSelectedNode()));
458 } 458 }
459 459
460 void BookmarkEditorView::ApplyEdits(BookmarkNode* parent) { 460 void BookmarkEditorView::ApplyEdits(EditorNode* parent) {
461 DCHECK(parent); 461 DCHECK(parent);
462 462
463 // We're going to apply edits to the bookmark bar model, which will call us 463 // We're going to apply edits to the bookmark bar model, which will call us
464 // back. Normally when a structural edit occurs we reset the tree model. 464 // back. Normally when a structural edit occurs we reset the tree model.
465 // We don't want to do that here, so we remove ourselves as an observer. 465 // We don't want to do that here, so we remove ourselves as an observer.
466 bb_model_->RemoveObserver(this); 466 bb_model_->RemoveObserver(this);
467 467
468 GURL new_url(GetInputURL()); 468 GURL new_url(GetInputURL());
469 std::wstring new_title(GetInputTitle()); 469 std::wstring new_title(GetInputTitle());
470 470
471 BookmarkBarNode* old_node = bb_model_->GetNodeByURL(url_); 471 BookmarkNode* old_node = bb_model_->GetNodeByURL(url_);
472 BookmarkBarNode* old_parent = old_node ? old_node->GetParent() : NULL; 472 BookmarkNode* old_parent = old_node ? old_node->GetParent() : NULL;
473 const int old_index = old_parent ? old_parent->IndexOfChild(old_node) : -1; 473 const int old_index = old_parent ? old_parent->IndexOfChild(old_node) : -1;
474 474
475 if (url_ != new_url) { 475 if (url_ != new_url) {
476 // The URL has changed, unstar the old url. 476 // The URL has changed, unstar the old url.
477 bb_model_->SetURLStarred(url_, std::wstring(), false); 477 bb_model_->SetURLStarred(url_, std::wstring(), false);
478 } 478 }
479 479
480 // Create the new groups and update the titles. 480 // Create the new groups and update the titles.
481 BookmarkBarNode* new_parent = NULL; 481 BookmarkNode* new_parent = NULL;
482 ApplyNameChangesAndCreateNewGroups( 482 ApplyNameChangesAndCreateNewGroups(
483 bb_model_->root_node(), tree_model_->GetRoot(), parent, &new_parent); 483 bb_model_->root_node(), tree_model_->GetRoot(), parent, &new_parent);
484 484
485 if (!new_parent) { 485 if (!new_parent) {
486 // Bookmarks must be parented. 486 // Bookmarks must be parented.
487 NOTREACHED(); 487 NOTREACHED();
488 return; 488 return;
489 } 489 }
490 490
491 BookmarkBarNode* current_node = bb_model_->GetNodeByURL(new_url); 491 BookmarkNode* current_node = bb_model_->GetNodeByURL(new_url);
492 492
493 if (current_node) { 493 if (current_node) {
494 // There's already a node with the URL. 494 // There's already a node with the URL.
495 bb_model_->SetTitle(current_node, new_title); 495 bb_model_->SetTitle(current_node, new_title);
496 if (new_parent == old_parent) { 496 if (new_parent == old_parent) {
497 // Parent hasn't changed. 497 // Parent hasn't changed.
498 bb_model_->Move(current_node, new_parent, old_index); 498 bb_model_->Move(current_node, new_parent, old_index);
499 } else { 499 } else {
500 // Parent changed, move to end of new parent. 500 // Parent changed, move to end of new parent.
501 bb_model_->Move(current_node, new_parent, new_parent->GetChildCount()); 501 bb_model_->Move(current_node, new_parent, new_parent->GetChildCount());
502 } 502 }
503 } else { 503 } else {
504 // Adding a new URL. 504 // Adding a new URL.
505 if (new_parent == old_parent) { 505 if (new_parent == old_parent) {
506 // Parent hasn't changed. Place newly created bookmark at the same 506 // Parent hasn't changed. Place newly created bookmark at the same
507 // location as last bookmark. 507 // location as last bookmark.
508 bb_model_->AddURL(new_parent, old_index, new_title, new_url); 508 bb_model_->AddURL(new_parent, old_index, new_title, new_url);
509 } else { 509 } else {
510 // Parent changed, put bookmark at end of new parent. 510 // Parent changed, put bookmark at end of new parent.
511 bb_model_->AddURL(new_parent, new_parent->GetChildCount(), new_title, 511 bb_model_->AddURL(new_parent, new_parent->GetChildCount(), new_title,
512 new_url); 512 new_url);
513 } 513 }
514 } 514 }
515 } 515 }
516 516
517 void BookmarkEditorView::ApplyNameChangesAndCreateNewGroups( 517 void BookmarkEditorView::ApplyNameChangesAndCreateNewGroups(
518 BookmarkBarNode* bb_node, 518 BookmarkNode* bb_node,
519 BookmarkEditorView::BookmarkNode* b_node, 519 BookmarkEditorView::EditorNode* b_node,
520 BookmarkEditorView::BookmarkNode* parent_b_node, 520 BookmarkEditorView::EditorNode* parent_b_node,
521 BookmarkBarNode** parent_bb_node) { 521 BookmarkNode** parent_bb_node) {
522 if (parent_b_node == b_node) 522 if (parent_b_node == b_node)
523 *parent_bb_node = bb_node; 523 *parent_bb_node = bb_node;
524 for (int i = 0; i < b_node->GetChildCount(); ++i) { 524 for (int i = 0; i < b_node->GetChildCount(); ++i) {
525 BookmarkNode* child_b_node = b_node->GetChild(i); 525 EditorNode* child_b_node = b_node->GetChild(i);
526 BookmarkBarNode* child_bb_node = NULL; 526 BookmarkNode* child_bb_node = NULL;
527 if (child_b_node->value == 0) { 527 if (child_b_node->value == 0) {
528 // New group. 528 // New group.
529 child_bb_node = bb_model_->AddGroup(bb_node, 529 child_bb_node = bb_model_->AddGroup(bb_node,
530 bb_node->GetChildCount(), child_b_node->GetTitle()); 530 bb_node->GetChildCount(), child_b_node->GetTitle());
531 } else { 531 } else {
532 // Existing node, reset the title (BBModel ignores changes if the title 532 // Existing node, reset the title (BBModel ignores changes if the title
533 // is the same). 533 // is the same).
534 for (int j = 0; j < bb_node->GetChildCount(); ++j) { 534 for (int j = 0; j < bb_node->GetChildCount(); ++j) {
535 BookmarkBarNode* node = bb_node->GetChild(j); 535 BookmarkNode* node = bb_node->GetChild(j);
536 if (node->is_folder() && node->id() == child_b_node->value) { 536 if (node->is_folder() && node->id() == child_b_node->value) {
537 child_bb_node = node; 537 child_bb_node = node;
538 break; 538 break;
539 } 539 }
540 } 540 }
541 DCHECK(child_bb_node); 541 DCHECK(child_bb_node);
542 bb_model_->SetTitle(child_bb_node, child_b_node->GetTitle()); 542 bb_model_->SetTitle(child_bb_node, child_b_node->GetTitle());
543 } 543 }
544 ApplyNameChangesAndCreateNewGroups(child_bb_node, child_b_node, 544 ApplyNameChangesAndCreateNewGroups(child_bb_node, child_b_node,
545 parent_b_node, parent_bb_node); 545 parent_b_node, parent_bb_node);
546 } 546 }
547 } 547 }
548 548
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698