summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/browser_toolbar_view_gtk.cc
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-09 22:02:55 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-09 22:02:55 +0000
commit4bf43a6de3ed4e6895499ac536c39bc9a38f2262 (patch)
tree9dc46be76fa4613e2ac9d6800689802cfdc3fa3a /chrome/browser/gtk/browser_toolbar_view_gtk.cc
parent6c127d63e215511c83c534f168e6952476489350 (diff)
downloadchromium_src-4bf43a6de3ed4e6895499ac536c39bc9a38f2262.zip
chromium_src-4bf43a6de3ed4e6895499ac536c39bc9a38f2262.tar.gz
chromium_src-4bf43a6de3ed4e6895499ac536c39bc9a38f2262.tar.bz2
Porting the toolbar to GTK.
Quite a bit of TODOs in the code, but it displays and properly enables/disables buttons and routes mouse clicks. This also moves all the gtk files into the gtk/ folder, at Ben's request. Review URL: http://codereview.chromium.org/21176 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9421 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/browser_toolbar_view_gtk.cc')
-rw-r--r--chrome/browser/gtk/browser_toolbar_view_gtk.cc144
1 files changed, 144 insertions, 0 deletions
diff --git a/chrome/browser/gtk/browser_toolbar_view_gtk.cc b/chrome/browser/gtk/browser_toolbar_view_gtk.cc
new file mode 100644
index 0000000..00c28d7
--- /dev/null
+++ b/chrome/browser/gtk/browser_toolbar_view_gtk.cc
@@ -0,0 +1,144 @@
+// 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/browser_toolbar_view_gtk.h"
+
+#include "base/logging.h"
+#include "chrome/app/chrome_dll_resource.h"
+#include "chrome/browser/browser.h"
+#include "chrome/common/l10n_util.h"
+
+#include "chromium_strings.h"
+#include "generated_resources.h"
+
+BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser)
+ : toolbar_(NULL),
+ back_(NULL),
+ forward_(NULL),
+ reload_(NULL),
+ home_(NULL),
+ star_(NULL),
+ model_(browser->toolbar_model()),
+ browser_(browser),
+ profile_(NULL) {
+ browser_->command_updater()->AddCommandObserver(IDC_BACK, this);
+ browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this);
+ browser_->command_updater()->AddCommandObserver(IDC_RELOAD, this);
+ browser_->command_updater()->AddCommandObserver(IDC_HOME, this);
+ browser_->command_updater()->AddCommandObserver(IDC_STAR, this);
+
+ // TODO(port): Port BackForwardMenuModel
+ // back_menu_model_.reset(new BackForwardMenuModel(
+ // browser, BackForwardMenuModel::BACKWARD_MENU_DELEGATE));
+ // forward_menu_model_.reset(new BackForwardMenuModel(
+ // browser, BackForwardMenuModel::FORWARD_MENU_DELEGATE));
+}
+
+BrowserToolbarGtk::~BrowserToolbarGtk() {
+}
+
+void BrowserToolbarGtk::Init(Profile* profile) {
+ toolbar_ = gtk_hbox_new(FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(toolbar_), 6);
+
+ toolbar_tooltips_ = gtk_tooltips_new();
+
+ back_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_BACK));
+ forward_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_FORWARD));
+ reload_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_RELOAD));
+ home_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_HOME));
+ star_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_STAR));
+
+ gtk_box_pack_start(GTK_BOX(toolbar_), gtk_label_new(" "), FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(toolbar_), gtk_entry_new(), TRUE, TRUE, 0);
+
+ go_ = BuildToolbarButton(L"");
+ page_menu_ = BuildToolbarButton(l10n_util::GetString(IDS_PAGEMENU_TOOLTIP));
+
+ // TODO(port): Need to get l10n_util::GetStringF working under linux to get
+ // the correct string here.
+ app_menu_ = BuildToolbarButton(l10n_util::GetString(IDS_APPMENU_TOOLTIP));
+
+ // TODO(erg): wchar_t mismatch on linux. Fix later.
+ // show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this);
+
+ SetProfile(profile);
+}
+
+void BrowserToolbarGtk::AddToolbarToBox(GtkWidget* box) {
+ gtk_box_pack_start(GTK_BOX(box), toolbar_, FALSE, FALSE, 0);
+}
+
+void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) {
+ GtkWidget* widget = NULL;
+ switch (id) {
+ case IDC_BACK:
+ widget = back_;
+ break;
+ case IDC_FORWARD:
+ widget = forward_;
+ break;
+ case IDC_RELOAD:
+ widget = reload_;
+ break;
+ case IDC_HOME:
+ widget = home_;
+ break;
+ case IDC_STAR:
+ widget = star_;
+ break;
+ }
+ if (widget)
+ gtk_widget_set_sensitive(widget, enabled);
+}
+
+void BrowserToolbarGtk::SetProfile(Profile* profile) {
+ if (profile == profile_)
+ return;
+
+ profile_ = profile;
+ // TODO(erg): location_bar_ is a normal gtk text box right now. Change this
+ // when we get omnibox support.
+ // location_bar_->SetProfile(profile);
+}
+
+// TODO(port): This needs to deal with our styled pixmaps.
+GtkWidget* BrowserToolbarGtk::BuildToolbarButton(
+ const std::wstring& localized_tooltip) {
+ GtkWidget* b = gtk_button_new();
+ gtk_widget_set_size_request(b, 29, 29);
+
+ // TODO(erg): Mismatch between wstring and string.
+ // gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tooltips_),
+ // GTK_WIDGET(back_),
+ // localized_tooltip, localized_tooltip);
+ g_signal_connect(G_OBJECT(b), "clicked",
+ G_CALLBACK(ButtonClickCallback), this);
+ gtk_box_pack_start(GTK_BOX(toolbar_), b, FALSE, FALSE, 0);
+
+ // TODO(erg): Change this when pixmap loading is working.
+ return b;
+}
+
+/* static */
+void BrowserToolbarGtk::ButtonClickCallback(GtkWidget* button,
+ BrowserToolbarGtk* toolbar) {
+ int tag = -1;
+ if (button == toolbar->back_)
+ tag = IDC_BACK;
+ else if (button == toolbar->forward_)
+ tag = IDC_FORWARD;
+ else if (button == toolbar->reload_)
+ tag = IDC_RELOAD;
+ else if (button == toolbar->home_)
+ tag = IDC_HOME;
+ else if (button == toolbar->star_)
+ tag = IDC_STAR;
+
+ if (tag != -1) {
+ toolbar->browser_->ExecuteCommand(tag);
+ } else {
+ // TODO(erg): The menu buttons are special; they need to spawn menus.
+ }
+}