// Copyright (c) 2010 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. // This file defines the interface class AutocompleteEditView. Each toolkit // will implement the edit view differently, so that code is inherently // platform specific. However, the AutocompleteEditModel needs to do some // communication with the view. Since the model is shared between platforms, // we need to define an interface that all view implementations will share. #ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_H_ #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_H_ #pragma once #include <string> #include "base/string16.h" #include "content/common/page_transition_types.h" #include "ui/gfx/native_widget_types.h" #include "webkit/glue/window_open_disposition.h" class AutocompleteEditModel; class CommandUpdater; class GURL; class TabContents; #if defined(TOOLKIT_VIEWS) namespace views { class DropTargetEvent; class View; } // namespace views #endif class AutocompleteEditView { public: // Used by the automation system for getting at the model from the view. virtual AutocompleteEditModel* model() = 0; virtual const AutocompleteEditModel* model() const = 0; // For use when switching tabs, this saves the current state onto the tab so // that it can be restored during a later call to Update(). virtual void SaveStateToTab(TabContents* tab) = 0; // Called when any LocationBarView state changes. If // |tab_for_state_restoring| is non-NULL, it points to a TabContents whose // state we should restore. virtual void Update(const TabContents* tab_for_state_restoring) = 0; // Asks the browser to load the specified URL, which is assumed to be one of // the popup entries, using the supplied disposition and transition type. // |alternate_nav_url|, if non-empty, contains the alternate navigation URL // for |url|. See comments on AutocompleteResult::GetAlternateNavURL(). // // |selected_line| is passed to SendOpenNotification(); see comments there. // // If the URL was expanded from a keyword, |keyword| is that keyword. // // This may close the popup. virtual void OpenURL(const GURL& url, WindowOpenDisposition disposition, PageTransition::Type transition, const GURL& alternate_nav_url, size_t selected_line, const string16& keyword) = 0; // Returns the current text of the edit control, which could be the // "temporary" text set by the popup, the "permanent" text set by the // browser, or just whatever the user has currently typed. virtual string16 GetText() const = 0; // |true| if the user is in the process of editing the field, or if // the field is empty. virtual bool IsEditingOrEmpty() const = 0; // Returns the resource ID of the icon to show for the current text. virtual int GetIcon() const = 0; // The user text is the text the user has manually keyed in. When present, // this is shown in preference to the permanent text; hitting escape will // revert to the permanent text. virtual void SetUserText(const string16& text) = 0; virtual void SetUserText(const string16& text, const string16& display_text, bool update_popup) = 0; // Sets the window text and the caret position. virtual void SetWindowTextAndCaretPos(const string16& text, size_t caret_pos) = 0; // Sets the edit to forced query mode. Practically speaking, this means that // if the edit is not in forced query mode, its text is set to "?" with the // cursor at the end, and if the edit is in forced query mode (its first // non-whitespace character is '?'), the text after the '?' is selected. // // In the future we should display the search engine UI for the default engine // rather than '?'. virtual void SetForcedQuery() = 0; // Returns true if all text is selected or there is no text at all. virtual bool IsSelectAll() = 0; // Returns true if the user deleted the suggested text. virtual bool DeleteAtEndPressed() = 0; // Fills |start| and |end| with the indexes of the current selection's bounds. // It is not guaranteed that |*start < *end|, as the selection can be // directed. If there is no selection, |start| and |end| will both be equal // to the current cursor position. virtual void GetSelectionBounds(string16::size_type* start, string16::size_type* end) = 0; // Selects all the text in the edit. Use this in place of SetSelAll() to // avoid selecting the "phantom newline" at the end of the edit. virtual void SelectAll(bool reversed) = 0; // Reverts the edit and popup back to their unedited state (permanent text // showing, popup closed, no user input in progress). virtual void RevertAll() = 0; // Updates the autocomplete popup and other state after the text has been // changed by the user. virtual void UpdatePopup() = 0; // Closes the autocomplete popup, if it's open. virtual void ClosePopup() = 0; // Sets the focus to the autocomplete view. virtual void SetFocus() = 0; // Called when the temporary text in the model may have changed. // |display_text| is the new text to show; |save_original_selection| is true // when there wasn't previously a temporary text and thus we need to save off // the user's existing selection. virtual void OnTemporaryTextMaybeChanged(const string16& display_text, bool save_original_selection) = 0; // Called when the inline autocomplete text in the model may have changed. // |display_text| is the new text to show; |user_text_length| is the length of // the user input portion of that (so, up to but not including the inline // autocompletion). Returns whether the display text actually changed. virtual bool OnInlineAutocompleteTextMaybeChanged( const string16& display_text, size_t user_text_length) = 0; // Called when the temporary text has been reverted by the user. This will // reset the user's original selection. virtual void OnRevertTemporaryText() = 0; // Every piece of code that can change the edit should call these functions // before and after the change. These functions determine if anything // meaningful changed, and do any necessary updating and notification. virtual void OnBeforePossibleChange() = 0; // OnAfterPossibleChange() returns true if there was a change that caused it // to call UpdatePopup(). virtual bool OnAfterPossibleChange() = 0; // Returns the gfx::NativeView of the edit view. virtual gfx::NativeView GetNativeView() const = 0; // Returns the command updater for this view. virtual CommandUpdater* GetCommandUpdater() = 0; // Shows the instant suggestion text. If |animate_to_complete| is true the // view should start an animation that when done commits the text. virtual void SetInstantSuggestion(const string16& input, bool animate_to_complete) = 0; // Returns the current instant suggestion text. virtual string16 GetInstantSuggestion() const = 0; // Returns the width in pixels needed to display the current text. The // returned value includes margins. virtual int TextWidth() const = 0; // Returns true if the user is composing something in an IME. virtual bool IsImeComposing() const = 0; #if defined(TOOLKIT_VIEWS) // Adds the autocomplete edit view to view hierarchy and // returns the views::View of the edit view. virtual views::View* AddToView(views::View* parent) = 0; // Performs the drop of a drag and drop operation on the view. virtual int OnPerformDrop(const views::DropTargetEvent& event) = 0; #endif virtual ~AutocompleteEditView() {} }; #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_H_