omnibox_view_views.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_UI_VIEWS_OMNIBOX_OMNIBOX_VIEW_VIEWS_H_ 6#define CHROME_BROWSER_UI_VIEWS_OMNIBOX_OMNIBOX_VIEW_VIEWS_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/memory/scoped_ptr.h" 12#include "chrome/browser/ui/omnibox/omnibox_view.h" 13#include "chrome/browser/ui/toolbar/toolbar_model.h" 14#include "ui/base/window_open_disposition.h" 15#include "ui/gfx/range/range.h" 16#include "ui/views/controls/textfield/textfield.h" 17#include "ui/views/controls/textfield/textfield_controller.h" 18 19#if defined(OS_CHROMEOS) 20#include "chromeos/ime/input_method_manager.h" 21#endif 22 23class LocationBarView; 24class OmniboxPopupView; 25class Profile; 26 27namespace ui { 28class OSExchangeData; 29} // namespace ui 30 31// Views-implementation of OmniboxView, based on the gtk implementation. 32class OmniboxViewViews 33 : public views::Textfield, 34 public OmniboxView, 35#if defined(OS_CHROMEOS) 36 public 37 chromeos::input_method::InputMethodManager::CandidateWindowObserver, 38#endif 39 public views::TextfieldController { 40 public: 41 // The internal view class name. 42 static const char kViewClassName[]; 43 44 OmniboxViewViews(OmniboxEditController* controller, 45 Profile* profile, 46 CommandUpdater* command_updater, 47 bool popup_window_mode, 48 LocationBarView* location_bar, 49 const gfx::FontList& font_list, 50 int font_y_offset); 51 virtual ~OmniboxViewViews(); 52 53 // Initialize, create the underlying views, etc; 54 void Init(); 55 56 // Sets the colors of the text view according to the theme. 57 void SetBaseColor(); 58 59 // views::Textfield: 60 virtual const char* GetClassName() const OVERRIDE; 61 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 62 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 63 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 64 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; 65 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 66 virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; 67 virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE; 68 virtual bool SkipDefaultKeyEventProcessing( 69 const ui::KeyEvent& event) OVERRIDE; 70 virtual void OnFocus() OVERRIDE; 71 virtual void OnBlur() OVERRIDE; 72 73 // OmniboxView: 74 virtual void SaveStateToTab(content::WebContents* tab) OVERRIDE; 75 virtual void OnTabChanged(const content::WebContents* web_contents) OVERRIDE; 76 virtual void Update() OVERRIDE; 77 virtual string16 GetText() const OVERRIDE; 78 virtual void SetUserText(const string16& text, 79 const string16& display_text, 80 bool update_popup) OVERRIDE; 81 virtual void SetWindowTextAndCaretPos(const string16& text, 82 size_t caret_pos, 83 bool update_popup, 84 bool notify_text_changed) OVERRIDE; 85 virtual void SetForcedQuery() OVERRIDE; 86 virtual bool IsSelectAll() const OVERRIDE; 87 virtual bool DeleteAtEndPressed() OVERRIDE; 88 virtual void GetSelectionBounds(string16::size_type* start, 89 string16::size_type* end) const OVERRIDE; 90 virtual void SelectAll(bool reversed) OVERRIDE; 91 virtual void RevertAll() OVERRIDE; 92 virtual void UpdatePopup() OVERRIDE; 93 virtual void SetFocus() OVERRIDE; 94 virtual void ApplyCaretVisibility() OVERRIDE; 95 virtual void OnTemporaryTextMaybeChanged( 96 const string16& display_text, 97 bool save_original_selection, 98 bool notify_text_changed) OVERRIDE; 99 virtual bool OnInlineAutocompleteTextMaybeChanged( 100 const string16& display_text, size_t user_text_length) OVERRIDE; 101 virtual void OnRevertTemporaryText() OVERRIDE; 102 virtual void OnBeforePossibleChange() OVERRIDE; 103 virtual bool OnAfterPossibleChange() OVERRIDE; 104 virtual gfx::NativeView GetNativeView() const OVERRIDE; 105 virtual gfx::NativeView GetRelativeWindowForPopup() const OVERRIDE; 106 virtual void SetGrayTextAutocompletion(const string16& input) OVERRIDE; 107 virtual string16 GetGrayTextAutocompletion() const OVERRIDE; 108 virtual int TextWidth() const OVERRIDE; 109 virtual bool IsImeComposing() const OVERRIDE; 110 virtual bool IsImeShowingPopup() const OVERRIDE; 111 virtual int GetMaxEditWidth(int entry_width) const OVERRIDE; 112 virtual views::View* AddToView(views::View* parent) OVERRIDE; 113 virtual int OnPerformDrop(const ui::DropTargetEvent& event) OVERRIDE; 114 115 // views::TextfieldController: 116 virtual void ContentsChanged(views::Textfield* sender, 117 const string16& new_contents) OVERRIDE; 118 virtual bool HandleKeyEvent(views::Textfield* sender, 119 const ui::KeyEvent& key_event) OVERRIDE; 120 virtual void OnBeforeUserAction(views::Textfield* sender) OVERRIDE; 121 virtual void OnAfterUserAction(views::Textfield* sender) OVERRIDE; 122 virtual void OnAfterCutOrCopy() OVERRIDE; 123 virtual void OnWriteDragData(ui::OSExchangeData* data) OVERRIDE; 124 virtual void OnGetDragOperationsForTextfield(int* drag_operations) OVERRIDE; 125 virtual void AppendDropFormats( 126 int* formats, 127 std::set<ui::OSExchangeData::CustomFormat>* custom_formats) OVERRIDE; 128 virtual int OnDrop(const ui::OSExchangeData& data) OVERRIDE; 129 virtual void UpdateContextMenu(ui::SimpleMenuModel* menu_contents) OVERRIDE; 130 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 131 virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE; 132 virtual string16 GetLabelForCommandId(int command_id) const OVERRIDE; 133 virtual bool HandlesCommand(int command_id) const OVERRIDE; 134 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 135 136#if defined(OS_CHROMEOS) 137 // chromeos::input_method::InputMethodManager::CandidateWindowObserver: 138 virtual void CandidateWindowOpened( 139 chromeos::input_method::InputMethodManager* manager) OVERRIDE; 140 virtual void CandidateWindowClosed( 141 chromeos::input_method::InputMethodManager* manager) OVERRIDE; 142#endif 143 144 private: 145 // Return the number of characers in the current buffer. 146 virtual int GetOmniboxTextLength() const OVERRIDE; 147 148 // Try to parse the current text as a URL and colorize the components. 149 virtual void EmphasizeURLComponents() OVERRIDE; 150 151 // Update the field with |text| and set the selection. 152 void SetTextAndSelectedRange(const string16& text, 153 const gfx::Range& range); 154 155 // Returns the selected text. 156 string16 GetSelectedText() const; 157 158 // Paste text from the clipboard into the omnibox. 159 // Textfields implementation of Paste() pastes the contents of the clipboard 160 // as is. We want to strip whitespace and other things (see GetClipboardText() 161 // for details). 162 // It is assumed this is invoked after a call to OnBeforePossibleChange() and 163 // that after invoking this OnAfterPossibleChange() is invoked. 164 void OnPaste(); 165 166 // Handle keyword hint tab-to-search and tabbing through dropdown results. 167 bool HandleEarlyTabActions(const ui::KeyEvent& event); 168 169 // When true, the location bar view is read only and also is has a slightly 170 // different presentation (smaller font size). This is used for popups. 171 bool popup_window_mode_; 172 173 scoped_ptr<OmniboxPopupView> popup_view_; 174 175 ToolbarModel::SecurityLevel security_level_; 176 177 // Selection persisted across temporary text changes, like popup suggestions. 178 gfx::Range saved_temporary_selection_; 179 180 // Holds the user's selection across focus changes. There is only a saved 181 // selection if this range IsValid(). 182 gfx::Range saved_selection_for_focus_change_; 183 184 // Tracking state before and after a possible change. 185 string16 text_before_change_; 186 gfx::Range sel_before_change_; 187 bool ime_composing_before_change_; 188 189 // Was the delete key pressed with an empty selection at the end of the edit? 190 bool delete_at_end_pressed_; 191 LocationBarView* location_bar_view_; 192 193 // True if the IME candidate window is open. When this is true, we want to 194 // avoid showing the popup. So far, the candidate window is detected only 195 // on Chrome OS. 196 bool ime_candidate_window_open_; 197 198 // Should we select all the text when we see the mouse button get released? 199 // We select in response to a click that focuses the omnibox, but we defer 200 // until release, setting this variable back to false if we saw a drag, to 201 // allow the user to select just a portion of the text. 202 bool select_all_on_mouse_release_; 203 204 // Indicates if we want to select all text in the omnibox when we get a 205 // GESTURE_TAP. We want to select all only when the textfield is not in focus 206 // and gets a tap. So we use this variable to remember focus state before tap. 207 bool select_all_on_gesture_tap_; 208 209 DISALLOW_COPY_AND_ASSIGN(OmniboxViewViews); 210}; 211 212#endif // CHROME_BROWSER_UI_VIEWS_OMNIBOX_OMNIBOX_VIEW_VIEWS_H_ 213