blob: 81053024a3a54f193cd4dedf63d16bec73894a43 [file] [log] [blame]
// 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_GTK_LOCATION_BAR_VIEW_GTK_H_
#define CHROME_BROWSER_GTK_LOCATION_BAR_VIEW_GTK_H_
#include <gtk/gtk.h>
#include <string>
#include "base/basictypes.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/autocomplete/autocomplete_edit.h"
#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
#include "chrome/browser/location_bar.h"
#include "chrome/common/notification_observer.h"
#include "chrome/common/notification_registrar.h"
#include "chrome/common/owned_widget_gtk.h"
#include "chrome/common/page_transition_types.h"
#include "webkit/glue/window_open_disposition.h"
class AutocompleteEditViewGtk;
class AutocompletePopupPositioner;
class CommandUpdater;
class GtkThemeProvider;
class Profile;
class SkBitmap;
class TabContents;
class ToolbarModel;
class LocationBarViewGtk : public AutocompleteEditController,
public LocationBar,
public LocationBarTesting,
public NotificationObserver {
public:
LocationBarViewGtk(CommandUpdater* command_updater,
ToolbarModel* toolbar_model,
AutocompletePopupPositioner* popup_positioner);
virtual ~LocationBarViewGtk();
void Init(bool popup_window_mode);
void SetProfile(Profile* profile);
// Returns the widget the caller should host. You must call Init() first.
GtkWidget* widget() { return hbox_.get(); }
// Updates the location bar. We also reset the bar's permanent text and
// security style, and, if |tab_for_state_restoring| is non-NULL, also
// restore saved state that the tab holds.
void Update(const TabContents* tab_for_state_restoring);
// Implement the AutocompleteEditController interface.
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;
// Implement the LocationBar interface.
virtual void ShowFirstRunBubble(bool use_OEM_bubble);
virtual std::wstring GetInputString() const;
virtual WindowOpenDisposition GetWindowOpenDisposition() const;
virtual PageTransition::Type GetPageTransition() const;
virtual void AcceptInput();
virtual void AcceptInputWithDisposition(WindowOpenDisposition);
virtual void FocusLocation();
virtual void FocusSearch();
virtual void UpdatePageActions();
virtual void SaveStateToContents(TabContents* contents);
virtual void Revert();
virtual AutocompleteEditView* location_entry() {
return location_entry_.get();
}
virtual LocationBarTesting* GetLocationBarForTesting() { return this; }
// Implement the LocationBarTesting interface.
virtual int PageActionVisibleCount();
// Implement the NotificationObserver interface.
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details);
// Translation between a security level and the background color. Both the
// location bar and edit have to manage and match the background color.
static const GdkColor kBackgroundColorByLevel[3];
private:
static gboolean HandleExposeThunk(GtkWidget* widget, GdkEventExpose* event,
gpointer userdata) {
return reinterpret_cast<LocationBarViewGtk*>(userdata)->
HandleExpose(widget, event);
}
gboolean HandleExpose(GtkWidget* widget, GdkEventExpose* event);
static gboolean OnSecurityIconPressed(GtkWidget* sender,
GdkEventButton* event,
LocationBarViewGtk* location_bar);
// Set the SSL icon we should be showing.
void SetSecurityIcon(ToolbarModel::Icon icon);
// Sets the text that should be displayed in the info label and its associated
// tooltip text. Call with an empty string if the info label should be
// hidden.
void SetInfoText();
// Set the keyword text for the Search BLAH: keyword box.
void SetKeywordLabel(const std::wstring& keyword);
// Set the keyword text for the "Press tab to search BLAH" hint box.
void SetKeywordHintLabel(const std::wstring& keyword);
void ShowFirstRunBubbleInternal(bool use_OEM_bubble);
// The outermost widget we want to be hosted.
OwnedWidgetGtk hbox_;
// SSL icons.
GtkWidget* security_icon_align_;
GtkWidget* security_lock_icon_image_;
GtkWidget* security_warning_icon_image_;
// Toolbar info text (EV cert info).
GtkWidget* info_label_align_;
GtkWidget* info_label_;
// Area on the left shown when in tab to search mode.
GtkWidget* tab_to_search_;
GtkWidget* tab_to_search_border_;
GtkWidget* tab_to_search_box_;
GtkWidget* tab_to_search_label_;
// Hint to user that they can tab-to-search by hitting tab.
GtkWidget* tab_to_search_hint_;
GtkWidget* tab_to_search_hint_leading_label_;
GtkWidget* tab_to_search_hint_icon_;
GtkWidget* tab_to_search_hint_trailing_label_;
scoped_ptr<AutocompleteEditViewGtk> location_entry_;
Profile* profile_;
CommandUpdater* command_updater_;
ToolbarModel* toolbar_model_;
// We need to hold on to this just to it pass to the edit.
AutocompletePopupPositioner* popup_positioner_;
// When we get an OnAutocompleteAccept notification from the autocomplete
// edit, we save the input string so we can give it back to the browser on
// the LocationBar interface via GetInputString().
std::wstring location_input_;
// The user's desired disposition for how their input should be opened.
WindowOpenDisposition disposition_;
// The transition type to use for the navigation.
PageTransition::Type transition_;
// Used schedule a task for the first run info bubble.
ScopedRunnableMethodFactory<LocationBarViewGtk> first_run_bubble_;
// When true, the location bar view is read only and also is has a slightly
// different presentation (font size / color). This is used for popups.
bool popup_window_mode_;
// Provides colors and rendering mode.
GtkThemeProvider* theme_provider_;
NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(LocationBarViewGtk);
};
#endif // CHROME_BROWSER_GTK_LOCATION_BAR_VIEW_GTK_H_