Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: chrome/browser/autocomplete/autocomplete_edit_view_views.h

Issue 6245003: Views-implementation of AutocompleteEditView (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_
6 #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_
7 #pragma once
8
9 #include <string>
10
11 #include "base/basictypes.h"
12 #include "base/scoped_ptr.h"
13 #include "chrome/browser/autocomplete/autocomplete_edit_view.h"
14 #include "chrome/browser/ui/toolbar/toolbar_model.h"
15 #include "chrome/common/notification_observer.h"
16 #include "chrome/common/notification_registrar.h"
17 #include "chrome/common/page_transition_types.h"
18 #include "views/controls/textfield/textfield.h"
19 #include "views/view.h"
20 #include "webkit/glue/window_open_disposition.h"
21
22 class AutocompleteEditController;
23 class AutocompleteEditModel;
24 class AutocompletePopupView;
25 class Profile;
26 class TabContents;
27
28 // Views-implementation of AutocompleteEditView. This is based on
29 // gtk implementation. The following features are not yet supported.
30 //
31 // IME supoprt.
32 // LTR support.
33 // Selection behavior.
34 // Cut,copy and paste behavior.
35 // URL styles (strikestrough insecure scheme, emphasize host).
36 // Custom context menu for omnibox.
37 class AutocompleteEditViewViews : public views::View,
38 public AutocompleteEditView,
39 public NotificationObserver,
40 public views::Textfield::Controller {
41 public:
42 AutocompleteEditViewViews(AutocompleteEditController* controller,
43 ToolbarModel* toolbar_model,
44 Profile* profile,
45 CommandUpdater* command_updater,
46 bool popup_window_mode,
47 const views::View* location_bar);
48 virtual ~AutocompleteEditViewViews();
49
50 // Initialize, create the underlying views, etc;
Peter Kasting 2011/01/20 19:44:37 Nit: ; -> .
51 void Init();
52
53 // Sets the colors of the text view according to the theme.
54 void SetBaseColor();
55
56 // Called after key even is handled either by HandleKeyEvent or by Textfield.
Peter Kasting 2011/01/20 19:44:37 Nit: even -> event
57 bool HandleAfterKeyEvent(const views::KeyEvent& event, bool handled);
58
59 // Called when KeyRelease event is generated on textfield.
60 bool HandleKeyReleaseEvent(const views::KeyEvent& event);
61
62 // Called when Focus is set/unset on textfield.
63 void HandleFocusIn();
64 void HandleFocusOut();
65
66 // Implements views::View
Peter Kasting 2011/01/20 19:44:37 Nit: The comments that demarcate the different par
67 virtual bool OnMousePressed(const views::MouseEvent& event);
68
69 // Implement the AutocompleteEditView interface.
70 virtual AutocompleteEditModel* model();
71 virtual const AutocompleteEditModel* model() const;
72
Peter Kasting 2011/01/20 19:44:37 Nit: Unnecessary blank lines
73 virtual void SaveStateToTab(TabContents* tab);
74
75 virtual void Update(const TabContents* tab_for_state_restoring);
76
77 virtual void OpenURL(const GURL& url,
78 WindowOpenDisposition disposition,
79 PageTransition::Type transition,
80 const GURL& alternate_nav_url,
81 size_t selected_line,
82 const std::wstring& keyword);
83
84 virtual std::wstring GetText() const;
85
86 virtual bool IsEditingOrEmpty() const;
87 virtual int GetIcon() const;
88 virtual void SetUserText(const std::wstring& text);
89 virtual void SetUserText(const std::wstring& text,
90 const std::wstring& display_text,
91 bool update_popup);
92 virtual void SetWindowTextAndCaretPos(const std::wstring& text,
93 size_t caret_pos);
94 virtual void SetForcedQuery();
95 virtual bool IsSelectAll();
96 virtual bool DeleteAtEndPressed();
97 virtual void GetSelectionBounds(std::wstring::size_type* start,
98 std::wstring::size_type* end);
99 virtual void SelectAll(bool reversed);
100 virtual void RevertAll();
101 virtual void UpdatePopup();
102 virtual void ClosePopup();
103 virtual void SetFocus();
104 virtual void OnTemporaryTextMaybeChanged(const std::wstring& display_text,
105 bool save_original_selection);
106 virtual bool OnInlineAutocompleteTextMaybeChanged(
107 const std::wstring& display_text, size_t user_text_length);
108 virtual void OnRevertTemporaryText();
109 virtual void OnBeforePossibleChange();
110 virtual bool OnAfterPossibleChange();
111 virtual gfx::NativeView GetNativeView() const;
112 virtual CommandUpdater* GetCommandUpdater();
113 virtual views::View* AddToView(views::View* parent);
114 virtual int TextWidth() const;
115 virtual bool IsImeComposing() const;
116 virtual bool CommitInstantSuggestion(const std::wstring& typed_text,
117 const std::wstring& suggested_text);
118 virtual void SetInstantSuggestion(const string16& input);
119
120 // Overridden from NotificationObserver:
121 virtual void Observe(NotificationType type,
122 const NotificationSource& source,
123 const NotificationDetails& details);
124
125 // Overridden from Textfield::Controller
126 virtual void ContentsChanged(views::Textfield* sender,
127 const string16& new_contents);
128 virtual bool HandleKeyEvent(views::Textfield* sender,
129 const views::KeyEvent& key_event);
130
131 private:
132 // Return the number of characers in the current buffer.
133 size_t GetTextLength() const;
134
135 // Try to parse the current text as a URL and colorize the components.
136 void EmphasizeURLComponents();
137
138 // Internally invoked whenever the text changes in some way.
139 void TextChanged();
140
141 // Update the field with |text| and set the selection.
142 void SetTextAndSelectedRange(const std::wstring& text,
143 const views::TextRange& range);
144
145 // Returns the selected text.
146 string16 GetSelectedText() const;
147
148 // Selects the text given by |caret| and |end|.
149 void SelectRange(size_t caret, size_t end);
150
151 views::Textfield* textfield_;
152
153 scoped_ptr<AutocompleteEditModel> model_;
154 scoped_ptr<AutocompletePopupView> popup_view_;
155 AutocompleteEditController* controller_;
156 ToolbarModel* toolbar_model_;
157
158 // The object that handles additional command functionality exposed on the
159 // edit, such as invoking the keyword editor.
160 CommandUpdater* command_updater_;
161
162 // When true, the location bar view is read only and also is has a slightly
163 // different presentation (smaller font size). This is used for popups.
164 bool popup_window_mode_;
165
166 ToolbarModel::SecurityLevel security_level_;
167
168 // Selection at the point where the user started using the
169 // arrows to move around in the popup.
170 views::TextRange saved_temporary_selection_;
171
172 // Tracking state before and after a possible change.
173 std::wstring text_before_change_;
174 views::TextRange sel_before_change_;
175
176 // TODO(oshima): following flags are copied from gtk implementation.
177 // It should be possible to refactor this class to simplify flags and
178 // logic. I'll work on this refactoring once all features are completed.
179
180 // Indicates whether the IME changed the text. It's possible for the IME to
181 // handle a key event but not change the text contents (e.g., when pressing
182 // shift+del with no selection).
183 bool text_changed_;
184
185 // Was delete pressed?
186 bool delete_was_pressed_;
187
188 // Was the delete key pressed with an empty selection at the end of the edit?
189 bool delete_at_end_pressed_;
190
191 // Indicates if we are handling a key press event.
192 bool handling_key_press_;
193
194 // Indicates if omnibox's content maybe changed by a key press event, so that
195 // we need to call OnAfterPossibleChange() after handling the event.
196 // This flag should be set for changes directly caused by a key press event,
197 // including changes to content text, selection range and preedit string.
198 // Changes caused by function calls like SetUserText() should not affect this
199 // flag.
200 bool content_maybe_changed_by_key_press_;
201
202 DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewViews);
203 };
204
205 #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_VIEWS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698