| 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 "base/string_util.h" | 10 #include "base/string_util.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_model.h" | 11 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 12 #include "grit/app_resources.h" |
| 13 #include "grit/generated_resources.h" |
| 14 #include "grit/theme_resources.h" |
| 11 | 15 |
| 12 namespace { | 16 namespace { |
| 13 | 17 |
| 14 // Helper function for BuildTreeStoreFrom() which recursively inserts data from | 18 // Helper function for BuildTreeStoreFrom() which recursively inserts data from |
| 15 // a BookmarkNode tree into a GtkTreeStore. | 19 // a BookmarkNode tree into a GtkTreeStore. |
| 16 void RecursiveInsert(BookmarkNode* node, int selected_id, | 20 void RecursiveInsert(BookmarkNode* node, int selected_id, |
| 17 GtkTreeStore* store, GtkTreeIter* selected_iter, | 21 GtkTreeStore* store, GtkTreeIter* selected_iter, |
| 18 GtkTreeIter* parent) { | 22 GtkTreeIter* parent) { |
| 19 GtkTreeIter iter; | 23 GtkTreeIter iter; |
| 20 | 24 |
| 21 for (int i = 0; i < node->GetChildCount(); ++i) { | 25 for (int i = 0; i < node->GetChildCount(); ++i) { |
| 22 BookmarkNode* child = node->GetChild(i); | 26 BookmarkNode* child = node->GetChild(i); |
| 23 if (child->is_folder()) { | 27 if (child->is_folder()) { |
| 24 gtk_tree_store_append(store, &iter, parent); | 28 gtk_tree_store_append(store, &iter, parent); |
| 29 // TODO(estade): we should show the folder open when it's expanded. |
| 25 gtk_tree_store_set(store, &iter, | 30 gtk_tree_store_set(store, &iter, |
| 26 0, WideToUTF8(child->GetTitle()).c_str(), | 31 bookmark_utils::FOLDER_ICON, |
| 27 1, child->id(), | 32 bookmark_utils::GetFolderIcon(), |
| 33 bookmark_utils::FOLDER_NAME, |
| 34 WideToUTF8(child->GetTitle()).c_str(), |
| 35 bookmark_utils::ITEM_ID, child->id(), |
| 28 -1); | 36 -1); |
| 29 if (selected_id && child->id() == selected_id) { | 37 if (selected_id && child->id() == selected_id) { |
| 30 // Save the iterator. Since we're using a GtkTreeStore, we're | 38 // Save the iterator. Since we're using a GtkTreeStore, we're |
| 31 // guaranteed that the iterator will remain valid as long as the above | 39 // guaranteed that the iterator will remain valid as long as the above |
| 32 // appended item exists. | 40 // appended item exists. |
| 33 *selected_iter = iter; | 41 *selected_iter = iter; |
| 34 } | 42 } |
| 35 | 43 |
| 36 RecursiveInsert(child, selected_id, store, selected_iter, &iter); | 44 RecursiveInsert(child, selected_id, store, selected_iter, &iter); |
| 37 } | 45 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 tree_model, &child_iter, | 85 tree_model, &child_iter, |
| 78 selected_path, selected_node); | 86 selected_path, selected_node); |
| 79 } while (gtk_tree_model_iter_next(tree_model, &child_iter)); | 87 } while (gtk_tree_model_iter_next(tree_model, &child_iter)); |
| 80 } | 88 } |
| 81 } | 89 } |
| 82 | 90 |
| 83 } // namespace | 91 } // namespace |
| 84 | 92 |
| 85 namespace bookmark_utils { | 93 namespace bookmark_utils { |
| 86 | 94 |
| 87 void BuildTreeStoreFrom(BookmarkModel* model, int selected_id, | 95 GtkTreeStore* MakeFolderTreeStore() { |
| 88 GtkTreeStore** store, GtkTreeIter* selected_iter) { | 96 return gtk_tree_store_new(FOLDER_STORE_NUM_COLUMNS, GDK_TYPE_PIXBUF, |
| 89 *store = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_INT); | 97 G_TYPE_STRING, G_TYPE_INT); |
| 90 RecursiveInsert(model->root_node(), selected_id, *store, selected_iter, NULL); | 98 } |
| 99 |
| 100 void AddToTreeStore(BookmarkModel* model, int selected_id, |
| 101 GtkTreeStore* store, GtkTreeIter* selected_iter) { |
| 102 RecursiveInsert(model->root_node(), selected_id, store, selected_iter, NULL); |
| 91 } | 103 } |
| 92 | 104 |
| 93 BookmarkNode* CommitTreeStoreDifferencesBetween( | 105 BookmarkNode* CommitTreeStoreDifferencesBetween( |
| 94 BookmarkModel* bb_model, GtkTreeStore* tree_store, GtkTreeIter* selected) { | 106 BookmarkModel* bb_model, GtkTreeStore* tree_store, GtkTreeIter* selected) { |
| 95 BookmarkNode* node_to_return = NULL; | 107 BookmarkNode* node_to_return = NULL; |
| 96 GtkTreeModel* tree_model = GTK_TREE_MODEL(tree_store); | 108 GtkTreeModel* tree_model = GTK_TREE_MODEL(tree_store); |
| 97 | 109 |
| 98 GtkTreePath* selected_path = gtk_tree_model_get_path(tree_model, selected); | 110 GtkTreePath* selected_path = gtk_tree_model_get_path(tree_model, selected); |
| 99 | 111 |
| 100 GtkTreeIter tree_root; | 112 GtkTreeIter tree_root; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 127 selected_path, &node_to_return); | 139 selected_path, &node_to_return); |
| 128 } while (gtk_tree_model_iter_next(tree_model, &tree_root)); | 140 } while (gtk_tree_model_iter_next(tree_model, &tree_root)); |
| 129 | 141 |
| 130 gtk_tree_path_free(selected_path); | 142 gtk_tree_path_free(selected_path); |
| 131 return node_to_return; | 143 return node_to_return; |
| 132 } | 144 } |
| 133 | 145 |
| 134 int GetIdFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { | 146 int GetIdFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { |
| 135 GValue value = { 0, }; | 147 GValue value = { 0, }; |
| 136 int ret_val = -1; | 148 int ret_val = -1; |
| 137 gtk_tree_model_get_value(model, iter, 1, &value); | 149 gtk_tree_model_get_value(model, iter, ITEM_ID, &value); |
| 138 if (G_VALUE_HOLDS_INT(&value)) | 150 if (G_VALUE_HOLDS_INT(&value)) |
| 139 ret_val = g_value_get_int(&value); | 151 ret_val = g_value_get_int(&value); |
| 140 else | 152 else |
| 141 NOTREACHED() << "Impossible type mismatch"; | 153 NOTREACHED() << "Impossible type mismatch"; |
| 142 | 154 |
| 143 return ret_val; | 155 return ret_val; |
| 144 } | 156 } |
| 145 | 157 |
| 146 std::wstring GetTitleFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { | 158 std::wstring GetTitleFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { |
| 147 GValue value = { 0, }; | 159 GValue value = { 0, }; |
| 148 std::wstring ret_val; | 160 std::wstring ret_val; |
| 149 gtk_tree_model_get_value(model, iter, 0, &value); | 161 gtk_tree_model_get_value(model, iter, FOLDER_NAME, &value); |
| 150 if (G_VALUE_HOLDS_STRING(&value)) { | 162 if (G_VALUE_HOLDS_STRING(&value)) { |
| 151 const gchar* utf8str = g_value_get_string(&value); | 163 const gchar* utf8str = g_value_get_string(&value); |
| 152 ret_val = UTF8ToWide(utf8str); | 164 ret_val = UTF8ToWide(utf8str); |
| 153 g_value_unset(&value); | 165 g_value_unset(&value); |
| 154 } else { | 166 } else { |
| 155 NOTREACHED() << "Impossible type mismatch"; | 167 NOTREACHED() << "Impossible type mismatch"; |
| 156 } | 168 } |
| 157 | 169 |
| 158 return ret_val; | 170 return ret_val; |
| 159 } | 171 } |
| 160 | 172 |
| 173 GdkPixbuf* GetFolderIcon() { |
| 174 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 175 static GdkPixbuf* default_folder_icon = rb.GetPixbufNamed( |
| 176 IDR_BOOKMARK_BAR_FOLDER); |
| 177 return default_folder_icon; |
| 178 } |
| 179 |
| 180 GdkPixbuf* GetDefaultFavicon() { |
| 181 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 182 static GdkPixbuf* default_bookmark_icon = rb.GetPixbufNamed( |
| 183 IDR_DEFAULT_FAVICON); |
| 184 return default_bookmark_icon; |
| 185 } |
| 186 |
| 161 } // namespace bookmark_utils | 187 } // namespace bookmark_utils |
| OLD | NEW |