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
52 class TextInteractor :
public virtual TextImager {
57 virtual ~TextInteractor ();
66 nonvirtual CommandHandler* GetCommandHandler ()
const;
67 virtual void SetCommandHandler (CommandHandler* commandHandler);
70 CommandHandler* fCommandHandler;
73 nonvirtual
void BreakInGroupedCommands ();
74 nonvirtual
void BreakInGroupedCommandsIfDifferentCommand (
const SDKString& cmdName);
77 class SuppressCommandBreaksContext;
80 bool fSuppressCommandBreaksContext;
90 static const CommandNames& GetCommandNames ();
91 static void SetCommandNames (
const CommandNames& cmdNames);
92 static CommandNames MakeDefaultCommandNames ();
95 static CommandNames sCommandNames;
98 using CommandNumber = int;
101 static const CommandNumber kNoCommand_CmdID = 0;
105 kTextInteractorCommand_First = 0x100,
107 kUndo_CmdID = kTextInteractorCommand_First,
116 kSelectTextRow_CmdID,
117 kSelectParagraph_CmdID,
121 kEnterFindString_CmdID,
127 kTextInteractorCommand_Last = kTextInteractorCommand_First + 0xff
131 class CommandUpdater;
135 static DialogSupport& GetDialogSupport ();
136 static void SetDialogSupport (DialogSupport* ds);
139 static DialogSupport* sDialogSupport;
142 virtual bool OnUpdateCommand (CommandUpdater* enabler);
143 virtual bool OnPerformCommand (CommandNumber commandNumber);
146 virtual void OnUpdateCutCopyClearCommand (CommandUpdater* enabler);
147 virtual void OnUpdatePasteCommand (CommandUpdater* enabler);
148 virtual void OnUpdateUndoRedoCommand (CommandUpdater* enabler);
151 virtual void OnUpdateSelectTextCommand (CommandUpdater* enabler);
152 virtual void OnPerformSelectTextCommand (CommandNumber commandNumber);
156 class SearchParameters;
157 class ReplaceParameters;
160 virtual void OnFindCommand ();
161 virtual void OnFindAgainCommand ();
162 virtual void OnEnterFindString ();
163 virtual void OnReplaceCommand ();
164 virtual void OnReplaceAgainCommand ();
165 virtual void OnDoReplaceCommand (
const SearchParameters& searchFor,
const Led_tString& replaceWith);
166 virtual void OnDoReplaceAllCommand (
const SearchParameters& searchFor,
const Led_tString& replaceWith);
167 virtual void OnDoReplaceAllInSelectionCommand (
const SearchParameters& searchFor,
const Led_tString& replaceWith);
168 virtual void OnUpdateFindCommands (CommandUpdater* enabler);
171 static SearchParameters sSearchParameters;
174 virtual SearchParameters GetSearchParameters ()
const;
175 virtual void SetSearchParameters (
const SearchParameters& sp);
178 static ReplaceParameters sReplaceParameters;
181 virtual ReplaceParameters GetReplaceParameters ()
const;
182 virtual void SetReplaceParameters (
const ReplaceParameters& rp);
185 virtual vector<Led_tString> MergeRecentFindStrings (
const Led_tString& s,
const vector<Led_tString>& oldRecents);
188 virtual void OnSpellCheckCommand ();
189 virtual void OnUpdateSpellCheckCommand (CommandUpdater* enabler);
192 nonvirtual SpellCheckEngine* GetSpellCheckEngine ()
const;
193 nonvirtual
void SetSpellCheckEngine (SpellCheckEngine* spellCheckEngine);
196 SpellCheckEngine* fSpellCheckEngine;
199 class UndoableContextHelper;
201 friend class UndoableContextHelper;
231 nonvirtual UpdateMode GetDefaultUpdateMode ()
const;
232 nonvirtual UpdateMode RealUpdateMode (UpdateMode updateMode)
const;
235 virtual void SetDefaultUpdateMode (UpdateMode defaultUpdateMode);
238 UpdateMode fDefaultUpdateMode;
241 class TemporarilySetUpdateMode;
242 friend class TemporarilySetUpdateMode;
245 nonvirtual
void Refresh (UpdateMode updateMode = eDefaultUpdate)
const;
246 nonvirtual
void RefreshWindowRect (
const Led_Rect& windowRectArea, UpdateMode updateMode = eDefaultUpdate)
const;
247 nonvirtual
void Refresh (
size_t from,
size_t to, UpdateMode updateMode = eDefaultUpdate)
const;
248 nonvirtual
void Refresh (
const Marker* range, UpdateMode updateMode = eDefaultUpdate)
const;
258 virtual void RefreshWindowRect_ (
const Led_Rect& windowRectArea, UpdateMode updateMode)
const = 0;
265 nonvirtual
bool GetSmartCutAndPasteMode ()
const;
266 nonvirtual
void SetSmartCutAndPasteMode (
bool smartCutAndPasteMode);
269 bool fSmartCutAndPasteMode;
272 struct SmartCNPInfo {
275 bool fWordBreakAtSelStart;
276 bool fWordBreakAtSelEnd;
280 nonvirtual
bool LooksLikeSmartPastableText (
const Led_tChar* text,
size_t nTextTChars, SmartCNPInfo* smartCNPInfo)
const;
281 nonvirtual
void OptionallyAddExtraSpaceForSmartCutAndPasteModeAdds (
size_t selStart,
const SmartCNPInfo& smartCNPInfo);
282 nonvirtual
void OptionallyExpandSelectionForSmartCutAndPasteModeDeletes (
size_t* selStart,
size_t* selEnd);
285 virtual void SetSelectionShown (
bool shown)
override;
286 virtual void SetSelectionShown (
bool shown, UpdateMode updateMode);
289 nonvirtual
void ScrollToSelection (UpdateMode updateMode = eDefaultUpdate,
bool forceShowSelectionEndpoint =
false);
292 virtual void HookLosingTextStore ()
override;
293 nonvirtual
void HookLosingTextStore_ ();
294 virtual void HookGainedNewTextStore ()
override;
295 nonvirtual
void HookGainedNewTextStore_ ();
301 virtual bool ProcessSimpleClick (Led_Point clickedAt,
unsigned clickCount,
bool extendSelection,
size_t* dragAnchor);
304 nonvirtual
unsigned GetCurClickCount ()
const;
305 nonvirtual
void SetCurClickCount (
unsigned curClickCount, Foundation::Time::TimePointSeconds lastClickAt);
308 nonvirtual
void IncrementCurClickCount (Foundation::Time::TimePointSeconds lastClickAt);
309 nonvirtual
void UpdateClickCount (Foundation::Time::TimePointSeconds clickAtTime,
const Led_Point& clickAtLocation);
310 virtual bool ClickTimesAreCloseForDoubleClick (Foundation::Time::TimePointSeconds thisClick);
311 virtual bool PointsAreCloseForDoubleClick (
const Led_Point& p);
314 unsigned fClickCount;
315 Foundation::Time::TimePointSeconds fLastClickedAt{};
316 Led_Point fLastMouseDownAt;
319 virtual void WhileSimpleMouseTracking (Led_Point newMousePos,
size_t dragAnchor);
322 virtual void WhileTrackingConstrainSelection (
size_t* selStart,
size_t* selEnd);
323 virtual void WhileTrackingConstrainSelection_ForWholeWords (
size_t* selStart,
size_t* selEnd);
324 virtual void WhileTrackingConstrainSelection_ForWholeRows (
size_t* selStart,
size_t* selEnd);
327 virtual size_t GetCharAtClickLocation (
const Led_Point& where)
const;
330 nonvirtual
bool IsWholeWindowInvalid ()
const;
332 virtual void Draw (
const Led_Rect& subsetToDraw,
bool printing)
override;
335 nonvirtual
void NoteWholeWindowIsInvalid ();
336 nonvirtual
void NoteWindowPartiallyUpdated ();
339 bool fWholeWindowInvalid;
348 class CannotUpdateNow {};
349 nonvirtual
void Update (
bool ignoreCannotUpdateNowErrors =
true)
const;
350 nonvirtual
void UpdateWindowRect (
const Led_Rect& windowRectArea,
bool ignoreCannotUpdateNowErrors =
true)
const;
355 virtual void UpdateWindowRect_ (
const Led_Rect& windowRectArea)
const = 0;
358 nonvirtual
bool GetUseSecondaryHilight ()
const;
359 nonvirtual
void SetUseSecondaryHilight (
bool useSecondaryHilight);
362 bool fUseSecondaryHilight;
365 virtual void DrawBefore (
const Led_Rect& subsetToDraw,
bool printing);
366 virtual void DrawAfter (
const Led_Rect& subsetToDraw,
bool printing);
372 virtual void SetSelection (
size_t start,
size_t end)
override;
373 nonvirtual
void SetSelection (
size_t start,
size_t end, UpdateMode updateMode);
374 nonvirtual
void SetTopRowInWindow (
size_t newTopRow, UpdateMode updateMode = eDefaultUpdate);
375 nonvirtual
void ScrollByIfRoom (ptrdiff_t downBy, UpdateMode updateMode = eDefaultUpdate);
376 nonvirtual
void ScrollSoShowing (
size_t markerPos,
size_t andTryToShowMarkerPos = 0, UpdateMode updateMode = eDefaultUpdate);
377 nonvirtual
void SetDefaultFont (
const IncrementalFontSpecification& defaultFont, UpdateMode updateMode = eDefaultUpdate);
378 nonvirtual
void SetWindowRect (
const Led_Rect& windowRect, UpdateMode updateMode = eDefaultUpdate);
379 virtual void SetHScrollPos (CoordinateType hScrollPos)
override;
380 nonvirtual
void SetHScrollPos (CoordinateType hScrollPos, UpdateMode updateMode);
387 virtual void SetTopRowInWindowByMarkerPosition (
size_t markerPos, UpdateMode updateMode = eDefaultUpdate) = 0;
390 nonvirtual
bool GetUseBitmapScrollingOptimization ()
const;
391 nonvirtual
void SetUseBitmapScrollingOptimization (
bool useBitmapScrollingOptimization);
394 bool fUseBitmapScrollingOptimization;
397 nonvirtual
bool GetSuppressTypedControlCharacters ()
const;
398 nonvirtual
void SetSuppressTypedControlCharacters (
bool suppressTypedControlCharacters);
401 bool fSuppressTypedControlCharacters;
411 enum InteractiveUpdadeMode {
412 eInteractiveUpdateMode,
413 eNonInteractiveUpdateMode,
414 eIndeterminateInteractiveUpdateMode
416 nonvirtual InteractiveUpdadeMode GetInteractiveUpdateMode ()
const;
417 nonvirtual
void SetInteractiveUpdateMode (InteractiveUpdadeMode interactive);
418 nonvirtual
bool CheckIfCurrentUpdateIsInteractive ()
const;
421 InteractiveUpdadeMode fInteractiveUpdadeMode;
424 class InteractiveModeUpdater;
428 nonvirtual
void PreScrollHelper (UpdateMode updateMode, PreScrollInfo* preScrollInfo);
429 nonvirtual
void PostScrollHelper (PreScrollInfo preScrollInfo);
432 virtual void Replace (
size_t from,
size_t to,
const Led_tChar* withWhat,
size_t withWhatCharCount, UpdateMode updateMode = eDefaultUpdate);
435 class PreReplaceInfo;
436 virtual void PreReplace (
size_t from,
size_t to,
size_t withWhatCharCount, UpdateMode updateMode, PreReplaceInfo* preReplaceInfo);
437 virtual void PostReplace (PreReplaceInfo& preReplaceInfo);
438 virtual void AbortReplace (PreReplaceInfo& preReplaceInfo);
439 virtual void ExpandedFromAndToInPostReplace (
size_t from,
size_t newTo,
size_t stableTypingRegionStart,
440 size_t stableTypingRegionEnd,
size_t startPositionOfRowWhereReplaceBegins,
441 size_t startPositionOfRowAfterReplaceEnds,
size_t* expandedFrom,
size_t* expandedTo);
446 class PreReplaceInfo {
454 nonvirtual UpdateMode GetUpdateMode ()
const;
455 nonvirtual
size_t GetFrom ()
const;
456 nonvirtual
size_t GetTo ()
const;
459 TextInteractor* fTextInteractor;
460 UpdateMode fUpdateMode;
463 size_t fWithWhatCharCount;
464 Marker fBoundingUpdateMarker;
465 DistanceType fBoundingUpdateHeight;
466 DistanceType fStableTypingRegionHeight;
469 friend void TextInteractor::PreReplace (
size_t from,
size_t to,
size_t withWhatCharCount, UpdateMode updateMode, PreReplaceInfo* preReplaceInfo);
470 friend void TextInteractor::PostReplace (PreReplaceInfo& preReplaceInfo);
471 friend void TextInteractor::AbortReplace (PreReplaceInfo& preReplaceInfo);
486 virtual void InteractiveReplace (
const Led_tChar* withWhat,
size_t withWhatCharCount, UpdateMode updateMode = eDefaultUpdate);
489 nonvirtual
void InteractiveReplace_ (
size_t from,
size_t to,
const Led_tChar* withWhat,
size_t withWhatCharCount,
490 bool updateCursorPosition =
true,
bool validateTextForCharsetConformance =
true,
491 UpdateMode updateMode = eDefaultUpdate);
494 virtual bool InteractiveReplaceEarlyPostReplaceHook (
size_t withWhatCharCount);
498 virtual void PreInteractiveUndoHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
size_t regionStart,
size_t regionEnd,
499 size_t selStart,
size_t selEnd);
500 virtual void PostInteractiveUndoHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
size_t startOfInsert,
501 size_t endOfInsert,
const SDKString& cmdName);
502 virtual void PostInteractiveSimpleCharInsertUndoHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
size_t startOfInsert,
503 size_t endOfInsert,
const SDKString& cmdName);
504 virtual void PostInteractiveUndoPostHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
505 InteractiveReplaceCommand::SavedTextRep** afterRep,
size_t startOfInsert,
const SDKString& cmdName);
508 virtual InteractiveReplaceCommand::SavedTextRep* InteractiveUndoHelperMakeTextRep (
size_t regionStart,
size_t regionEnd,
509 size_t selStart,
size_t selEnd);
512 nonvirtual
void OnUndoCommand ();
513 nonvirtual
void OnRedoCommand ();
517 enum CursorMovementAction {
520 eCursorExtendingSelection
524 virtual void DoSingleCharCursorEdit (CursorMovementDirection direction, CursorMovementUnit movementUnit, CursorMovementAction action,
525 UpdateMode updateMode = eDefaultUpdate,
bool scrollToSelection =
true);
528 virtual void AboutToUpdateText (
const UpdateInfo& updateInfo)
override;
529 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
532 PreReplaceInfo fTmpPreReplaceInfo;
533 TextInteractor* fDoingUpdateModeReplaceOn;
537 virtual void OnCutCommand ();
538 virtual void OnCopyCommand ();
539 virtual void OnPasteCommand ();
540 virtual void OnClearCommand ();
544#if qAccessCheckAcrossInstancesSometimesWrong
547 virtual bool OnCopyCommand_Before ();
548 virtual void OnCopyCommand_After ();
549 virtual void OnCopyCommand_CopyFlavors ();
553#if qAccessCheckAcrossInstancesSometimesWrong
556 virtual bool ShouldEnablePasteCommand ()
const;
557 virtual bool OnPasteCommand_Before ();
558 virtual void OnPasteCommand_After ();
559 virtual void OnPasteCommand_PasteBestFlavor ();
560 virtual void OnPasteCommand_PasteFlavor_Specific (Led_ClipFormat format);
563 nonvirtual
bool PasteLooksLikeSmartCNP (SmartCNPInfo* scnpInfo)
const;
566 virtual void OnSelectAllCommand ();
570 virtual bool CanAcceptFlavor (Led_ClipFormat clipFormat)
const;
574 virtual void InternalizeBestFlavor (ReaderFlavorPackage& flavorPackage,
bool updateCursorPosition =
true,
bool autoScroll =
true,
575 UpdateMode updateMode = eDefaultUpdate);
576 virtual void InternalizeFlavor_Specific (ReaderFlavorPackage& flavorPackage, Led_ClipFormat format,
bool updateCursorPosition =
true,
577 bool autoScroll =
true, UpdateMode updateMode = eDefaultUpdate);
580 nonvirtual shared_ptr<FlavorPackageInternalizer> GetInternalizer ()
const;
581 nonvirtual
void SetInternalizer (
const shared_ptr<FlavorPackageInternalizer>& i);
584 shared_ptr<FlavorPackageInternalizer> fInternalizer;
587 virtual shared_ptr<FlavorPackageInternalizer> MakeDefaultInternalizer ();
588 virtual void HookInternalizerChanged ();
592 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage);
593 virtual void ExternalizeBestFlavor (WriterFlavorPackage& flavorPackage);
596 nonvirtual shared_ptr<FlavorPackageExternalizer> GetExternalizer ()
const;
597 nonvirtual
void SetExternalizer (
const shared_ptr<FlavorPackageExternalizer>& e);
600 shared_ptr<FlavorPackageExternalizer> fExternalizer;
603 virtual shared_ptr<FlavorPackageExternalizer> MakeDefaultExternalizer ();
604 virtual void HookExternalizerChanged ();
609 virtual void OnBadUserInput ();
624 nonvirtual ScrollBarType GetScrollBarType (VHSelect vh)
const;
625 virtual void SetScrollBarType (VHSelect vh, ScrollBarType scrollBarType);
628 nonvirtual
void SetScrollBarType_ (VHSelect vh, ScrollBarType scrollBarType);
631 ScrollBarType fScrollBarType[2];
637 virtual void InvalidateScrollBarParameters ()
override;
640 nonvirtual
void InvalidateScrollBarParameters_ ();
641 virtual void UpdateScrollBars ();
642 nonvirtual
void UpdateScrollBars_ ();
644 bool fScrollBarParamsValid;
650 virtual bool DelaySomeForScrollBarClick ();
653 Foundation::Time::TimePointSeconds fLastScrolledAt{0s};
656 nonvirtual
bool GetCaretShown ()
const;
657 nonvirtual
void SetCaretShown (
bool shown);
664 virtual bool GetCaretShownSituation ()
const;
667 nonvirtual
bool GetCaretShownAfterPos ()
const;
668 nonvirtual
void SetCaretShownAfterPos (
bool shownAfterPos);
671 virtual Led_Rect CalculateCaretRect ()
const;
675 virtual void InvalidateCaretState ();
678 bool fLeftSideOfSelectionInteresting;
685 bool fCaretShownAfterPos;
688 virtual void OnTypedNormalCharacter (Led_tChar theChar,
bool optionPressed,
bool shiftPressed,
bool commandPressed,
689 bool controlPressed,
bool altKeyPressed);
695 virtual bool QueryInputKeyStrokesPending ()
const = 0;
698 nonvirtual
void UpdateIfNoKeysPending ();
700#if qStroika_Foundation_Common_Platform_MacOS || qStroika_FeatureSupported_XWindows
702 static float GetTickCountBetweenBlinks ();
706 friend class SuppressCommandBreaksContext;
716 class TextInteractor::SuppressCommandBreaksContext {
718 SuppressCommandBreaksContext (TextInteractor& ti);
719 ~SuppressCommandBreaksContext ();
722 TextInteractor& fTextInteractor;
737 struct TextInteractor::CommandNames {
746 SDKString fReplaceAllInSelectionCommandName;
753 class TextInteractor::CommandUpdater {
755 using CommandNumber = TextInteractor::CommandNumber;
758 virtual CommandNumber GetCmdID ()
const = 0;
759 virtual bool GetEnabled ()
const = 0;
760 virtual void SetEnabled (
bool enabled) = 0;
761 virtual void SetChecked (
bool checked) = 0;
762 virtual void SetText (
const SDKChar* text) = 0;
769 class TextInteractor::DialogSupport {
771 using CommandNumber = TextInteractor::CommandNumber;
774 virtual void DisplayFindDialog (Led_tString* findText,
const vector<Led_tString>& recentFindSuggestions,
bool* wrapSearch,
775 bool* wholeWordSearch,
bool* caseSensative,
bool* pressedOK);
778 enum ReplaceButtonPressed {
779 eReplaceButton_Cancel,
781 eReplaceButton_Replace,
782 eReplaceButton_ReplaceAll,
783 eReplaceButton_ReplaceAllInSelection
785 virtual ReplaceButtonPressed DisplayReplaceDialog (Led_tString* findText,
const vector<Led_tString>& recentFindSuggestions,
786 Led_tString* replaceText,
bool* wrapSearch,
bool* wholeWordSearch,
bool* caseSensative);
789 class SpellCheckDialogCallback;
790 virtual void DisplaySpellCheckDialog (SpellCheckDialogCallback& callback);
798 class TextInteractor::DialogSupport::SpellCheckDialogCallback {
800 struct MisspellingInfo {
801 Led_tString fUndefinedWord;
802 vector<Led_tString> fSuggestions;
806 virtual MisspellingInfo* GetNextMisspelling () = 0;
809 virtual void DoIgnore () = 0;
810 virtual void DoIgnoreAll () = 0;
811 virtual void DoChange (
const Led_tString& changeTo) = 0;
812 virtual void DoChangeAll (
const Led_tString& changeTo) = 0;
813 virtual bool AddToDictionaryEnabled ()
const = 0;
814 virtual void AddToDictionary (
const Led_tString& newWord) = 0;
815 virtual void LookupOnWeb (
const Led_tString& word) = 0;
816 virtual bool OptionsDialogEnabled ()
const = 0;
817 virtual void OptionsDialog () = 0;
825 class TextInteractor::SearchParameters :
public TextStore::SearchParameters {
827 using inherited = TextStore::SearchParameters;
833 vector<Led_tString> fRecentFindStrings;
841 class TextInteractor::ReplaceParameters {
843 ReplaceParameters ();
846 Led_tString fReplaceWith;
869 class TextInteractor::UndoableContextHelper {
871 using SavedTextRep = InteractiveReplaceCommand::SavedTextRep;
874 UndoableContextHelper (TextInteractor& ti,
const SDKString& cmdName,
bool allowSmartCNPExpansion);
875 UndoableContextHelper (TextInteractor& ti,
const SDKString& cmdName,
size_t regionAndSelStart,
size_t regionAndSelEnd,
bool allowSmartCNPExpansion);
876 UndoableContextHelper (TextInteractor& ti,
const SDKString& cmdName,
size_t regionStart,
size_t regionEnd,
size_t selStart,
877 size_t selEnd,
bool allowSmartCNPExpansion);
878 ~UndoableContextHelper ();
881 nonvirtual
void CommandComplete ();
882 nonvirtual
void CommandComplete (
size_t endOfInsert);
885 nonvirtual
size_t GetUndoRegionStart ()
const;
886 nonvirtual
size_t GetUndoRegionEnd ()
const;
889 nonvirtual
bool GetSimplePlainTextInsertOptimization ()
const;
890 nonvirtual
void SetSimplePlainTextInsertOptimization (
bool simplePlainTextInsertOptimizationFlag);
893 bool fSimplePlainTextInsertOptimization;
896 TextInteractor& fTextInteractor;
900 SavedTextRep* fBefore;
901 bool fCommandComplete;
908 class TextInteractor::TemporarilySetUpdateMode {
910 TemporarilySetUpdateMode (TextInteractor& ti, TextInteractor::UpdateMode tmpUpdateMode);
911 ~TemporarilySetUpdateMode ();
914 TextInteractor& fTextInteractor;
915 UpdateMode fOldValue;
918 TemporarilySetUpdateMode (
const TemporarilySetUpdateMode&) =
delete;
919 TemporarilySetUpdateMode& operator= (
const TemporarilySetUpdateMode&) =
delete;
920 static void*
operator new (size_t);
928 class TextInteractor::InteractiveModeUpdater {
930 InteractiveModeUpdater (TextInteractor& ti,
bool interactive =
true);
931 ~InteractiveModeUpdater ();
934 TextInteractor& fTextInteractor;
935 InteractiveUpdadeMode fSavedMode;
942 class TextInteractor::PreScrollInfo {
947 UpdateMode fUpdateMode;
948 size_t fOldWindowStart;
949 CoordinateType fOldHScrollPos;
950 bool fTryTodoScrollbits;
951 size_t fOldLastRowStart;
954 friend void TextInteractor::PreScrollHelper (UpdateMode updateMode, PreScrollInfo* preScrollInfo);
955 friend void TextInteractor::PostScrollHelper (PreScrollInfo preScrollInfo);
962 class TextInteractor::BadUserInput {};
968 template <
typename TARGET_COMMAND_NUMBER>
969 class CommandNumberMapping {
971 using CommandNumber = TextInteractor::CommandNumber;
974 CommandNumberMapping ();
975 ~CommandNumberMapping ();
978 static CommandNumberMapping<TARGET_COMMAND_NUMBER>& Get ();
981 nonvirtual
void AddAssociation (TARGET_COMMAND_NUMBER externalCommandNumber, CommandNumber internalCommandNumber);
982 nonvirtual
void AddRangeAssociation (TARGET_COMMAND_NUMBER externalRangeStart, TARGET_COMMAND_NUMBER externalRangeEnd,
983 CommandNumber internalRangeStart, CommandNumber internalRangeEnd);
984 virtual CommandNumber Lookup (TARGET_COMMAND_NUMBER tcn)
const;
985 virtual TARGET_COMMAND_NUMBER ReverseLookup (CommandNumber cmdNum)
const;
988 using MAP_TYPE = map<TARGET_COMMAND_NUMBER, CommandNumber>;
991 pair<TARGET_COMMAND_NUMBER, TARGET_COMMAND_NUMBER> fExternalCmds;
992 pair<CommandNumber, CommandNumber> fInternalCmds;
994 using RANGE_VEC_TYPE = vector<RangeElt>;
995 RANGE_VEC_TYPE fRanges;
998 static CommandNumberMapping<TARGET_COMMAND_NUMBER>* sThe;
1006 class SimpleCommandUpdater :
public TextInteractor::CommandUpdater {
1008 SimpleCommandUpdater (CommandNumber cmdNum);
1011 virtual CommandNumber GetCmdID ()
const override;
1012 virtual bool GetEnabled ()
const override;
1013 virtual void SetEnabled (
bool enabled)
override;
1014 virtual void SetChecked (
bool checked)
override;
1015 virtual void SetText (
const SDKChar* text)
override;
1018 CommandNumber fCommandNumber;
1024 DISABLE_COMPILER_MSC_WARNING_START (4250)
1039 template <typename TEXTSTORE, typename IMAGER>
1040 class TrivialImager_Interactor : public TrivialImager<TEXTSTORE, IMAGER> {
1042 using inherited = TrivialImager<TEXTSTORE, IMAGER>;
1045 TrivialImager_Interactor (Tablet* t)
1049 TrivialImager_Interactor (Tablet* t, Led_Rect bounds,
const Led_tString& initialText = LED_TCHAR_OF (
""))
1054 this->SnagAttributesFromTablet ();
1055 this->SetWindowRect (bounds);
1056 this->GetTextStore ().Replace (0, 0, initialText.c_str (), initialText.length ());
1061 using UpdateMode =
typename IMAGER::UpdateMode;
1062 virtual bool QueryInputKeyStrokesPending ()
const override
1066 virtual void RefreshWindowRect_ ([[maybe_unused]]
const Led_Rect& windowRectArea, [[maybe_unused]] UpdateMode updateMode)
const override
1069 virtual void UpdateWindowRect_ ([[maybe_unused]]
const Led_Rect& windowRectArea)
const override
1073 DISABLE_COMPILER_MSC_WARNING_END (4250)
1083#include "TextInteractor.inl"
conditional_t< qTargetPlatformSDKUseswchar_t, wchar_t, char > SDKChar
basic_string< SDKChar > SDKString