| // 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_ |