4#ifndef _Stroika_Frameworks_Led_StandardStyledTextInteractor_h_
5#define _Stroika_Frameworks_Led_StandardStyledTextInteractor_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
17#include "StandardStyledTextImager.h"
18#include "TextInteractor.h"
20#include "StyledTextIO/StyledTextIO.h"
22namespace Stroika::Frameworks::Led {
32#define qIncludeLedNativeFileFormatSupportInStandardStyledTextInteractor 0
33#ifndef qIncludeLedNativeFileFormatSupportInStandardStyledTextInteractor
34#define qIncludeLedNativeFileFormatSupportInStandardStyledTextInteractor 1
37#if qStroika_FeatureSupported_XWindows
38 extern Led_ClipFormat kLedPrivateClipFormat;
39 extern Led_ClipFormat kRTFClipFormat;
40 extern Led_ClipFormat kHTMLClipFormat;
42 extern const Led_ClipFormat kLedPrivateClipFormat;
43 extern const Led_ClipFormat kRTFClipFormat;
44 extern const Led_ClipFormat kHTMLClipFormat;
54 using inherited = StyledTextIO::StyledTextIOWriter::SrcStream;
58 size_t selectionStart = 0,
size_t selectionEnd = kBadIndex);
59#if qStroika_Frameworks_Led_SupportGDI
64 virtual size_t readNTChars (Led_tChar* intoBuf,
size_t maxTChars)
override;
65 virtual size_t current_offset ()
const override;
66 virtual void seek_to (
size_t to)
override;
67 virtual size_t GetTotalTextLength ()
const override;
68 virtual vector<StyledInfoSummaryRecord> GetStyleInfo (
size_t from,
size_t len)
const override;
69#if qStroika_Frameworks_Led_SupportGDI
70 virtual vector<SimpleEmbeddedObjectStyleMarker*> CollectAllEmbeddingMarkersInRange (
size_t from,
size_t to)
const override;
72 virtual Table* GetTableAt (
size_t at)
const override;
73 virtual void SummarizeFontAndColorTable (set<SDKString>* fontNames, set<Color>* colorsUsed)
const override;
74 virtual size_t GetEmbeddingMarkerPosOffset ()
const override;
77 nonvirtual
size_t GetCurOffset ()
const;
78 nonvirtual
size_t GetSelStart ()
const;
79 nonvirtual
size_t GetSelEnd ()
const;
82 TextStore* fTextStore;
83 shared_ptr<AbstractStyleDatabaseRep> fStyleRunDatabase;
96 using inherited = StyledTextIO::StyledTextIOReader::SinkStream;
105 virtual size_t current_offset ()
const override;
106 virtual void AppendText (
const Led_tChar* text,
size_t nTChars,
const FontSpecification* fontSpec)
override;
107 virtual void ApplyStyle (
size_t from,
size_t to,
const vector<StyledInfoSummaryRecord>& styleRuns)
override;
109#if qStroika_Frameworks_Led_SupportGDI
110 virtual void InsertEmbeddingForExistingSentinel (SimpleEmbeddedObjectStyleMarker* embedding,
size_t at)
override;
111 virtual void AppendEmbedding (SimpleEmbeddedObjectStyleMarker* embedding)
override;
113 virtual void AppendSoftLineBreak ()
override;
114 virtual void InsertMarker (Marker* m,
size_t at,
size_t length,
MarkerOwner* markerOwner)
override;
115 virtual void Flush ()
override;
118 nonvirtual
size_t GetInsertionStart ()
const;
119 nonvirtual
void SetInsertionStart (
size_t insertionStart);
120 nonvirtual
size_t GetOriginalStart ()
const;
121 nonvirtual
size_t GetCachedTextSize ()
const;
124 nonvirtual
const vector<Led_tChar>& GetCachedText ()
const;
127 nonvirtual TextStore& GetTextStore ()
const;
128 nonvirtual shared_ptr<AbstractStyleDatabaseRep> GetStyleDatabase ()
const;
131 nonvirtual
void PushContext (TextStore* ts,
const shared_ptr<AbstractStyleDatabaseRep>& textStyleDatabase,
size_t insertionStart);
132 nonvirtual
void PopContext ();
136 TextStore* fTextStore;
137 shared_ptr<AbstractStyleDatabaseRep> fStyleRunDatabase;
138 size_t fOriginalStart;
139 size_t fInsertionStart;
141 vector<Context> fSavedContexts;
144 TextStore* fTextStore{
nullptr};
145 shared_ptr<AbstractStyleDatabaseRep> fStyleRunDatabase{
nullptr};
146 size_t fOriginalStart{0};
147 size_t fInsertionStart{0};
148 vector<StyledInfoSummaryRecord> fSavedStyleInfo{};
149 vector<Led_tChar> fCachedText{};
152#if qStroika_Frameworks_Led_SupportGDI
153 class SimpleEmbeddedObjectStyleMarker;
155 DISABLE_COMPILER_MSC_WARNING_START (4250)
171 class StandardStyledTextInteractor : public virtual TextInteractor, public StandardStyledTextImager {
173 using inherited =
void*;
175 StandardStyledTextInteractor ();
178 virtual ~StandardStyledTextInteractor () =
default;
188 static const CommandNames& GetCommandNames ();
189 static void SetCommandNames (
const CommandNames& cmdNames);
190 static CommandNames MakeDefaultCommandNames ();
193 static CommandNames sCommandNames;
196 virtual void HookLosingTextStore ()
override;
197 nonvirtual
void HookLosingTextStore_ ();
198 virtual void HookGainedNewTextStore ()
override;
199 nonvirtual
void HookGainedNewTextStore_ ();
202 virtual void SetDefaultFont (
const IncrementalFontSpecification& defaultFont)
override;
205 virtual void InteractiveSetFont (
const IncrementalFontSpecification& defaultFont);
208 virtual IncrementalFontSpecification GetContinuousStyleInfo (
size_t from,
size_t nTChars)
const override;
211 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
214 virtual bool ShouldEnablePasteCommand ()
const override;
215 virtual bool CanAcceptFlavor (Led_ClipFormat clipFormat)
const override;
218 class StyledTextFlavorPackageInternalizer;
219 class StyledTextFlavorPackageExternalizer;
222 virtual void HookStyleDatabaseChanged ()
override;
225 virtual shared_ptr<FlavorPackageInternalizer> MakeDefaultInternalizer ()
override;
226 virtual shared_ptr<FlavorPackageExternalizer> MakeDefaultExternalizer ()
override;
229 virtual bool ProcessSimpleClick (Led_Point clickedAt,
unsigned clickCount,
bool extendSelection,
size_t* dragAnchor)
override;
230 virtual void WhileSimpleMouseTracking (Led_Point newMousePos,
size_t dragAnchor)
override;
233 virtual void InteractiveReplace (
const Led_tChar* withWhat,
size_t withWhatCharCount, UpdateMode updateMode = eDefaultUpdate)
override;
234 virtual void SetSelection (
size_t start,
size_t end)
override;
235#if qUsingMemberNameToOverloadInWithUsingBug
236 void SetSelection (
size_t start,
size_t end, TextInteractor::UpdateMode updateMode)
238 TextInteractor::SetSelection (start, end, updateMode);
241 using TextInteractor::SetSelection;
244 virtual bool InteractiveReplaceEarlyPostReplaceHook (
size_t withWhatCharCount)
override;
245 nonvirtual
void SetSelection_ (
size_t start,
size_t end);
247 bool fEmptySelectionStyleSuppressMode;
248 FontSpecification fEmptySelectionStyle;
251 nonvirtual FontSpecification GetEmptySelectionStyle ()
const;
252 nonvirtual
void SetEmptySelectionStyle ();
253 nonvirtual
void SetEmptySelectionStyle (FontSpecification newEmptyFontSpec);
256 nonvirtual vector<SimpleEmbeddedObjectStyleMarker*> CollectAllEmbeddingMarkersInRange (
size_t from,
size_t to)
const;
259 virtual InteractiveReplaceCommand::SavedTextRep* InteractiveUndoHelperMakeTextRep (
size_t regionStart,
size_t regionEnd,
260 size_t selStart,
size_t selEnd)
override;
263 class EmptySelStyleTextRep;
264 friend class EmptySelStyleTextRep;
266 DISABLE_COMPILER_MSC_WARNING_END (4250)
279 struct StandardStyledTextInteractor::CommandNames {
280 SDKString fFontChangeCommandName;
288 class StandardStyledTextInteractor::StyledTextFlavorPackageInternalizer :
public virtual FlavorPackageInternalizer {
290 using inherited = FlavorPackageInternalizer;
293 StyledTextFlavorPackageInternalizer (TextStore& ts,
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase);
296 virtual bool InternalizeBestFlavor (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to)
override;
299 virtual void InternalizeFlavor_FILEGuessFormatsFromName (filesystem::path fileName, Led_ClipFormat* suggestedClipFormat,
300 optional<CodePage> suggestedCodePage)
override;
301 virtual void InternalizeFlavor_FILEGuessFormatsFromStartOfData (Led_ClipFormat* suggestedClipFormat, optional<CodePage> suggestedCodePage,
302 const byte* fileStart,
const byte* fileEnd)
override;
305#if qStroika_Foundation_Common_Platform_MacOS
306 virtual bool InternalizeFlavor_STYLAndTEXT (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to);
308#if qIncludeLedNativeFileFormatSupportInStandardStyledTextInteractor
309 virtual bool InternalizeFlavor_Native (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to);
311 virtual bool InternalizeFlavor_RTF (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to);
312 virtual bool InternalizeFlavor_HTML (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to);
313 virtual bool InternalizeFlavor_OtherRegisteredEmbedding (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to);
316 virtual StandardStyledTextIOSinkStream* mkStandardStyledTextIOSinkStream (
size_t insertionStart);
319 shared_ptr<AbstractStyleDatabaseRep> fStyleDatabase;
327 class StandardStyledTextInteractor::StyledTextFlavorPackageExternalizer :
public virtual FlavorPackageExternalizer {
329 using inherited = FlavorPackageExternalizer;
332 StyledTextFlavorPackageExternalizer (TextStore& ts,
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase);
335 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage,
size_t from,
size_t to)
override;
336 virtual void ExternalizeBestFlavor (WriterFlavorPackage& flavorPackage,
size_t from,
size_t to)
override;
339#if qStroika_Foundation_Common_Platform_MacOS
340 nonvirtual
void ExternalizeFlavor_STYL (WriterFlavorPackage& flavorPackage,
size_t from,
size_t to);
342#if qIncludeLedNativeFileFormatSupportInStandardStyledTextInteractor
343 nonvirtual
void ExternalizeFlavor_Native (WriterFlavorPackage& flavorPackage,
size_t from,
size_t to);
345 nonvirtual
void ExternalizeFlavor_RTF (WriterFlavorPackage& flavorPackage,
size_t from,
size_t to);
346 nonvirtual
void ExternalizeFlavor_SingleSelectedEmbedding (WriterFlavorPackage& flavorPackage, SimpleEmbeddedObjectStyleMarker* embedding);
349 virtual StandardStyledTextIOSrcStream* mkStandardStyledTextIOSrcStream (
size_t selectionStart,
size_t selectionEnd);
352 shared_ptr<AbstractStyleDatabaseRep> fStyleDatabase;
360 class StandardStyledTextInteractor::EmptySelStyleTextRep :
public InteractiveReplaceCommand::SavedTextRep {
362 using inherited = InteractiveReplaceCommand::SavedTextRep;
365 EmptySelStyleTextRep (StandardStyledTextInteractor* interactor,
size_t selStart,
size_t selEnd);
368 virtual size_t GetLength ()
const override;
369 virtual void InsertSelf (TextInteractor* interactor,
size_t at,
size_t nBytesToOverwrite)
override;
372 FontSpecification fSavedStyle;
383#include "StandardStyledTextInteractor.inl"