| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/gtk/bookmark_tree_model.h" | 5 #include "chrome/browser/gtk/bookmark_tree_model.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 GtkTreePath* selected_path, | 34 GtkTreePath* selected_path, |
| 35 const BookmarkNode** selected_node) { | 35 const BookmarkNode** selected_node) { |
| 36 GtkTreePath* current_path = gtk_tree_model_get_path(tree_model, parent_iter); | 36 GtkTreePath* current_path = gtk_tree_model_get_path(tree_model, parent_iter); |
| 37 if (gtk_tree_path_compare(current_path, selected_path) == 0) | 37 if (gtk_tree_path_compare(current_path, selected_path) == 0) |
| 38 *selected_node = bb_node; | 38 *selected_node = bb_node; |
| 39 gtk_tree_path_free(current_path); | 39 gtk_tree_path_free(current_path); |
| 40 | 40 |
| 41 GtkTreeIter child_iter; | 41 GtkTreeIter child_iter; |
| 42 if (gtk_tree_model_iter_children(tree_model, &child_iter, parent_iter)) { | 42 if (gtk_tree_model_iter_children(tree_model, &child_iter, parent_iter)) { |
| 43 do { | 43 do { |
| 44 int id = bookmark_utils::GetIdFromTreeIter(tree_model, &child_iter); | 44 int64 id = bookmark_utils::GetIdFromTreeIter(tree_model, &child_iter); |
| 45 std::wstring title = | 45 std::wstring title = |
| 46 bookmark_utils::GetTitleFromTreeIter(tree_model, &child_iter); | 46 bookmark_utils::GetTitleFromTreeIter(tree_model, &child_iter); |
| 47 const BookmarkNode* child_bb_node = NULL; | 47 const BookmarkNode* child_bb_node = NULL; |
| 48 if (id == 0) { | 48 if (id == 0) { |
| 49 child_bb_node = bb_model->AddGroup(bb_node, bb_node->GetChildCount(), | 49 child_bb_node = bb_model->AddGroup(bb_node, bb_node->GetChildCount(), |
| 50 title); | 50 title); |
| 51 } else { | 51 } else { |
| 52 // Existing node, reset the title (BBModel ignores changes if the title | 52 // Existing node, reset the title (BBModel ignores changes if the title |
| 53 // is the same). | 53 // is the same). |
| 54 for (int j = 0; j < bb_node->GetChildCount(); ++j) { | 54 for (int j = 0; j < bb_node->GetChildCount(); ++j) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 67 } while (gtk_tree_model_iter_next(tree_model, &child_iter)); | 67 } while (gtk_tree_model_iter_next(tree_model, &child_iter)); |
| 68 } | 68 } |
| 69 } | 69 } |
| 70 | 70 |
| 71 } // namespace | 71 } // namespace |
| 72 | 72 |
| 73 namespace bookmark_utils { | 73 namespace bookmark_utils { |
| 74 | 74 |
| 75 GtkTreeStore* MakeFolderTreeStore() { | 75 GtkTreeStore* MakeFolderTreeStore() { |
| 76 return gtk_tree_store_new(FOLDER_STORE_NUM_COLUMNS, GDK_TYPE_PIXBUF, | 76 return gtk_tree_store_new(FOLDER_STORE_NUM_COLUMNS, GDK_TYPE_PIXBUF, |
| 77 G_TYPE_STRING, G_TYPE_INT); | 77 G_TYPE_STRING, G_TYPE_INT64); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void AddToTreeStore(BookmarkModel* model, int selected_id, | 80 void AddToTreeStore(BookmarkModel* model, int64 selected_id, |
| 81 GtkTreeStore* store, GtkTreeIter* selected_iter) { | 81 GtkTreeStore* store, GtkTreeIter* selected_iter) { |
| 82 const BookmarkNode* root_node = model->root_node(); | 82 const BookmarkNode* root_node = model->root_node(); |
| 83 for (int i = 0; i < root_node->GetChildCount(); ++i) { | 83 for (int i = 0; i < root_node->GetChildCount(); ++i) { |
| 84 AddToTreeStoreAt(root_node->GetChild(i), selected_id, store, | 84 AddToTreeStoreAt(root_node->GetChild(i), selected_id, store, |
| 85 selected_iter, NULL); | 85 selected_iter, NULL); |
| 86 } | 86 } |
| 87 } | 87 } |
| 88 | 88 |
| 89 void AddToTreeStoreAt(const BookmarkNode* node, int selected_id, | 89 void AddToTreeStoreAt(const BookmarkNode* node, int64 selected_id, |
| 90 GtkTreeStore* store, GtkTreeIter* selected_iter, | 90 GtkTreeStore* store, GtkTreeIter* selected_iter, |
| 91 GtkTreeIter* parent) { | 91 GtkTreeIter* parent) { |
| 92 if (!node->is_folder()) | 92 if (!node->is_folder()) |
| 93 return; | 93 return; |
| 94 | 94 |
| 95 GtkTreeIter iter; | 95 GtkTreeIter iter; |
| 96 AddSingleNodeToTreeStore(store, node, &iter, parent); | 96 AddSingleNodeToTreeStore(store, node, &iter, parent); |
| 97 if (selected_iter && node->id() == selected_id) { | 97 if (selected_iter && node->id() == selected_id) { |
| 98 // Save the iterator. Since we're using a GtkTreeStore, we're | 98 // Save the iterator. Since we're using a GtkTreeStore, we're |
| 99 // guaranteed that the iterator will remain valid as long as the above | 99 // guaranteed that the iterator will remain valid as long as the above |
| (...skipping 21 matching lines...) Expand all Loading... |
| 121 // The top level of this tree is weird and needs to be special cased. The | 121 // The top level of this tree is weird and needs to be special cased. The |
| 122 // BookmarksNode tree is rooted on a root node while the GtkTreeStore has a | 122 // BookmarksNode tree is rooted on a root node while the GtkTreeStore has a |
| 123 // set of top level nodes that are the root BookmarksNode's children. These | 123 // set of top level nodes that are the root BookmarksNode's children. These |
| 124 // items in the top level are not editable and therefore don't need the extra | 124 // items in the top level are not editable and therefore don't need the extra |
| 125 // complexity of trying to modify their title. | 125 // complexity of trying to modify their title. |
| 126 const BookmarkNode* root_node = bb_model->root_node(); | 126 const BookmarkNode* root_node = bb_model->root_node(); |
| 127 do { | 127 do { |
| 128 DCHECK(GetIdFromTreeIter(tree_model, &tree_root) != 0) | 128 DCHECK(GetIdFromTreeIter(tree_model, &tree_root) != 0) |
| 129 << "It should be impossible to add another toplevel node"; | 129 << "It should be impossible to add another toplevel node"; |
| 130 | 130 |
| 131 int id = GetIdFromTreeIter(tree_model, &tree_root); | 131 int64 id = GetIdFromTreeIter(tree_model, &tree_root); |
| 132 const BookmarkNode* child_node = NULL; | 132 const BookmarkNode* child_node = NULL; |
| 133 for (int j = 0; j < root_node->GetChildCount(); ++j) { | 133 for (int j = 0; j < root_node->GetChildCount(); ++j) { |
| 134 const BookmarkNode* node = root_node->GetChild(j); | 134 const BookmarkNode* node = root_node->GetChild(j); |
| 135 if (node->is_folder() && node->id() == id) { | 135 if (node->is_folder() && node->id() == id) { |
| 136 child_node = node; | 136 child_node = node; |
| 137 break; | 137 break; |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 DCHECK(child_node); | 140 DCHECK(child_node); |
| 141 | 141 |
| 142 GtkTreeIter child_iter = tree_root; | 142 GtkTreeIter child_iter = tree_root; |
| 143 RecursiveResolve(bb_model, child_node, tree_model, &child_iter, | 143 RecursiveResolve(bb_model, child_node, tree_model, &child_iter, |
| 144 selected_path, &node_to_return); | 144 selected_path, &node_to_return); |
| 145 } while (gtk_tree_model_iter_next(tree_model, &tree_root)); | 145 } while (gtk_tree_model_iter_next(tree_model, &tree_root)); |
| 146 | 146 |
| 147 gtk_tree_path_free(selected_path); | 147 gtk_tree_path_free(selected_path); |
| 148 return node_to_return; | 148 return node_to_return; |
| 149 } | 149 } |
| 150 | 150 |
| 151 int GetIdFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { | 151 int64 GetIdFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { |
| 152 GValue value = { 0, }; | 152 GValue value = { 0, }; |
| 153 int ret_val = -1; | 153 int64 ret_val = -1; |
| 154 gtk_tree_model_get_value(model, iter, ITEM_ID, &value); | 154 gtk_tree_model_get_value(model, iter, ITEM_ID, &value); |
| 155 if (G_VALUE_HOLDS_INT(&value)) | 155 if (G_VALUE_HOLDS_INT64(&value)) |
| 156 ret_val = g_value_get_int(&value); | 156 ret_val = g_value_get_int64(&value); |
| 157 else | 157 else |
| 158 NOTREACHED() << "Impossible type mismatch"; | 158 NOTREACHED() << "Impossible type mismatch"; |
| 159 | 159 |
| 160 return ret_val; | 160 return ret_val; |
| 161 } | 161 } |
| 162 | 162 |
| 163 std::wstring GetTitleFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { | 163 std::wstring GetTitleFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { |
| 164 GValue value = { 0, }; | 164 GValue value = { 0, }; |
| 165 std::wstring ret_val; | 165 std::wstring ret_val; |
| 166 gtk_tree_model_get_value(model, iter, FOLDER_NAME, &value); | 166 gtk_tree_model_get_value(model, iter, FOLDER_NAME, &value); |
| 167 if (G_VALUE_HOLDS_STRING(&value)) { | 167 if (G_VALUE_HOLDS_STRING(&value)) { |
| 168 const gchar* utf8str = g_value_get_string(&value); | 168 const gchar* utf8str = g_value_get_string(&value); |
| 169 ret_val = UTF8ToWide(utf8str); | 169 ret_val = UTF8ToWide(utf8str); |
| 170 g_value_unset(&value); | 170 g_value_unset(&value); |
| 171 } else { | 171 } else { |
| 172 NOTREACHED() << "Impossible type mismatch"; | 172 NOTREACHED() << "Impossible type mismatch"; |
| 173 } | 173 } |
| 174 | 174 |
| 175 return ret_val; | 175 return ret_val; |
| 176 } | 176 } |
| 177 | 177 |
| 178 } // namespace bookmark_utils | 178 } // namespace bookmark_utils |
| OLD | NEW |