summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos')
-rw-r--r--chrome/browser/chromeos/compact_navigation_bar.cc209
-rw-r--r--chrome/browser/chromeos/compact_navigation_bar.h78
2 files changed, 287 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/compact_navigation_bar.cc b/chrome/browser/chromeos/compact_navigation_bar.cc
new file mode 100644
index 0000000..e2be4a0
--- /dev/null
+++ b/chrome/browser/chromeos/compact_navigation_bar.cc
@@ -0,0 +1,209 @@
+// 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/chromeos/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/browser_window.h"
+#include "chrome/browser/views/frame/status_area_view.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;
+
+ chrome_button_->SetBounds(curx, 0, kChromeButtonSize, height());
+ 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, 0, button_size.width(), height());
+ curx += button_size.width() + kHorizPadding;
+
+ button_size = bf_separator_->GetPreferredSize();
+ bf_separator_->SetBounds(curx, 0, button_size.width(), height());
+ curx += button_size.width() + kHorizPadding;
+
+ button_size = forward_button_->GetPreferredSize();
+ button_size.set_width(button_size.width() + kInnerPadding * 2);
+ forward_button_->SetBounds(curx, 0, button_size.width(), height());
+ curx += button_size.width() + kHorizPadding;
+}
+
+void CompactNavigationBar::Paint(gfx::Canvas* canvas) {
+ ThemeProvider* theme = browser_->profile()->GetThemeProvider();
+
+ // Fill the background.
+ SkBitmap* background;
+ if (browser_->window()->IsActive())
+ background = theme->GetBitmapNamed(IDR_THEME_FRAME);
+ else
+ background = theme->GetBitmapNamed(IDR_THEME_FRAME_INACTIVE);
+ 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_) {
+ AddTabWithURL(GURL("http://goto.ext.google.com/tik-tok"),
+ PageTransition::START_PAGE);
+ } 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) {
+ AddTabWithURL(url, transition);
+}
+
+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);
+}
+
+void CompactNavigationBar::AddTabWithURL(const GURL& url,
+ PageTransition::Type transition) {
+ switch (StatusAreaView::GetOpenTabsMode()) {
+ case StatusAreaView::OPEN_TABS_ON_LEFT: {
+ // Add the new tab at the first non-pinned location.
+ int index = browser_->tabstrip_model()->IndexOfFirstNonPinnedTab();
+ browser_->AddTabWithURL(url, GURL(), transition,
+ true, index, true, NULL);
+ break;
+ }
+ case StatusAreaView::OPEN_TABS_CLOBBER: {
+ browser_->GetSelectedTabContents()->controller().LoadURL(
+ url, GURL(), transition);
+ break;
+ }
+ case StatusAreaView::OPEN_TABS_ON_RIGHT: {
+ browser_->AddTabWithURL(url, GURL(), transition, true, -1, true, NULL);
+ break;
+ }
+ }
+}
diff --git a/chrome/browser/chromeos/compact_navigation_bar.h b/chrome/browser/chromeos/compact_navigation_bar.h
new file mode 100644
index 0000000..f086f34
--- /dev/null
+++ b/chrome/browser/chromeos/compact_navigation_bar.h
@@ -0,0 +1,78 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_COMPACT_NAVIGATION_BAR_H_
+#define CHROME_BROWSER_CHROMEOS_COMPACT_NAVIGATION_BAR_H_
+
+#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
+#include "chrome/browser/autocomplete/autocomplete_edit.h"
+#include "chrome/browser/autocomplete/autocomplete_popup_view.h"
+#include "views/controls/button/button.h"
+#include "views/view.h"
+
+class AutocompleteEditViewGtk;
+class Browser;
+
+namespace views {
+class ImageButton;
+class ImageView;
+class NativeViewHost;
+}
+
+// This class provides a small navigation bar that includes back, forward, and
+// a small text entry box.
+class CompactNavigationBar : public views::View,
+ public views::ButtonListener,
+ public AutocompleteEditController,
+ public AutocompletePopupPositioner {
+ public:
+ explicit CompactNavigationBar(Browser* browser);
+ virtual ~CompactNavigationBar();
+
+ // Must be called before anything else, but after adding this view to the
+ // widget.
+ void Init();
+
+ // views::View overrides.
+ virtual gfx::Size GetPreferredSize();
+ virtual void Layout();
+ virtual void Paint(gfx::Canvas* canvas);
+
+ private:
+ // views::ButtonListener implementation.
+ virtual void ButtonPressed(views::Button* sender);
+
+ // AutocompleteController implementation.
+ virtual void OnAutocompleteAccept(const GURL& url,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition,
+ const GURL& alternate_nav_url);
+ virtual void OnChanged();
+ virtual void OnInputInProgress(bool in_progress);
+ virtual SkBitmap GetFavIcon() const;
+ virtual std::wstring GetTitle() const;
+
+ // AutocompletePopupPositioner implementation.
+ virtual gfx::Rect GetPopupBounds() const;
+
+ void AddTabWithURL(const GURL& url, PageTransition::Type transition);
+
+ Browser* browser_;
+
+ bool initialized_;
+
+ views::ImageButton* chrome_button_;
+
+ views::ImageButton* back_button_;
+ views::ImageView* bf_separator_;
+ views::ImageButton* forward_button_;
+
+ scoped_ptr<AutocompleteEditViewGtk> location_entry_;
+ views::NativeViewHost* location_entry_view_;
+
+ DISALLOW_COPY_AND_ASSIGN(CompactNavigationBar);
+};
+
+#endif // CHROME_BROWSER_CHROMEOS_COMPACT_NAVIGATION_BAR_H_