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

Side by Side Diff: chrome/browser/gtk/bookmark_manager_gtk.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_manager_gtk.h ('k') | chrome/browser/gtk/bookmark_tree_model.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/gtk/bookmark_manager_gtk.h"
6
7 #include "app/l10n_util.h"
8 #include "chrome/browser/bookmarks/bookmark_manager.h"
9 #include "chrome/browser/gtk/bookmark_tree_model.h"
10 #include "chrome/browser/profile.h"
11 #include "grit/generated_resources.h"
12
13 namespace {
14
15 // Padding between "Search:" and the entry field, in pixels.
16 const int kSearchPadding = 5;
17
18 // We only have one manager open at a time.
19 BookmarkManagerGtk* manager = NULL;
20
21 gboolean OnWindowDelete(GtkWidget* widget, GdkEvent* event, gpointer unused) {
22 gtk_widget_destroy(widget);
23 return FALSE;
24 }
25
26 void OnWindowDestroy(GtkWidget* widget,
27 BookmarkManagerGtk* bookmark_manager) {
28 DCHECK_EQ(bookmark_manager, manager);
29 delete manager;
30 manager = NULL;
31 }
32
33 } // namespace
34
35 // BookmarkManager -------------------------------------------------------------
36
37 void BookmarkManager::SelectInTree(Profile* profile, BookmarkNode* node) {
38 if (manager && manager->profile() == profile)
39 BookmarkManagerGtk::SelectInTree(node);
40 }
41
42 void BookmarkManager::Show(Profile* profile) {
43 BookmarkManagerGtk::Show(profile);
44 }
45
46 // BookmarkManagerGtk, public --------------------------------------------------
47
48 void BookmarkManagerGtk::SelectInTree(BookmarkNode* node) {
49 // TODO(estade): Implement.
50 }
51
52 // static
53 void BookmarkManagerGtk::Show(Profile* profile) {
54 if (!profile->GetBookmarkModel())
55 return;
56 if (!manager)
57 manager = new BookmarkManagerGtk(profile);
58 }
59
60 void BookmarkManagerGtk::BookmarkManagerGtk::Loaded(BookmarkModel* model) {
61 BuildLeftStore();
62 BuildRightStore();
63 }
64
65 void BookmarkManagerGtk::BookmarkModelBeingDeleted(BookmarkModel* model) {
66 gtk_widget_destroy(window_);
67 }
68
69 // BookmarkManagerGtk, private -------------------------------------------------
70
71 BookmarkManagerGtk::BookmarkManagerGtk(Profile* profile)
72 : profile_(profile),
73 model_(profile->GetBookmarkModel()) {
74 InitWidgets();
75 g_signal_connect(window_, "destroy",
76 G_CALLBACK(OnWindowDestroy), this);
77 g_signal_connect(window_, "delete-event",
78 G_CALLBACK(OnWindowDelete), NULL);
79
80 model_->AddObserver(this);
81 if (model_->IsLoaded())
82 Loaded(model_);
83
84 gtk_widget_show_all(window_);
85 }
86
87 BookmarkManagerGtk::~BookmarkManagerGtk() {
88 }
89
90 void BookmarkManagerGtk::InitWidgets() {
91 GtkToolItem* organize = gtk_tool_button_new(NULL,
92 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_ORGANIZE_MENU).c_str());
93 GtkToolItem* tools = gtk_tool_button_new(NULL,
94 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TOOLS_MENU).c_str());
95
96 GtkToolItem* spacer = gtk_separator_tool_item_new();
97 gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(spacer), FALSE);
98 gtk_tool_item_set_expand(spacer, TRUE);
99
100 GtkWidget* search_label = gtk_label_new(
101 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_SEARCH_TITLE).c_str());
102 GtkWidget* search_entry = gtk_entry_new();
103 GtkWidget* search_hbox = gtk_hbox_new(FALSE, kSearchPadding);
104 gtk_box_pack_start(GTK_BOX(search_hbox), search_label, FALSE, FALSE, 0);
105 gtk_box_pack_start(GTK_BOX(search_hbox), search_entry, FALSE, FALSE, 0);
106 GtkToolItem* search = gtk_tool_item_new();
107 gtk_container_add(GTK_CONTAINER(search), search_hbox);
108
109 GtkWidget* toolbar = gtk_toolbar_new();
110 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), organize, 0);
111 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tools, 1);
112 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), spacer, 2);
113 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), search, 3);
114
115 GtkWidget* left_pane = MakeLeftPane();
116 GtkWidget* right_pane = MakeRightPane();
117
118 GtkWidget* paned = gtk_hpaned_new();
119 // Set the initial position of the pane divider.
120 // TODO(estade): we should set this to one third of the width of the window
121 // when it first shows (depending on the WM, this may or may not be the value
122 // we set below in gtk_window_set_size()).
123 gtk_paned_set_position(GTK_PANED(paned), 200);
124 gtk_paned_pack1(GTK_PANED(paned), left_pane, FALSE, FALSE);
125 gtk_paned_pack2(GTK_PANED(paned), right_pane, TRUE, FALSE);
126
127 GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
128 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
129 gtk_box_pack_start(GTK_BOX(vbox), paned, TRUE, TRUE, 0);
130
131 window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
132 gtk_window_set_title(GTK_WINDOW(window_),
133 l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TITLE).c_str());
134 // TODO(estade): use dimensions based on
135 // IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS and
136 // IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES.
137 gtk_window_set_default_size(GTK_WINDOW(window_), 640, 480);
138 gtk_container_add(GTK_CONTAINER(window_), vbox);
139 }
140
141 GtkWidget* BookmarkManagerGtk::MakeLeftPane() {
142 left_store_ = bookmark_utils::MakeFolderTreeStore();
143
144 GtkTreeViewColumn* icon_column = gtk_tree_view_column_new_with_attributes(
145 "", gtk_cell_renderer_pixbuf_new(), "pixbuf", bookmark_utils::FOLDER_ICON,
146 NULL);
147 GtkTreeViewColumn* name_column = gtk_tree_view_column_new_with_attributes(
148 "", gtk_cell_renderer_text_new(), "text", bookmark_utils::FOLDER_NAME,
149 NULL);
150
151 GtkWidget* tree_view =
152 gtk_tree_view_new_with_model(GTK_TREE_MODEL(left_store_));
153 // Let |tree_view| own the store.
154 g_object_unref(left_store_);
155 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), FALSE);
156 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), icon_column);
157 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), name_column);
158
159 GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
160 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
161 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
162 gtk_container_add(GTK_CONTAINER(scrolled), tree_view);
163
164 GtkWidget* frame = gtk_frame_new(NULL);
165 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
166 gtk_container_add(GTK_CONTAINER(frame), scrolled);
167
168 return frame;
169 }
170
171 GtkWidget* BookmarkManagerGtk::MakeRightPane() {
172 right_store_ = gtk_list_store_new(RIGHT_PANE_NUM,
173 G_TYPE_STRING, G_TYPE_STRING);
174
175 GtkTreeViewColumn* title_column = gtk_tree_view_column_new_with_attributes(
176 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_TITLE).c_str(),
177 gtk_cell_renderer_text_new(), "text", RIGHT_PANE_TITLE, NULL);
178 GtkTreeViewColumn* url_column = gtk_tree_view_column_new_with_attributes(
179 l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_URL).c_str(),
180 gtk_cell_renderer_text_new(), "text", RIGHT_PANE_URL, NULL);
181
182 GtkWidget* tree_view =
183 gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_));
184 // Let |tree_view| own the store.
185 g_object_unref(right_store_);
186 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), title_column);
187 gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), url_column);
188
189 GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
190 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
191 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
192 gtk_container_add(GTK_CONTAINER(scrolled), tree_view);
193
194 GtkWidget* frame = gtk_frame_new(NULL);
195 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
196 gtk_container_add(GTK_CONTAINER(frame), scrolled);
197
198 return frame;
199 }
200
201 void BookmarkManagerGtk::BuildLeftStore() {
202 bookmark_utils::AddToTreeStore(model_, 0, left_store_, NULL);
203 // TODO(estade): Add recently bookmarked node and search node.
204 }
205
206 void BookmarkManagerGtk::BuildRightStore() {
207 // TODO(estade): Implement.
208 GtkTreeIter iter;
209 gtk_list_store_append(right_store_, &iter);
210 gtk_list_store_set(right_store_, &iter, RIGHT_PANE_TITLE, "Not implemented",
211 -1);
212 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_manager_gtk.h ('k') | chrome/browser/gtk/bookmark_tree_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698