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

Side by Side Diff: chrome/browser/gtk/bookmark_tree_model.cc

Issue 118150: Linux bookmark manager first cut. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: 1 more file Created 11 years, 6 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
« no previous file with comments | « chrome/browser/gtk/bookmark_tree_model.h ('k') | chrome/browser/views/bookmark_manager_view.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_tree_model.h ('k') | chrome/browser/views/bookmark_manager_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698