4#ifndef _Stroika_Frameworks_Led_TextInteractor_h_
5#define _Stroika_Frameworks_Led_TextInteractor_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
19#include "Stroika/Frameworks/Led/Command.h"
20#include "Stroika/Frameworks/Led/FlavorPackage.h"
21#include "Stroika/Frameworks/Led/SpellCheckEngine.h"
22#include "Stroika/Frameworks/Led/TextImager.h"
24namespace Stroika::Frameworks::Led {
29#define RoundUpToNearest_CMDNUMs_MACRO(x, n) (((x + 1) & ~(n - 1)) + n)
31#if qStroika_Frameworks_Led_SupportGDI
51 class TextInteractor :
public virtual TextImager {
56 virtual ~TextInteractor ();
65 nonvirtual CommandHandler* GetCommandHandler ()
const;
66 virtual void SetCommandHandler (CommandHandler* commandHandler);
69 CommandHandler* fCommandHandler;
72 nonvirtual
void BreakInGroupedCommands ();
73 nonvirtual
void BreakInGroupedCommandsIfDifferentCommand (
const SDKString& cmdName);
76 class SuppressCommandBreaksContext;
79 bool fSuppressCommandBreaksContext;
89 static const CommandNames& GetCommandNames ();
90 static void SetCommandNames (
const CommandNames& cmdNames);
91 static CommandNames MakeDefaultCommandNames ();
94 static CommandNames sCommandNames;
97 using CommandNumber = int;
100 static const CommandNumber kNoCommand_CmdID = 0;
104 kTextInteractorCommand_First = 0x100,
106 kUndo_CmdID = kTextInteractorCommand_First,
115 kSelectTextRow_CmdID,
116 kSelectParagraph_CmdID,
120 kEnterFindString_CmdID,
126 kTextInteractorCommand_Last = kTextInteractorCommand_First + 0xff
130 class CommandUpdater;
134 static DialogSupport& GetDialogSupport ();
135 static void SetDialogSupport (DialogSupport* ds);
138 static DialogSupport* sDialogSupport;
141 virtual bool OnUpdateCommand (CommandUpdater* enabler);
142 virtual bool OnPerformCommand (CommandNumber commandNumber);
145 virtual void OnUpdateCutCopyClearCommand (CommandUpdater* enabler);
146 virtual void OnUpdatePasteCommand (CommandUpdater* enabler);
147 virtual void OnUpdateUndoRedoCommand (CommandUpdater* enabler);
150 virtual void OnUpdateSelectTextCommand (CommandUpdater* enabler);
151 virtual void OnPerformSelectTextCommand (CommandNumber commandNumber);
155 class SearchParameters;
156 class ReplaceParameters;
159 virtual void OnFindCommand ();
160 virtual void OnFindAgainCommand ();
161 virtual void OnEnterFindString ();
162 virtual void OnReplaceCommand ();
163 virtual void OnReplaceAgainCommand ();
164 virtual void OnDoReplaceCommand (
const SearchParameters& searchFor,
const Led_tString& replaceWith);
165 virtual void OnDoReplaceAllCommand (
const SearchParameters& searchFor,
const Led_tString& replaceWith);
166 virtual void OnDoReplaceAllInSelectionCommand (
const SearchParameters& searchFor,
const Led_tString& replaceWith);
167 virtual void OnUpdateFindCommands (CommandUpdater* enabler);
170 static SearchParameters sSearchParameters;
173 virtual SearchParameters GetSearchParameters ()
const;
174 virtual void SetSearchParameters (
const SearchParameters& sp);
177 static ReplaceParameters sReplaceParameters;
180 virtual ReplaceParameters GetReplaceParameters ()
const;
181 virtual void SetReplaceParameters (
const ReplaceParameters& rp);
184 virtual vector<Led_tString> MergeRecentFindStrings (
const Led_tString& s,
const vector<Led_tString>& oldRecents);
187 virtual void OnSpellCheckCommand ();
188 virtual void OnUpdateSpellCheckCommand (CommandUpdater* enabler);
191 nonvirtual SpellCheckEngine* GetSpellCheckEngine ()
const;
192 nonvirtual
void SetSpellCheckEngine (SpellCheckEngine* spellCheckEngine);
195 SpellCheckEngine* fSpellCheckEngine;
198 class UndoableContextHelper;
200 friend class UndoableContextHelper;
230 nonvirtual UpdateMode GetDefaultUpdateMode ()
const;
231 nonvirtual UpdateMode RealUpdateMode (UpdateMode updateMode)
const;
234 virtual void SetDefaultUpdateMode (UpdateMode defaultUpdateMode);
237 UpdateMode fDefaultUpdateMode;
240 class TemporarilySetUpdateMode;
241 friend class TemporarilySetUpdateMode;
244 nonvirtual
void Refresh (UpdateMode updateMode = eDefaultUpdate)
const;
245 nonvirtual
void RefreshWindowRect (
const Led_Rect& windowRectArea, UpdateMode updateMode = eDefaultUpdate)
const;
246 nonvirtual
void Refresh (
size_t from,
size_t to, UpdateMode updateMode = eDefaultUpdate)
const;
247 nonvirtual
void Refresh (
const Marker* range, UpdateMode updateMode = eDefaultUpdate)
const;
257 virtual void RefreshWindowRect_ (
const Led_Rect& windowRectArea, UpdateMode updateMode)
const = 0;
264 nonvirtual
bool GetSmartCutAndPasteMode ()
const;
265 nonvirtual
void SetSmartCutAndPasteMode (
bool smartCutAndPasteMode);
268 bool fSmartCutAndPasteMode;
271 struct SmartCNPInfo {
274 bool fWordBreakAtSelStart;
275 bool fWordBreakAtSelEnd;
279 nonvirtual
bool LooksLikeSmartPastableText (
const Led_tChar* text,
size_t nTextTChars, SmartCNPInfo* smartCNPInfo)
const;
280 nonvirtual
void OptionallyAddExtraSpaceForSmartCutAndPasteModeAdds (
size_t selStart,
const SmartCNPInfo& smartCNPInfo);
281 nonvirtual
void OptionallyExpandSelectionForSmartCutAndPasteModeDeletes (
size_t* selStart,
size_t* selEnd);
284 virtual void SetSelectionShown (
bool shown)
override;
285 virtual void SetSelectionShown (
bool shown, UpdateMode updateMode);
288 nonvirtual
void ScrollToSelection (UpdateMode updateMode = eDefaultUpdate,
bool forceShowSelectionEndpoint =
false);
291 virtual void HookLosingTextStore ()
override;
292 nonvirtual
void HookLosingTextStore_ ();
293 virtual void HookGainedNewTextStore ()
override;
294 nonvirtual
void HookGainedNewTextStore_ ();
300 virtual bool ProcessSimpleClick (Led_Point clickedAt,
unsigned clickCount,
bool extendSelection,
size_t* dragAnchor);
303 nonvirtual
unsigned GetCurClickCount ()
const;
304 nonvirtual
void SetCurClickCount (
unsigned curClickCount, Foundation::Time::TimePointSeconds lastClickAt);
307 nonvirtual
void IncrementCurClickCount (Foundation::Time::TimePointSeconds lastClickAt);
308 nonvirtual
void UpdateClickCount (Foundation::Time::TimePointSeconds clickAtTime,
const Led_Point& clickAtLocation);
309 virtual bool ClickTimesAreCloseForDoubleClick (Foundation::Time::TimePointSeconds thisClick);
310 virtual bool PointsAreCloseForDoubleClick (
const Led_Point& p);
313 unsigned fClickCount;
314 Foundation::Time::TimePointSeconds fLastClickedAt{};
315 Led_Point fLastMouseDownAt;
318 virtual void WhileSimpleMouseTracking (Led_Point newMousePos,
size_t dragAnchor);
321 virtual void WhileTrackingConstrainSelection (
size_t* selStart,
size_t* selEnd);
322 virtual void WhileTrackingConstrainSelection_ForWholeWords (
size_t* selStart,
size_t* selEnd);
323 virtual void WhileTrackingConstrainSelection_ForWholeRows (
size_t* selStart,
size_t* selEnd);
326 virtual size_t GetCharAtClickLocation (
const Led_Point& where)
const;
329 nonvirtual
bool IsWholeWindowInvalid ()
const;
331 virtual void Draw (
const Led_Rect& subsetToDraw,
bool printing)
override;
334 nonvirtual
void NoteWholeWindowIsInvalid ();
335 nonvirtual
void NoteWindowPartiallyUpdated ();
338 bool fWholeWindowInvalid;
347 class CannotUpdateNow {};
348 nonvirtual
void Update (
bool ignoreCannotUpdateNowErrors =
true)
const;
349 nonvirtual
void UpdateWindowRect (
const Led_Rect& windowRectArea,
bool ignoreCannotUpdateNowErrors =
true)
const;
354 virtual void UpdateWindowRect_ (
const Led_Rect& windowRectArea)
const = 0;
357 nonvirtual
bool GetUseSecondaryHilight ()
const;
358 nonvirtual
void SetUseSecondaryHilight (
bool useSecondaryHilight);
361 bool fUseSecondaryHilight;
364 virtual void DrawBefore (
const Led_Rect& subsetToDraw,
bool printing);
365 virtual void DrawAfter (
const Led_Rect& subsetToDraw,
bool printing);
371 virtual void SetSelection (
size_t start,
size_t end)
override;
372 nonvirtual
void SetSelection (
size_t start,
size_t end, UpdateMode updateMode);
373 nonvirtual
void SetTopRowInWindow (
size_t newTopRow, UpdateMode updateMode = eDefaultUpdate);
374 nonvirtual
void ScrollByIfRoom (ptrdiff_t downBy, UpdateMode updateMode = eDefaultUpdate);
375 nonvirtual
void ScrollSoShowing (
size_t markerPos,
size_t andTryToShowMarkerPos = 0, UpdateMode updateMode = eDefaultUpdate);
376 nonvirtual
void SetDefaultFont (
const IncrementalFontSpecification& defaultFont, UpdateMode updateMode = eDefaultUpdate);
377 nonvirtual
void SetWindowRect (
const Led_Rect& windowRect, UpdateMode updateMode = eDefaultUpdate);
378 virtual void SetHScrollPos (CoordinateType hScrollPos)
override;
379 nonvirtual
void SetHScrollPos (CoordinateType hScrollPos, UpdateMode updateMode);
386 virtual void SetTopRowInWindowByMarkerPosition (
size_t markerPos, UpdateMode updateMode = eDefaultUpdate) = 0;
389 nonvirtual
bool GetUseBitmapScrollingOptimization ()
const;
390 nonvirtual
void SetUseBitmapScrollingOptimization (
bool useBitmapScrollingOptimization);
393 bool fUseBitmapScrollingOptimization;
396 nonvirtual
bool GetSuppressTypedControlCharacters ()
const;
397 nonvirtual
void SetSuppressTypedControlCharacters (
bool suppressTypedControlCharacters);
400 bool fSuppressTypedControlCharacters;
410 enum InteractiveUpdadeMode {
411 eInteractiveUpdateMode,
412 eNonInteractiveUpdateMode,
413 eIndeterminateInteractiveUpdateMode
415 nonvirtual InteractiveUpdadeMode GetInteractiveUpdateMode ()
const;
416 nonvirtual
void SetInteractiveUpdateMode (InteractiveUpdadeMode interactive);
417 nonvirtual
bool CheckIfCurrentUpdateIsInteractive ()
const;
420 InteractiveUpdadeMode fInteractiveUpdadeMode;
423 class InteractiveModeUpdater;
427 nonvirtual
void PreScrollHelper (UpdateMode updateMode, PreScrollInfo* preScrollInfo);
428 nonvirtual
void PostScrollHelper (PreScrollInfo preScrollInfo);
431 virtual void Replace (
size_t from,
size_t to,
const Led_tChar* withWhat,
size_t withWhatCharCount, UpdateMode updateMode = eDefaultUpdate);
434 class PreReplaceInfo;
435 virtual void PreReplace (
size_t from,
size_t to,
size_t withWhatCharCount, UpdateMode updateMode, PreReplaceInfo* preReplaceInfo);
436 virtual void PostReplace (PreReplaceInfo& preReplaceInfo);
437 virtual void AbortReplace (PreReplaceInfo& preReplaceInfo);
438 virtual void ExpandedFromAndToInPostReplace (
size_t from,
size_t newTo,
size_t stableTypingRegionStart,
439 size_t stableTypingRegionEnd,
size_t startPositionOfRowWhereReplaceBegins,
440 size_t startPositionOfRowAfterReplaceEnds,
size_t* expandedFrom,
size_t* expandedTo);
445 class PreReplaceInfo {
453 nonvirtual UpdateMode GetUpdateMode ()
const;
454 nonvirtual
size_t GetFrom ()
const;
455 nonvirtual
size_t GetTo ()
const;
458 TextInteractor* fTextInteractor;
459 UpdateMode fUpdateMode;
462 size_t fWithWhatCharCount;
463 Marker fBoundingUpdateMarker;
464 DistanceType fBoundingUpdateHeight;
465 DistanceType fStableTypingRegionHeight;
468 friend void TextInteractor::PreReplace (
size_t from,
size_t to,
size_t withWhatCharCount, UpdateMode updateMode, PreReplaceInfo* preReplaceInfo);
469 friend void TextInteractor::PostReplace (PreReplaceInfo& preReplaceInfo);
470 friend void TextInteractor::AbortReplace (PreReplaceInfo& preReplaceInfo);
485 virtual void InteractiveReplace (
const Led_tChar* withWhat,
size_t withWhatCharCount, UpdateMode updateMode = eDefaultUpdate);
488 nonvirtual
void InteractiveReplace_ (
size_t from,
size_t to,
const Led_tChar* withWhat,
size_t withWhatCharCount,
489 bool updateCursorPosition =
true,
bool validateTextForCharsetConformance =
true,
490 UpdateMode updateMode = eDefaultUpdate);
493 virtual bool InteractiveReplaceEarlyPostReplaceHook (
size_t withWhatCharCount);
497 virtual void PreInteractiveUndoHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
size_t regionStart,
size_t regionEnd,
498 size_t selStart,
size_t selEnd);
499 virtual void PostInteractiveUndoHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
size_t startOfInsert,
500 size_t endOfInsert,
const SDKString& cmdName);
501 virtual void PostInteractiveSimpleCharInsertUndoHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
size_t startOfInsert,
502 size_t endOfInsert,
const SDKString& cmdName);
503 virtual void PostInteractiveUndoPostHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
504 InteractiveReplaceCommand::SavedTextRep** afterRep,
size_t startOfInsert,
const SDKString& cmdName);
507 virtual InteractiveReplaceCommand::SavedTextRep* InteractiveUndoHelperMakeTextRep (
size_t regionStart,
size_t regionEnd,
508 size_t selStart,
size_t selEnd);
511 nonvirtual
void OnUndoCommand ();
512 nonvirtual
void OnRedoCommand ();
516 enum CursorMovementAction {
519 eCursorExtendingSelection
523 virtual void DoSingleCharCursorEdit (CursorMovementDirection direction, CursorMovementUnit movementUnit, CursorMovementAction action,
524 UpdateMode updateMode = eDefaultUpdate,
bool scrollToSelection =
true);
527 virtual void AboutToUpdateText (
const UpdateInfo& updateInfo)
override;
528 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
531 PreReplaceInfo fTmpPreReplaceInfo;
532 TextInteractor* fDoingUpdateModeReplaceOn;
536 virtual void OnCutCommand ();
537 virtual void OnCopyCommand ();
538 virtual void OnPasteCommand ();
539 virtual void OnClearCommand ();
543 virtual bool OnCopyCommand_Before ();
544 virtual void OnCopyCommand_After ();
545 virtual void OnCopyCommand_CopyFlavors ();
549 virtual bool ShouldEnablePasteCommand ()
const;
550 virtual bool OnPasteCommand_Before ();
551 virtual void OnPasteCommand_After ();
552 virtual void OnPasteCommand_PasteBestFlavor ();
553 virtual void OnPasteCommand_PasteFlavor_Specific (Led_ClipFormat format);
556 nonvirtual
bool PasteLooksLikeSmartCNP (SmartCNPInfo* scnpInfo)
const;
559 virtual void OnSelectAllCommand ();
563 virtual bool CanAcceptFlavor (Led_ClipFormat clipFormat)
const;
567 virtual void InternalizeBestFlavor (ReaderFlavorPackage& flavorPackage,
bool updateCursorPosition =
true,
bool autoScroll =
true,
568 UpdateMode updateMode = eDefaultUpdate);
569 virtual void InternalizeFlavor_Specific (ReaderFlavorPackage& flavorPackage, Led_ClipFormat format,
bool updateCursorPosition =
true,
570 bool autoScroll =
true, UpdateMode updateMode = eDefaultUpdate);
573 nonvirtual shared_ptr<FlavorPackageInternalizer> GetInternalizer ()
const;
574 nonvirtual
void SetInternalizer (
const shared_ptr<FlavorPackageInternalizer>& i);
577 shared_ptr<FlavorPackageInternalizer> fInternalizer;
580 virtual shared_ptr<FlavorPackageInternalizer> MakeDefaultInternalizer ();
581 virtual void HookInternalizerChanged ();
585 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage);
586 virtual void ExternalizeBestFlavor (WriterFlavorPackage& flavorPackage);
589 nonvirtual shared_ptr<FlavorPackageExternalizer> GetExternalizer ()
const;
590 nonvirtual
void SetExternalizer (
const shared_ptr<FlavorPackageExternalizer>& e);
593 shared_ptr<FlavorPackageExternalizer> fExternalizer;
596 virtual shared_ptr<FlavorPackageExternalizer> MakeDefaultExternalizer ();
597 virtual void HookExternalizerChanged ();
602 virtual void OnBadUserInput ();
617 nonvirtual ScrollBarType GetScrollBarType (VHSelect vh)
const;
618 virtual void SetScrollBarType (VHSelect vh, ScrollBarType scrollBarType);
621 nonvirtual
void SetScrollBarType_ (VHSelect vh, ScrollBarType scrollBarType);
624 ScrollBarType fScrollBarType[2];
630 virtual void InvalidateScrollBarParameters ()
override;
633 nonvirtual
void InvalidateScrollBarParameters_ ();
634 virtual void UpdateScrollBars ();
635 nonvirtual
void UpdateScrollBars_ ();
637 bool fScrollBarParamsValid;
643 virtual bool DelaySomeForScrollBarClick ();
646 Foundation::Time::TimePointSeconds fLastScrolledAt{0s};
649 nonvirtual
bool GetCaretShown ()
const;
650 nonvirtual
void SetCaretShown (
bool shown);
657 virtual bool GetCaretShownSituation ()
const;
660 nonvirtual
bool GetCaretShownAfterPos ()
const;
661 nonvirtual
void SetCaretShownAfterPos (
bool shownAfterPos);
664 virtual Led_Rect CalculateCaretRect ()
const;
668 virtual void InvalidateCaretState ();
671 bool fLeftSideOfSelectionInteresting;
678 bool fCaretShownAfterPos;
681 virtual void OnTypedNormalCharacter (Led_tChar theChar,
bool optionPressed,
bool shiftPressed,
bool commandPressed,
682 bool controlPressed,
bool altKeyPressed);
688 virtual bool QueryInputKeyStrokesPending ()
const = 0;
691 nonvirtual
void UpdateIfNoKeysPending ();
694 friend class SuppressCommandBreaksContext;
704 class TextInteractor::SuppressCommandBreaksContext {
706 SuppressCommandBreaksContext (TextInteractor& ti);
707 ~SuppressCommandBreaksContext ();
710 TextInteractor& fTextInteractor;
725 struct TextInteractor::CommandNames {
734 SDKString fReplaceAllInSelectionCommandName;
741 class TextInteractor::CommandUpdater {
743 using CommandNumber = TextInteractor::CommandNumber;
746 virtual CommandNumber GetCmdID ()
const = 0;
747 virtual bool GetEnabled ()
const = 0;
748 virtual void SetEnabled (
bool enabled) = 0;
749 virtual void SetChecked (
bool checked) = 0;
750 virtual void SetText (
const SDKChar* text) = 0;
757 class TextInteractor::DialogSupport {
759 using CommandNumber = TextInteractor::CommandNumber;
762 virtual void DisplayFindDialog (Led_tString* findText,
const vector<Led_tString>& recentFindSuggestions,
bool* wrapSearch,
763 bool* wholeWordSearch,
bool* caseSensative,
bool* pressedOK);
766 enum ReplaceButtonPressed {
767 eReplaceButton_Cancel,
769 eReplaceButton_Replace,
770 eReplaceButton_ReplaceAll,
771 eReplaceButton_ReplaceAllInSelection
773 virtual ReplaceButtonPressed DisplayReplaceDialog (Led_tString* findText,
const vector<Led_tString>& recentFindSuggestions,
774 Led_tString* replaceText,
bool* wrapSearch,
bool* wholeWordSearch,
bool* caseSensative);
777 class SpellCheckDialogCallback;
778 virtual void DisplaySpellCheckDialog (SpellCheckDialogCallback& callback);
786 class TextInteractor::DialogSupport::SpellCheckDialogCallback {
788 struct MisspellingInfo {
789 Led_tString fUndefinedWord;
790 vector<Led_tString> fSuggestions;
794 virtual MisspellingInfo* GetNextMisspelling () = 0;
797 virtual void DoIgnore () = 0;
798 virtual void DoIgnoreAll () = 0;
799 virtual void DoChange (
const Led_tString& changeTo) = 0;
800 virtual void DoChangeAll (
const Led_tString& changeTo) = 0;
801 virtual bool AddToDictionaryEnabled ()
const = 0;
802 virtual void AddToDictionary (
const Led_tString& newWord) = 0;
803 virtual void LookupOnWeb (
const Led_tString& word) = 0;
804 virtual bool OptionsDialogEnabled ()
const = 0;
805 virtual void OptionsDialog () = 0;
813 class TextInteractor::SearchParameters :
public TextStore::SearchParameters {
815 using inherited = TextStore::SearchParameters;
821 vector<Led_tString> fRecentFindStrings;
829 class TextInteractor::ReplaceParameters {
831 ReplaceParameters ();
834 Led_tString fReplaceWith;
857 class TextInteractor::UndoableContextHelper {
859 using SavedTextRep = InteractiveReplaceCommand::SavedTextRep;
862 UndoableContextHelper (TextInteractor& ti,
const SDKString& cmdName,
bool allowSmartCNPExpansion);
863 UndoableContextHelper (TextInteractor& ti,
const SDKString& cmdName,
size_t regionAndSelStart,
size_t regionAndSelEnd,
bool allowSmartCNPExpansion);
864 UndoableContextHelper (TextInteractor& ti,
const SDKString& cmdName,
size_t regionStart,
size_t regionEnd,
size_t selStart,
865 size_t selEnd,
bool allowSmartCNPExpansion);
866 ~UndoableContextHelper ();
869 nonvirtual
void CommandComplete ();
870 nonvirtual
void CommandComplete (
size_t endOfInsert);
873 nonvirtual
size_t GetUndoRegionStart ()
const;
874 nonvirtual
size_t GetUndoRegionEnd ()
const;
877 nonvirtual
bool GetSimplePlainTextInsertOptimization ()
const;
878 nonvirtual
void SetSimplePlainTextInsertOptimization (
bool simplePlainTextInsertOptimizationFlag);
881 bool fSimplePlainTextInsertOptimization;
884 TextInteractor& fTextInteractor;
888 SavedTextRep* fBefore;
889 bool fCommandComplete;
896 class TextInteractor::TemporarilySetUpdateMode {
898 TemporarilySetUpdateMode (TextInteractor& ti, TextInteractor::UpdateMode tmpUpdateMode);
899 ~TemporarilySetUpdateMode ();
902 TextInteractor& fTextInteractor;
903 UpdateMode fOldValue;
906 TemporarilySetUpdateMode (
const TemporarilySetUpdateMode&) =
delete;
907 TemporarilySetUpdateMode& operator= (
const TemporarilySetUpdateMode&) =
delete;
908 static void*
operator new (size_t);
916 class TextInteractor::InteractiveModeUpdater {
918 InteractiveModeUpdater (TextInteractor& ti,
bool interactive =
true);
919 ~InteractiveModeUpdater ();
922 TextInteractor& fTextInteractor;
923 InteractiveUpdadeMode fSavedMode;
930 class TextInteractor::PreScrollInfo {
935 UpdateMode fUpdateMode;
936 size_t fOldWindowStart;
937 CoordinateType fOldHScrollPos;
938 bool fTryTodoScrollbits;
939 size_t fOldLastRowStart;
942 friend void TextInteractor::PreScrollHelper (UpdateMode updateMode, PreScrollInfo* preScrollInfo);
943 friend void TextInteractor::PostScrollHelper (PreScrollInfo preScrollInfo);
950 class TextInteractor::BadUserInput {};
956 template <
typename TARGET_COMMAND_NUMBER>
957 class CommandNumberMapping {
959 using CommandNumber = TextInteractor::CommandNumber;
962 CommandNumberMapping ();
963 ~CommandNumberMapping ();
966 static CommandNumberMapping<TARGET_COMMAND_NUMBER>& Get ();
969 nonvirtual
void AddAssociation (TARGET_COMMAND_NUMBER externalCommandNumber, CommandNumber internalCommandNumber);
970 nonvirtual
void AddRangeAssociation (TARGET_COMMAND_NUMBER externalRangeStart, TARGET_COMMAND_NUMBER externalRangeEnd,
971 CommandNumber internalRangeStart, CommandNumber internalRangeEnd);
972 virtual CommandNumber Lookup (TARGET_COMMAND_NUMBER tcn)
const;
973 virtual TARGET_COMMAND_NUMBER ReverseLookup (CommandNumber cmdNum)
const;
976 using MAP_TYPE = map<TARGET_COMMAND_NUMBER, CommandNumber>;
979 pair<TARGET_COMMAND_NUMBER, TARGET_COMMAND_NUMBER> fExternalCmds;
980 pair<CommandNumber, CommandNumber> fInternalCmds;
982 using RANGE_VEC_TYPE = vector<RangeElt>;
983 RANGE_VEC_TYPE fRanges;
986 static CommandNumberMapping<TARGET_COMMAND_NUMBER>* sThe;
994 class SimpleCommandUpdater :
public TextInteractor::CommandUpdater {
996 SimpleCommandUpdater (CommandNumber cmdNum);
999 virtual CommandNumber GetCmdID ()
const override;
1000 virtual bool GetEnabled ()
const override;
1001 virtual void SetEnabled (
bool enabled)
override;
1002 virtual void SetChecked (
bool checked)
override;
1003 virtual void SetText (
const SDKChar* text)
override;
1006 CommandNumber fCommandNumber;
1026 template <
typename TEXTSTORE,
typename IMAGER>
1027 class TrivialImager_Interactor :
public TrivialImager<TEXTSTORE, IMAGER> {
1029 using inherited = TrivialImager<TEXTSTORE, IMAGER>;
1032 TrivialImager_Interactor (Tablet* t)
1036 TrivialImager_Interactor (Tablet* t, Led_Rect bounds,
const Led_tString& initialText = LED_TCHAR_OF (
""))
1041 this->SnagAttributesFromTablet ();
1042 this->SetWindowRect (bounds);
1043 this->GetTextStore ().Replace (0, 0, initialText.c_str (), initialText.length ());
1048 using UpdateMode =
typename IMAGER::UpdateMode;
1049 virtual bool QueryInputKeyStrokesPending ()
const override
1053 virtual void RefreshWindowRect_ ([[maybe_unused]]
const Led_Rect& windowRectArea, [[maybe_unused]] UpdateMode updateMode)
const override
1056 virtual void UpdateWindowRect_ ([[maybe_unused]]
const Led_Rect& windowRectArea)
const override
1069#include "TextInteractor.inl"
basic_string< SDKChar > SDKString
conditional_t< qStroika_Foundation_Characters_SDKUseswchar_t, wchar_t, char > SDKChar