4#ifndef _Stroika_Frameworks_Led_WordProcessor_h_
5#define _Stroika_Frameworks_Led_WordProcessor_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
18#include "Stroika/Frameworks/Led/HiddenText.h"
19#include "Stroika/Frameworks/Led/IdleManager.h"
20#include "Stroika/Frameworks/Led/MarkerCover.h"
21#include "Stroika/Frameworks/Led/StandardStyledTextInteractor.h"
22#include "Stroika/Frameworks/Led/TextInteractorMixins.h"
23#include "Stroika/Frameworks/Led/WordWrappedTextInteractor.h"
25namespace Stroika::Frameworks::Led {
27 class IncrementalParagraphInfo;
28 class WordProcessorTable;
30 constexpr inline TWIPS kBadCachedFarthestRightMarginInDocument = TWIPS (-1);
35#ifndef qStroika_Frameworks_Led_SupportTables
36#define qStroika_Frameworks_Led_SupportTables qStroika_Frameworks_Led_SupportGDI
54 nonvirtual Justification GetJustification ()
const;
55 nonvirtual
void SetJustification (Justification justification);
58 Justification fJustification{eLeftJustify};
61 nonvirtual
const StandardTabStopList& GetTabStopList ()
const;
62 nonvirtual
void SetTabStopList (
const StandardTabStopList& tabStops);
65 StandardTabStopList fTabStops{};
68 nonvirtual TWIPS GetLeftMargin ()
const;
69 nonvirtual TWIPS GetRightMargin ()
const;
70 nonvirtual
void SetMargins (TWIPS lhs, TWIPS rhs);
74 TWIPS fRightMargin{1};
77 nonvirtual TWIPS GetFirstIndent ()
const;
78 nonvirtual
void SetFirstIndent (TWIPS firstIndent);
81 TWIPS fFirstIndent{0};
84 nonvirtual TWIPS GetSpaceBefore ()
const;
85 nonvirtual
void SetSpaceBefore (TWIPS sb);
86 nonvirtual TWIPS GetSpaceAfter ()
const;
87 nonvirtual
void SetSpaceAfter (TWIPS sa);
88 nonvirtual LineSpacing GetLineSpacing ()
const;
89 nonvirtual
void SetLineSpacing (LineSpacing sl);
92 TWIPS fSpaceBefore{0};
94 LineSpacing fLineSpacing{};
97 nonvirtual ListStyle GetListStyle ()
const;
98 nonvirtual
void SetListStyle (ListStyle listStyle);
101 ListStyle fListStyle{eListStyle_None};
104 nonvirtual
unsigned char GetListIndentLevel ()
const;
105 nonvirtual
void SetListIndentLevel (
unsigned char indentLevel);
108 unsigned char fListIndentLevel{0};
114 constexpr bool operator== (
const ParagraphInfo&)
const =
default;
136 nonvirtual Justification GetJustification ()
const;
137 nonvirtual
void SetJustification (Justification justification);
138 nonvirtual
bool GetJustification_Valid ()
const;
139 nonvirtual
void InvalidateJustification ();
142 bool fJustificationValid;
145 nonvirtual
const StandardTabStopList& GetTabStopList ()
const;
146 nonvirtual
void SetTabStopList (
const StandardTabStopList& tabStops);
147 nonvirtual
bool GetTabStopList_Valid ()
const;
148 nonvirtual
void InvalidateTabStopList ();
151 bool fTabStopListValid;
154 nonvirtual TWIPS GetLeftMargin ()
const;
155 nonvirtual TWIPS GetRightMargin ()
const;
156 nonvirtual
void SetMargins (TWIPS lhs, TWIPS rhs);
157 nonvirtual
bool GetMargins_Valid ()
const;
158 nonvirtual
void InvalidateMargins ();
164 nonvirtual TWIPS GetFirstIndent ()
const;
165 nonvirtual
void SetFirstIndent (TWIPS firstIndent);
166 nonvirtual
bool GetFirstIndent_Valid ()
const;
167 nonvirtual
void InvalidateFirstIndent ();
170 bool fFirstIndentValid;
173 nonvirtual TWIPS GetSpaceBefore ()
const;
174 nonvirtual
void SetSpaceBefore (TWIPS sb);
175 nonvirtual
bool GetSpaceBefore_Valid ()
const;
176 nonvirtual
void InvalidateSpaceBefore ();
177 nonvirtual TWIPS GetSpaceAfter ()
const;
178 nonvirtual
void SetSpaceAfter (TWIPS sa);
179 nonvirtual
bool GetSpaceAfter_Valid ()
const;
180 nonvirtual
void InvalidateSpaceAfter ();
181 nonvirtual LineSpacing GetLineSpacing ()
const;
182 nonvirtual
void SetLineSpacing (LineSpacing sl);
183 nonvirtual
bool GetLineSpacing_Valid ()
const;
184 nonvirtual
void InvalidateLineSpacing ();
186 nonvirtual ListStyle GetListStyle ()
const;
187 nonvirtual
void SetListStyle (ListStyle listStyle);
188 nonvirtual
bool GetListStyle_Valid ()
const;
189 nonvirtual
void InvalidateListStyle ();
191 nonvirtual
unsigned char GetListIndentLevel ()
const;
192 nonvirtual
void SetListIndentLevel (
unsigned char indentLevel);
193 nonvirtual
bool GetListIndentLevel_Valid ()
const;
194 nonvirtual
void InvalidateListIndentLevel ();
197 bool fSpaceBeforeValid;
198 bool fSpaceAfterValid;
199 bool fLineSpacingValid;
200 bool fListStyleValid;
201 bool fListIndentLevelValid;
209 class AbstractParagraphDatabaseRep :
public virtual MarkerOwner {
214 AbstractParagraphDatabaseRep ();
217 virtual shared_ptr<Partition> GetPartition ()
const = 0;
218 virtual void SetPartition (
const shared_ptr<Partition>& partitionPtr) = 0;
221 virtual const ParagraphInfo& GetParagraphInfo (
size_t charAfterPos)
const = 0;
222 virtual vector<pair<ParagraphInfo, size_t>> GetParagraphInfo (
size_t charAfterPos,
size_t nTCharsFollowing)
const = 0;
224 virtual void SetParagraphInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const IncrementalParagraphInfo& infoForMarkers) = 0;
225 virtual void SetParagraphInfo (
size_t charAfterPos,
const vector<pair<IncrementalParagraphInfo, size_t>>& infoForMarkers) = 0;
226 virtual void SetParagraphInfo (
size_t charAfterPos,
const vector<pair<ParagraphInfo, size_t>>& infoForMarkers) = 0;
229 bool fSomeInvalidTables;
232 TWIPS fCachedFarthestRightMarginInDocument;
235 friend class WordProcessor;
236 friend class WordProcessorTable;
241 class ParagraphInfoMarker :
public Marker {
243 ParagraphInfoMarker (ParagraphInfo paragraphInfo = {});
245 nonvirtual
const ParagraphInfo& GetInfo ()
const;
246 nonvirtual
void SetInfo (ParagraphInfo paragraphInfo);
249 ParagraphInfo fParagraphInfo;
252 DISABLE_COMPILER_MSC_WARNING_START (4250)
260 using inheritedMC = MarkerCover<ParagraphInfoMarker, ParagraphInfo, IncrementalParagraphInfo>;
263 using PartitionMarker = Partition::PartitionMarker;
269 virtual shared_ptr<Partition> GetPartition ()
const override;
270 virtual void SetPartition (
const shared_ptr<Partition>& partitionPtr)
override;
273 shared_ptr<Partition> fPartition;
280 virtual const ParagraphInfo& GetParagraphInfo (
size_t charAfterPos)
const override;
281 virtual vector<pair<ParagraphInfo, size_t>> GetParagraphInfo (
size_t charAfterPos,
size_t nTCharsFollowing)
const override;
282 virtual void SetParagraphInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const IncrementalParagraphInfo& infoForMarkers)
override;
283 virtual void SetParagraphInfo (
size_t charAfterPos,
const vector<pair<IncrementalParagraphInfo, size_t>>& infoForMarkers)
override;
284 virtual void SetParagraphInfo (
size_t charAfterPos,
const vector<pair<ParagraphInfo, size_t>>& infoForMarkers)
override;
287 virtual void SetInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const IncrementalParagraphInfo& infoForMarkers)
override;
288 virtual void SetInfos (
size_t charAfterPos,
const vector<pair<IncrementalParagraphInfo, size_t>>& infoForMarkers)
override;
291 virtual void NoteCoverRangeDirtied (
size_t from,
size_t to,
const MarkerVector& rangeAndSurroundingsMarkers)
override;
292 virtual void ConstrainSetInfoArgs (
size_t* charAfterPos,
size_t* nTCharsFollowing)
override;
295 nonvirtual
void CheckMarkerBounaryConstraints (
size_t from,
size_t to)
noexcept;
296 nonvirtual
void CheckMarkerBounaryConstraints (
const MarkerVector& rangeAndSurroundingsMarkers)
noexcept;
298#if qStroika_Foundation_Debug_AssertionsChecked
300 virtual void Invariant_ ()
const override;
303 DISABLE_COMPILER_MSC_WARNING_END (4250)
334 class WordProcessorTable
335#if qStroika_Frameworks_Led_SupportGDI
336 :
public SimpleEmbeddedObjectStyleMarker
342#if qStroika_Frameworks_Led_SupportGDI
343 using inherited = SimpleEmbeddedObjectStyleMarker;
345 using inherited = StyleMarker;
349 WordProcessorTable (AbstractParagraphDatabaseRep* tableOwner,
size_t addAt);
350 ~WordProcessorTable ();
352#if qStroika_Frameworks_Led_SupportGDI
354 using CursorMovementDirection = TextImager::CursorMovementDirection;
355 using CursorMovementUnit = TextImager::CursorMovementUnit;
356 using UpdateMode = TextInteractor::UpdateMode;
357 using CursorMovementAction = TextInteractor::CursorMovementAction;
358 using CommandUpdater = TextInteractor::CommandUpdater;
359 using CommandNumber = TextInteractor::CommandNumber;
363 virtual void FinalizeAddition (AbstractParagraphDatabaseRep* o,
size_t addAt);
371#if qStroika_Frameworks_Led_SupportGDI
373 virtual void DrawSegment (
const StyledTextImager* imager,
const StyleRunElement& runElement, Tablet* tablet,
size_t from,
size_t to,
374 const TextLayoutBlock& text,
const Led_Rect& drawInto,
const Led_Rect& invalidRect,
375 CoordinateType useBaseLine, DistanceType* pixelsDrawn)
override;
376 virtual void MeasureSegmentWidth (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to,
377 const Led_tChar* text, DistanceType* distanceResults)
const override;
378 virtual DistanceType MeasureSegmentHeight (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
381 virtual vector<Led_Rect> GetRowHilightRects ()
const;
384 virtual void DrawTableBorders (WordProcessor& owningWP, Tablet* tablet,
const Led_Rect& drawInto);
385 virtual void DrawCellBorders (Tablet* tablet,
size_t row,
size_t column,
const Led_Rect& cellBounds);
389 nonvirtual TWIPS GetCellSpacing ()
const;
390 nonvirtual
void SetCellSpacing (TWIPS cellSpacing);
393 TWIPS fCellSpacing{TWIPS{0}};
396 nonvirtual
void GetDefaultCellMargins (TWIPS* top, TWIPS* left, TWIPS* bottom, TWIPS* right)
const;
397 nonvirtual
void SetDefaultCellMargins (TWIPS top, TWIPS left, TWIPS bottom, TWIPS right);
402 TWIPS_Rect fDefaultCellMargins{TWIPS (15), TWIPS (90), TWIPS{0}, TWIPS{0}};
404#if qStroika_Frameworks_Led_SupportGDI
406 virtual Led_Rect GetCellBounds (
size_t row,
size_t column)
const;
407 virtual Led_Rect GetCellEditorBounds (
size_t row,
size_t column)
const;
409 virtual void GetClosestCell (
const Led_Point& p,
size_t* row,
size_t* col)
const;
412 nonvirtual Led_Point TableCoordinates2Window (
const Led_Point& p)
const;
413 nonvirtual Led_Rect TableCoordinates2Window (
const Led_Rect& r)
const;
414 nonvirtual Led_Point WindowCoordinates2Table (
const Led_Point& p)
const;
415 nonvirtual Led_Rect WindowCoordinates2Table (
const Led_Rect& r)
const;
418 virtual bool GetCaretShownSituation ()
const;
419 virtual Led_Rect CalculateCaretRect ()
const;
422 virtual bool OnTypedNormalCharacter (Led_tChar theChar,
bool optionPressed,
bool shiftPressed,
bool commandPressed,
423 bool controlPressed,
bool altKeyPressed);
426 virtual bool DoSingleCharCursorEdit (CursorMovementDirection direction, CursorMovementUnit movementUnit,
427 CursorMovementAction action, UpdateMode updateMode,
bool scrollToSelection);
430 virtual bool OnUpdateCommand (CommandUpdater* enabler);
431 virtual bool OnPerformCommand (CommandNumber commandNumber);
434 nonvirtual
void BreakInGroupedCommands ();
437 virtual bool OnUpdateCommand_ApplyToEachSelectedCell (CommandUpdater* enabler);
438 virtual bool OnPerformCommand_ApplyToEachSelectedCell (CommandNumber commandNumber,
bool captureChangesForUndo =
true);
441 virtual void OnUpdateCutCommand (CommandUpdater* pCmdUI);
442 virtual void OnCutCommand ();
443 virtual void OnUpdateInsertTableRowAboveCommand (CommandUpdater* pCmdUI);
444 virtual void OnInsertTableRowAboveCommand ();
445 virtual void OnUpdateInsertTableRowBelowCommand (CommandUpdater* pCmdUI);
446 virtual void OnInsertTableRowBelowCommand ();
447 virtual void OnUpdateInsertTableColBeforeCommand (CommandUpdater* pCmdUI);
448 virtual void OnInsertTableColBeforeCommand ();
449 virtual void OnUpdateInsertTableColAfterCommand (CommandUpdater* pCmdUI);
450 virtual void OnInsertTableColAfterCommand ();
451 virtual void OnUpdateRemoveTableRowsCommand (CommandUpdater* pCmdUI);
452 virtual void OnRemoveTableRowsCommand ();
453 virtual void OnUpdateRemoveTableColumnsCommand (CommandUpdater* pCmdUI);
454 virtual void OnRemoveTableColumnsCommand ();
455 virtual void OnUpdateSelectTablePartsCommand (CommandUpdater* enabler);
456 virtual void OnPerformTablePartsCommand (CommandNumber commandNumber);
459 nonvirtual
void AssureCurSelFontCacheValid (IncrementalFontSpecification* curSelFontSpec);
462 nonvirtual
void InteractiveSetFont (
const IncrementalFontSpecification& defaultFont);
466 virtual const char* GetTag ()
const override;
467 virtual void Write (SinkStream& sink)
override;
468 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage)
override;
471 virtual bool ProcessSimpleClick (Led_Point clickedAt,
unsigned clickCount,
bool extendSelection);
472 virtual void WhileSimpleMouseTracking (Led_Point newMousePos);
476 nonvirtual Color GetTableBorderColor ()
const;
477 nonvirtual
void SetTableBorderColor (Color c);
480 nonvirtual TWIPS GetTableBorderWidth ()
const;
481 nonvirtual
void SetTableBorderWidth (TWIPS w);
484 nonvirtual TWIPS GetColumnWidth (
size_t row,
size_t column)
const;
485 nonvirtual
void SetColumnWidth (
size_t row,
size_t column, TWIPS colWidth);
488 nonvirtual Color GetCellColor (
size_t row,
size_t column)
const;
489 nonvirtual
void SetCellColor (
size_t row,
size_t column,
const Color& c);
492 nonvirtual Cell& GetCell (
size_t row,
size_t column);
493 nonvirtual
const Cell& GetCell (
size_t row,
size_t column)
const;
494 nonvirtual
void GetRealCell (
size_t* row,
size_t* column)
const;
495 nonvirtual
const Cell& GetRealCell (
size_t row,
size_t column)
const;
498 enum CellMergeFlags {
502 eMergeCellLeftUp = eMergeCellLeft + eMergeCellUp,
507 nonvirtual CellMergeFlags GetCellFlags (
size_t row,
size_t column)
const;
508 nonvirtual
bool CanMergeCells (
size_t fromRow,
size_t fromCol,
size_t toRow,
size_t toCol);
509 nonvirtual
void MergeCells (
size_t fromRow,
size_t fromCol,
size_t toRow,
size_t toCol);
510 nonvirtual
void UnMergeCells (
size_t fromRow,
size_t fromCol,
size_t toRow,
size_t toCol);
513 nonvirtual
void GetCellSelection (
size_t* rowSelStart,
size_t* rowSelEnd,
size_t* colSelStart,
size_t* colSelEnd)
const;
514 nonvirtual
void SetCellSelection (
size_t rowSelStart,
size_t rowSelEnd,
size_t colSelStart,
size_t colSelEnd);
517 nonvirtual
bool GetIntraCellMode (
size_t* row =
nullptr,
size_t* col =
nullptr)
const;
518 nonvirtual
void SetIntraCellMode ();
519 nonvirtual
void SetIntraCellMode (
size_t row,
size_t col);
520 nonvirtual
void UnSetIntraCellMode ();
521 nonvirtual
void GetIntraCellSelection (
size_t* selStart,
size_t* selEnd)
const;
522 nonvirtual
void SetIntraCellSelection (
size_t selStart,
size_t selEnd);
525 size_t fRowSelStart{0};
526 size_t fRowSelEnd{0};
527 size_t fColSelStart{0};
528 size_t fColSelEnd{0};
531 bool fIntraCellMode{
false};
532 size_t fIntraSelStart{0};
533 size_t fIntraSelEnd{0};
534 size_t fIntraCellDragAnchor{0};
537 nonvirtual
void SaveIntraCellContextInfo (
bool leftSideOfSelectionInteresting,
const FontSpecification& intraCellSelectionEmptySelFontSpecification);
538 nonvirtual
bool RestoreIntraCellContextInfo (
bool* leftSideOfSelectionInteresting, FontSpecification* intraCellSelectionEmptySelFontSpecification);
539 nonvirtual
void InvalidateIntraCellContextInfo ();
542 bool fSavedLeftSideOfSelectionInteresting{
false};
543 FontSpecification fSavedIntraCellSelectionEmptySelFontSpecification{};
544 bool fSavedIntraCellInfoValid{
false};
547 size_t fTrackingAnchor_Row{0};
548 size_t fTrackingAnchor_Col{0};
551 class SuppressCellUpdatePropagationContext;
552 bool fSuppressCellUpdatePropagationContext{
false};
555 class AllowUpdateInfoPropagationContext;
556 bool fAllowUpdateInfoPropagationContext;
557 TextStore::SimpleUpdater* fCellUpdatePropationUpdater{
nullptr};
559#if qStroika_Frameworks_Led_SupportGDI
561 class EmbeddedTableWordProcessor;
564 virtual EmbeddedTableWordProcessor* ConstructEmbeddedTableWordProcessor (WordProcessor& forWordProcessor,
size_t forRow,
size_t forColumn,
565 const Led_Rect& cellWindowRect,
bool captureChangesForUndo);
566 virtual void ReleaseEmbeddedTableWordProcessor (EmbeddedTableWordProcessor* e);
570 virtual void GetCellWordProcessorDatabases (
size_t row,
size_t column, TextStore** ts,
571 shared_ptr<AbstractStyleDatabaseRep>* styleDatabase =
nullptr,
572 shared_ptr<AbstractParagraphDatabaseRep>* paragraphDatabase =
nullptr,
573 shared_ptr<HidableTextMarkerOwner>* hidableTextDatabase =
nullptr);
575#if qStroika_Frameworks_Led_SupportGDI
577 WordProcessor* fCurrentOwningWP{
nullptr};
578 class TemporarilySetOwningWP;
579 class TemporarilyAllocateCellWP;
580 class TemporarilyAllocateCellWithTablet;
584 nonvirtual
void InvalidateLayout ();
585#if qStroika_Frameworks_Led_SupportGDI
586 virtual void PerformLayout ();
594 mutable LayoutFlag fNeedLayout{eNeedFullLayout};
597 nonvirtual
size_t GetRowCount ()
const;
598 nonvirtual
size_t GetColumnCount ()
const;
601 nonvirtual
size_t GetColumnCount (
size_t row)
const;
602 nonvirtual
size_t GetColumnCount (
size_t rowStart,
size_t rowEnd)
const;
603 nonvirtual
void SetColumnCount (
size_t row,
size_t columns);
606 nonvirtual
void GetDimensions (
size_t* rows,
size_t* columns)
const;
607 virtual void SetDimensions (
size_t rows,
size_t columns);
608 nonvirtual
void SetDimensionsAtLeast (
size_t rows,
size_t columns);
609 virtual void InsertRow (
size_t at,
size_t maxRowCopyCount = 0xffffffff);
610 virtual void DeleteRow (
size_t at);
611 virtual void InsertColumn (
size_t at);
612 virtual void DeleteColumn (
size_t at);
614#if qStroika_Frameworks_Led_SupportGDI
616 virtual void ReValidateSelection ();
627 RowInfo () =
default;
633 DistanceType fHeight{0};
635 vector<RowInfo> fRows;
638#if qStroika_Frameworks_Led_SupportGDI
639 TWIPS fBorderWidth{Led_CvtScreenPixelsToTWIPSH (1)};
641 TWIPS fBorderWidth{1};
643 Color fBorderColor{Color::kSilver};
644 DistanceType fTotalWidth{0};
645 DistanceType fTotalHeight{0};
647#if qStroika_Frameworks_Led_SupportGDI
650 class SavedTextRepWSel;
656 friend class SuppressCellUpdatePropagationContext;
657 friend class AllowUpdateInfoPropagationContext;
658 friend class TemporarilySetOwningWP;
659 friend class TemporarilyAllocateCellWP;
660 friend class TemporarilyAllocateCellWithTablet;
661 friend class EmbeddedTableWordProcessor;
662 friend class CellRep;
663 friend class TableCMD;
665 friend class WordProcessor;
673 class WordProcessorTable::Cell {
675 Cell (WordProcessorTable& forTable, CellMergeFlags mergeFlags);
678 nonvirtual CellMergeFlags GetCellMergeFlags ()
const;
681 CellMergeFlags fCellMergeFlags;
684 nonvirtual
void GetCellWordProcessorDatabases (TextStore** ts, shared_ptr<AbstractStyleDatabaseRep>* styleDatabase =
nullptr,
685 shared_ptr<AbstractParagraphDatabaseRep>* paragraphDatabase =
nullptr,
686 shared_ptr<HidableTextMarkerOwner>* hidableTextDatabase =
nullptr);
687 nonvirtual TextStore& GetTextStore ()
const;
688 nonvirtual shared_ptr<AbstractStyleDatabaseRep> GetStyleDatabase ()
const;
689 nonvirtual shared_ptr<AbstractParagraphDatabaseRep> GetParagraphDatabase ()
const;
690 nonvirtual shared_ptr<HidableTextMarkerOwner> GetHidableTextDatabase ()
const;
692 nonvirtual Color GetBackColor ()
const;
693 nonvirtual
void SetBackColor (Color c);
695 nonvirtual TWIPS GetCellXWidth ()
const;
696 nonvirtual
void SetCellXWidth (TWIPS width);
698 nonvirtual Led_Rect GetCachedBoundsRect ()
const;
699 nonvirtual
void SetCachedBoundsRect (Led_Rect r);
702 shared_ptr<CellRep> fCellRep;
709 class WordProcessorTable::CellRep :
public MarkerOwner,
public Foundation::Memory::UseBlockAllocationIfAppropriate<CellRep> {
711 using inherited = MarkerOwner;
714 CellRep (WordProcessorTable& forTable);
718 virtual TextStore* PeekAtTextStore ()
const override;
719 virtual void AboutToUpdateText (
const UpdateInfo& updateInfo)
override;
720 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
723 WordProcessorTable& fForTable;
724 TextStore* fTextStore;
725 shared_ptr<AbstractStyleDatabaseRep> fStyleDatabase;
726 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
727 shared_ptr<HidableTextMarkerOwner> fHidableTextDatabase;
729 Led_Rect fCachedBoundsRect;
743 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
744 const shared_ptr<HidableTextMarkerOwner>& hidableTextDatabase,
size_t selectionStart = 0,
745 size_t selectionEnd = kBadIndex);
746#if qStroika_Frameworks_Led_SupportGDI
751 nonvirtual
bool GetUseTableSelection ()
const;
752 nonvirtual
void SetUseTableSelection (
bool useTableSelection);
755 bool fUseTableSelection{
false};
758 virtual Justification GetJustification ()
const override;
759 virtual StandardTabStopList GetStandardTabStopList ()
const override;
760 virtual TWIPS GetFirstIndent ()
const override;
761 virtual void GetMargins (TWIPS* lhs, TWIPS* rhs)
const override;
762 virtual TWIPS GetSpaceBefore ()
const override;
763 virtual TWIPS GetSpaceAfter ()
const override;
764 virtual LineSpacing GetLineSpacing ()
const override;
765 virtual void GetListStyleInfo (ListStyle* listStyle,
unsigned char* indentLevel)
const override;
766 virtual Led_tChar GetSoftLineBreakCharacter ()
const override;
767 virtual DiscontiguousRun<bool> GetHidableTextRuns ()
const override;
768#if qStroika_Frameworks_Led_SupportTables
769 virtual SrcStream::Table* GetTableAt (
size_t at)
const override;
771 virtual void SummarizeFontAndColorTable (set<SDKString>* fontNames, set<Color>* colorsUsed)
const override;
777 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
778 DiscontiguousRun<bool> fHidableTextRuns;
783 class WordProcessorTextIOSrcStream::TableIOMapper :
public StyledTextIO::StyledTextIOWriter::SrcStream::Table {
785 using inherited = StyledTextIO::StyledTextIOWriter::SrcStream::Table;
788 TableIOMapper (WordProcessorTable& realTable,
size_t startRow = 0,
size_t endRow =
static_cast<size_t> (-1),
size_t startCol = 0,
789 size_t endCol =
static_cast<size_t> (-1));
792 virtual size_t GetRows ()
const override;
793 virtual size_t GetColumns (
size_t row)
const override;
794 virtual void GetRowInfo (
size_t row, vector<CellInfo>* cellInfos)
override;
795 virtual StyledTextIO::StyledTextIOWriter::SrcStream* MakeCellSubSrcStream (
size_t row,
size_t column)
override;
796 virtual size_t GetOffsetEnd ()
const override;
797 virtual TWIPS_Rect GetDefaultCellMarginsForRow (
size_t row)
const override;
798 virtual TWIPS_Rect GetDefaultCellSpacingForRow (
size_t row)
const override;
801 WordProcessorTable& fRealTable;
818 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
819 const shared_ptr<HidableTextMarkerOwner>& hidableTextDatabase,
size_t insertionStart = 0);
820#if qStroika_Frameworks_Led_SupportGDI
826 nonvirtual
void CTOR_COMMON ();
829 nonvirtual
bool GetOverwriteTableMode ()
const;
830 nonvirtual
void SetOverwriteTableMode (
bool overwriteTableMode);
833 bool fOverwriteTableMode;
835#if !qStroika_Frameworks_Led_NestedTablesSupported
837 nonvirtual
bool GetNoTablesAllowed ()
const;
838 nonvirtual
void SetNoTablesAllowed (
bool noTablesAllowed);
841 bool fNoTablesAllowed;
845 virtual void AppendText (
const Led_tChar* text,
size_t nTChars,
const FontSpecification* fontSpec)
override;
846#if qStroika_Frameworks_Led_SupportGDI
847 virtual void AppendEmbedding (SimpleEmbeddedObjectStyleMarker* embedding)
override;
849 virtual void AppendSoftLineBreak ()
override;
850 virtual void SetJustification (Justification justification)
override;
851 virtual void SetStandardTabStopList (
const StandardTabStopList& tabStops)
override;
852 virtual void SetFirstIndent (TWIPS tx)
override;
853 virtual void SetLeftMargin (TWIPS lhs)
override;
854 virtual void SetRightMargin (TWIPS rhs)
override;
855 virtual void SetSpaceBefore (TWIPS sb)
override;
856 virtual void SetSpaceAfter (TWIPS sa)
override;
857 virtual void SetLineSpacing (LineSpacing sl)
override;
858 virtual void SetTextHidden (
bool hidden)
override;
859 virtual void StartTable ()
override;
860 virtual void EndTable ()
override;
861 virtual void StartTableRow ()
override;
862 virtual void EndTableRow ()
override;
863 virtual void StartTableCell (
size_t colSpan)
override;
864 virtual void EndTableCell ()
override;
865 virtual void SetListStyle (ListStyle listStyle)
override;
866 virtual void SetListIndentLevel (
unsigned char indentLevel)
override;
867 virtual void SetTableBorderColor (
Color c)
override;
868 virtual void SetTableBorderWidth (TWIPS bWidth)
override;
869 virtual void SetCellWidths (
const vector<TWIPS>& cellWidths)
override;
870 virtual void SetCellBackColor (
const Color c)
override;
871 virtual void SetDefaultCellMarginsForCurrentRow (TWIPS top, TWIPS left, TWIPS bottom, TWIPS right)
override;
872 virtual void SetDefaultCellSpacingForCurrentRow (TWIPS top, TWIPS left, TWIPS bottom, TWIPS right)
override;
873 virtual void EndOfBuffer ()
override;
874 virtual void Flush ()
override;
877 nonvirtual
void SetIgnoreLastParaAttributes (
bool ignoreLastParaAttributes);
880 nonvirtual
void PushContext (TextStore* ts,
const shared_ptr<AbstractStyleDatabaseRep>& textStyleDatabase,
881 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
882 const shared_ptr<HidableTextMarkerOwner>& hidableTextDatabase,
size_t insertionStart);
883 nonvirtual
void PopContext ();
887 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
888 shared_ptr<HidableTextMarkerOwner> fHidableTextDatabase;
890 vector<Context> fSavedContexts;
893 using ParaInfoNSize = pair<IncrementalParagraphInfo, size_t>;
894 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
895 shared_ptr<HidableTextMarkerOwner> fHidableTextDatabase;
896 vector<ParaInfoNSize> fSavedParaInfo;
899 DiscontiguousRun<bool> fHidableTextRuns;
901 bool fIgnoreLastParaAttributes;
902 WordProcessorTable* fCurrentTable;
903 vector<TWIPS> fCurrentTableCellWidths;
904 Color fCurrentTableCellColor;
905 vector<size_t> fCurrentTableColSpanArray;
906 vector<WordProcessorTable*> fTableStack;
907 size_t fNextTableRow;
908 size_t fNextTableCell;
909 size_t fCurrentTableCell;
911#if qStroika_Foundation_Debug_AssertionsChecked
913 unsigned int fTableOpenLevel;
919#if qStroika_Frameworks_Led_SupportGDI
920 DISABLE_COMPILER_MSC_WARNING_START (4250)
928 class StandardStyledWordWrappedTextInteractor : public InteractorInteractorMixinHelper<StandardStyledTextInteractor, WordWrappedTextInteractor> {
930 using inherited = InteractorInteractorMixinHelper<StandardStyledTextInteractor, WordWrappedTextInteractor>;
933 StandardStyledWordWrappedTextInteractor () =
default;
942 class WordProcessor :
public StandardStyledWordWrappedTextInteractor {
944 using inherited = StandardStyledWordWrappedTextInteractor;
953 virtual void HookLosingTextStore ()
override;
954 nonvirtual
void HookLosingTextStore_ ();
955 virtual void HookGainedNewTextStore ()
override;
956 nonvirtual
void HookGainedNewTextStore_ ();
959 nonvirtual
bool GetSmartQuoteMode ()
const;
960 nonvirtual
void SetSmartQuoteMode (
bool smartQuoteMode);
963 bool fSmartQuoteMode;
966 class WordProcessorFlavorPackageInternalizer;
967 class WordProcessorFlavorPackageExternalizer;
975 class NoParagraphDatabaseAvailable :
public NotFullyInitialized {};
980 virtual shared_ptr<Partition> MakeDefaultPartition ()
const override;
983 nonvirtual shared_ptr<AbstractParagraphDatabaseRep> GetParagraphDatabase ()
const;
984 nonvirtual
void SetParagraphDatabase (
const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase);
987 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
988 bool fICreatedParaDB;
991 virtual void HookParagraphDatabaseChanged ();
992 nonvirtual
void HookParagraphDatabaseChanged_ ();
995 nonvirtual shared_ptr<HidableTextMarkerOwner> GetHidableTextDatabase ()
const;
996 nonvirtual
void SetHidableTextDatabase (
const shared_ptr<HidableTextMarkerOwner>& hidableTextDatabase);
999 shared_ptr<HidableTextMarkerOwner> fHidableTextDatabase;
1000 bool fICreatedHidableTextDB;
1003 virtual void HookHidableTextDatabaseChanged ();
1004 nonvirtual
void HookHidableTextDatabaseChanged_ ();
1007 virtual shared_ptr<FlavorPackageInternalizer> MakeDefaultInternalizer ()
override;
1008 virtual shared_ptr<FlavorPackageExternalizer> MakeDefaultExternalizer ()
override;
1011 virtual void HookInternalizerChanged ()
override;
1012 virtual void HookExternalizerChanged ()
override;
1015 virtual void InternalizeBestFlavor (ReaderFlavorPackage& flavorPackage,
bool updateCursorPosition,
bool autoScroll, UpdateMode updateMode)
override;
1016 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage)
override;
1019 virtual void InterectiveSetRegionHidable (
bool hidable);
1022 nonvirtual Justification GetJustification (
size_t characterPos)
const;
1023 nonvirtual
bool GetJustification (
size_t from,
size_t to, Justification* justification)
const;
1024 nonvirtual
void SetJustification (
size_t from,
size_t to, Justification justification);
1027 static StandardTabStopList GetDefaultStandardTabStopList ();
1028 nonvirtual StandardTabStopList GetStandardTabStopList (
size_t characterPos)
const;
1029 nonvirtual
bool GetStandardTabStopList (
size_t from,
size_t to, StandardTabStopList* tabStops)
const;
1030 nonvirtual
void SetStandardTabStopList (
size_t from,
size_t to, StandardTabStopList tabStops);
1033 nonvirtual
void GetMargins (
size_t characterPos, TWIPS* leftMargin, TWIPS* rightMargin)
const;
1034 nonvirtual
bool GetMargins (
size_t from,
size_t to, TWIPS* leftMargin, TWIPS* rightMargin)
const;
1035 nonvirtual
void SetMargins (
size_t from,
size_t to, TWIPS leftMargin, TWIPS rightMargin);
1038 nonvirtual TWIPS GetFirstIndent (
size_t characterPos)
const;
1039 nonvirtual
bool GetFirstIndent (
size_t from,
size_t to, TWIPS* firstIndent)
const;
1040 nonvirtual
void SetFirstIndent (
size_t from,
size_t to, TWIPS firstIndent);
1043 nonvirtual TWIPS GetSpaceBefore (
size_t characterPos)
const;
1044 nonvirtual
bool GetSpaceBefore (
size_t from,
size_t to, TWIPS* sb)
const;
1045 nonvirtual
void SetSpaceBefore (
size_t from,
size_t to, TWIPS sb);
1046 nonvirtual TWIPS GetSpaceAfter (
size_t characterPos)
const;
1047 nonvirtual
bool GetSpaceAfter (
size_t from,
size_t to, TWIPS* sa)
const;
1048 nonvirtual
void SetSpaceAfter (
size_t from,
size_t to, TWIPS sa);
1049 nonvirtual LineSpacing GetLineSpacing (
size_t characterPos)
const;
1050 nonvirtual
bool GetLineSpacing (
size_t from,
size_t to, LineSpacing* sl)
const;
1051 nonvirtual
void SetLineSpacing (
size_t from,
size_t to, LineSpacing sl);
1052 nonvirtual ListStyle GetListStyle (
size_t characterPos)
const;
1053 nonvirtual
bool GetListStyle (
size_t from,
size_t to, ListStyle* listStyle)
const;
1054 nonvirtual
void SetListStyle (
size_t from,
size_t to, ListStyle listStyle,
bool autoFormat =
false);
1055 nonvirtual
unsigned char GetListIndentLevel (
size_t characterPos)
const;
1056 nonvirtual
bool GetListIndentLevel (
size_t from,
size_t to,
unsigned char* indentLevel)
const;
1057 nonvirtual
void SetListIndentLevel (
size_t from,
size_t to,
unsigned char indentLevel,
bool autoFormat =
false);
1060 virtual Led_tString GetListLeader (
size_t paragraphMarkerPos)
const;
1061 virtual DistanceType GetListLeaderLength (
size_t paragraphMarkerPos)
const;
1062 virtual void AutoFormatIndentedText (
size_t from,
size_t to);
1065 class WPIdler :
public Idler {
1068 virtual void SpendIdleTime ()
override;
1071 friend class WPIdler;
1075 virtual void SetSelection (
size_t start,
size_t end)
override;
1076 using TextInteractor::SetSelection;
1079 virtual bool GetCaretShownSituation ()
const override;
1080 virtual Led_Rect CalculateCaretRect ()
const override;
1083 virtual void OnTypedNormalCharacter (Led_tChar theChar,
bool optionPressed,
bool shiftPressed,
bool commandPressed,
1084 bool controlPressed,
bool altKeyPressed)
override;
1087 virtual bool ProcessSimpleClick (Led_Point clickedAt,
unsigned clickCount,
bool extendSelection,
size_t* dragAnchor)
override;
1088 virtual void WhileSimpleMouseTracking (Led_Point newMousePos,
size_t dragAnchor)
override;
1092 virtual WordProcessorTable* InsertTable (
size_t at);
1094 nonvirtual vector<WordProcessorTable*> GetTablesInRange (
size_t from,
size_t to =
static_cast<size_t> (-1))
const;
1095 nonvirtual WordProcessorTable* GetTableAt (
size_t from)
const;
1098 nonvirtual WordProcessorTable* GetActiveTable ()
const;
1101 struct CommandNames;
1108 static const CommandNames& GetCommandNames ();
1109 static void SetCommandNames (
const CommandNames& cmdNames);
1110 static CommandNames MakeDefaultCommandNames ();
1113 static CommandNames sCommandNames;
1117 kWordProcessorCommand_First = kTextInteractorCommand_Last + 1,
1119 kSelectTableIntraCellAll_CmdID = kWordProcessorCommand_First,
1120 kSelectTableCell_CmdID,
1121 kSelectTableRow_CmdID,
1122 kSelectTableColumn_CmdID,
1125 kBaseFontSize_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kSelectTable_CmdID + 1, 0x100),
1126 kFontSize9_CmdID = kBaseFontSize_CmdID,
1135 kFontSizeOther_CmdID,
1136 kFontSizeSmaller_CmdID,
1137 kFontSizeLarger_CmdID,
1138 kLastFontSize_CmdID = kFontSizeLarger_CmdID,
1140 kBaseFontColor_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kLastFontSize_CmdID + 1, 0x100),
1141 kFontColorBlack_CmdID = kBaseFontColor_CmdID,
1142 kFontColorMaroon_CmdID,
1143 kFontColorGreen_CmdID,
1144 kFontColorOlive_CmdID,
1145 kFontColorNavy_CmdID,
1146 kFontColorPurple_CmdID,
1147 kFontColorTeal_CmdID,
1148 kFontColorGray_CmdID,
1149 kFontColorSilver_CmdID,
1150 kFontColorRed_CmdID,
1151 kFontColorLime_CmdID,
1152 kFontColorYellow_CmdID,
1153 kFontColorBlue_CmdID,
1154 kFontColorFuchsia_CmdID,
1155 kFontColorAqua_CmdID,
1156 kFontColorWhite_CmdID,
1157 kLastNamedFontColor_CmdID = kFontColorWhite_CmdID,
1158 kFontColorOther_CmdID,
1159 kLastFontColor_CmdID = kFontColorOther_CmdID,
1161 kFirstJustification_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kLastFontColor_CmdID + 1, 0x100),
1162 kJustifyLeft_CmdID = kFirstJustification_CmdID,
1163 kJustifyCenter_CmdID,
1164 kJustifyRight_CmdID,
1166 kLastJustification_CmdID = kJustifyFull_CmdID,
1168 kParagraphSpacingCommand_CmdID,
1169 kParagraphIndentsCommand_CmdID,
1170 kFirstListStyle_CmdID,
1171 kListStyle_None_CmdID = kFirstListStyle_CmdID,
1172 kListStyle_Bullet_CmdID,
1173 kLastListStyle_CmdID = kListStyle_Bullet_CmdID,
1174 kIncreaseIndent_CmdID,
1175 kDecreaseIndent_CmdID,
1177 kFontMenuFirst_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kDecreaseIndent_CmdID + 1, 0x100),
1178 kFontMenuLast_CmdID = kFontMenuFirst_CmdID + 0x400,
1180 kFontStylePlain_CmdID,
1181 kFontStyleBold_CmdID,
1182 kFontStyleItalic_CmdID,
1183 kFontStyleUnderline_CmdID,
1184#if qStroika_Foundation_Common_Platform_Windows
1185 kFontStyleStrikeout_CmdID,
1187 kSubScriptCommand_CmdID,
1188 kSuperScriptCommand_CmdID,
1189 kFontStyleCommand_FirstCmdId = kFontStylePlain_CmdID,
1190 kFontStyleCommand_LastCmdId = kSuperScriptCommand_CmdID,
1192 kChooseFontCommand_CmdID,
1194 kInsertTable_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kChooseFontCommand_CmdID + 1, 0x100),
1195 kInsertTableRowAbove_CmdID,
1196 kInsertTableRowBelow_CmdID,
1197 kInsertTableColBefore_CmdID,
1198 kInsertTableColAfter_CmdID,
1200 kInsertSymbol_CmdID,
1202 kRemoveTableColumns_CmdID,
1203 kRemoveTableRows_CmdID,
1205 kFirstSelectedEmbedding_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kRemoveTableRows_CmdID + 1, 0x100),
1206 kSelectedEmbeddingProperties_CmdID = kFirstSelectedEmbedding_CmdID,
1207 kFirstPrivateEmbedding_CmdID,
1208 kLastPrivateEmbedding_CmdID = kFirstPrivateEmbedding_CmdID + 5,
1209 kLastSelectedEmbedding_CmdID = kLastPrivateEmbedding_CmdID,
1211 kHideSelection_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kLastSelectedEmbedding_CmdID + 1, 0x100),
1212 kUnHideSelection_CmdID,
1214 kFirstShowHideGlyph_CmdID = RoundUpToNearest_CMDNUMs_MACRO (kUnHideSelection_CmdID + 1, 0x100),
1215 kShowHideParagraphGlyphs_CmdID = kFirstShowHideGlyph_CmdID,
1216 kShowHideTabGlyphs_CmdID,
1217 kShowHideSpaceGlyphs_CmdID,
1218 kLastShowHideGlyph_CmdID = kShowHideSpaceGlyphs_CmdID,
1220 kWordProcessorCommand_Last = RoundUpToNearest_CMDNUMs_MACRO (kShowHideSpaceGlyphs_CmdID + 1, 0x100)
1224 class DialogSupport;
1225 static DialogSupport& GetDialogSupport ();
1226 static void SetDialogSupport (DialogSupport* ds);
1229 static DialogSupport* sDialogSupport;
1232 virtual DistanceType ComputeMaxHScrollPos ()
const override;
1235 nonvirtual TWIPS CalculateFarthestRightMarginInDocument ()
const;
1236 nonvirtual TWIPS GetFarthestRightMarginInDocument ()
const;
1237 nonvirtual TWIPS CalculateFarthestRightMarginInWindow ()
const;
1238 virtual TWIPS CalculateFarthestRightMargin ()
const;
1241 virtual void InvalidateAllCaches ()
override;
1242 virtual void TabletChangedMetrics ()
override;
1245 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
1248 nonvirtual IncrementalFontSpecification GetCurSelFontSpec ()
const;
1251 mutable IncrementalFontSpecification fCachedCurSelFontSpec;
1252 mutable Justification fCachedCurSelJustification;
1253 mutable bool fCachedCurSelJustificationUnique;
1254 mutable bool fCachedCurSelFontSpecValid;
1256 nonvirtual
void AssureCurSelFontCacheValid ()
const;
1259 virtual void DoSingleCharCursorEdit (CursorMovementDirection direction, CursorMovementUnit movementUnit, CursorMovementAction action,
1260 UpdateMode updateMode = eDefaultUpdate,
bool scrollToSelection =
true)
override;
1263 virtual bool OnUpdateCommand (CommandUpdater* enabler)
override;
1264 virtual bool OnPerformCommand (CommandNumber commandNumber)
override;
1267 virtual bool PassAlongCommandToIntraCellModeTableCell (CommandNumber commandNumber);
1268 virtual bool PassAlongCommandToEachSelectedTableCell (CommandNumber commandNumber);
1271 virtual void OnSelectAllCommand ()
override;
1274 virtual void OnUpdateFontNameChangeCommand (CommandUpdater* enabler);
1275 virtual void OnFontNameChangeCommand (CommandNumber cmdNum);
1276 virtual void OnUpdateFontStylePlainCommand (CommandUpdater* enabler);
1277 virtual void OnFontStylePlainCommand ();
1278 virtual void OnUpdateFontStyleBoldCommand (CommandUpdater* enabler);
1279 virtual void OnFontStyleBoldCommand ();
1280 virtual void OnUpdateFontStyleItalicCommand (CommandUpdater* enabler);
1281 virtual void OnFontStyleItalicCommand ();
1282 virtual void OnUpdateFontStyleUnderlineCommand (CommandUpdater* enabler);
1283 virtual void OnFontStyleUnderlineCommand ();
1284#if qStroika_Foundation_Common_Platform_Windows
1285 virtual void OnUpdateFontStyleStrikeoutCommand (CommandUpdater* enabler);
1286 virtual void OnFontStyleStrikeoutCommand ();
1288 virtual void OnUpdateFontStyleSubscriptCommand (CommandUpdater* enabler);
1289 virtual void OnFontStyleSubscriptCommand ();
1290 virtual void OnUpdateFontStyleSuperscriptCommand (CommandUpdater* enabler);
1291 virtual void OnFontStyleSuperscriptCommand ();
1292 virtual void OnUpdateChooseFontCommand (CommandUpdater* enabler);
1293 virtual void OnChooseFontCommand ();
1294 virtual void OnUpdateFontSizeChangeCommand (CommandUpdater* enabler);
1295 virtual void OnFontSizeChangeCommand (CommandNumber cmdNum);
1296 virtual void OnUpdateFontColorChangeCommand (CommandUpdater* enabler);
1297 virtual void OnFontColorChangeCommand (CommandNumber cmdNum);
1298 virtual void OnUpdateInsertTableCommand (CommandUpdater* pCmdUI);
1299 virtual void OnInsertTableCommand ();
1300 virtual void OnUpdateInsertURLCommand (CommandUpdater* pCmdUI);
1301 virtual void OnInsertURLCommand ();
1302 virtual void OnUpdateInsertSymbolCommand (CommandUpdater* pCmdUI);
1303 virtual void OnInsertSymbolCommand ();
1304 virtual void OnUpdateSelectedEmbeddingExtendedCommand (CommandUpdater* pCmdUI);
1305 virtual bool OnSelectedEmbeddingExtendedCommand (CommandNumber cmdNum);
1307 virtual void OnEditTablePropertiesDialog ();
1309 virtual void OnUpdateHideSelectionCommands (CommandUpdater* enabler);
1310 virtual void OnHideSelection ();
1311 virtual void OnUnHideSelection ();
1312 virtual void OnUpdateParagraphJustificationCommand (CommandUpdater* enabler);
1313 virtual void OnParagraphJustificationCommand (CommandNumber cmdNum);
1314 virtual void OnUpdateParagraphSpacingChangeCommand (CommandUpdater* enabler);
1315 virtual void OnParagraphSpacingChangeCommand ();
1316 virtual void OnUpdateParagraphIndentsChangeCommand (CommandUpdater* enabler);
1317 virtual void OnParagraphIndentsChangeCommand ();
1318 virtual void OnUpdateListStyleChangeCommand (CommandUpdater* enabler);
1319 virtual void OnListStyleChangeCommand (CommandNumber cmdNum);
1320 virtual void OnUpdateIndentCommand (CommandUpdater* enabler);
1321 virtual void OnIndentCommand (CommandNumber cmdNum);
1322 virtual void OnUpdateShowHideGlyphCommand (CommandUpdater* enabler);
1323 virtual void OnShowHideGlyphCommand (CommandNumber cmdNum);
1326 virtual SDKString GetPrettyTypeName (SimpleEmbeddedObjectStyleMarker* m);
1327 nonvirtual SimpleEmbeddedObjectStyleMarker* GetSoleSelectedEmbedding ()
const;
1330 class EmptySelectionParagraphSavedTextRep;
1333 virtual InteractiveReplaceCommand::SavedTextRep* InteractiveUndoHelperMakeTextRep (
size_t regionStart,
size_t regionEnd,
1334 size_t selStart,
size_t selEnd)
override;
1337 virtual void InteractiveSetFont (
const IncrementalFontSpecification& defaultFont)
override;
1340 nonvirtual
void InteractiveSetJustification (Justification justification);
1341 nonvirtual
void InteractiveSetStandardTabStopList (StandardTabStopList tabStops);
1342 nonvirtual
void InteractiveSetMargins (TWIPS leftMargin, TWIPS rightMargin);
1343 nonvirtual
void InteractiveSetFirstIndent (TWIPS firstIndent);
1344 nonvirtual
void InteractiveSetMarginsAndFirstIndent (TWIPS leftMargin, TWIPS rightMargin, TWIPS firstIndent);
1345 nonvirtual
void InteractiveSetParagraphSpacing (TWIPS spaceBefore,
bool spaceBeforeValid, TWIPS spaceAfter,
bool spaceAfterValid,
1346 LineSpacing lineSpacing,
bool lineSpacingValid);
1347 nonvirtual
void InteractiveSetListStyle (ListStyle listStyle);
1348 nonvirtual
void InteractiveDoIndentChange (
bool increase);
1351 virtual const TabStopList& GetTabStopList (
size_t containingPos)
const override;
1354 virtual void DrawBefore (
const Led_Rect& subsetToDraw,
bool printing)
override;
1357 virtual void DrawRowSegments (Tablet* tablet,
const Led_Rect& currentRowRect,
const Led_Rect& invalidRowRect,
1358 const TextLayoutBlock& text,
size_t rowStart,
size_t rowEnd)
override;
1361 virtual vector<Led_Rect> GetRowHilightRects (
const TextLayoutBlock& text,
size_t rowStart,
size_t rowEnd,
size_t hilightStart,
1362 size_t hilightEnd)
const override;
1365 virtual void DrawSegment (Tablet* tablet,
size_t from,
size_t to,
const TextLayoutBlock& text,
const Led_Rect& drawInto,
1366 const Led_Rect& invalidRect, CoordinateType useBaseLine, DistanceType* pixelsDrawn)
override;
1369 virtual DistanceType MeasureSegmentHeight (
size_t from,
size_t to)
const override;
1370 virtual DistanceType MeasureSegmentBaseLine (
size_t from,
size_t to)
const override;
1373 nonvirtual DistanceType MeasureMinSegDescent (
size_t from,
size_t to)
const;
1376 virtual void AdjustBestRowLength (
size_t textStart,
const Led_tChar* text,
const Led_tChar* end,
size_t* rowLength)
override;
1379 nonvirtual
bool GetShowParagraphGlyphs ()
const;
1380 nonvirtual
void SetShowParagraphGlyphs (
bool showParagraphGlyphs);
1383 bool fShowParagraphGlyphs;
1386 nonvirtual
bool GetShowTabGlyphs ()
const;
1387 nonvirtual
void SetShowTabGlyphs (
bool showTabGlyphs);
1390 bool fShowTabGlyphs;
1393 nonvirtual
bool GetShowSpaceGlyphs ()
const;
1394 nonvirtual
void SetShowSpaceGlyphs (
bool showSpaceGlyphs);
1397 bool fShowSpaceGlyphs;
1400 virtual size_t ComputeRelativePosition (
size_t fromPos, CursorMovementDirection direction, CursorMovementUnit movementUnit)
override;
1403 virtual bool ContainsMappedDisplayCharacters (
const Led_tChar* text,
size_t nTChars)
const override;
1404 virtual void ReplaceMappedDisplayCharacters (
const Led_tChar* srcText, Led_tChar* copyText,
size_t nTChars)
const override;
1407 virtual Led_Rect GetCharLocationRowRelative (
size_t afterPosition, RowReference topRow,
size_t maxRowsToCheck)
const override;
1408 virtual size_t GetCharAtLocationRowRelative (
const Led_Point& where, RowReference topRow,
size_t maxRowsToCheck)
const override;
1411 virtual size_t ResetTabStops (
size_t from,
const Led_tChar* text,
size_t nTChars, DistanceType* charLocations,
size_t startSoFar)
const override;
1414 nonvirtual
size_t ResetTabStopsWithMargin (DistanceType lhsMargin,
size_t from,
const Led_tChar* text,
size_t nTChars,
1415 DistanceType* charLocations,
size_t startSoFar)
const;
1418 virtual void GetLayoutMargins (RowReference row, CoordinateType* lhs, CoordinateType* rhs)
const override;
1421 virtual void ExpandedFromAndToInPostReplace (
size_t from,
size_t newTo,
size_t stableTypingRegionStart,
size_t stableTypingRegionEnd,
1422 size_t startPositionOfRowWhereReplaceBegins,
size_t startPositionOfRowAfterReplaceEnds,
1423 size_t* expandedFrom,
size_t* expandedTo)
override;
1424 virtual void PostReplace (PreReplaceInfo& preReplaceInfo)
override;
1427 nonvirtual DistanceType CalcSpaceToEat (
size_t rowContainingCharPos)
const;
1430 friend class AbstractParagraphDatabaseRep;
1431 friend class ParagraphDatabaseRep;
1432 friend class WordProcessorTable;
1440 class WordProcessor::WordProcessorFlavorPackageInternalizer :
public StandardStyledTextInteractor::StyledTextFlavorPackageInternalizer {
1442 using inherited = StandardStyledTextInteractor::StyledTextFlavorPackageInternalizer;
1445 WordProcessorFlavorPackageInternalizer (TextStore& ts,
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase,
1446 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
1447 const shared_ptr<HidableTextMarkerOwner>& hidableTextDatabase);
1450 nonvirtual
bool GetOverwriteTableMode ()
const;
1451 nonvirtual
void SetOverwriteTableMode (
bool overwriteTableMode);
1454 bool fOverwriteTableMode;
1456#if !qStroika_Frameworks_Led_NestedTablesSupported
1458 nonvirtual
bool GetNoTablesAllowed ()
const;
1459 nonvirtual
void SetNoTablesAllowed (
bool noTablesAllowed);
1462 bool fNoTablesAllowed;
1466 virtual StandardStyledTextIOSinkStream* mkStandardStyledTextIOSinkStream (
size_t insertionStart)
override;
1469 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
1470 shared_ptr<HidableTextMarkerOwner> fHidableTextDatabase;
1479 class WordProcessor::WPPartition :
public LineBasedPartition {
1481 using PartitionMarker = PartitioningTextImager::PartitionMarker;
1482 using UpdateInfo = MarkerOwner::UpdateInfo;
1485 using inherited = LineBasedPartition;
1488 WPPartition (TextStore& textStore, MarkerOwner& tableMarkerOwner);
1491 virtual vector<WordProcessorTable*> GetTablesInRange (
size_t from,
size_t to =
static_cast<size_t> (-1))
const;
1494 virtual void FinalConstruct ()
override;
1497 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
1500 nonvirtual
void DoHandleUpdateForTableRangeCheck (
size_t from,
size_t to)
noexcept;
1503 virtual bool NeedToCoalesce (PartitionMarker* pm)
noexcept override;
1505#if qStroika_Foundation_Debug_AssertionsChecked
1507 virtual void Invariant_ ()
const override;
1511 MarkerOwner& fTableMarkerOwner;
1514 friend class WordProcessorTable;
1522 class WordProcessor::WordProcessorFlavorPackageExternalizer :
public StandardStyledTextInteractor::StyledTextFlavorPackageExternalizer {
1524 using inherited = StandardStyledTextInteractor::StyledTextFlavorPackageExternalizer;
1527 WordProcessorFlavorPackageExternalizer (TextStore& ts,
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase,
1528 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
1529 const shared_ptr<HidableTextMarkerOwner>& hidableTextDatabase);
1532 nonvirtual
bool GetUseTableSelection ()
const;
1533 nonvirtual
void SetUseTableSelection (
bool useTableSelection);
1536 bool fUseTableSelection{
false};
1539 virtual StandardStyledTextIOSrcStream* mkStandardStyledTextIOSrcStream (
size_t selectionStart,
size_t selectionEnd)
override;
1542 shared_ptr<AbstractParagraphDatabaseRep> fParagraphDatabase;
1543 shared_ptr<HidableTextMarkerOwner> fHidableTextDatabase;
1551 class WordProcessorTable::SuppressCellUpdatePropagationContext {
1553 SuppressCellUpdatePropagationContext (WordProcessorTable& t);
1554 ~SuppressCellUpdatePropagationContext ();
1557 WordProcessorTable& fTable;
1566 class WordProcessorTable::AllowUpdateInfoPropagationContext {
1568 AllowUpdateInfoPropagationContext (WordProcessorTable& t);
1569 ~AllowUpdateInfoPropagationContext ();
1572 WordProcessorTable& fTable;
1585 class WordProcessorTable::EmbeddedTableWordProcessor :
public WordProcessor {
1587 using inherited = WordProcessor;
1590 EmbeddedTableWordProcessor (WordProcessor& owningWordProcessor, WordProcessorTable& owningTable,
size_t tRow,
size_t tCol,
bool activeEditCell);
1593 nonvirtual WordProcessor& GetOwningWordProcessor ()
const;
1594 nonvirtual WordProcessorTable& GetOwningTable ()
const;
1597 WordProcessor& fOwningWordProcessor;
1598 WordProcessorTable& fOwningTable;
1600 size_t fTableColumn;
1603 nonvirtual
void SaveMiscActiveFocusInfo ();
1604 nonvirtual
void RestoreMiscActiveFocusInfo ();
1606#if !qStroika_Frameworks_Led_NestedTablesSupported
1608 virtual void HookInternalizerChanged ()
override;
1612 virtual bool OnCopyCommand_Before ()
override;
1613 virtual void OnCopyCommand_After ()
override;
1614 virtual bool OnPasteCommand_Before ()
override;
1615 virtual void OnPasteCommand_After ()
override;
1618 virtual void DrawRowHilight (Tablet* tablet,
const Led_Rect& currentRowRect,
const Led_Rect& invalidRowRect,
1619 const TextLayoutBlock& text,
size_t rowStart,
size_t rowEnd)
override;
1623 virtual Tablet* AcquireTablet ()
const override;
1624 virtual void ReleaseTablet (Tablet* tablet)
const override;
1627 virtual void RefreshWindowRect_ (
const Led_Rect& windowRectArea, UpdateMode updateMode)
const override;
1628 virtual void UpdateWindowRect_ (
const Led_Rect& windowRectArea)
const override;
1629 virtual bool QueryInputKeyStrokesPending ()
const override;
1632 virtual void SetDefaultUpdateMode (UpdateMode defaultUpdateMode)
override;
1635 virtual void GetLayoutMargins (RowReference row, CoordinateType* lhs, CoordinateType* rhs)
const override;
1638 nonvirtual DistanceType GetDesiredHeight ()
const;
1641 mutable DistanceType fDesiredHeight;
1642 mutable bool fDesiredHeightValid;
1643 bool fActiveEditCell;
1646 virtual void PostInteractiveUndoPostHelper (InteractiveReplaceCommand::SavedTextRep** beforeRep,
1647 InteractiveReplaceCommand::SavedTextRep** afterRep,
size_t startOfInsert,
1648 const SDKString& cmdName)
override;
1651 virtual InteractiveReplaceCommand::SavedTextRep* InteractiveUndoHelperMakeTextRep (
size_t regionStart,
size_t regionEnd,
1652 size_t selStart,
size_t selEnd)
override;
1655 class DisableRefreshContext;
1658 bool fSuppressRefreshCalls;
1661 class TemporarilyUseTablet;
1664 Tablet* fUpdateTablet;
1666 friend class WordProcessorTable;
1667 friend class WordProcessorTable::EmbeddedTableWordProcessor::TemporarilyUseTablet;
1668 friend class WordProcessorTable::EmbeddedTableWordProcessor::DisableRefreshContext;
1669 friend class WordProcessorTable::TemporarilyAllocateCellWithTablet;
1674 class WordProcessorTable::SavedTextRepWSel :
public InteractiveReplaceCommand::SavedTextRep,
1675 public Foundation::Memory::UseBlockAllocationIfAppropriate<SavedTextRepWSel> {
1677 using inherited = InteractiveReplaceCommand::SavedTextRep;
1680 enum WPRelativeFlag {
1686 SavedTextRepWSel (SavedTextRep* delegateTo, WordProcessorTable& table, WPRelativeFlag wPRelativeFlag);
1689 virtual size_t GetLength ()
const override;
1690 virtual void InsertSelf (TextInteractor* interactor,
size_t at,
size_t nBytesToOverwrite)
override;
1691 virtual void ApplySelection (TextInteractor* imager)
override;
1694 WPRelativeFlag fWPRelativeFlag;
1695 unique_ptr<SavedTextRep> fRealRep;
1696 size_t fRowSelStart{0};
1697 size_t fRowSelEnd{0};
1698 size_t fColSelStart{0};
1699 size_t fColSelEnd{0};
1700 bool fIntraCellMode{
false};
1701 size_t fIntraCellSelStart{0};
1702 size_t fIntraCellSelEnd{0};
1704 DISABLE_COMPILER_MSC_WARNING_END (4250)
1713 class WordProcessorTable::EmbeddedTableWordProcessor::TemporarilyUseTablet {
1715 using EmbeddedTableWordProcessor = WordProcessorTable::EmbeddedTableWordProcessor;
1718 enum DoTextMetricsChangedCall {
1719 eDoTextMetricsChangedCall,
1720 eDontDoTextMetricsChangedCall
1722 TemporarilyUseTablet (EmbeddedTableWordProcessor& editor, Tablet* t, DoTextMetricsChangedCall tmChanged = eDoTextMetricsChangedCall);
1723 ~TemporarilyUseTablet ();
1726 EmbeddedTableWordProcessor& fEditor;
1728 DoTextMetricsChangedCall fDoTextMetricsChangedCall;
1739 class WordProcessorTable::EmbeddedTableWordProcessor::DisableRefreshContext {
1741 DisableRefreshContext (EmbeddedTableWordProcessor& wp);
1742 ~DisableRefreshContext ();
1745 EmbeddedTableWordProcessor& fWP;
1757 class WordProcessorTable::TemporarilySetOwningWP {
1759 TemporarilySetOwningWP (
const WordProcessorTable& forTable, WordProcessor& forWordProcessor);
1760 ~TemporarilySetOwningWP ();
1763 WordProcessorTable& fOwningTable;
1764 WordProcessor* fSavedTableOwningWP;
1769 class WordProcessorTable::TemporarilyAllocateCellWP {
1771 using EmbeddedTableWordProcessor = WordProcessorTable::EmbeddedTableWordProcessor;
1774 TemporarilyAllocateCellWP (WordProcessorTable& forTable, WordProcessor& forWordProcessor,
size_t forRow,
size_t forColumn,
1775 const Led_Rect& cellWindowRect,
bool captureChangesForUndo =
true);
1776 ~TemporarilyAllocateCellWP ();
1778 nonvirtual
operator EmbeddedTableWordProcessor* ();
1779 nonvirtual EmbeddedTableWordProcessor& operator& ();
1780 nonvirtual EmbeddedTableWordProcessor* operator->();
1783 WordProcessorTable& fOwningTable;
1784 EmbeddedTableWordProcessor* fCellEditor;
1789 class WordProcessorTable::TemporarilyAllocateCellWithTablet {
1791 using Tablet_Acquirer = TextInteractor::Tablet_Acquirer;
1794 TemporarilyAllocateCellWithTablet (WordProcessorTable& forTable,
size_t row,
size_t column,
bool captureChangesForUndo =
true);
1797 using TemporarilyUseTablet = EmbeddedTableWordProcessor::TemporarilyUseTablet;
1800 nonvirtual
operator EmbeddedTableWordProcessor* ();
1801 nonvirtual EmbeddedTableWordProcessor& operator& ();
1802 nonvirtual EmbeddedTableWordProcessor* operator->();
1805 TemporarilyAllocateCellWP fWP;
1806 Tablet_Acquirer fTablet;
1807 TemporarilyUseTablet fTmpUseTablet;
1821 struct WordProcessor::CommandNames {
1823 SDKString fStandardTabStopListCommandName;
1826 SDKString fMarginsAndFirstIndentCommandName;
1831 SDKString fIndentLevelChangeCommandName;
1833 SDKString fInsertTableRowAboveCommandName;
1834 SDKString fInsertTableRowBelowCommandName;
1835 SDKString fInsertTableColBeforeCommandName;
1836 SDKString fInsertTableColAfterCommandName;
1839 SDKString fRemoveTableColumnsCommandName;
1842 SDKString fEmbeddingTypeName_ImageMacPict;
1848 SDKString fGenericEmbeddingPropertiesCommandName;
1849 SDKString fChangeTablePropertiesCommandName;
1856 class WordProcessor::DialogSupport {
1858 using CommandNumber = TextInteractor::CommandNumber;
1859 using FontNameSpecifier = FontSpecification::FontNameSpecifier;
1862 virtual FontNameSpecifier CmdNumToFontName (CommandNumber cmdNum);
1863 virtual bool IsPredefinedFontSize (DistanceType fontSize);
1864 virtual DistanceType FontCmdToSize (CommandNumber commandNum);
1865 virtual DistanceType PickOtherFontHeight (DistanceType origHeight);
1866 virtual bool PickNewParagraphLineSpacing (TWIPS* spaceBefore,
bool* spaceBeforeValid, TWIPS* spaceAfter,
bool* spaceAfterValid,
1867 LineSpacing* lineSpacing,
bool* lineSpacingValid);
1868 virtual bool PickNewParagraphMarginsAndFirstIndent (TWIPS* leftMargin,
bool* leftMarginValid, TWIPS* rightMargin,
1869 bool* rightMarginValid, TWIPS* firstIndent,
bool* firstIndentValid);
1870 virtual Color FontCmdToColor (CommandNumber cmd);
1871 virtual CommandNumber FontColorToCmd (Color color);
1872 virtual bool PickOtherFontColor (Color* color);
1873 virtual bool ChooseFont (IncrementalFontSpecification* font);
1874 virtual void ShowSimpleEmbeddingInfoDialog (
const SDKString& embeddingTypeName);
1875 virtual bool ShowURLEmbeddingInfoDialog (
const SDKString& embeddingTypeName, SDKString* urlTitle, SDKString* urlValue);
1876 virtual bool ShowAddURLEmbeddingInfoDialog (SDKString* urlTitle, SDKString* urlValue);
1877 virtual bool AddNewTableDialog (
size_t* nRows,
size_t* nCols);
1878 struct TableSelectionPropertiesInfo;
1879 virtual bool EditTablePropertiesDialog (TableSelectionPropertiesInfo* tableProperties);
1881#if qStroika_Foundation_Common_Platform_Windows
1883 static UINT_PTR CALLBACK ColorPickerINITPROC (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
1891 struct WordProcessor::DialogSupport::TableSelectionPropertiesInfo {
1892 TableSelectionPropertiesInfo ();
1894 TWIPS fTableBorderWidth;
1895 Color fTableBorderColor;
1897 TWIPS_Rect fDefaultCellMargins;
1900 bool fCellWidth_Common;
1903 bool fCellBackgroundColor_Common;
1904 Color fCellBackgroundColor;
1909 class WordProcessor::EmptySelectionParagraphSavedTextRep :
public StandardStyledTextInteractor::EmptySelStyleTextRep {
1911 using inherited = StandardStyledTextInteractor::EmptySelStyleTextRep;
1914 EmptySelectionParagraphSavedTextRep (WordProcessor* interactor,
size_t selStart,
size_t selEnd,
size_t at);
1917 virtual void InsertSelf (TextInteractor* interactor,
size_t at,
size_t nBytesToOverwrite)
override;
1920 ParagraphInfo fSavedStyleInfo;
1931#include "WordProcessor.inl"
basic_string< SDKChar > SDKString