MyGUI  3.4.0
MyGUI_EditBox.cpp
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #include "MyGUI_Precompiled.h"
8 #include "MyGUI_EditBox.h"
9 #include "MyGUI_Gui.h"
10 #include "MyGUI_ResourceSkin.h"
11 #include "MyGUI_SkinManager.h"
12 #include "MyGUI_InputManager.h"
13 #include "MyGUI_ClipboardManager.h"
14 #include "MyGUI_PointerManager.h"
15 #include "MyGUI_ISubWidgetText.h"
16 #include "MyGUI_ScrollBar.h"
17 
18 #include <cctype>
19 
20 namespace MyGUI
21 {
22 
23  const float EDIT_CURSOR_TIMER = 0.7f;
24  const float EDIT_ACTION_MOUSE_TIMER = 0.05f;
25  const int EDIT_CURSOR_MAX_POSITION = 100000;
26  const int EDIT_CURSOR_MIN_POSITION = -100000;
27  const size_t EDIT_MAX_UNDO = 128;
28  const size_t EDIT_DEFAULT_MAX_TEXT_LENGTH = 2048;
29  const float EDIT_OFFSET_HORZ_CURSOR = 10.0f; // дополнительное смещение для курсора
30  const int EDIT_ACTION_MOUSE_ZONE = 1500; // область для восприятия мыши за пределом эдита
31  const std::string EDIT_CLIPBOARD_TYPE_TEXT = "Text";
32  const int EDIT_MOUSE_WHEEL = 50; // область для восприятия мыши за пределом эдита
33 
35  mIsPressed(false),
36  mIsFocus(false),
37  mCursorActive(false),
38  mCursorTimer(0),
39  mActionMouseTimer(0),
40  mCursorPosition(0),
41  mTextLength(0),
42  mStartSelect(ITEM_NONE),
43  mEndSelect(0),
44  mMouseLeftPressed(false),
45  mModeReadOnly(false),
46  mModePassword(false),
47  mModeMultiline(false),
48  mModeStatic(false),
49  mModeWordWrap(false),
50  mTabPrinting(false),
51  mCharPassword('*'),
52  mOverflowToTheLeft(false),
53  mMaxTextLength(EDIT_DEFAULT_MAX_TEXT_LENGTH),
54  mClientText(nullptr)
55  {
57  }
58 
60  {
62 
64 
65  // FIXME нам нужен фокус клавы
66  setNeedKeyFocus(true);
67 
69  if (getClientWidget() != nullptr)
70  {
78  }
79 
81  assignWidget(mVScroll, "VScroll");
82  if (mVScroll != nullptr)
83  {
85  }
86 
88  assignWidget(mHScroll, "HScroll");
89  if (mHScroll != nullptr)
90  {
92  }
93 
95  if (getClientWidget() != nullptr)
96  {
98  if (text)
99  mClientText = text;
100  }
101 
103 
104  // первоначальная инициализация курсора
105  if (mClientText != nullptr)
107 
108  updateSelectText();
109  }
110 
112  {
113  mScrollViewClient = nullptr;
114  mClientText = nullptr;
115  mVScroll = nullptr;
116  mHScroll = nullptr;
117 
119  }
120 
122  {
123  if ((_old == getClientWidget()) || (mIsFocus))
124  return;
125 
126  mIsFocus = true;
127  updateEditState();
128  }
129 
131  {
132  if ((_new == getClientWidget()) || (!mIsFocus))
133  return;
134 
135  mIsFocus = false;
136  updateEditState();
137  }
138 
139  void EditBox::notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id)
140  {
141  if (mClientText == nullptr)
142  return;
143 
144  // в статике все недоступно
145  if (mModeStatic)
146  return;
147 
152  mCursorTimer = 0;
153  updateSelectText();
154 
155  if (_id == MouseButton::Left)
156  mMouseLeftPressed = true;
157  }
158 
159  void EditBox::notifyMouseReleased(Widget* _sender, int _left, int _top, MouseButton _id)
160  {
161  // сбрасываем всегда
162  mMouseLeftPressed = false;
163  }
164 
165  void EditBox::notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id)
166  {
167  if (_id != MouseButton::Left)
168  return;
169 
170  if (mClientText == nullptr)
171  return;
172 
173  // в статике все недоступно
174  if (mModeStatic)
175  return;
176 
177  // останавливаем курсор
179 
180  // сбрасываем все таймеры
181  mCursorTimer = 0;
182  mActionMouseTimer = 0;
183 
184  size_t Old = mCursorPosition;
185  IntPoint point(_left, _top);
187  if (Old == mCursorPosition)
188  return;
189 
191 
192  // если не было выделения
193  if (mStartSelect == ITEM_NONE)
194  mStartSelect = Old;
195 
196  // меняем выделение
197  mEndSelect = (size_t)mCursorPosition;
198  if (mStartSelect > mEndSelect)
200  else
202 
203  }
204 
206  {
207  if (mClientText == nullptr)
208  return;
209 
210  // в статике все недоступно
211  if (mModeStatic)
212  return;
213 
215 
216  size_t cursorPosition = mClientText->getCursorPosition(lastPressed);
217  mStartSelect = cursorPosition;
218  mEndSelect = cursorPosition;
219 
220  UString text = this->getOnlyText();
221  UString::reverse_iterator iterBack = text.rend() - cursorPosition;
222  UString::iterator iterForw = text.begin() + cursorPosition;
223 
224  while (iterBack != text.rend())
225  {
226  if (((*iterBack) < 265) && (ispunct(*iterBack) || isspace(*iterBack)))
227  break;
228  ++iterBack;
229  mStartSelect--;
230  }
231  while (iterForw != text.end())
232  {
233  if (((*iterForw) < 265) && (ispunct(*iterForw) || isspace(*iterForw)))
234  break;
235  ++iterForw;
236  mEndSelect++;
237  }
238 
241  }
242 
243  void EditBox::onMouseDrag(int _left, int _top, MouseButton _id)
244  {
245  notifyMouseDrag(nullptr, _left, _top, _id);
246 
247  Base::onMouseDrag(_left, _top, _id);
248  }
249 
251  {
252  if (!mIsPressed)
253  {
254  mIsPressed = true;
255  updateEditState();
256 
257  if (!mModeStatic)
258  {
259  if (mClientText != nullptr)
260  {
261  mCursorActive = true;
262  Gui::getInstance().eventFrameStart += newDelegate(this, &EditBox::frameEntered);
265  mCursorTimer = 0;
266  }
267  }
268  }
269 
270  Base::onKeySetFocus(_old);
271  }
272 
274  {
275  if (mIsPressed)
276  {
277  mIsPressed = false;
278  updateEditState();
279 
280  if (mClientText != nullptr)
281  {
282  mCursorActive = false;
283  Gui::getInstance().eventFrameStart -= newDelegate(this, &EditBox::frameEntered);
286  }
287  }
288 
289  Base::onKeyLostFocus(_new);
290  }
291 
293  return c == ' ' || c == '\t';
294  }
295 
297  {
298  if (mClientText == nullptr || getClientWidget() == nullptr)
299  {
300  Base::onKeyButtonPressed(_key, _char);
301  return;
302  }
303 
304  // в статическом режиме ничего не доступно
305  if (mModeStatic)
306  {
307  Base::onKeyButtonPressed(_key, _char);
308  return;
309  }
310 
312 
314  mCursorTimer = 0.0f;
315 
316  if (_key == KeyCode::Escape)
317  {
319  }
320  else if (_key == KeyCode::Backspace)
321  {
322  // если нуно то удаляем выделенный текст
323  if (!mModeReadOnly)
324  {
325  // сбрасываем повтор
326  commandResetRedo();
327 
328  if (!deleteTextSelect(true))
329  {
330  // прыгаем на одну назад и удаляем
331  if (mCursorPosition != 0)
332  {
333  mCursorPosition--;
334  eraseText(mCursorPosition, 1, true);
335  }
336  }
337  // отсылаем событие о изменении
338  eventEditTextChange(this);
339  }
340 
341  }
342  else if (_key == KeyCode::Delete)
343  {
344  if (input.isShiftPressed())
345  {
346  // сбрасываем повтор
347  commandResetRedo();
348 
349  commandCut();
350  }
351  else if (!mModeReadOnly)
352  {
353  // сбрасываем повтор
354  commandResetRedo();
355 
356  // если нуно то удаляем выделенный текст
357  if (!deleteTextSelect(true))
358  {
360  {
361  eraseText(mCursorPosition, 1, true);
362  }
363  }
364  // отсылаем событие о изменении
365  eventEditTextChange(this);
366  }
367 
368  }
369  else if (_key == KeyCode::Insert)
370  {
371  if (input.isShiftPressed())
372  {
373  // сбрасываем повтор
374  commandResetRedo();
375 
376  commandPast();
377  }
378  else if (input.isControlPressed())
379  {
380  commandCopy();
381  }
382 
383  }
384  else if ((_key == KeyCode::Return) || (_key == KeyCode::NumpadEnter))
385  {
386  // работаем только в режиме редактирования
387  if (!mModeReadOnly)
388  {
389  if ((mModeMultiline) && (!input.isControlPressed()))
390  {
391  // сбрасываем повтор
392  commandResetRedo();
393 
394  // попытка объединения двух комманд
395  size_t size = mVectorUndoChangeInfo.size();
396  // непосредственно операции
397  deleteTextSelect(true);
399  // проверяем на возможность объединения
400  if ((size + 2) == mVectorUndoChangeInfo.size())
401  commandMerge();
402  // отсылаем событие о изменении
403  eventEditTextChange(this);
404  }
405  // при сингл лайн и и мульти+сонтрол шлем эвент
406  else
407  {
408  eventEditSelectAccept(this);
409  }
410  }
411 
412  }
413  else if (_key == KeyCode::ArrowRight)
414  {
416  {
417  if (input.isControlPressed())
418  {
419  if (mModePassword)
420  {
422  }
423  else
424  {
425  const UString& text = getRealString();
427  {
428  mCursorPosition ++;
429  }
431  {
432  mCursorPosition ++;
433  }
434  }
435  }
436  else
437  {
438  mCursorPosition ++;
439  }
441  updateSelectText();
442  }
443  // сбрасываем выделение
444  else if (isTextSelection() && !input.isShiftPressed())
445  {
446  resetSelect();
447  }
448 
449  }
450  else if (_key == KeyCode::ArrowLeft)
451  {
452  if (mCursorPosition != 0)
453  {
454  if (input.isControlPressed())
455  {
456  if (mModePassword)
457  {
458  mCursorPosition = 0;
459  }
460  else
461  {
462  const UString& text = getRealString();
463  while (mCursorPosition > 0 && isWhitespace(text[mCursorPosition - 1]))
464  {
465  mCursorPosition --;
466  }
467  while (mCursorPosition > 0 && !isWhitespace(text[mCursorPosition - 1]))
468  {
469  mCursorPosition --;
470  }
471  }
472  }
473  else
474  {
475  mCursorPosition --;
476  }
478  updateSelectText();
479  }
480  // сбрасываем выделение
481  else if (isTextSelection() && !input.isShiftPressed())
482  {
483  resetSelect();
484  }
485 
486  }
487  else if (_key == KeyCode::ArrowUp)
488  {
490  point.top -= mClientText->getFontHeight();
491  size_t old = mCursorPosition;
493  // самая верхняя строчка
494  if (old == mCursorPosition)
495  {
496  if (mCursorPosition != 0)
497  {
498  mCursorPosition = 0;
500  updateSelectText();
501  }
502  // сбрасываем выделение
503  else if (isTextSelection() && !input.isShiftPressed())
504  {
505  resetSelect();
506  }
507  }
508  else
509  {
511  updateSelectText();
512  }
513 
514  }
515  else if (_key == KeyCode::ArrowDown)
516  {
518  point.top += mClientText->getFontHeight();
519  size_t old = mCursorPosition;
521  // самая нижняя строчка
522  if (old == mCursorPosition)
523  {
525  {
528  updateSelectText();
529  }
530  // сбрасываем выделение
531  else if (isTextSelection() && !input.isShiftPressed())
532  {
533  resetSelect();
534  }
535  }
536  else
537  {
539  updateSelectText();
540  }
541 
542  }
543  else if (_key == KeyCode::Home)
544  {
545  // в начало строки
546  if (!input.isControlPressed())
547  {
550  size_t old = mCursorPosition;
552  if (old != mCursorPosition)
553  {
555  updateSelectText();
556  }
557  else if (isTextSelection() && !input.isShiftPressed())
558  {
559  resetSelect();
560  }
561  }
562  // в начало всего текста
563  else
564  {
565  if (0 != mCursorPosition)
566  {
567  mCursorPosition = 0;
569  updateSelectText();
570  }
571  else if (isTextSelection() && !input.isShiftPressed())
572  {
573  resetSelect();
574  }
575  }
576 
577  }
578  else if (_key == KeyCode::End)
579  {
580  // в конец строки
581  if (!input.isControlPressed())
582  {
585  size_t old = mCursorPosition;
587  if (old != mCursorPosition)
588  {
590  updateSelectText();
591  }
592  else if (isTextSelection() && !input.isShiftPressed())
593  {
594  resetSelect();
595  }
596  }
597  // в самый конец
598  else
599  {
601  {
604  updateSelectText();
605  }
606  else if (isTextSelection() && !input.isShiftPressed())
607  {
608  resetSelect();
609  }
610  }
611 
612  }
613  else if (_key == KeyCode::PageUp)
614  {
615  // на размер окна, но не меньше одной строки
618  size_t old = mCursorPosition;
620  // самая верхняя строчка
621  if (old == mCursorPosition)
622  {
623  if (mCursorPosition != 0)
624  {
625  mCursorPosition = 0;
627  updateSelectText();
628  }
629  // сбрасываем выделение
630  else if (isTextSelection() && !input.isShiftPressed())
631  {
632  resetSelect();
633  }
634  }
635  else
636  {
638  updateSelectText();
639  }
640 
641  }
642  else if (_key == KeyCode::PageDown)
643  {
644  // на размер окна, но не меньше одной строки
647  size_t old = mCursorPosition;
649  // самая нижняя строчка
650  if (old == mCursorPosition)
651  {
653  {
656  updateSelectText();
657  }
658  // сбрасываем выделение
659  else if (isTextSelection() && !input.isShiftPressed())
660  {
661  resetSelect();
662  }
663  }
664  else
665  {
667  updateSelectText();
668  }
669 
670  }
671  else if ((_key == KeyCode::LeftShift) || (_key == KeyCode::RightShift))
672  {
673  // для правильно выделения
674  if (mStartSelect == ITEM_NONE)
675  {
677  }
678  }
679  else
680  {
681  // если не нажат контрл, то обрабатываем как текст
682  if (!input.isControlPressed())
683  {
684  if (!mModeReadOnly && _char != 0)
685  {
686  // сбрасываем повтор
687  commandResetRedo();
688 
689  // таб только если нужно
690  if (_char != '\t' || mTabPrinting)
691  {
692  // попытка объединения двух комманд
693  size_t size = mVectorUndoChangeInfo.size();
694  // непосредственно операции
695  deleteTextSelect(true);
697  // проверяем на возможность объединения
698  if ((size + 2) == mVectorUndoChangeInfo.size())
699  commandMerge();
700  // отсылаем событие о изменении
701  eventEditTextChange(this);
702  }
703  }
704  }
705  else if (_key == KeyCode::C)
706  {
707  commandCopy();
708 
709  }
710  else if (_key == KeyCode::X)
711  {
712  // сбрасываем повтор
713  commandResetRedo();
714 
715  commandCut();
716 
717  }
718  else if (_key == KeyCode::V)
719  {
720  // сбрасываем повтор
721  commandResetRedo();
722 
723  commandPast();
724 
725  }
726  else if (_key == KeyCode::A)
727  {
728  // выделяем весь текст
730 
731  }
732  else if (_key == KeyCode::Z)
733  {
734  // отмена
735  commandUndo();
736 
737  }
738  else if (_key == KeyCode::Y)
739  {
740  // повтор
741  commandRedo();
742 
743  }
744  }
745 
746  Base::onKeyButtonPressed(_key, _char);
747  }
748 
749  void EditBox::frameEntered(float _frame)
750  {
751  if (mClientText == nullptr)
752  return;
753 
754  // в статике все недоступно
755  if (mModeStatic)
756  return;
757 
758  if (mCursorActive)
759  {
760  mCursorTimer += _frame;
761 
763  {
767  }
768  }
769 
770  // сдвигаем курсор по положению мыши
771  if (mMouseLeftPressed)
772  {
773  mActionMouseTimer += _frame;
774 
776  {
778  const IntRect& view = getClientWidget()->getAbsoluteRect();
779  mouse.left -= view.left;
780  mouse.top -= view.top;
781  IntPoint point;
782 
783  bool action = false;
784 
785  // вверх на одну строчку
786  if ((mouse.top < 0) && (mouse.top > -EDIT_ACTION_MOUSE_ZONE))
787  {
788  if ((mouse.left > 0) && (mouse.left <= getClientWidget()->getWidth()))
789  {
791  point.top -= mClientText->getFontHeight();
792  action = true;
793  }
794  }
795  // вниз на одну строчку
796  else if ((mouse.top > getClientWidget()->getHeight()) && (mouse.top < (getClientWidget()->getHeight() + EDIT_ACTION_MOUSE_ZONE)))
797  {
798  if ((mouse.left > 0) && (mouse.left <= getClientWidget()->getWidth()))
799  {
801  point.top += mClientText->getFontHeight();
802  action = true;
803  }
804  }
805 
806  // влево на небольшое расстояние
807  if ((mouse.left < 0) && (mouse.left > -EDIT_ACTION_MOUSE_ZONE))
808  {
810  point.left -= (int)EDIT_OFFSET_HORZ_CURSOR;
811  action = true;
812  }
813  // вправо на небольшое расстояние
814  else if ((mouse.left > getClientWidget()->getWidth()) && (mouse.left < (getClientWidget()->getWidth() + EDIT_ACTION_MOUSE_ZONE)))
815  {
817  point.left += (int)EDIT_OFFSET_HORZ_CURSOR;
818  action = true;
819  }
820 
821  if (action)
822  {
823  size_t old = mCursorPosition;
825 
826  if (old != mCursorPosition)
827  {
829 
830  mEndSelect = (size_t)mCursorPosition;
831  if (mStartSelect > mEndSelect)
833  else
835 
836  // пытаемся показать курсор
838  }
839  }
840  // если в зону не попадает то сбрасываем
841  else
842  {
843  mActionMouseTimer = 0;
844  }
845 
848  }
849 
850  } // if (mMouseLeftPressed)
851  }
852 
853  void EditBox::setTextCursor(size_t _index)
854  {
855  // сбрасываем выделение
856  resetSelect();
857 
858  // новая позиция
859  if (_index > mTextLength)
860  _index = mTextLength;
861 
862  if (mCursorPosition == _index)
863  return;
864 
865  mCursorPosition = _index;
866 
867  // обновляем по позиции
868  if (mClientText != nullptr)
870 
871  updateSelectText();
872  }
873 
874  void EditBox::setTextSelection(size_t _start, size_t _end)
875  {
876  if (_start > mTextLength)
877  _start = mTextLength;
878  if (_end > mTextLength)
879  _end = mTextLength;
880 
881  mStartSelect = _start;
882  mEndSelect = _end;
883 
884  if (mClientText != nullptr)
885  {
886  if (mStartSelect > mEndSelect)
888  else
890  }
891 
893  return;
894  // курсор на конец выделения
896 
897  // обновляем по позиции
898  if (mClientText != nullptr)
900  }
901 
902  bool EditBox::deleteTextSelect(bool _history)
903  {
904  if (!isTextSelection())
905  return false;
906 
907  // начало и конец выделения
908  size_t start = getTextSelectionStart();
909  size_t end = getTextSelectionEnd();
910 
911  eraseText(start, end - start, _history);
912 
913  return true;
914  }
915 
916  void EditBox::resetSelect()
917  {
918  if (mStartSelect != ITEM_NONE)
919  {
921  if (mClientText != nullptr)
923  }
924  }
925 
926  void EditBox::commandPosition(size_t _undo, size_t _redo, size_t _length, VectorChangeInfo* _info)
927  {
928  if (_info != nullptr)
929  _info->push_back(TextCommandInfo(_undo, _redo, _length));
930  }
931 
932  void EditBox::commandMerge()
933  {
934  if (mVectorUndoChangeInfo.size() < 2)
935  return; // на всякий
936  // сохраняем последние набор отмен
938  mVectorUndoChangeInfo.pop_back();
939 
940  // объединяем последовательности
941  for (VectorChangeInfo::iterator iter = info.begin(); iter != info.end(); ++iter)
942  {
943  mVectorUndoChangeInfo.back().push_back((*iter));
944  }
945  }
946 
947  bool EditBox::commandUndo()
948  {
949  if (mVectorUndoChangeInfo.empty())
950  return false;
951 
952  // сбрасываем выделение
953  resetSelect();
954 
955  // сохраняем последние набор отмен
957  // перекидываем последний набор отмен
958  mVectorUndoChangeInfo.pop_back();
959  mVectorRedoChangeInfo.push_back(info);
960 
961  // берем текст для издевательств
962  UString text = getRealString();
963 
964  // восстанавливаем последовательность
965  for (VectorChangeInfo::reverse_iterator iter = info.rbegin(); iter != info.rend(); ++iter)
966  {
967  if ((*iter).type == TextCommandInfo::COMMAND_INSERT)
968  text.erase((*iter).start, (*iter).text.size());
969  else if ((*iter).type == TextCommandInfo::COMMAND_ERASE)
970  text.insert((*iter).start, (*iter).text);
971  else
972  {
973  mCursorPosition = (*iter).undo;
974  mTextLength = (*iter).length;
975  }
976  }
977 
978  // возвращаем текст
979  setRealString(text);
980 
981  // обновляем по позиции
982  if (mClientText != nullptr)
984  updateSelectText();
985 
986  // отсылаем событие о изменении
987  eventEditTextChange(this);
988 
989  return true;
990  }
991 
992  bool EditBox::commandRedo()
993  {
994  if (mVectorRedoChangeInfo.empty())
995  return false;
996 
997  // сбрасываем выделение
998  resetSelect();
999 
1000  // сохраняем последние набор отмен
1002  // перекидываем последний набор отмен
1003  mVectorRedoChangeInfo.pop_back();
1004  mVectorUndoChangeInfo.push_back(info);
1005 
1006  // берем текст для издевательств
1007  UString text = getRealString();
1008 
1009  // восстанавливаем последовательность
1010  for (VectorChangeInfo::iterator iter = info.begin(); iter != info.end(); ++iter)
1011  {
1012  if ((*iter).type == TextCommandInfo::COMMAND_INSERT)
1013  text.insert((*iter).start, (*iter).text);
1014  else if ((*iter).type == TextCommandInfo::COMMAND_ERASE)
1015  text.erase((*iter).start, (*iter).text.size());
1016  else
1017  {
1018  mCursorPosition = (*iter).redo;
1019  mTextLength = (*iter).length;
1020  }
1021 
1022  }
1023 
1024  // возвращаем текст
1025  setRealString(text);
1026 
1027  // обновляем по позиции
1028  if (mClientText != nullptr)
1030  updateSelectText();
1031 
1032  // отсылаем событие о изменении
1033  eventEditTextChange(this);
1034 
1035  return true;
1036  }
1037 
1038  void EditBox::saveInHistory(VectorChangeInfo* _info)
1039  {
1040  if (_info == nullptr)
1041  return;
1042  // если нет информации об изменении
1043  if ( _info->empty())
1044  return;
1045  if ((_info->size() == 1) && (_info->back().type == TextCommandInfo::COMMAND_POSITION))
1046  return;
1047 
1048  mVectorUndoChangeInfo.push_back(*_info);
1049  // проверяем на максимальный размер
1050  if (mVectorUndoChangeInfo.size() > EDIT_MAX_UNDO)
1051  mVectorUndoChangeInfo.pop_front();
1052  }
1053 
1054  // возвращает текст
1055  UString EditBox::getTextInterval(size_t _start, size_t _count)
1056  {
1057  // подстраховка
1058  if (_start > mTextLength) _start = mTextLength;
1059  // конец диапазона
1060  size_t end = _start + _count;
1061 
1062  // итератор нашей строки
1063  TextIterator iterator(getRealString());
1064 
1065  // дефолтный цвет
1067 
1068  // нужно ли вставлять цвет
1069  bool need_colour = true;
1070 
1071  // цикл прохода по строке
1072  while (iterator.moveNext())
1073  {
1074  // текущаяя позиция
1075  size_t pos = iterator.getPosition();
1076 
1077  // еще рано
1078  if (pos < _start)
1079  {
1080  // берем цвет из позиции и запоминаем
1081  iterator.getTagColour(colour);
1082 
1083  continue;
1084  }
1085 
1086  // проверяем на надобность начального тега
1087  else if (pos == _start)
1088  {
1089  need_colour = ! iterator.getTagColour(colour);
1090  // сохраняем место откуда начинается
1091  iterator.saveStartPoint();
1092 
1093  }
1094 
1095  // а теперь просто до конца диапазона
1096  else if (pos == end)
1097  break;
1098 
1099  }
1100 
1101  // возвращаем строку
1102  if (need_colour)
1103  return colour + iterator.getFromStart();
1104  return iterator.getFromStart();
1105  }
1106 
1107  // выделяет цветом диапазон
1108  void EditBox::_setTextColour(size_t _start, size_t _count, const Colour& _colour, bool _history)
1109  {
1110  // история изменений
1111  VectorChangeInfo* history = nullptr;
1112  if (_history)
1113  history = new VectorChangeInfo();
1114 
1115  // конец диапазона
1116  size_t end = _start + _count;
1117 
1118  // итератор нашей строки
1119  TextIterator iterator(getRealString(), history);
1120 
1121  // дефолтный цвет
1123 
1124  // цикл прохода по строке
1125  while (iterator.moveNext())
1126  {
1127  // текущаяя позиция
1128  size_t pos = iterator.getPosition();
1129 
1130  // берем цвет из позиции и запоминаем
1131  iterator.getTagColour(colour);
1132 
1133  // еще рано
1134  if (pos < _start)
1135  continue;
1136 
1137  // ставим начальный тег
1138  else if (pos == _start)
1139  iterator.setTagColour(_colour);
1140 
1141  // внутри диапазона очищаем все
1142  else if (pos < end)
1143  iterator.clearTagColour();
1144 
1145  // на конец ставим последний найденный или дефолтный
1146  else if (pos == end)
1147  {
1148  iterator.setTagColour(colour);
1149  // и выходим из цикла
1150  break;
1151  }
1152 
1153  }
1154 
1155  // сохраняем позицию для восстановления курсора
1156  commandPosition(_start, _start + _count, mTextLength, history);
1157 
1158  // запоминаем в историю
1159  if (_history)
1160  {
1161  saveInHistory(history);
1162  delete history;
1163  }
1164  // сбрасываем историю
1165  else
1166  commandResetHistory();
1167 
1168  // и возвращаем строку на место
1169  setRealString(iterator.getText());
1170  }
1171 
1172  void EditBox::setTextSelectColour(const Colour& _colour, bool _history)
1173  {
1174  // нужно выделение
1175  if ( !isTextSelection())
1176  return;
1177  // начало и конец выделения
1178  size_t start = getTextSelectionStart();
1179  size_t end = getTextSelectionEnd();
1180  _setTextColour(start, end - start, _colour, _history);
1181  }
1182 
1184  {
1185  if ( !isTextSelection())
1186  return "";
1187  size_t start = getTextSelectionStart();
1188  size_t end = getTextSelectionEnd();
1189  return getTextInterval(start, end - start);
1190  }
1191 
1192  void EditBox::setEditPassword(bool _password)
1193  {
1194  if (mModePassword == _password)
1195  return;
1196  mModePassword = _password;
1197 
1198  if (mModePassword)
1199  {
1200  if (mClientText != nullptr)
1201  {
1204  }
1205  }
1206  else
1207  {
1208  if (mClientText != nullptr)
1209  {
1211  mPasswordText.clear();
1212  }
1213  }
1214  // обновляем по размерам
1215  updateView();
1216  // сбрасываем историю
1217  commandResetHistory();
1218  }
1219 
1220  void EditBox::setText(const UString& _caption, bool _history)
1221  {
1222  // сбрасываем выделение
1223  resetSelect();
1224 
1225  // история изменений
1226  VectorChangeInfo* history = nullptr;
1227  if (_history)
1228  history = new VectorChangeInfo();
1229 
1230  // итератор нашей строки
1231  TextIterator iterator(getRealString(), history);
1232 
1233  // вставляем текст
1234  iterator.setText(_caption, mModeMultiline || mModeWordWrap);
1235 
1236  if (mOverflowToTheLeft)
1237  {
1238  iterator.cutMaxLengthFromBeginning(mMaxTextLength);
1239  }
1240  else
1241  {
1242  // обрезаем по максимальной длинне
1243  iterator.cutMaxLength(mMaxTextLength);
1244  }
1245 
1246  // запоминаем размер строки
1247  size_t old = mTextLength;
1248  // новая позиция и положение на конец вставки
1249  mCursorPosition = mTextLength = iterator.getSize();
1250 
1251  // сохраняем позицию для восстановления курсора
1252  commandPosition(0, mTextLength, old, history);
1253 
1254  // запоминаем в историю
1255  if (_history)
1256  {
1257  saveInHistory(history);
1258  delete history;
1259  }
1260  // сбрасываем историю
1261  else
1262  commandResetHistory();
1263 
1264  // и возвращаем строку на место
1265  setRealString(iterator.getText());
1266 
1267  // обновляем по позиции
1268  if (mClientText != nullptr)
1270  updateSelectText();
1271  }
1272 
1273  void EditBox::insertText(const UString& _text, size_t _start, bool _history)
1274  {
1275  // сбрасываем выделение
1276  resetSelect();
1277 
1278  // если строка пустая, или размер максимален
1279  if (_text.empty())
1280  return;
1281 
1282  if ((mOverflowToTheLeft == false) && (mTextLength == mMaxTextLength))
1283  return;
1284 
1285  // история изменений
1286  VectorChangeInfo* history = nullptr;
1287  if (_history)
1288  history = new VectorChangeInfo();
1289 
1290  // итератор нашей строки
1291  TextIterator iterator(getRealString(), history);
1292 
1293  // дефолтный цвет
1294  UString colour = mClientText == nullptr ? "" : TextIterator::convertTagColour(mClientText->getTextColour());
1295  // нужен ли тег текста
1296  // потом переделать через TextIterator чтобы отвязать понятие тег от эдита
1297  bool need_colour = ( (_text.size() > 6) && (_text[0] == L'#') && (_text[1] != L'#') );
1298 
1299  // цикл прохода по строке
1300  while (iterator.moveNext())
1301  {
1302  // текущаяя позиция
1303  size_t pos = iterator.getPosition();
1304 
1305  // текущий цвет
1306  if (need_colour)
1307  iterator.getTagColour(colour);
1308 
1309  // если дошли то выходим
1310  if (pos == _start)
1311  break;
1312  }
1313 
1314  // если нужен цвет то вставляем
1315  if (need_colour)
1316  iterator.setTagColour(colour);
1317 
1318  // а теперь вставляем строку
1319  iterator.insertText(_text, mModeMultiline || mModeWordWrap);
1320 
1321  if (mOverflowToTheLeft)
1322  {
1323  iterator.cutMaxLengthFromBeginning(mMaxTextLength);
1324  }
1325  else
1326  {
1327  // обрезаем по максимальной длинне
1328  iterator.cutMaxLength(mMaxTextLength);
1329  }
1330 
1331  // запоминаем размер строки
1332  size_t old = mTextLength;
1333  // новая позиция и положение на конец вставки
1334  mTextLength = iterator.getSize();
1335  mCursorPosition += mTextLength - old;
1336 
1337  // сохраняем позицию для восстановления курсора
1338  commandPosition(_start, _start + mTextLength - old, old, history);
1339 
1340  // запоминаем в историю
1341  if (_history)
1342  {
1343  saveInHistory(history);
1344  delete history;
1345  }
1346  // сбрасываем историю
1347  else
1348  commandResetHistory();
1349 
1350  // и возвращаем строку на место
1351  setRealString(iterator.getText());
1352 
1353  // обновляем по позиции
1354  if (mClientText != nullptr)
1356  updateSelectText();
1357  }
1358 
1359  void EditBox::eraseText(size_t _start, size_t _count, bool _history)
1360  {
1361  // чета маловато
1362  if (_count == 0)
1363  return;
1364 
1365  // сбрасываем выделение
1366  resetSelect();
1367 
1368  // история изменений
1369  VectorChangeInfo* history = nullptr;
1370  if (_history)
1371  history = new VectorChangeInfo();
1372 
1373  // итератор нашей строки
1374  TextIterator iterator(getRealString(), history);
1375 
1376  // дефолтный цвет
1377  UString colour;
1378  // конец диапазона
1379  size_t end = _start + _count;
1380  bool need_colour = false;
1381 
1382  // цикл прохода по строке
1383  while (iterator.moveNext())
1384  {
1385  // текущаяя позиция
1386  size_t pos = iterator.getPosition();
1387 
1388  // еще рано
1389  if (pos < _start)
1390  {
1391  // берем цвет из позиции и запоминаем
1392  iterator.getTagColour(colour);
1393  continue;
1394  }
1395 
1396  // сохраняем место откуда начинается
1397  else if (pos == _start)
1398  {
1399  // если до диапазона был цвет, то нужно закрыть тег
1400  if (!colour.empty())
1401  {
1402  need_colour = true;
1403  colour.clear();
1404  }
1405  // берем цвет из позиции и запоминаем
1406  iterator.getTagColour(colour);
1407  iterator.saveStartPoint();
1408  }
1409 
1410  // внутри диапазона
1411  else if (pos < end)
1412  {
1413  // берем цвет из позиции и запоминаем
1414  iterator.getTagColour(colour);
1415  }
1416 
1417  // окончание диапазона
1418  else if (pos == end)
1419  {
1420  // нужно ставить тег или нет
1421  if (!colour.empty())
1422  need_colour = true;
1423  if (iterator.getTagColour(colour))
1424  need_colour = false;
1425 
1426  break;
1427  }
1428 
1429  }
1430 
1431  // удаляем диапазон
1432  iterator.eraseFromStart();
1433  // и вставляем последний цвет
1434  if (need_colour)
1435  iterator.setTagColour(colour);
1436 
1437  // сохраняем позицию для восстановления курсора
1438  commandPosition(_start + _count, _start, mTextLength, history);
1439 
1440  // на месте удаленного
1441  mCursorPosition = _start;
1442  mTextLength -= _count;
1443 
1444  // запоминаем в историю
1445  if (_history)
1446  {
1447  saveInHistory(history);
1448  delete history;
1449  }
1450  // сбрасываем историю
1451  else
1452  commandResetHistory();
1453 
1454  // и возвращаем строку на место
1455  setRealString(iterator.getText());
1456 
1457  // обновляем по позиции
1458  if (mClientText != nullptr)
1460  updateSelectText();
1461  }
1462 
1463  void EditBox::commandCut()
1464  {
1465  // вырезаем в буфер обмена
1466  if (isTextSelection() && (!mModePassword))
1467  {
1469  if (!mModeReadOnly)
1470  {
1471  deleteTextSelect(true);
1472  // отсылаем событие о изменении
1473  eventEditTextChange(this);
1474  }
1475  }
1476  else
1478  }
1479 
1480  void EditBox::commandCopy()
1481  {
1482  // копируем в буфер обмена
1483  if (isTextSelection() && (!mModePassword))
1485  else
1487  }
1488 
1489  void EditBox::commandPast()
1490  {
1491  // копируем из буфера обмена
1493  if ((!mModeReadOnly) && (!clipboard.empty()))
1494  {
1495  // попытка объединения двух комманд
1496  size_t size = mVectorUndoChangeInfo.size();
1497  // непосредственно операции
1498  deleteTextSelect(true);
1499  insertText(clipboard, mCursorPosition, true);
1500  // проверяем на возможность объединения
1501  if ((size + 2) == mVectorUndoChangeInfo.size())
1502  commandMerge();
1503  // отсылаем событие о изменении
1504  eventEditTextChange(this);
1505  }
1506  }
1507 
1508  const UString& EditBox::getRealString()
1509  {
1510  if (mModePassword)
1511  return mPasswordText;
1512  else if (mClientText == nullptr)
1513  return mPasswordText;
1514 
1515  return mClientText->getCaption();
1516  }
1517 
1518  void EditBox::setRealString(const UString& _caption)
1519  {
1520  if (mModePassword)
1521  {
1522  mPasswordText = _caption;
1523  if (mClientText != nullptr)
1525  }
1526  else
1527  {
1528  if (mClientText != nullptr)
1529  mClientText->setCaption(_caption);
1530  }
1531  }
1532 
1534  {
1535  mCharPassword = _char;
1536  if (mModePassword)
1537  {
1538  if (mClientText != nullptr)
1540  }
1541  }
1542 
1543  void EditBox::updateEditState()
1544  {
1545  if (!getInheritedEnabled())
1546  {
1547  _setWidgetState("disabled");
1548  }
1549  else if (mIsPressed)
1550  {
1551  if (mIsFocus)
1552  _setWidgetState("pushed");
1553  else
1554  _setWidgetState("normal_checked");
1555  }
1556  else if (mIsFocus)
1557  {
1558  _setWidgetState("highlighted");
1559  }
1560  else
1561  {
1562  _setWidgetState("normal");
1563  }
1564  }
1565 
1566  void EditBox::setPosition(const IntPoint& _point)
1567  {
1568  Base::setPosition(_point);
1569  }
1570 
1572  {
1573  // если перенос, то сбрасываем размер текста
1574  if (mModeWordWrap)
1575  {
1576  if (mClientText != nullptr)
1577  mClientText->setWordWrap(true);
1578  }
1579 
1580  updateView();
1581  }
1582 
1583  void EditBox::setSize(const IntSize& _size)
1584  {
1585  Base::setSize(_size);
1586 
1587  eraseView();
1588  }
1589 
1590  void EditBox::setCoord(const IntCoord& _coord)
1591  {
1592  Base::setCoord(_coord);
1593 
1594  eraseView();
1595  }
1596 
1597  void EditBox::setCaption(const UString& _value)
1598  {
1599  setText(_value, false);
1600  }
1601 
1603  {
1604  return getRealString();
1605  }
1606 
1607  void EditBox::updateSelectText()
1608  {
1609  if (!mModeStatic)
1610  {
1612  if ((input.isShiftPressed()) && (mStartSelect != ITEM_NONE))
1613  {
1614  // меняем выделение
1615  mEndSelect = (size_t)mCursorPosition;
1616  if (mClientText != nullptr)
1617  {
1618  if (mStartSelect > mEndSelect)
1620  else
1622  }
1623 
1624  }
1625  else if (mStartSelect != ITEM_NONE)
1626  {
1627  // сбрасываем шифт
1629  if (mClientText != nullptr)
1631  }
1632  }
1633 
1634  // пытаемся показать курсор
1636  }
1637 
1639  {
1640  Base::setTextAlign(_value);
1641 
1642  if (mClientText != nullptr)
1643  mClientText->setTextAlign(_value);
1644 
1645  // так как мы сами рулим смещениями
1646  updateView();
1647  }
1648 
1649  void EditBox::setTextColour(const Colour& _value)
1650  {
1651  Base::setTextColour(_value);
1652 
1653  if (mClientText != nullptr)
1654  mClientText->setTextColour(_value);
1655  }
1656 
1658  {
1659  if (mClientText != nullptr)
1660  return mClientText->getCoord();
1661  return Base::getTextRegion();
1662  }
1663 
1665  {
1666  if (mClientText != nullptr)
1667  return mClientText->getTextSize();
1668  return Base::getTextSize();
1669  }
1670 
1671  void EditBox::notifyScrollChangePosition(ScrollBar* _sender, size_t _position)
1672  {
1673  if (mClientText == nullptr)
1674  return;
1675 
1676  if (_sender == mVScroll)
1677  {
1678  IntPoint point = mClientText->getViewOffset();
1679  point.top = _position;
1680  mClientText->setViewOffset(point);
1681  }
1682  else if (_sender == mHScroll)
1683  {
1684  IntPoint point = mClientText->getViewOffset();
1685  point.left = _position;
1686  mClientText->setViewOffset(point);
1687  }
1688  }
1689 
1690  void EditBox::notifyMouseWheel(Widget* _sender, int _rel)
1691  {
1692  if (mClientText == nullptr)
1693  return;
1694 
1695  if (mVRange != 0)
1696  {
1697  IntPoint point = mClientText->getViewOffset();
1698  int offset = point.top;
1699  if (_rel < 0)
1700  offset += EDIT_MOUSE_WHEEL;
1701  else
1702  offset -= EDIT_MOUSE_WHEEL;
1703 
1704  if (offset < 0)
1705  offset = 0;
1706  else if (offset > (int)mVRange)
1707  offset = mVRange;
1708 
1709  if (offset != point.top)
1710  {
1711  point.top = offset;
1712  if (mVScroll != nullptr)
1713  mVScroll->setScrollPosition(offset);
1714  mClientText->setViewOffset(point);
1715  }
1716  }
1717  else if (mHRange != 0)
1718  {
1719  IntPoint point = mClientText->getViewOffset();
1720  int offset = point.left;
1721  if (_rel < 0)
1722  offset += EDIT_MOUSE_WHEEL;
1723  else
1724  offset -= EDIT_MOUSE_WHEEL;
1725 
1726  if (offset < 0)
1727  offset = 0;
1728  else if (offset > (int)mHRange)
1729  offset = mHRange;
1730 
1731  if (offset != point.left)
1732  {
1733  point.left = offset;
1734  if (mHScroll != nullptr)
1735  mHScroll->setScrollPosition(offset);
1736  mClientText->setViewOffset(point);
1737  }
1738  }
1739  }
1740 
1741  void EditBox::setEditWordWrap(bool _value)
1742  {
1743  mModeWordWrap = _value;
1744  if (mClientText != nullptr)
1746 
1747  eraseView();
1748  }
1749 
1750  void EditBox::setFontName(const std::string& _value)
1751  {
1752  Base::setFontName(_value);
1753 
1754  if (mClientText != nullptr)
1755  mClientText->setFontName(_value);
1756 
1757  eraseView();
1758  }
1759 
1760  void EditBox::setFontHeight(int _value)
1761  {
1762  Base::setFontHeight(_value);
1763 
1764  if (mClientText != nullptr)
1765  mClientText->setFontHeight(_value);
1766 
1767  eraseView();
1768  }
1769 
1771  {
1772  updateScrollSize();
1774  }
1775 
1777  {
1778  updateScrollSize();
1779  updateCursorPosition();
1781  }
1782 
1783  void EditBox::updateCursorPosition()
1784  {
1785  if (mClientText == nullptr || getClientWidget() == nullptr)
1786  return;
1787 
1788  // размер контекста текста
1789  IntSize textSize = mClientText->getTextSize();
1790 
1791  // текущее смещение контекста текста
1792  IntPoint point = mClientText->getViewOffset();
1793  // расчетное смещение
1794  IntPoint offset = point;
1795 
1796  // абсолютные координаты курсора
1798  cursor.right ++;
1799 
1800  // абсолютные координаты вью
1801  const IntRect& view = getClientWidget()->getAbsoluteRect();
1802 
1803  // проверяем и показываем курсор
1804  if (!view.inside(cursor))
1805  {
1806  // горизонтальное смещение
1807  if (textSize.width > view.width())
1808  {
1809  if (cursor.left < view.left)
1810  {
1811  offset.left = point.left - (view.left - cursor.left);
1812  // добавляем смещение, только если курсор не перепрыгнет
1813  if ((float(view.width()) - EDIT_OFFSET_HORZ_CURSOR) > EDIT_OFFSET_HORZ_CURSOR)
1814  offset.left -= int(EDIT_OFFSET_HORZ_CURSOR);
1815  }
1816  else if (cursor.right > view.right)
1817  {
1818  offset.left = point.left + (cursor.right - view.right);
1819  // добавляем смещение, только если курсор не перепрыгнет
1820  if ((float(view.width()) - EDIT_OFFSET_HORZ_CURSOR) > EDIT_OFFSET_HORZ_CURSOR)
1821  offset.left += int(EDIT_OFFSET_HORZ_CURSOR);
1822  }
1823  }
1824 
1825  // вертикальное смещение
1826  if (textSize.height > view.height())
1827  {
1828  int delta = 0;
1829  if (cursor.height() > view.height())
1830  {
1831  // if text is bigger than edit height then place it in center
1832  delta = ((cursor.bottom - view.bottom) - (view.top - cursor.top)) / 2;
1833  }
1834  else if (cursor.top < view.top)
1835  {
1836  delta = - (view.top - cursor.top);
1837  }
1838  else if (cursor.bottom > view.bottom)
1839  {
1840  delta = (cursor.bottom - view.bottom);
1841  }
1842  offset.top = point.top + delta;
1843  }
1844 
1845  }
1846 
1847  if (offset != point)
1848  {
1849  mClientText->setViewOffset(offset);
1850  // обновить скролы
1851  if (mVScroll != nullptr)
1852  mVScroll->setScrollPosition(offset.top);
1853  if (mHScroll != nullptr)
1854  mHScroll->setScrollPosition(offset.left);
1855  }
1856  }
1857 
1858  void EditBox::setContentPosition(const IntPoint& _point)
1859  {
1860  if (mClientText != nullptr)
1861  mClientText->setViewOffset(_point);
1862  }
1863 
1864  IntSize EditBox::getViewSize()
1865  {
1866  if (mClientText != nullptr)
1867  return mClientText->getSize();
1868  return ScrollViewBase::getViewSize();
1869  }
1870 
1871  IntSize EditBox::getContentSize()
1872  {
1873  if (mClientText != nullptr)
1874  return mClientText->getTextSize();
1876  }
1877 
1878  size_t EditBox::getVScrollPage()
1879  {
1880  if (mClientText != nullptr)
1881  return (size_t)mClientText->getFontHeight();
1883  }
1884 
1885  size_t EditBox::getHScrollPage()
1886  {
1887  if (mClientText != nullptr)
1888  return (size_t)mClientText->getFontHeight();
1890  }
1891 
1892  IntPoint EditBox::getContentPosition()
1893  {
1894  if (mClientText != nullptr)
1895  return mClientText->getViewOffset();
1897  }
1898 
1899  Align EditBox::getContentAlign()
1900  {
1901  if (mClientText != nullptr)
1902  return mClientText->getTextAlign();
1904  }
1905 
1906  void EditBox::setTextIntervalColour(size_t _start, size_t _count, const Colour& _colour)
1907  {
1908  _setTextColour(_start, _count, _colour, false);
1909  }
1910 
1912  {
1914  }
1915 
1917  {
1919  }
1920 
1922  {
1923  return (mStartSelect != ITEM_NONE) && (mStartSelect != mEndSelect);
1924  }
1925 
1927  {
1928  deleteTextSelect(false);
1929  }
1930 
1932  {
1933  setTextSelectColour(_colour, false);
1934  }
1935 
1937  {
1938  return mEndSelect - mStartSelect;
1939  }
1940 
1941  void EditBox::setOnlyText(const UString& _text)
1942  {
1943  setText(TextIterator::toTagsString(_text), false);
1944  }
1945 
1947  {
1948  return TextIterator::getOnlyText(getRealString());
1949  }
1950 
1951  void EditBox::insertText(const UString& _text, size_t _index)
1952  {
1953  insertText(_text, _index, false);
1954  }
1955 
1956  void EditBox::addText(const UString& _text)
1957  {
1958  insertText(_text, ITEM_NONE, false);
1959  }
1960 
1961  void EditBox::eraseText(size_t _start, size_t _count)
1962  {
1963  eraseText(_start, _count, false);
1964  }
1965 
1966  void EditBox::setEditReadOnly(bool _value)
1967  {
1968  mModeReadOnly = _value;
1969  // сбрасываем историю
1970  commandResetHistory();
1971  }
1972 
1973  void EditBox::setEditMultiLine(bool _value)
1974  {
1975  mModeMultiline = _value;
1976  // на всякий, для убирания переносов
1977  if (!mModeMultiline)
1978  {
1979  setText(getRealString(), false);
1980  }
1981  // обновляем по размерам
1982  else
1983  {
1984  updateView();
1985  }
1986  // сбрасываем историю
1987  commandResetHistory();
1988  }
1989 
1990  void EditBox::setEditStatic(bool _value)
1991  {
1992  mModeStatic = _value;
1993  resetSelect();
1994 
1995  if (getClientWidget() != nullptr)
1996  {
1997  if (mModeStatic)
1998  getClientWidget()->setPointer("");
1999  else
2001  }
2002  }
2003 
2004  void EditBox::setPasswordChar(const UString& _value)
2005  {
2006  if (!_value.empty())
2007  setPasswordChar(_value[0]);
2008  }
2009 
2010  void EditBox::setVisibleVScroll(bool _value)
2011  {
2012  mVisibleVScroll = _value;
2013  updateView();
2014  }
2015 
2016  void EditBox::setVisibleHScroll(bool _value)
2017  {
2018  mVisibleHScroll = _value;
2019  updateView();
2020  }
2021 
2023  {
2024  return mVRange + 1;
2025  }
2026 
2028  {
2029  return mClientText == nullptr ? 0 : mClientText->getViewOffset().top;
2030  }
2031 
2032  void EditBox::setVScrollPosition(size_t _index)
2033  {
2034  if (mClientText == nullptr)
2035  return;
2036 
2037  if (_index > mVRange)
2038  _index = mVRange;
2039 
2040  IntPoint point = mClientText->getViewOffset();
2041  point.top = _index;
2042 
2043  mClientText->setViewOffset(point);
2044  // обновить скролы
2045  if (mVScroll != nullptr)
2046  mVScroll->setScrollPosition(point.top);
2047  }
2048 
2050  {
2051  return mHRange + 1;
2052  }
2053 
2055  {
2056  return mClientText == nullptr ? 0 : mClientText->getViewOffset().left;
2057  }
2058 
2059  void EditBox::setHScrollPosition(size_t _index)
2060  {
2061  if (mClientText == nullptr)
2062  return;
2063 
2064  if (_index > mHRange)
2065  _index = mHRange;
2066 
2067  IntPoint point = mClientText->getViewOffset();
2068  point.left = _index;
2069 
2070  mClientText->setViewOffset(point);
2071  // обновить скролы
2072  if (mHScroll != nullptr)
2074  }
2075 
2077  {
2078  return mClientText == nullptr ? false : mClientText->getInvertSelected();
2079  }
2080 
2081  void EditBox::setInvertSelected(bool _value)
2082  {
2083  if (mClientText != nullptr)
2084  mClientText->setInvertSelected(_value);
2085  }
2086 
2087  void EditBox::setPropertyOverride(const std::string& _key, const std::string& _value)
2088  {
2090  if (_key == "CursorPosition")
2091  setTextCursor(utility::parseValue<size_t>(_value));
2092 
2094  else if (_key == "TextSelect")
2096 
2098  else if (_key == "ReadOnly")
2099  setEditReadOnly(utility::parseValue<bool>(_value));
2100 
2102  else if (_key == "Password")
2103  setEditPassword(utility::parseValue<bool>(_value));
2104 
2106  else if (_key == "MultiLine")
2107  setEditMultiLine(utility::parseValue<bool>(_value));
2108 
2110  else if (_key == "PasswordChar")
2111  setPasswordChar(_value);
2112 
2114  else if (_key == "MaxTextLength")
2115  setMaxTextLength(utility::parseValue<size_t>(_value));
2116 
2118  else if (_key == "OverflowToTheLeft")
2119  setOverflowToTheLeft(utility::parseValue<bool>(_value));
2120 
2122  else if (_key == "Static")
2123  setEditStatic(utility::parseValue<bool>(_value));
2124 
2126  else if (_key == "VisibleVScroll")
2127  setVisibleVScroll(utility::parseValue<bool>(_value));
2128 
2130  else if (_key == "VisibleHScroll")
2131  setVisibleHScroll(utility::parseValue<bool>(_value));
2132 
2134  else if (_key == "WordWrap")
2135  setEditWordWrap(utility::parseValue<bool>(_value));
2136 
2138  else if (_key == "TabPrinting")
2139  setTabPrinting(utility::parseValue<bool>(_value));
2140 
2142  else if (_key == "InvertSelected")
2143  setInvertSelected(utility::parseValue<bool>(_value));
2144 
2145  else
2146  {
2147  Base::setPropertyOverride(_key, _value);
2148  return;
2149  }
2150 
2151  eventChangeProperty(this, _key, _value);
2152  }
2153 
2154  size_t EditBox::getTextCursor() const
2155  {
2156  return mCursorPosition;
2157  }
2158 
2159  size_t EditBox::getTextLength() const
2160  {
2161  return mTextLength;
2162  }
2163 
2165  {
2166  mOverflowToTheLeft = _value;
2167  }
2168 
2170  {
2171  return mOverflowToTheLeft;
2172  }
2173 
2174  void EditBox::setMaxTextLength(size_t _value)
2175  {
2176  mMaxTextLength = _value;
2177  }
2178 
2180  {
2181  return mMaxTextLength;
2182  }
2183 
2185  {
2186  return mModeReadOnly;
2187  }
2188 
2190  {
2191  return mModePassword;
2192  }
2193 
2195  {
2196  return mModeMultiline;
2197  }
2198 
2200  {
2201  return mModeStatic;
2202  }
2203 
2205  {
2206  return mCharPassword;
2207  }
2208 
2210  {
2211  return mModeWordWrap;
2212  }
2213 
2214  void EditBox::setTabPrinting(bool _value)
2215  {
2216  mTabPrinting = _value;
2217  }
2218 
2220  {
2221  return mTabPrinting;
2222  }
2223 
2225  {
2226  return mVisibleVScroll;
2227  }
2228 
2230  {
2231  return mVisibleHScroll;
2232  }
2233 
2234  void EditBox::commandResetRedo()
2235  {
2236  mVectorRedoChangeInfo.clear();
2237  }
2238 
2239  void EditBox::commandResetHistory()
2240  {
2241  mVectorRedoChangeInfo.clear();
2242  mVectorUndoChangeInfo.clear();
2243  }
2244 
2246  {
2247  Base::setTextShadowColour(_value);
2248 
2249  if (mClientText != nullptr)
2250  mClientText->setShadowColour(_value);
2251  }
2252 
2253  void EditBox::setTextShadow(bool _value)
2254  {
2255  Base::setTextShadow(_value);
2256 
2257  if (mClientText != nullptr)
2258  mClientText->setShadow(_value);
2259  }
2260 
2261 } // namespace MyGUI
MyGUI::WidgetInput::setNeedKeyFocus
void setNeedKeyFocus(bool _value)
Definition: MyGUI_WidgetInput.cpp:152
MyGUI::TextCommandInfo::COMMAND_INSERT
@ COMMAND_INSERT
Definition: MyGUI_TextChangeHistory.h:25
MyGUI::Char
unsigned int Char
Definition: MyGUI_Types.h:48
MyGUI::Singleton< InputManager >::getInstance
static InputManager & getInstance()
Definition: MyGUI_Singleton.h:44
MyGUI::EDIT_CURSOR_MIN_POSITION
const int EDIT_CURSOR_MIN_POSITION
Definition: MyGUI_EditBox.cpp:26
MyGUI::EditBox::updateViewWithCursor
void updateViewWithCursor()
Definition: MyGUI_EditBox.cpp:1776
MyGUI::types::TRect::bottom
T bottom
Definition: MyGUI_TRect.h:23
MyGUI::ISubWidgetText::setVisibleCursor
virtual void setVisibleCursor(bool _value)
Definition: MyGUI_ISubWidgetText.h:69
MyGUI::WidgetInput::eventMouseButtonReleased
EventHandle_WidgetIntIntButton eventMouseButtonReleased
Definition: MyGUI_WidgetInput.h:163
MyGUI::KeyCode::End
@ End
Definition: MyGUI_KeyCode.h:144
MyGUI::Gui::eventFrameStart
EventHandle_FrameEventDelegate eventFrameStart
Definition: MyGUI_Gui.h:150
MyGUI::EditBox::initialiseOverride
void initialiseOverride() override
Definition: MyGUI_EditBox.cpp:59
MyGUI::ScrollViewBase::getContentAlign
virtual Align getContentAlign()
Definition: MyGUI_ScrollViewBase.cpp:338
MyGUI::EditBox::eventEditTextChange
EventPair< EventHandle_WidgetVoid, EventHandle_EditPtr > eventEditTextChange
Definition: MyGUI_EditBox.h:249
MyGUI::ISubWidgetText
Definition: MyGUI_ISubWidgetText.h:20
MyGUI::EditBox::setInvertSelected
void setInvertSelected(bool _value)
Definition: MyGUI_EditBox.cpp:2081
MyGUI::WidgetInput::eventMouseButtonPressed
EventHandle_WidgetIntIntButton eventMouseButtonPressed
Definition: MyGUI_WidgetInput.h:154
MyGUI::EditBox::insertText
void insertText(const UString &_text, size_t _index=ITEM_NONE)
Definition: MyGUI_EditBox.cpp:1951
MyGUI::EditBox::getHScrollRange
size_t getHScrollRange() const
Definition: MyGUI_EditBox.cpp:2049
MyGUI::EditBox::getCaption
const UString & getCaption() override
Definition: MyGUI_EditBox.cpp:1602
MyGUI_Gui.h
MyGUI::UString::rend
reverse_iterator rend()
returns a reverse iterator just past the beginning of the string
Definition: MyGUI_UString.cpp:835
MyGUI::EditBox::mMouseLeftPressed
bool mMouseLeftPressed
Definition: MyGUI_EditBox.h:362
MyGUI::types::TSize::height
T height
Definition: MyGUI_TSize.h:21
MyGUI::EditBox::getTextCursor
size_t getTextCursor() const
Definition: MyGUI_EditBox.cpp:2154
MyGUI::Widget::getInheritedEnabled
bool getInheritedEnabled() const
Definition: MyGUI_Widget.cpp:1334
MyGUI::InputManager::setKeyFocusWidget
void setKeyFocusWidget(Widget *_widget)
Definition: MyGUI_InputManager.cpp:391
MyGUI::isWhitespace
bool isWhitespace(const UString::code_point &c)
Definition: MyGUI_EditBox.cpp:292
MyGUI::EditBox::mModePassword
bool mModePassword
Definition: MyGUI_EditBox.h:365
MyGUI::InputManager::isShiftPressed
bool isShiftPressed() const
Definition: MyGUI_InputManager.cpp:668
MyGUI::EditBox::getEditReadOnly
bool getEditReadOnly() const
Definition: MyGUI_EditBox.cpp:2184
MyGUI::ScrollBar::eventScrollChangePosition
EventHandle_ScrollBarPtrSizeT eventScrollChangePosition
Definition: MyGUI_ScrollBar.h:127
MyGUI::EditBox::setTextColour
void setTextColour(const Colour &_value) override
Definition: MyGUI_EditBox.cpp:1649
MyGUI::ISubWidgetText::setFontHeight
virtual void setFontHeight(int _value)
Definition: MyGUI_ISubWidgetText.h:139
MyGUI::KeyCode::Escape
@ Escape
Definition: MyGUI_KeyCode.h:20
MyGUI::EditBox::getTabPrinting
bool getTabPrinting() const
Definition: MyGUI_EditBox.cpp:2219
MyGUI::EditBox::setEditStatic
void setEditStatic(bool _value)
Definition: MyGUI_EditBox.cpp:1990
MyGUI::InputManager
Definition: MyGUI_InputManager.h:31
MyGUI::ScrollBar
ScrollBar properties. Skin childs. ScrollBar widget description should be here.
Definition: MyGUI_ScrollBar.h:26
MyGUI::types::TPoint::top
T top
Definition: MyGUI_TPoint.h:21
MyGUI::EditBox::getTextSelectionLength
size_t getTextSelectionLength() const
Definition: MyGUI_EditBox.cpp:1936
MyGUI::EditBox::mTextLength
size_t mTextLength
Definition: MyGUI_EditBox.h:352
MyGUI::ScrollViewBase::mVScroll
ScrollBar * mVScroll
Definition: MyGUI_ScrollViewBase.h:44
MyGUI::ISubWidgetText::getCursorPoint
IntPoint getCursorPoint(size_t _position)
Definition: MyGUI_ISubWidgetText.h:95
MyGUI::EDIT_ACTION_MOUSE_TIMER
const float EDIT_ACTION_MOUSE_TIMER
Definition: MyGUI_EditBox.cpp:24
MyGUI::EditBox::onKeyButtonPressed
void onKeyButtonPressed(KeyCode _key, Char _char) override
Definition: MyGUI_EditBox.cpp:296
MyGUI::KeyCode::X
@ X
Definition: MyGUI_KeyCode.h:64
MyGUI::ISubWidgetText::isVisibleCursor
virtual bool isVisibleCursor() const
Definition: MyGUI_ISubWidgetText.h:64
MyGUI::ScrollViewBase::updateScrollPosition
void updateScrollPosition()
Definition: MyGUI_ScrollViewBase.cpp:230
MyGUI::EditBox::shutdownOverride
void shutdownOverride() override
Definition: MyGUI_EditBox.cpp:111
MyGUI::EditBox::getEditPassword
bool getEditPassword() const
Definition: MyGUI_EditBox.cpp:2189
MyGUI::EditBox::setOnlyText
void setOnlyText(const UString &_value)
Definition: MyGUI_EditBox.cpp:1941
MyGUI::EditBox::onKeySetFocus
void onKeySetFocus(Widget *_old) override
Definition: MyGUI_EditBox.cpp:250
MyGUI::EditBox::mVectorRedoChangeInfo
DequeUndoRedoInfo mVectorRedoChangeInfo
Definition: MyGUI_EditBox.h:360
MyGUI::types::TRect
Definition: MyGUI_TRect.h:19
MyGUI::EditBox::getVScrollRange
size_t getVScrollRange() const
Definition: MyGUI_EditBox.cpp:2022
MyGUI::EditBox::isVisibleVScroll
bool isVisibleVScroll() const
Definition: MyGUI_EditBox.cpp:2224
MyGUI::EditBox::isVisibleHScroll
bool isVisibleHScroll() const
Definition: MyGUI_EditBox.cpp:2229
MyGUI::EditBox::setTextIntervalColour
void setTextIntervalColour(size_t _start, size_t _count, const Colour &_colour)
Definition: MyGUI_EditBox.cpp:1906
MyGUI::ISubWidgetText::setShadow
virtual void setShadow(bool _value)
Definition: MyGUI_ISubWidgetText.h:61
MyGUI::EditBox::notifyMouseLostFocus
void notifyMouseLostFocus(Widget *_sender, Widget *_new)
Definition: MyGUI_EditBox.cpp:130
MyGUI::EditBox::getPasswordChar
Char getPasswordChar() const
Definition: MyGUI_EditBox.cpp:2204
MyGUI::UString::_rev_iterator
forward iterator for UString
Definition: MyGUI_UString.h:356
MyGUI_PointerManager.h
MyGUI::Widget::eventChangeProperty
EventHandle_WidgetStringString eventChangeProperty
Definition: MyGUI_Widget.h:267
MyGUI::ClipboardManager::clearClipboardData
void clearClipboardData(const std::string &_type)
Definition: MyGUI_ClipboardManager.cpp:65
MyGUI::EditBox::getInvertSelected
bool getInvertSelected()
Definition: MyGUI_EditBox.cpp:2076
MyGUI::KeyCode::ArrowDown
@ ArrowDown
Definition: MyGUI_KeyCode.h:145
MyGUI::ScrollViewBase::mChangeContentByResize
bool mChangeContentByResize
Definition: MyGUI_ScrollViewBase.h:55
MyGUI::types::TRect::right
T right
Definition: MyGUI_TRect.h:22
MyGUI::VectorChangeInfo
std::vector< TextCommandInfo > VectorChangeInfo
Definition: MyGUI_TextChangeHistory.h:60
MyGUI::KeyCode::Home
@ Home
Definition: MyGUI_KeyCode.h:139
MyGUI::KeyCode::ArrowRight
@ ArrowRight
Definition: MyGUI_KeyCode.h:143
MyGUI::EditBox::setHScrollPosition
void setHScrollPosition(size_t _index)
Definition: MyGUI_EditBox.cpp:2059
MyGUI::ISubWidgetText::setFontName
virtual void setFontName(const std::string &_value)
Definition: MyGUI_ISubWidgetText.h:133
MyGUI::ISubWidgetText::getViewOffset
virtual IntPoint getViewOffset() const
Definition: MyGUI_ISubWidgetText.h:116
MyGUI::TextIterator::getTextCharInfo
static UString getTextCharInfo(Char _char)
Definition: MyGUI_TextIterator.cpp:337
MyGUI::ISubWidgetText::setTextSelection
virtual void setTextSelection(size_t _start, size_t _end)
Definition: MyGUI_ISubWidgetText.h:37
MyGUI::EditBox::getTextRegion
IntCoord getTextRegion() override
Definition: MyGUI_EditBox.cpp:1657
MyGUI::MemberObsolete< EditBox >::deleteTextSelect
void deleteTextSelect()
Definition: MyGUI_BackwardCompatibility.cpp:176
MyGUI::EditBox::mMaxTextLength
size_t mMaxTextLength
Definition: MyGUI_EditBox.h:381
MyGUI::Widget
Widget properties. Skin childs. Widget widget description should be here.
Definition: MyGUI_Widget.h:37
MyGUI::EditBox::mModeMultiline
bool mModeMultiline
Definition: MyGUI_EditBox.h:366
MyGUI::TextIterator::getTagColour
bool getTagColour(UString &_colour) const
Definition: MyGUI_TextIterator.cpp:110
MyGUI::KeyCode::C
@ C
Definition: MyGUI_KeyCode.h:65
MyGUI::ITEM_NONE
const size_t ITEM_NONE
Definition: MyGUI_Macros.h:17
MyGUI::EditBox::getEditMultiLine
bool getEditMultiLine() const
Definition: MyGUI_EditBox.cpp:2194
MyGUI::EditBox::setTextShadow
void setTextShadow(bool _value) override
Definition: MyGUI_EditBox.cpp:2253
MyGUI::WidgetInput::eventMouseLostFocus
EventHandle_WidgetWidget eventMouseLostFocus
Definition: MyGUI_WidgetInput.h:115
MyGUI::types::TPoint< int >
MyGUI::UString::code_point
uint16 code_point
a single UTF-16 code point
Definition: MyGUI_UString.h:193
MyGUI::UString::begin
iterator begin()
returns an iterator to the first element of the string
Definition: MyGUI_UString.cpp:787
MyGUI::EditBox::getHScrollPosition
size_t getHScrollPosition()
Definition: MyGUI_EditBox.cpp:2054
MyGUI::EditBox::mCharPassword
Char mCharPassword
Definition: MyGUI_EditBox.h:378
MyGUI::types::TRect::width
T width() const
Definition: MyGUI_TRect.h:106
MyGUI::ScrollViewBase::getVScrollPage
virtual size_t getVScrollPage()
Definition: MyGUI_ScrollViewBase.cpp:333
MyGUI::EditBox::onMouseDrag
void onMouseDrag(int _left, int _top, MouseButton _id) override
Definition: MyGUI_EditBox.cpp:243
MyGUI::EditBox::mClientText
ISubWidgetText * mClientText
Definition: MyGUI_EditBox.h:383
MyGUI_ISubWidgetText.h
MyGUI::EditBox::setVisibleHScroll
void setVisibleHScroll(bool _value)
Definition: MyGUI_EditBox.cpp:2016
MyGUI::types::TSize::width
T width
Definition: MyGUI_TSize.h:20
MyGUI::ISubWidgetText::getCaption
virtual const UString & getCaption() const
Definition: MyGUI_ISubWidgetText.h:122
MyGUI::EDIT_MAX_UNDO
const size_t EDIT_MAX_UNDO
Definition: MyGUI_EditBox.cpp:27
MyGUI::ScrollViewBase::getHScrollPage
virtual size_t getHScrollPage()
Definition: MyGUI_ScrollViewBase.cpp:328
MyGUI::TextIterator::getTextNewLine
static UString getTextNewLine()
Definition: MyGUI_TextIterator.cpp:560
MyGUI::EditBox::notifyMouseReleased
void notifyMouseReleased(Widget *_sender, int _left, int _top, MouseButton _id)
Definition: MyGUI_EditBox.cpp:159
MyGUI::EditBox::mIsPressed
bool mIsPressed
Definition: MyGUI_EditBox.h:341
MyGUI::KeyCode::ArrowLeft
@ ArrowLeft
Definition: MyGUI_KeyCode.h:142
MyGUI::EditBox::setMaxTextLength
void setMaxTextLength(size_t _value)
Sets the max amount of text allowed in the edit field.
Definition: MyGUI_EditBox.cpp:2174
MyGUI::EditBox::mCursorPosition
size_t mCursorPosition
Definition: MyGUI_EditBox.h:350
MyGUI::KeyCode::Insert
@ Insert
Definition: MyGUI_KeyCode.h:147
MyGUI::Align
Definition: MyGUI_Align.h:20
MyGUI::KeyCode::RightShift
@ RightShift
Definition: MyGUI_KeyCode.h:73
MyGUI::types::TRect::left
T left
Definition: MyGUI_TRect.h:20
MyGUI::EditBox::getMaxTextLength
size_t getMaxTextLength() const
Gets the max amount of text allowed in the edit field.
Definition: MyGUI_EditBox.cpp:2179
MyGUI::KeyCode::LeftShift
@ LeftShift
Definition: MyGUI_KeyCode.h:61
MyGUI::EditBox::setTextSelection
void setTextSelection(size_t _start, size_t _end)
Definition: MyGUI_EditBox.cpp:874
MyGUI::ScrollViewBase::getContentSize
virtual IntSize getContentSize()
Definition: MyGUI_ScrollViewBase.cpp:309
MyGUI::EditBox::mModeStatic
bool mModeStatic
Definition: MyGUI_EditBox.h:367
MyGUI::TextIterator::moveNext
bool moveNext()
Definition: MyGUI_TextIterator.cpp:33
MyGUI::SkinItem::getSubWidgetText
ISubWidgetText * getSubWidgetText()
Definition: MyGUI_SkinItem.cpp:155
MyGUI::ISubWidgetText::getTextAlign
virtual Align getTextAlign() const
Definition: MyGUI_ISubWidgetText.h:146
MyGUI::ISubWidgetText::getTextSize
virtual IntSize getTextSize()
Definition: MyGUI_ISubWidgetText.h:109
MyGUI::EDIT_CLIPBOARD_TYPE_TEXT
const std::string EDIT_CLIPBOARD_TYPE_TEXT
Definition: MyGUI_EditBox.cpp:31
MyGUI::utility::parseValue
T parseValue(const std::string &_value)
Definition: MyGUI_StringUtility.h:112
MyGUI::UString
A UTF-16 string with implicit conversion to/from std::string and std::wstring.
Definition: MyGUI_UString.h:168
MyGUI::newDelegate
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
Definition: MyGUI_Delegate.h:99
MyGUI_Precompiled.h
MyGUI::EditBox::notifyMouseButtonDoubleClick
void notifyMouseButtonDoubleClick(Widget *_sender)
Definition: MyGUI_EditBox.cpp:205
MyGUI::EditBox::mModeReadOnly
bool mModeReadOnly
Definition: MyGUI_EditBox.h:364
MyGUI::EditBox::mModeWordWrap
bool mModeWordWrap
Definition: MyGUI_EditBox.h:368
MyGUI::EditBox::eraseView
void eraseView()
Definition: MyGUI_EditBox.cpp:1571
MyGUI::ISubWidgetText::setTextColour
virtual void setTextColour(const Colour &_value)
Definition: MyGUI_ISubWidgetText.h:127
MyGUI::EDIT_CURSOR_MAX_POSITION
const int EDIT_CURSOR_MAX_POSITION
Definition: MyGUI_EditBox.cpp:25
MyGUI::WidgetInput::setPointer
void setPointer(const std::string &_value)
Definition: MyGUI_WidgetInput.cpp:142
MyGUI::EditBox::setPosition
void setPosition(const IntPoint &_value) override
Definition: MyGUI_EditBox.cpp:1566
MyGUI::EDIT_MOUSE_WHEEL
const int EDIT_MOUSE_WHEEL
Definition: MyGUI_EditBox.cpp:32
MyGUI::EditBox::setOverflowToTheLeft
void setOverflowToTheLeft(bool _value)
Sets if surplus characters should push characters off the left side rather than ignored.
Definition: MyGUI_EditBox.cpp:2164
MyGUI::EditBox::setFontName
void setFontName(const std::string &_value) override
Definition: MyGUI_EditBox.cpp:1750
MyGUI::MouseButton
Definition: MyGUI_MouseButton.h:16
MyGUI::WidgetInput::getPointer
const std::string & getPointer() const
Definition: MyGUI_WidgetInput.cpp:147
MyGUI::EditBox::setVScrollPosition
void setVScrollPosition(size_t _index)
Definition: MyGUI_EditBox.cpp:2032
MyGUI::EditBox::mActionMouseTimer
float mActionMouseTimer
Definition: MyGUI_EditBox.h:347
MyGUI_ClipboardManager.h
MyGUI::EDIT_ACTION_MOUSE_ZONE
const int EDIT_ACTION_MOUSE_ZONE
Definition: MyGUI_EditBox.cpp:30
MyGUI::EditBox::getTextInterval
UString getTextInterval(size_t _start, size_t _count)
Definition: MyGUI_EditBox.cpp:1055
MyGUI::EditBox::getTextSelectionStart
size_t getTextSelectionStart() const
Definition: MyGUI_EditBox.cpp:1911
MyGUI::UString::_fwd_iterator
forward iterator for UString
Definition: MyGUI_UString.h:247
MyGUI::EditBox::setTextSelectionColour
void setTextSelectionColour(const Colour &_value)
Definition: MyGUI_EditBox.cpp:1931
MyGUI::TextCommandInfo::COMMAND_POSITION
@ COMMAND_POSITION
Definition: MyGUI_TextChangeHistory.h:24
MyGUI::KeyCode::PageUp
@ PageUp
Definition: MyGUI_KeyCode.h:141
MyGUI::ISubWidgetText::getCursorPosition
virtual size_t getCursorPosition() const
Definition: MyGUI_ISubWidgetText.h:72
MyGUI::EditBox::setEditPassword
void setEditPassword(bool _value)
Definition: MyGUI_EditBox.cpp:1192
MyGUI::EditBox::eventEditSelectAccept
EventPair< EventHandle_WidgetVoid, EventHandle_EditPtr > eventEditSelectAccept
Definition: MyGUI_EditBox.h:243
MyGUI_InputManager.h
MyGUI::EditBox::setTextAlign
void setTextAlign(Align _value) override
Definition: MyGUI_EditBox.cpp:1638
MyGUI::ScrollViewBase::getContentPosition
virtual IntPoint getContentPosition()
Definition: MyGUI_ScrollViewBase.cpp:314
MyGUI::EDIT_DEFAULT_MAX_TEXT_LENGTH
const size_t EDIT_DEFAULT_MAX_TEXT_LENGTH
Definition: MyGUI_EditBox.cpp:28
MyGUI::ISubWidgetText::setShadowColour
virtual void setShadowColour(const Colour &_value)
Definition: MyGUI_ISubWidgetText.h:153
MyGUI::KeyCode::Z
@ Z
Definition: MyGUI_KeyCode.h:63
MyGUI::types::TPoint::left
T left
Definition: MyGUI_TPoint.h:20
MyGUI::ISubWidgetText::setSelectBackground
virtual void setSelectBackground(bool _normal)
Definition: MyGUI_ISubWidgetText.h:45
MyGUI::InputManager::getMousePositionByLayer
IntPoint getMousePositionByLayer()
Definition: MyGUI_InputManager.cpp:602
MyGUI::ClipboardManager::setClipboardData
void setClipboardData(const std::string &_type, const std::string &_data)
Definition: MyGUI_ClipboardManager.cpp:58
MyGUI::TextIterator::saveStartPoint
bool saveStartPoint()
Definition: MyGUI_TextIterator.cpp:285
MyGUI_EditBox.h
MyGUI::UString::clear
void clear()
deletes all of the elements in the string
Definition: MyGUI_UString.cpp:647
MyGUI::ICroppedRectangle::getCoord
const IntCoord & getCoord() const
Definition: MyGUI_ICroppedRectangle.h:61
MyGUI::EditBox::mEndSelect
size_t mEndSelect
Definition: MyGUI_EditBox.h:356
MyGUI::WidgetInput::eventMouseDrag
EventPairAddParameter< EventHandle_WidgetIntInt, EventHandle_WidgetIntIntButton > eventMouseDrag
Definition: MyGUI_WidgetInput.h:130
MyGUI::InputManager::isControlPressed
bool isControlPressed() const
Definition: MyGUI_InputManager.cpp:663
MyGUI::ISubWidgetText::getCursorRect
IntRect getCursorRect(size_t _position)
Definition: MyGUI_ISubWidgetText.h:102
MyGUI::EditBox::setPasswordChar
void setPasswordChar(Char _value)
Definition: MyGUI_EditBox.cpp:1533
MyGUI::EditBox::isTextSelection
bool isTextSelection() const
Definition: MyGUI_EditBox.cpp:1921
MyGUI::ScrollViewBase::mScrollViewClient
Widget * mScrollViewClient
Definition: MyGUI_ScrollViewBase.h:46
MyGUI::EditBox::EditBox
EditBox()
Definition: MyGUI_EditBox.cpp:34
MyGUI::EditBox::mOverflowToTheLeft
bool mOverflowToTheLeft
Definition: MyGUI_EditBox.h:380
MyGUI::ISubWidgetText::getTextColour
virtual const Colour & getTextColour() const
Definition: MyGUI_ISubWidgetText.h:128
MyGUI::TextIterator::getOnlyText
static UString getOnlyText(const UString &_text)
Definition: MyGUI_TextIterator.cpp:206
MyGUI::EditBox::setTabPrinting
void setTabPrinting(bool _value)
Definition: MyGUI_EditBox.cpp:2214
MyGUI::EditBox::notifyScrollChangePosition
void notifyScrollChangePosition(ScrollBar *_sender, size_t _position)
Definition: MyGUI_EditBox.cpp:1671
MyGUI::ScrollViewBase::mVRange
size_t mVRange
Definition: MyGUI_ScrollViewBase.h:51
MyGUI::KeyCode::NumpadEnter
@ NumpadEnter
Definition: MyGUI_KeyCode.h:125
MyGUI::EditBox::getTextSize
IntSize getTextSize() override
Definition: MyGUI_EditBox.cpp:1664
MyGUI::TextIterator::getPosition
size_t getPosition() const
Definition: MyGUI_TextIterator.cpp:545
MyGUI::EditBox::mPasswordText
UString mPasswordText
Definition: MyGUI_EditBox.h:373
MyGUI_ScrollBar.h
MyGUI::ScrollBar::setScrollPosition
void setScrollPosition(size_t _value)
Definition: MyGUI_ScrollBar.cpp:350
MyGUI::EditBox::getTextSelectionEnd
size_t getTextSelectionEnd() const
Definition: MyGUI_EditBox.cpp:1916
MyGUI::EditBox::mCursorActive
bool mCursorActive
Definition: MyGUI_EditBox.h:345
MyGUI::KeyCode::ArrowUp
@ ArrowUp
Definition: MyGUI_KeyCode.h:140
MyGUI::EditBox::notifyMouseWheel
void notifyMouseWheel(Widget *_sender, int _rel)
Definition: MyGUI_EditBox.cpp:1690
MyGUI::ScrollViewBase::mHRange
size_t mHRange
Definition: MyGUI_ScrollViewBase.h:52
MyGUI::ScrollViewBase::mHScroll
ScrollBar * mHScroll
Definition: MyGUI_ScrollViewBase.h:45
MyGUI::EditBox::mTabPrinting
bool mTabPrinting
Definition: MyGUI_EditBox.h:370
MyGUI::EditBox::mCursorTimer
float mCursorTimer
Definition: MyGUI_EditBox.h:346
MyGUI::types::TSize< int >
MyGUI::TextIterator::getFromStart
UString getFromStart()
Definition: MyGUI_TextIterator.cpp:292
MyGUI::TextCommandInfo::COMMAND_ERASE
@ COMMAND_ERASE
Definition: MyGUI_TextChangeHistory.h:26
MyGUI::EditBox::deleteTextSelection
void deleteTextSelection()
Definition: MyGUI_EditBox.cpp:1926
MyGUI::EditBox::getEditWordWrap
bool getEditWordWrap() const
Definition: MyGUI_EditBox.cpp:2209
MyGUI::EditBox::setPropertyOverride
void setPropertyOverride(const std::string &_key, const std::string &_value) override
Definition: MyGUI_EditBox.cpp:2087
MyGUI::EditBox::mVectorUndoChangeInfo
DequeUndoRedoInfo mVectorUndoChangeInfo
Definition: MyGUI_EditBox.h:359
MyGUI::ISubWidgetText::setCaption
virtual void setCaption(const UString &_value)
Definition: MyGUI_ISubWidgetText.h:121
MyGUI::ISubWidgetText::setTextAlign
virtual void setTextAlign(Align _value)
Definition: MyGUI_ISubWidgetText.h:145
MyGUI::ScrollViewBase::getViewSize
virtual IntSize getViewSize()
Definition: MyGUI_ScrollViewBase.cpp:323
MyGUI::KeyCode::Return
@ Return
Definition: MyGUI_KeyCode.h:47
MyGUI::ISubWidgetText::setViewOffset
virtual void setViewOffset(const IntPoint &_point)
Definition: MyGUI_ISubWidgetText.h:115
MyGUI::EditBox::setTextShadowColour
void setTextShadowColour(const Colour &_value) override
Definition: MyGUI_EditBox.cpp:2245
MyGUI::EditBox::notifyMousePressed
void notifyMousePressed(Widget *_sender, int _left, int _top, MouseButton _id)
Definition: MyGUI_EditBox.cpp:139
MyGUI::ClipboardManager::getClipboardData
std::string getClipboardData(const std::string &_type)
Definition: MyGUI_ClipboardManager.cpp:71
MyGUI::EditBox::setEditMultiLine
void setEditMultiLine(bool _value)
Definition: MyGUI_EditBox.cpp:1973
MyGUI::EditBox::getOnlyText
UString getOnlyText()
Definition: MyGUI_EditBox.cpp:1946
MyGUI::EditBox::setEditWordWrap
void setEditWordWrap(bool _value)
Definition: MyGUI_EditBox.cpp:1741
MyGUI::Widget::assignWidget
void assignWidget(T *&_widget, const std::string &_name)
Definition: MyGUI_Widget.h:329
MyGUI::EDIT_CURSOR_TIMER
const float EDIT_CURSOR_TIMER
Definition: MyGUI_EditBox.cpp:23
MyGUI::EditBox::setVisibleVScroll
void setVisibleVScroll(bool _value)
Definition: MyGUI_EditBox.cpp:2010
MyGUI::KeyCode::Backspace
@ Backspace
Definition: MyGUI_KeyCode.h:33
MyGUI::Colour
Definition: MyGUI_Colour.h:17
MyGUI::types::TRect::top
T top
Definition: MyGUI_TRect.h:21
MyGUI::KeyCode::PageDown
@ PageDown
Definition: MyGUI_KeyCode.h:146
MyGUI::ISubWidgetText::setInvertSelected
virtual void setInvertSelected(bool _value)
Definition: MyGUI_ISubWidgetText.h:53
MyGUI_SkinManager.h
MyGUI::EDIT_OFFSET_HORZ_CURSOR
const float EDIT_OFFSET_HORZ_CURSOR
Definition: MyGUI_EditBox.cpp:29
MyGUI::Widget::getClientWidget
Widget * getClientWidget()
Definition: MyGUI_Widget.cpp:1289
MyGUI::types::TRect::height
T height() const
Definition: MyGUI_TRect.h:111
MyGUI::WidgetInput::eventMouseSetFocus
EventHandle_WidgetWidget eventMouseSetFocus
Definition: MyGUI_WidgetInput.h:122
MyGUI::InputManager::getLastPressedPosition
const IntPoint & getLastPressedPosition(MouseButton _id) const
Definition: MyGUI_InputManager.cpp:644
MyGUI::KeyCode::Delete
@ Delete
Definition: MyGUI_KeyCode.h:148
MyGUI::ICroppedRectangle::getHeight
int getHeight() const
Definition: MyGUI_ICroppedRectangle.h:119
MyGUI::IntSize
types::TSize< int > IntSize
Definition: MyGUI_Types.h:29
MyGUI::ISubWidgetText::setCursorPosition
virtual void setCursorPosition(size_t _index)
Definition: MyGUI_ISubWidgetText.h:77
MyGUI::EditBox::addText
void addText(const UString &_text)
Definition: MyGUI_EditBox.cpp:1956
MyGUI::TextIterator
Definition: MyGUI_TextIterator.h:19
MyGUI::ScrollViewBase::mVisibleVScroll
bool mVisibleVScroll
Definition: MyGUI_ScrollViewBase.h:49
MyGUI::EditBox::setCoord
void setCoord(const IntCoord &_value) override
Definition: MyGUI_EditBox.cpp:1590
MyGUI::WidgetInput::eventMouseButtonDoubleClick
EventHandle_WidgetVoid eventMouseButtonDoubleClick
Definition: MyGUI_WidgetInput.h:175
MyGUI::EditBox::mStartSelect
size_t mStartSelect
Definition: MyGUI_EditBox.h:355
MyGUI::ISubWidgetText::getInvertSelected
virtual bool getInvertSelected() const
Definition: MyGUI_ISubWidgetText.h:48
MyGUI::KeyCode::V
@ V
Definition: MyGUI_KeyCode.h:66
MyGUI::EditBox::setFontHeight
void setFontHeight(int _value) override
Definition: MyGUI_EditBox.cpp:1760
MyGUI::MouseButton::Left
@ Left
Definition: MyGUI_MouseButton.h:21
MyGUI::IntPoint
types::TPoint< int > IntPoint
Definition: MyGUI_Types.h:26
MyGUI::EditBox::updateView
void updateView()
Definition: MyGUI_EditBox.cpp:1770
MyGUI::Widget::_setWidgetState
bool _setWidgetState(const std::string &_value)
Definition: MyGUI_Widget.cpp:372
MyGUI::ISubWidgetText::setWordWrap
virtual void setWordWrap(bool _value)
Definition: MyGUI_ISubWidgetText.h:79
MyGUI::ScrollViewBase::mVisibleHScroll
bool mVisibleHScroll
Definition: MyGUI_ScrollViewBase.h:48
MyGUI::KeyCode::Y
@ Y
Definition: MyGUI_KeyCode.h:40
MyGUI::types::TCoord< int >
MyGUI::EditBox::getOverflowToTheLeft
bool getOverflowToTheLeft() const
Returns true if surplus characters will be pushed off the left rather than ignored.
Definition: MyGUI_EditBox.cpp:2169
MyGUI::EditBox::setEditReadOnly
void setEditReadOnly(bool _value)
Definition: MyGUI_EditBox.cpp:1966
MyGUI::EditBox::eraseText
void eraseText(size_t _start, size_t _count=1)
Definition: MyGUI_EditBox.cpp:1961
MyGUI::ICroppedRectangle::getWidth
int getWidth() const
Definition: MyGUI_ICroppedRectangle.h:114
MyGUI::EditBox::getEditStatic
bool getEditStatic() const
Definition: MyGUI_EditBox.cpp:2199
MyGUI::EditBox::setSize
void setSize(const IntSize &_value) override
Definition: MyGUI_EditBox.cpp:1583
MyGUI::ICroppedRectangle::getAbsoluteRect
IntRect getAbsoluteRect() const
Definition: MyGUI_ICroppedRectangle.h:72
MyGUI::WidgetInput::eventMouseWheel
EventHandle_WidgetInt eventMouseWheel
Definition: MyGUI_WidgetInput.h:145
MyGUI::EditBox::mIsFocus
bool mIsFocus
Definition: MyGUI_EditBox.h:343
MyGUI::ISubWidgetText::getFontHeight
virtual int getFontHeight() const
Definition: MyGUI_ISubWidgetText.h:140
MyGUI::IntRect
types::TRect< int > IntRect
Definition: MyGUI_Types.h:32
MyGUI::EditBox::getVScrollPosition
size_t getVScrollPosition()
Definition: MyGUI_EditBox.cpp:2027
MyGUI::UString::empty
bool empty() const
returns true if the string has no elements, false otherwise
Definition: MyGUI_UString.cpp:627
MyGUI
Definition: MyGUI_ActionController.h:15
MyGUI::ScrollViewBase::updateScrollSize
void updateScrollSize()
Definition: MyGUI_ScrollViewBase.cpp:26
MyGUI::EditBox::onKeyLostFocus
void onKeyLostFocus(Widget *_new) override
Definition: MyGUI_EditBox.cpp:273
MyGUI::UString::end
iterator end()
returns an iterator just past the end of the string
Definition: MyGUI_UString.cpp:803
MyGUI::EditBox::mOriginalPointer
std::string mOriginalPointer
Definition: MyGUI_EditBox.h:376
MyGUI::EditBox::setTextCursor
void setTextCursor(size_t _index)
Definition: MyGUI_EditBox.cpp:853
MyGUI::TextIterator::toTagsString
static UString toTagsString(const UString &_text)
Definition: MyGUI_TextIterator.cpp:358
MyGUI::EditBox::getTextLength
size_t getTextLength() const
Definition: MyGUI_EditBox.cpp:2159
MyGUI::KeyCode::A
@ A
Definition: MyGUI_KeyCode.h:49
MyGUI::ICroppedRectangle::getSize
IntSize getSize() const
Definition: MyGUI_ICroppedRectangle.h:56
MyGUI::EditBox::setCaption
virtual void setCaption(const UString &_value)
Definition: MyGUI_EditBox.cpp:1597
MyGUI_ResourceSkin.h
MyGUI::EditBox::getTextSelection
UString getTextSelection()
Definition: MyGUI_EditBox.cpp:1183
MyGUI::KeyCode
Definition: MyGUI_KeyCode.h:16
MyGUI::TextIterator::convertTagColour
static UString convertTagColour(const Colour &_colour)
Definition: MyGUI_TextIterator.cpp:345
MyGUI::EditBox::notifyMouseSetFocus
void notifyMouseSetFocus(Widget *_sender, Widget *_old)
Definition: MyGUI_EditBox.cpp:121
MyGUI::EditBox::notifyMouseDrag
void notifyMouseDrag(Widget *_sender, int _left, int _top, MouseButton _id)
Definition: MyGUI_EditBox.cpp:165
MyGUI::types::TRect::inside
bool inside(const TRect< T > &_value) const
Definition: MyGUI_TRect.h:141