// Copyright (c) 2011 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_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_ #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_ #pragma once #include <string> #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/autocomplete/autocomplete_edit_view.h" #include "chrome/browser/ui/toolbar/toolbar_model.h" #include "content/common/notification_observer.h" #include "content/common/page_transition_types.h" #include "ui/base/range/range.h" #include "views/controls/textfield/textfield_controller.h" #include "views/view.h" #include "webkit/glue/window_open_disposition.h" class AutocompleteEditController; class AutocompleteEditModel; class AutocompletePopupView; class Profile; class TabContents; // Views-implementation of AutocompleteEditView. This is based on // gtk implementation. The following features are not yet supported. // // IME support. // LTR support. // Selection behavior. // Cut,copy and paste behavior. // Drag and drop behavior. // URL styles (strikestrough insecure scheme, emphasize host). // Custom context menu for omnibox. // Instant. class AutocompleteEditViewViews : public views::View, public AutocompleteEditView, public NotificationObserver, public views::TextfieldController { public: AutocompleteEditViewViews(AutocompleteEditController* controller, ToolbarModel* toolbar_model, Profile* profile, CommandUpdater* command_updater, bool popup_window_mode, const views::View* location_bar); virtual ~AutocompleteEditViewViews(); // Initialize, create the underlying views, etc; void Init(); // Sets the colors of the text view according to the theme. void SetBaseColor(); // Called after key even is handled either by HandleKeyEvent or by Textfield. bool HandleAfterKeyEvent(const views::KeyEvent& event, bool handled); // Called when KeyRelease event is generated on textfield. bool HandleKeyReleaseEvent(const views::KeyEvent& event); // Called when Focus is set/unset on textfield. void HandleFocusIn(); void HandleFocusOut(); // Implements views::View virtual void Layout() OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; // Implement the AutocompleteEditView interface. virtual AutocompleteEditModel* model() OVERRIDE; virtual const AutocompleteEditModel* model() const OVERRIDE; virtual void SaveStateToTab(TabContents* tab) OVERRIDE; virtual void Update(const TabContents* tab_for_state_restoring) OVERRIDE; virtual void OpenURL(const GURL& url, WindowOpenDisposition disposition, PageTransition::Type transition, const GURL& alternate_nav_url, size_t selected_line, const string16& keyword) OVERRIDE; virtual string16 GetText() const OVERRIDE; virtual bool IsEditingOrEmpty() const OVERRIDE; virtual int GetIcon() const OVERRIDE; virtual void SetUserText(const string16& text) OVERRIDE; virtual void SetUserText(const string16& text, const string16& display_text, bool update_popup) OVERRIDE; virtual void SetWindowTextAndCaretPos(const string16& text, size_t caret_pos) OVERRIDE; virtual void SetForcedQuery() OVERRIDE; virtual bool IsSelectAll() OVERRIDE; virtual bool DeleteAtEndPressed() OVERRIDE; virtual void GetSelectionBounds(string16::size_type* start, string16::size_type* end) OVERRIDE; virtual void SelectAll(bool reversed) OVERRIDE; virtual void RevertAll() OVERRIDE; virtual void UpdatePopup() OVERRIDE; virtual void ClosePopup() OVERRIDE; virtual void SetFocus() OVERRIDE; virtual void OnTemporaryTextMaybeChanged( const string16& display_text, bool save_original_selection) OVERRIDE; virtual bool OnInlineAutocompleteTextMaybeChanged( const string16& display_text, size_t user_text_length) OVERRIDE; virtual void OnRevertTemporaryText() OVERRIDE; virtual void OnBeforePossibleChange() OVERRIDE; virtual bool OnAfterPossibleChange() OVERRIDE; virtual gfx::NativeView GetNativeView() const OVERRIDE; virtual CommandUpdater* GetCommandUpdater() OVERRIDE; virtual void SetInstantSuggestion(const string16& input, bool animate_to_complete) OVERRIDE; virtual string16 GetInstantSuggestion() const OVERRIDE; virtual int TextWidth() const OVERRIDE; virtual bool IsImeComposing() const OVERRIDE; virtual views::View* AddToView(views::View* parent) OVERRIDE; virtual int OnPerformDrop(const views::DropTargetEvent& event) OVERRIDE; // NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) OVERRIDE; // views::TextfieldController: virtual void ContentsChanged(views::Textfield* sender, const string16& new_contents) OVERRIDE; virtual bool HandleKeyEvent(views::Textfield* sender, const views::KeyEvent& key_event) OVERRIDE; virtual void OnBeforeUserAction(views::Textfield* sender) OVERRIDE; virtual void OnAfterUserAction(views::Textfield* sender) OVERRIDE; private: // Return the number of characers in the current buffer. size_t GetTextLength() const; // Try to parse the current text as a URL and colorize the components. void EmphasizeURLComponents(); // Internally invoked whenever the text changes in some way. void TextChanged(); // Update the field with |text| and set the selection. void SetTextAndSelectedRange(const string16& text, const ui::Range& range); // Returns the selected text. string16 GetSelectedText() const; // Selects the text given by |caret| and |end|. void SelectRange(size_t caret, size_t end); AutocompletePopupView* CreatePopupView(Profile* profile, const View* location_bar); views::Textfield* textfield_; scoped_ptr<AutocompleteEditModel> model_; scoped_ptr<AutocompletePopupView> popup_view_; AutocompleteEditController* controller_; ToolbarModel* toolbar_model_; // The object that handles additional command functionality exposed on the // edit, such as invoking the keyword editor. CommandUpdater* command_updater_; // When true, the location bar view is read only and also is has a slightly // different presentation (smaller font size). This is used for popups. bool popup_window_mode_; ToolbarModel::SecurityLevel security_level_; // Selection at the point where the user started using the // arrows to move around in the popup. ui::Range saved_temporary_selection_; // Tracking state before and after a possible change. string16 text_before_change_; ui::Range sel_before_change_; bool ime_composing_before_change_; // Was the delete key pressed with an empty selection at the end of the edit? bool delete_at_end_pressed_; DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewViews); }; #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_