summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/bookmark_manager_gtk.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-01 03:11:11 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-01 03:11:11 +0000
commitbdb72360b89de3fd7fbcfe6d14b38e3c230dcd84 (patch)
tree108180299eca787c05a915f9eb4ce6b20cb9320e /chrome/browser/gtk/bookmark_manager_gtk.cc
parent2c38d09b84e0e9fec40dec19aff16c36e976ac3e (diff)
downloadchromium_src-bdb72360b89de3fd7fbcfe6d14b38e3c230dcd84.zip
chromium_src-bdb72360b89de3fd7fbcfe6d14b38e3c230dcd84.tar.gz
chromium_src-bdb72360b89de3fd7fbcfe6d14b38e3c230dcd84.tar.bz2
Bookmark manager polish:
- set a better default size - ellipsize columns - allow users to change column widths - remember user-modified column widths BUG=http://crbug.com/14742 TEST=none Review URL: http://codereview.chromium.org/151134 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19704 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/bookmark_manager_gtk.cc')
-rw-r--r--chrome/browser/gtk/bookmark_manager_gtk.cc116
1 files changed, 97 insertions, 19 deletions
diff --git a/chrome/browser/gtk/bookmark_manager_gtk.cc b/chrome/browser/gtk/bookmark_manager_gtk.cc
index a385426..08c9fab 100644
--- a/chrome/browser/gtk/bookmark_manager_gtk.cc
+++ b/chrome/browser/gtk/bookmark_manager_gtk.cc
@@ -26,6 +26,7 @@
#include "chrome/common/pref_service.h"
#include "grit/app_resources.h"
#include "grit/generated_resources.h"
+#include "grit/locale_settings.h"
#include "grit/theme_resources.h"
namespace {
@@ -45,6 +46,12 @@ const int kSearchPadding = 5;
// Time between a user action in the search box and when we perform the search.
const int kSearchDelayMS = 200;
+// The default width of a column in the right tree view. Since we set the
+// columns to ellipsize, if we don't explicitly set a width they will be
+// wide enough to display only '...'. This will be overridden if the user
+// resizes the column.
+const int kDefaultColumnWidth = 200;
+
// We only have one manager open at a time.
BookmarkManagerGtk* manager = NULL;
@@ -280,6 +287,7 @@ BookmarkManagerGtk::BookmarkManagerGtk(Profile* profile)
}
BookmarkManagerGtk::~BookmarkManagerGtk() {
+ SaveColumnConfiguration();
model_->RemoveObserver(this);
}
@@ -287,10 +295,30 @@ void BookmarkManagerGtk::InitWidgets() {
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);
+
+ // Set the default size of the bookmark manager.
+ // Windows has code to do this that uses ChromeFont; we could share it but
+ // since we don't plan to use it elsewhere it's probably not worth the effort.
+ PangoContext* context = gtk_widget_create_pango_context(window_);
+ PangoFontMetrics* metrics =
+ pango_context_get_metrics(context, window_->style->font_desc,
+ pango_context_get_language(context));
+ double chars = 0;
+ StringToDouble(WideToUTF8(l10n_util::GetString(
+ IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS)), &chars);
+ int width =
+ pango_font_metrics_get_approximate_char_width(metrics) *
+ static_cast<int>(chars) / PANGO_SCALE;
+ double lines = 0;
+ StringToDouble(WideToUTF8(l10n_util::GetString(
+ IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES)), &lines);
+ int height =
+ (pango_font_metrics_get_ascent(metrics) +
+ pango_font_metrics_get_descent(metrics)) *
+ static_cast<int>(lines) / PANGO_SCALE;
+ gtk_window_set_default_size(GTK_WINDOW(window_), width, height);
+ pango_font_metrics_unref(metrics);
+ g_object_unref(context);
// Build the organize and tools menus.
organize_ = gtk_menu_item_new_with_label(
@@ -338,10 +366,7 @@ void BookmarkManagerGtk::InitWidgets() {
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_set_position(GTK_PANED(paned), width / 3);
gtk_paned_pack1(GTK_PANED(paned), left_pane, FALSE, FALSE);
gtk_paned_pack2(GTK_PANED(paned), right_pane, TRUE, FALSE);
@@ -403,29 +428,32 @@ GtkWidget* BookmarkManagerGtk::MakeRightPane() {
right_store_ = gtk_list_store_new(RIGHT_PANE_NUM,
GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
- GtkTreeViewColumn* title_column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_title(title_column,
+ title_column_ = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(title_column_,
l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_TITLE).c_str());
GtkCellRenderer* image_renderer = gtk_cell_renderer_pixbuf_new();
- gtk_tree_view_column_pack_start(title_column, image_renderer, FALSE);
- gtk_tree_view_column_add_attribute(title_column, image_renderer,
+ gtk_tree_view_column_pack_start(title_column_, image_renderer, FALSE);
+ gtk_tree_view_column_add_attribute(title_column_, image_renderer,
"pixbuf", RIGHT_PANE_PIXBUF);
GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(title_column, text_renderer, TRUE);
- gtk_tree_view_column_add_attribute(title_column, text_renderer,
+ g_object_set(text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start(title_column_, text_renderer, TRUE);
+ gtk_tree_view_column_add_attribute(title_column_, text_renderer,
"text", RIGHT_PANE_TITLE);
- GtkTreeViewColumn* url_column = gtk_tree_view_column_new_with_attributes(
+
+ 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);
+ text_renderer, "text", RIGHT_PANE_URL, NULL);
+
path_column_ = gtk_tree_view_column_new_with_attributes(
l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_PATH).c_str(),
- gtk_cell_renderer_text_new(), "text", RIGHT_PANE_PATH, NULL);
+ text_renderer, "text", RIGHT_PANE_PATH, NULL);
right_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(right_tree_view_), title_column);
- gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column_);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column_);
gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), path_column_);
gtk_tree_selection_set_mode(right_selection(), GTK_SELECTION_MULTIPLE);
@@ -526,7 +554,9 @@ void BookmarkManagerGtk::BuildRightStore() {
gtk_list_store_clear(right_store_);
if (node) {
+ SaveColumnConfiguration();
gtk_tree_view_column_set_visible(path_column_, FALSE);
+ SizeColumns();
right_tree_model_.reset(
BookmarkTableModel::CreateBookmarkTableModelForFolder(model_, node));
@@ -536,7 +566,9 @@ void BookmarkManagerGtk::BuildRightStore() {
GtkDndUtil::SetDestTargetListFromCodeMask(right_tree_view_,
GtkDndUtil::X_CHROME_BOOKMARK_ITEM);
} else {
+ SaveColumnConfiguration();
gtk_tree_view_column_set_visible(path_column_, TRUE);
+ SizeColumns();
int id = GetSelectedRowID();
if (kRecentID == id) {
@@ -647,6 +679,52 @@ void BookmarkManagerGtk::AddNodeToRightStore(int row) {
SetRightSideColumnValues(row, &iter);
}
+void BookmarkManagerGtk::SizeColumn(GtkTreeViewColumn* column,
+ const wchar_t* prefname) {
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+
+ PrefService* prefs = profile_->GetPrefs();
+ if (!prefs)
+ return;
+
+ int width = prefs->GetInteger(prefname);
+ if (width <= 0)
+ width = kDefaultColumnWidth;
+ gtk_tree_view_column_set_fixed_width(column, width);
+}
+
+void BookmarkManagerGtk::SizeColumns() {
+ if (gtk_tree_view_column_get_visible(path_column_)) {
+ SizeColumn(title_column_, prefs::kBookmarkTableNameWidth2);
+ SizeColumn(url_column_, prefs::kBookmarkTableURLWidth2);
+ SizeColumn(path_column_, prefs::kBookmarkTablePathWidth);
+ } else {
+ SizeColumn(title_column_, prefs::kBookmarkTableNameWidth1);
+ SizeColumn(url_column_, prefs::kBookmarkTableURLWidth1);
+ }
+}
+
+void BookmarkManagerGtk::SaveColumnConfiguration() {
+ PrefService* prefs = profile_->GetPrefs();
+ if (!prefs)
+ return;
+
+ if (gtk_tree_view_column_get_visible(path_column_)) {
+ prefs->SetInteger(prefs::kBookmarkTableNameWidth2,
+ gtk_tree_view_column_get_width(title_column_));
+ prefs->SetInteger(prefs::kBookmarkTableURLWidth2,
+ gtk_tree_view_column_get_width(url_column_));
+ prefs->SetInteger(prefs::kBookmarkTablePathWidth,
+ gtk_tree_view_column_get_width(path_column_));
+ } else {
+ prefs->SetInteger(prefs::kBookmarkTableNameWidth1,
+ gtk_tree_view_column_get_width(title_column_));
+ prefs->SetInteger(prefs::kBookmarkTableURLWidth1,
+ gtk_tree_view_column_get_width(url_column_));
+ }
+}
+
bool BookmarkManagerGtk::RecursiveFind(GtkTreeModel* model, GtkTreeIter* iter,
int target) {
GValue value = { 0, };