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

Unified Diff: chrome/browser/views/bookmark_editor_view.cc

Issue 165031: When we create a new folder in the BookmarkEditor, it is useful to be able to... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/views/bookmark_editor_view.h ('k') | chrome/browser/views/bookmark_editor_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/bookmark_editor_view.cc
===================================================================
--- chrome/browser/views/bookmark_editor_view.cc (revision 22376)
+++ chrome/browser/views/bookmark_editor_view.cc (working copy)
@@ -203,9 +203,14 @@
}
void BookmarkEditorView::ExecuteCommand(int command_id) {
- DCHECK(tree_view_->GetSelectedNode());
+ TreeModelNode* selected_node = tree_view_->GetSelectedNode();
+ DCHECK(selected_node);
if (command_id == IDS_EDIT) {
- tree_view_->StartEditing(tree_view_->GetSelectedNode());
+ tree_view_->StartEditing(selected_node);
+ } else if (command_id == IDS_DELETE) {
+ // We can only delete newly created folders. Remove the node from the
+ // TreeModel.
+ ApplyDelete(selected_node);
} else {
DCHECK(command_id == IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM);
NewGroup();
@@ -234,14 +239,30 @@
int y,
bool is_mouse_gesture) {
DCHECK(source == tree_view_);
- if (!tree_view_->GetSelectedNode())
+ TreeModelNode* selected_node = tree_view_->GetSelectedNode();
+ if (!selected_node)
return;
running_menu_for_root_ =
- (tree_model_->GetParent(tree_view_->GetSelectedNode()) ==
- tree_model_->GetRoot());
- if (!context_menu_contents_.get()) {
+ (tree_model_->GetParent(selected_node) == tree_model_->GetRoot());
+
+ EditorNode* node = tree_model_->AsNode(selected_node);
+
+ bool reload_menu_contents = false;
+ if (context_menu_contents_.get()) {
+ bool has_delete_in_menu =
+ context_menu_contents_->GetCommandIdAt(1) == IDS_DELETE;
+
+ // Only show delete option for new groups.
+ reload_menu_contents = (node->value == 0) ^ has_delete_in_menu;
+ }
+
+ if (!context_menu_contents_.get() || reload_menu_contents) {
context_menu_contents_.reset(new views::SimpleMenuModel(this));
context_menu_contents_->AddItemWithStringId(IDS_EDIT, IDS_EDIT);
+ // If this is a newly created folder that has not been added to the
+ // BookmarkModel, a user may delete the folder.
+ if (node->value == 0)
+ context_menu_contents_->AddItemWithStringId(IDS_DELETE, IDS_DELETE);
context_menu_contents_->AddItemWithStringId(
IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM,
IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM);
@@ -490,6 +511,26 @@
return NULL;
}
+void BookmarkEditorView::ApplyDelete(TreeModelNode* node) {
+ EditorNode* deleted_node = show_tree_ ?
+ tree_model_->AsNode(node) : NULL;
+
+ if (show_tree_ && !deleted_node) {
+ NOTREACHED();
+ return;
+ }
+
+ EditorNode* parent = deleted_node ? deleted_node->GetParent() : NULL;
+ const int index = parent ? parent->IndexOfChild(deleted_node) : -1;
+
+ if (index == -1) {
+ NOTREACHED();
+ return;
+ }
+
+ tree_model_->Remove(parent, index);
+}
+
void BookmarkEditorView::ApplyEdits() {
DCHECK(bb_model_->IsLoaded());
« no previous file with comments | « chrome/browser/views/bookmark_editor_view.h ('k') | chrome/browser/views/bookmark_editor_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698