summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/compact_navigation_bar.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/compact_navigation_bar.cc')
-rw-r--r--chrome/browser/views/compact_navigation_bar.cc184
1 files changed, 184 insertions, 0 deletions
diff --git a/chrome/browser/views/compact_navigation_bar.cc b/chrome/browser/views/compact_navigation_bar.cc
new file mode 100644
index 0000000..50409c5
--- /dev/null
+++ b/chrome/browser/views/compact_navigation_bar.cc
@@ -0,0 +1,184 @@
+// 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/views/compact_navigation_bar.h"
+
+#include "app/gfx/canvas.h"
+#include "app/resource_bundle.h"
+#include "app/theme_provider.h"
+#include "base/logging.h"
+#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
+#include "chrome/browser/browser.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "grit/theme_resources.h"
+#include "views/controls/button/image_button.h"
+#include "views/controls/image_view.h"
+#include "views/controls/native/native_view_host.h"
+
+// Padding inside each button around the image.
+static const int kInnerPadding = 1;
+
+// Spacing between buttons.
+static const int kHorizPadding = 3;
+
+static const int kURLWidth = 150;
+
+static const int kChromeButtonSize = 25;
+
+CompactNavigationBar::CompactNavigationBar(Browser* browser)
+ : browser_(browser),
+ initialized_(false) {
+}
+
+CompactNavigationBar::~CompactNavigationBar() {
+}
+
+void CompactNavigationBar::Init() {
+ DCHECK(!initialized_);
+ initialized_ = true;
+
+ ResourceBundle& resource_bundle = ResourceBundle::GetSharedInstance();
+
+ chrome_button_ = new views::ImageButton(this);
+ chrome_button_->SetImage(views::CustomButton::BS_NORMAL,
+ resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_CHROME));
+ chrome_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
+ views::ImageButton::ALIGN_MIDDLE);
+ AddChildView(chrome_button_);
+
+ back_button_ = new views::ImageButton(this);
+ back_button_->SetImage(views::CustomButton::BS_NORMAL,
+ resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_BACK));
+ back_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
+ views::ImageButton::ALIGN_MIDDLE);
+ AddChildView(back_button_);
+
+ bf_separator_ = new views::ImageView;
+ bf_separator_->SetImage(
+ resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_SEPARATOR));
+ AddChildView(bf_separator_);
+
+ forward_button_ = new views::ImageButton(this);
+ forward_button_->SetImage(views::CustomButton::BS_NORMAL,
+ resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_FORWARD));
+ forward_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
+ views::ImageButton::ALIGN_MIDDLE);
+ AddChildView(forward_button_);
+
+ // URL bar construction.
+ location_entry_.reset(new AutocompleteEditViewGtk(
+ this, browser_->toolbar_model(), browser_->profile(),
+ browser_->command_updater(), false, this));
+ location_entry_->Init();
+ gtk_widget_show_all(location_entry_->widget());
+ gtk_widget_hide(location_entry_->widget());
+
+ location_entry_view_ = new views::NativeViewHost;
+ AddChildView(location_entry_view_);
+ location_entry_view_->set_focus_view(this);
+ location_entry_view_->Attach(location_entry_->widget());
+}
+
+gfx::Size CompactNavigationBar::GetPreferredSize() {
+ int width = 0;
+
+ width += kChromeButtonSize + kHorizPadding; // Chrome button.
+ width += kURLWidth + kHorizPadding; // URL bar.
+ width += back_button_->GetPreferredSize().width() + kHorizPadding +
+ kInnerPadding * 2;
+ width += bf_separator_->GetPreferredSize().width() + kHorizPadding;
+ width += forward_button_->GetPreferredSize().width() + kHorizPadding +
+ kInnerPadding * 2;
+
+ return gfx::Size(width, kChromeButtonSize);
+}
+
+void CompactNavigationBar::Layout() {
+ if (!initialized_)
+ return;
+
+ int curx = 0;
+
+ // Make the chrome button square since it looks better that way.
+ chrome_button_->SetBounds(curx, 0, kChromeButtonSize, kChromeButtonSize);
+ curx += kChromeButtonSize + kHorizPadding;
+
+ // URL bar.
+ location_entry_view_->SetBounds(curx, 0, kURLWidth, height());
+ curx += kURLWidth + kHorizPadding;
+
+ // "Back | Forward" section.
+ gfx::Size button_size = back_button_->GetPreferredSize();
+ button_size.set_width(button_size.width() + kInnerPadding * 2);
+ back_button_->SetBounds(curx, 1, button_size.width(), height() - 1);
+ curx += button_size.width() + kHorizPadding;
+
+ button_size = bf_separator_->GetPreferredSize();
+ bf_separator_->SetBounds(curx, 1, button_size.width(), height() - 1);
+ curx += button_size.width() + kHorizPadding;
+
+ button_size = forward_button_->GetPreferredSize();
+ button_size.set_width(button_size.width() + kInnerPadding * 2);
+ forward_button_->SetBounds(curx, 1, button_size.width(), height() - 1);
+ curx += button_size.width() + kHorizPadding;
+}
+
+void CompactNavigationBar::Paint(gfx::Canvas* canvas) {
+ ThemeProvider* theme = browser_->profile()->GetThemeProvider();
+
+ // Fill the background.
+ SkBitmap* background = theme->GetBitmapNamed(IDR_THEME_FRAME);
+ canvas->TileImageInt(*background, 0, 0, width(), height());
+}
+
+void CompactNavigationBar::ButtonPressed(views::Button* sender) {
+ TabContents* tab_contents = browser_->GetSelectedTabContents();
+ if (!tab_contents)
+ return;
+
+ if (sender == chrome_button_) {
+ NOTIMPLEMENTED(); // TODO(brettw) hook this up to something.
+ } else if (sender == back_button_) {
+ if (tab_contents->controller().CanGoBack())
+ tab_contents->controller().GoBack();
+ } else if (sender == forward_button_) {
+ if (tab_contents->controller().CanGoForward())
+ tab_contents->controller().GoForward();
+ } else {
+ NOTREACHED();
+ }
+}
+
+void CompactNavigationBar::OnAutocompleteAccept(
+ const GURL& url,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition,
+ const GURL& alternate_nav_url) {
+ // Add the new tab at the first non-pinned location.
+ int index = browser_->tabstrip_model()->IndexOfFirstNonPinnedTab();
+ browser_->AddTabWithURL(url, GURL(), PageTransition::TYPED,
+ true, index, true, NULL);
+}
+
+void CompactNavigationBar::OnChanged() {
+ // Other one does "DoLayout" here.
+}
+
+void CompactNavigationBar::OnInputInProgress(bool in_progress) {
+}
+
+SkBitmap CompactNavigationBar::GetFavIcon() const {
+ return SkBitmap();
+}
+
+std::wstring CompactNavigationBar::GetTitle() const {
+ return std::wstring();
+}
+
+gfx::Rect CompactNavigationBar::GetPopupBounds() const {
+ gfx::Point upper_left(0, height());
+ ConvertPointToScreen(this, &upper_left);
+ return gfx::Rect(upper_left.x(), upper_left.y(), 700, 100);
+}