| Index: chrome/browser/gtk/bookmark_manager_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/bookmark_manager_gtk.cc (revision 0)
|
| +++ chrome/browser/gtk/bookmark_manager_gtk.cc (revision 0)
|
| @@ -0,0 +1,212 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/gtk/bookmark_manager_gtk.h"
|
| +
|
| +#include "app/l10n_util.h"
|
| +#include "chrome/browser/bookmarks/bookmark_manager.h"
|
| +#include "chrome/browser/gtk/bookmark_tree_model.h"
|
| +#include "chrome/browser/profile.h"
|
| +#include "grit/generated_resources.h"
|
| +
|
| +namespace {
|
| +
|
| +// Padding between "Search:" and the entry field, in pixels.
|
| +const int kSearchPadding = 5;
|
| +
|
| +// We only have one manager open at a time.
|
| +BookmarkManagerGtk* manager = NULL;
|
| +
|
| +gboolean OnWindowDelete(GtkWidget* widget, GdkEvent* event, gpointer unused) {
|
| + gtk_widget_destroy(widget);
|
| + return FALSE;
|
| +}
|
| +
|
| +void OnWindowDestroy(GtkWidget* widget,
|
| + BookmarkManagerGtk* bookmark_manager) {
|
| + DCHECK_EQ(bookmark_manager, manager);
|
| + delete manager;
|
| + manager = NULL;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// BookmarkManager -------------------------------------------------------------
|
| +
|
| +void BookmarkManager::SelectInTree(Profile* profile, BookmarkNode* node) {
|
| + if (manager && manager->profile() == profile)
|
| + BookmarkManagerGtk::SelectInTree(node);
|
| +}
|
| +
|
| +void BookmarkManager::Show(Profile* profile) {
|
| + BookmarkManagerGtk::Show(profile);
|
| +}
|
| +
|
| +// BookmarkManagerGtk, public --------------------------------------------------
|
| +
|
| +void BookmarkManagerGtk::SelectInTree(BookmarkNode* node) {
|
| + // TODO(estade): Implement.
|
| +}
|
| +
|
| +// static
|
| +void BookmarkManagerGtk::Show(Profile* profile) {
|
| + if (!profile->GetBookmarkModel())
|
| + return;
|
| + if (!manager)
|
| + manager = new BookmarkManagerGtk(profile);
|
| +}
|
| +
|
| +void BookmarkManagerGtk::BookmarkManagerGtk::Loaded(BookmarkModel* model) {
|
| + BuildLeftStore();
|
| + BuildRightStore();
|
| +}
|
| +
|
| +void BookmarkManagerGtk::BookmarkModelBeingDeleted(BookmarkModel* model) {
|
| + gtk_widget_destroy(window_);
|
| +}
|
| +
|
| +// BookmarkManagerGtk, private -------------------------------------------------
|
| +
|
| +BookmarkManagerGtk::BookmarkManagerGtk(Profile* profile)
|
| + : profile_(profile),
|
| + model_(profile->GetBookmarkModel()) {
|
| + InitWidgets();
|
| + g_signal_connect(window_, "destroy",
|
| + G_CALLBACK(OnWindowDestroy), this);
|
| + g_signal_connect(window_, "delete-event",
|
| + G_CALLBACK(OnWindowDelete), NULL);
|
| +
|
| + model_->AddObserver(this);
|
| + if (model_->IsLoaded())
|
| + Loaded(model_);
|
| +
|
| + gtk_widget_show_all(window_);
|
| +}
|
| +
|
| +BookmarkManagerGtk::~BookmarkManagerGtk() {
|
| +}
|
| +
|
| +void BookmarkManagerGtk::InitWidgets() {
|
| + GtkToolItem* organize = gtk_tool_button_new(NULL,
|
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_ORGANIZE_MENU).c_str());
|
| + GtkToolItem* tools = gtk_tool_button_new(NULL,
|
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TOOLS_MENU).c_str());
|
| +
|
| + GtkToolItem* spacer = gtk_separator_tool_item_new();
|
| + gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(spacer), FALSE);
|
| + gtk_tool_item_set_expand(spacer, TRUE);
|
| +
|
| + GtkWidget* search_label = gtk_label_new(
|
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_SEARCH_TITLE).c_str());
|
| + GtkWidget* search_entry = gtk_entry_new();
|
| + GtkWidget* search_hbox = gtk_hbox_new(FALSE, kSearchPadding);
|
| + gtk_box_pack_start(GTK_BOX(search_hbox), search_label, FALSE, FALSE, 0);
|
| + gtk_box_pack_start(GTK_BOX(search_hbox), search_entry, FALSE, FALSE, 0);
|
| + GtkToolItem* search = gtk_tool_item_new();
|
| + gtk_container_add(GTK_CONTAINER(search), search_hbox);
|
| +
|
| + GtkWidget* toolbar = gtk_toolbar_new();
|
| + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), organize, 0);
|
| + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tools, 1);
|
| + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), spacer, 2);
|
| + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), search, 3);
|
| +
|
| + GtkWidget* left_pane = MakeLeftPane();
|
| + GtkWidget* right_pane = MakeRightPane();
|
| +
|
| + GtkWidget* paned = gtk_hpaned_new();
|
| + // Set the initial position of the pane divider.
|
| + // TODO(estade): we should set this to one third of the width of the window
|
| + // when it first shows (depending on the WM, this may or may not be the value
|
| + // we set below in gtk_window_set_size()).
|
| + gtk_paned_set_position(GTK_PANED(paned), 200);
|
| + gtk_paned_pack1(GTK_PANED(paned), left_pane, FALSE, FALSE);
|
| + gtk_paned_pack2(GTK_PANED(paned), right_pane, TRUE, FALSE);
|
| +
|
| + GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
|
| + gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
|
| + gtk_box_pack_start(GTK_BOX(vbox), paned, TRUE, TRUE, 0);
|
| +
|
| + window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
| + gtk_window_set_title(GTK_WINDOW(window_),
|
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TITLE).c_str());
|
| + // TODO(estade): use dimensions based on
|
| + // IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS and
|
| + // IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES.
|
| + gtk_window_set_default_size(GTK_WINDOW(window_), 640, 480);
|
| + gtk_container_add(GTK_CONTAINER(window_), vbox);
|
| +}
|
| +
|
| +GtkWidget* BookmarkManagerGtk::MakeLeftPane() {
|
| + left_store_ = bookmark_utils::MakeFolderTreeStore();
|
| +
|
| + GtkTreeViewColumn* icon_column = gtk_tree_view_column_new_with_attributes(
|
| + "", gtk_cell_renderer_pixbuf_new(), "pixbuf", bookmark_utils::FOLDER_ICON,
|
| + NULL);
|
| + GtkTreeViewColumn* name_column = gtk_tree_view_column_new_with_attributes(
|
| + "", gtk_cell_renderer_text_new(), "text", bookmark_utils::FOLDER_NAME,
|
| + NULL);
|
| +
|
| + GtkWidget* tree_view =
|
| + gtk_tree_view_new_with_model(GTK_TREE_MODEL(left_store_));
|
| + // Let |tree_view| own the store.
|
| + g_object_unref(left_store_);
|
| + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), FALSE);
|
| + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), icon_column);
|
| + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), name_column);
|
| +
|
| + GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
|
| + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
|
| + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
| + gtk_container_add(GTK_CONTAINER(scrolled), tree_view);
|
| +
|
| + GtkWidget* frame = gtk_frame_new(NULL);
|
| + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
| + gtk_container_add(GTK_CONTAINER(frame), scrolled);
|
| +
|
| + return frame;
|
| +}
|
| +
|
| +GtkWidget* BookmarkManagerGtk::MakeRightPane() {
|
| + right_store_ = gtk_list_store_new(RIGHT_PANE_NUM,
|
| + G_TYPE_STRING, G_TYPE_STRING);
|
| +
|
| + GtkTreeViewColumn* title_column = gtk_tree_view_column_new_with_attributes(
|
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_TITLE).c_str(),
|
| + gtk_cell_renderer_text_new(), "text", RIGHT_PANE_TITLE, NULL);
|
| + GtkTreeViewColumn* url_column = gtk_tree_view_column_new_with_attributes(
|
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_URL).c_str(),
|
| + gtk_cell_renderer_text_new(), "text", RIGHT_PANE_URL, NULL);
|
| +
|
| + GtkWidget* tree_view =
|
| + gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_));
|
| + // Let |tree_view| own the store.
|
| + g_object_unref(right_store_);
|
| + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), title_column);
|
| + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), url_column);
|
| +
|
| + GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
|
| + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
|
| + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
| + gtk_container_add(GTK_CONTAINER(scrolled), tree_view);
|
| +
|
| + GtkWidget* frame = gtk_frame_new(NULL);
|
| + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
|
| + gtk_container_add(GTK_CONTAINER(frame), scrolled);
|
| +
|
| + return frame;
|
| +}
|
| +
|
| +void BookmarkManagerGtk::BuildLeftStore() {
|
| + bookmark_utils::AddToTreeStore(model_, 0, left_store_, NULL);
|
| + // TODO(estade): Add recently bookmarked node and search node.
|
| +}
|
| +
|
| +void BookmarkManagerGtk::BuildRightStore() {
|
| + // TODO(estade): Implement.
|
| + GtkTreeIter iter;
|
| + gtk_list_store_append(right_store_, &iter);
|
| + gtk_list_store_set(right_store_, &iter, RIGHT_PANE_TITLE, "Not implemented",
|
| + -1);
|
| +}
|
|
|