OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/controls/textfield/textfield_model.h" | 5 #include "ui/views/controls/textfield/textfield_model.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 at /* old cursor */, | 153 at /* old cursor */, |
154 base::string16(), | 154 base::string16(), |
155 at, | 155 at, |
156 false /* N/A */, | 156 false /* N/A */, |
157 at + new_text.length() /* new cursor */, | 157 at + new_text.length() /* new cursor */, |
158 new_text, | 158 new_text, |
159 at) { | 159 at) { |
160 } | 160 } |
161 | 161 |
162 // Edit implementation. | 162 // Edit implementation. |
163 virtual bool DoMerge(const Edit* edit) OVERRIDE { | 163 virtual bool DoMerge(const Edit* edit) override { |
164 if (edit->type() != INSERT_EDIT || new_text_end() != edit->new_text_start_) | 164 if (edit->type() != INSERT_EDIT || new_text_end() != edit->new_text_start_) |
165 return false; | 165 return false; |
166 // If continuous edit, merge it. | 166 // If continuous edit, merge it. |
167 // TODO(oshima): gtk splits edits between whitespace. Find out what | 167 // TODO(oshima): gtk splits edits between whitespace. Find out what |
168 // we want to here and implement if necessary. | 168 // we want to here and implement if necessary. |
169 new_text_ += edit->new_text_; | 169 new_text_ += edit->new_text_; |
170 new_cursor_pos_ = edit->new_cursor_pos_; | 170 new_cursor_pos_ = edit->new_cursor_pos_; |
171 return true; | 171 return true; |
172 } | 172 } |
173 }; | 173 }; |
(...skipping 12 matching lines...) Expand all Loading... |
186 old_cursor_pos, | 186 old_cursor_pos, |
187 old_text, | 187 old_text, |
188 old_text_start, | 188 old_text_start, |
189 backward, | 189 backward, |
190 new_cursor_pos, | 190 new_cursor_pos, |
191 new_text, | 191 new_text, |
192 new_text_start) { | 192 new_text_start) { |
193 } | 193 } |
194 | 194 |
195 // Edit implementation. | 195 // Edit implementation. |
196 virtual bool DoMerge(const Edit* edit) OVERRIDE { | 196 virtual bool DoMerge(const Edit* edit) override { |
197 if (edit->type() == DELETE_EDIT || | 197 if (edit->type() == DELETE_EDIT || |
198 new_text_end() != edit->old_text_start_ || | 198 new_text_end() != edit->old_text_start_ || |
199 edit->old_text_start_ != edit->new_text_start_) | 199 edit->old_text_start_ != edit->new_text_start_) |
200 return false; | 200 return false; |
201 old_text_ += edit->old_text_; | 201 old_text_ += edit->old_text_; |
202 new_text_ += edit->new_text_; | 202 new_text_ += edit->new_text_; |
203 new_cursor_pos_ = edit->new_cursor_pos_; | 203 new_cursor_pos_ = edit->new_cursor_pos_; |
204 return true; | 204 return true; |
205 } | 205 } |
206 }; | 206 }; |
207 | 207 |
208 class DeleteEdit : public Edit { | 208 class DeleteEdit : public Edit { |
209 public: | 209 public: |
210 DeleteEdit(bool mergeable, | 210 DeleteEdit(bool mergeable, |
211 const base::string16& text, | 211 const base::string16& text, |
212 size_t text_start, | 212 size_t text_start, |
213 bool backward) | 213 bool backward) |
214 : Edit(DELETE_EDIT, | 214 : Edit(DELETE_EDIT, |
215 mergeable ? MERGEABLE : DO_NOT_MERGE, | 215 mergeable ? MERGEABLE : DO_NOT_MERGE, |
216 (backward ? text_start + text.length() : text_start), | 216 (backward ? text_start + text.length() : text_start), |
217 text, | 217 text, |
218 text_start, | 218 text_start, |
219 backward, | 219 backward, |
220 text_start, | 220 text_start, |
221 base::string16(), | 221 base::string16(), |
222 text_start) { | 222 text_start) { |
223 } | 223 } |
224 | 224 |
225 // Edit implementation. | 225 // Edit implementation. |
226 virtual bool DoMerge(const Edit* edit) OVERRIDE { | 226 virtual bool DoMerge(const Edit* edit) override { |
227 if (edit->type() != DELETE_EDIT) | 227 if (edit->type() != DELETE_EDIT) |
228 return false; | 228 return false; |
229 | 229 |
230 if (delete_backward_) { | 230 if (delete_backward_) { |
231 // backspace can be merged only with backspace at the same position. | 231 // backspace can be merged only with backspace at the same position. |
232 if (!edit->delete_backward_ || old_text_start_ != edit->old_text_end()) | 232 if (!edit->delete_backward_ || old_text_start_ != edit->old_text_end()) |
233 return false; | 233 return false; |
234 old_text_start_ = edit->old_text_start_; | 234 old_text_start_ = edit->old_text_start_; |
235 old_text_ = edit->old_text_ + old_text_; | 235 old_text_ = edit->old_text_ + old_text_; |
236 new_cursor_pos_ = edit->new_cursor_pos_; | 236 new_cursor_pos_ = edit->new_cursor_pos_; |
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
760 ClearComposition(); | 760 ClearComposition(); |
761 if (delete_from != delete_to) | 761 if (delete_from != delete_to) |
762 render_text_->SetText(old_text.erase(delete_from, delete_to - delete_from)); | 762 render_text_->SetText(old_text.erase(delete_from, delete_to - delete_from)); |
763 if (!new_text.empty()) | 763 if (!new_text.empty()) |
764 render_text_->SetText(old_text.insert(new_text_insert_at, new_text)); | 764 render_text_->SetText(old_text.insert(new_text_insert_at, new_text)); |
765 render_text_->SetCursorPosition(new_cursor_pos); | 765 render_text_->SetCursorPosition(new_cursor_pos); |
766 // TODO(oshima): Select text that was just undone, like Mac (but not GTK). | 766 // TODO(oshima): Select text that was just undone, like Mac (but not GTK). |
767 } | 767 } |
768 | 768 |
769 } // namespace views | 769 } // namespace views |
OLD | NEW |