4#ifndef _Stroika_Frameworks_Led_Platform_MFC_WordProcessor_h_
5#define _Stroika_Frameworks_Led_Platform_MFC_WordProcessor_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
16static_assert (qStroika_HasComponent_ATLMFC,
17 "Error: Stroika::Framework::Led::Platform MFC_WordProcessor code requires the ATLMFC feature to be set true");
19DISABLE_COMPILER_MSC_WARNING_START (5054)
21DISABLE_COMPILER_MSC_WARNING_END (5054)
28#include "Stroika/Frameworks/Led/Platform/MFC.h"
29#include "Stroika/Frameworks/Led/StyledTextIO/StyledTextIO_RTF.h"
30#include "Stroika/Frameworks/Led/WordProcessor.h"
32namespace Stroika::Frameworks::Led::Platform {
44#ifndef qSupportOLEControlEmbedding
45#define qSupportOLEControlEmbedding 1
48#if qSupportOLEControlEmbedding
49 class Led_MFC_ControlItem;
52 DISABLE_COMPILER_MSC_WARNING_START (4250)
59 template <typename BASECLASS>
60 class WordProcessorCommonCommandHelper_MFC : public BASECLASS {
62 using inherited = BASECLASS;
65 WordProcessorCommonCommandHelper_MFC ();
67#if qSupportOLEControlEmbedding
69 afx_msg
void OnPaint ();
80 class ControlItemContextInternalizer :
public WordProcessor::WordProcessorFlavorPackageInternalizer {
82 using inherited = WordProcessor::WordProcessorFlavorPackageInternalizer;
85 ControlItemContextInternalizer (COleDocument* doc, TextStore& ts,
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase,
86 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
87 const shared_ptr<HidableTextMarkerOwner>& hiddenTextDatabase)
88 : FlavorPackageInternalizer{ts}
89 , inherited{ts, styleDatabase, paragraphDatabase, hiddenTextDatabase}
95 virtual bool InternalizeBestFlavor (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to)
override
97 typename Led_MFC_ControlItem::DocContextDefiner tmp{fDocument};
98 return inherited::InternalizeBestFlavor (flavorPackage, from, to);
102 COleDocument* fDocument;
106 virtual shared_ptr<FlavorPackageInternalizer> MakeDefaultInternalizer ()
override;
109 virtual SDKString GetPrettyTypeName (SimpleEmbeddedObjectStyleMarker* m)
override;
112 DECLARE_MESSAGE_MAP ()
115#if qSupportOLEControlEmbedding
116 friend class Led_MFC_ControlItem;
119 DISABLE_COMPILER_MSC_WARNING_END (4250)
121#if qSupportOLEControlEmbedding
130 class Led_MFC_ControlItem :
public COleClientItem,
public SimpleEmbeddedObjectStyleMarker,
public StyledTextIO::RTFIO::RTFOLEEmbedding {
132 static const Led_ClipFormat kClipFormat;
133 static const Led_PrivateEmbeddingTag kEmbeddingTag;
139 Led_MFC_ControlItem (COleDocument* pContainer = NULL);
140 ~Led_MFC_ControlItem ();
143 struct DocContextDefiner;
144 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker (
const char* embeddingTag,
const void* data,
size_t len);
145 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker (ReaderFlavorPackage& flavorPackage);
148 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker_ (
const char* embeddingTag,
const void* data,
size_t len,
149 Led_MFC_ControlItem* builtItem);
150 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker_ (ReaderFlavorPackage& flavorPackage, Led_MFC_ControlItem* builtItem);
153 nonvirtual COleDocument& GetDocument ()
const;
154 nonvirtual Led_MFC& GetActiveView ()
const;
157 virtual void OnChange (OLE_NOTIFICATION wNotification, DWORD dwParam)
override;
158 virtual void OnActivate ()
override;
159 virtual BOOL DoVerb (LONG nVerb, CView* pView, LPMSG lpMsg = NULL)
override;
162 virtual void OnGetItemPosition (CRect& rPosition)
override;
163 virtual void OnDeactivateUI (BOOL bUndoable)
override;
164 virtual BOOL OnChangeItemPosition (
const CRect& rectPos)
override;
167 virtual void DrawSegment (
const StyledTextImager* imager,
const StyleRunElement& runElement, Tablet* tablet,
size_t from,
size_t to,
168 const TextLayoutBlock& text,
const Led_Rect& drawInto,
const Led_Rect& ,
169 CoordinateType useBaseLine, DistanceType* pixelsDrawn)
override;
170 virtual void MeasureSegmentWidth (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to,
171 const Led_tChar* text, DistanceType* distanceResults)
const override;
172 virtual DistanceType MeasureSegmentHeight (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
173 virtual void DidUpdateText (
const MarkerOwner::UpdateInfo& updateInfo)
noexcept override;
174 virtual bool HandleOpen ()
override;
177 virtual vector<PrivateCmdNumber> GetCmdNumbers ()
const override;
178 virtual bool IsCmdEnabled (PrivateCmdNumber cmd)
const override;
185 virtual void PostCreateSpecifyExtraInfo (TWIPS_Point size)
override;
186 virtual SDKString GetObjClassName ()
const override;
187 virtual void DoWriteToOLE1Stream (
size_t* nBytes,
byte** resultData)
override;
188 virtual Led_Size GetSize ()
override;
191 virtual const char* GetTag ()
const override;
192 virtual void Write (SinkStream& sink)
override;
193 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage)
override;
195 virtual void Serialize (CArchive& ar)
override;
198 DECLARE_SERIAL (Led_MFC_ControlItem)
214 struct Led_MFC_ControlItem::DocContextDefiner {
216 DocContextDefiner (COleDocument* doc);
217 ~DocContextDefiner ();
220 static COleDocument* GetDoc ();
223 static COleDocument* sDoc;
226 COleDocument* fOldDoc;
229 static set<HWND> sWindowsWhichHadDisplaySuppressed;
239 template <
typename BASECLASS>
240 inline WordProcessorCommonCommandHelper_MFC<BASECLASS>::WordProcessorCommonCommandHelper_MFC ()
244#if qSupportOLEControlEmbedding
245 template <
typename BASECLASS>
246 void WordProcessorCommonCommandHelper_MFC<BASECLASS>::OnPaint ()
248 if (Led_MFC_ControlItem::DocContextDefiner::GetDoc () != NULL) {
251 Led_MFC_ControlItem::DocContextDefiner::sWindowsWhichHadDisplaySuppressed.insert (this->GetHWND ());
254 inherited::OnPaint ();
256 template <
typename BASECLASS>
257 shared_ptr<FlavorPackageInternalizer> WordProcessorCommonCommandHelper_MFC<BASECLASS>::MakeDefaultInternalizer ()
259 return make_shared<ControlItemContextInternalizer> (
dynamic_cast<COleDocument*
> (this->GetDocument ()), this->GetTextStore (),
260 this->GetStyleDatabase (), this->GetParagraphDatabase (),
261 this->GetHidableTextDatabase ());
264 template <
typename BASECLASS>
265 SDKString WordProcessorCommonCommandHelper_MFC<BASECLASS>::GetPrettyTypeName (SimpleEmbeddedObjectStyleMarker* m)
267#if qSupportOLEControlEmbedding
268 if (
dynamic_cast<Led_MFC_ControlItem*
> (m) != NULL) {
269 return Led_SDK_TCHAROF (
"OLE embedding");
272 return inherited::GetPrettyTypeName (m);
274 template <
typename BASECLASS>
275 const AFX_MSGMAP* WordProcessorCommonCommandHelper_MFC<BASECLASS>::GetMessageMap ()
const
277 return GetThisMessageMap ();
279 template <
typename BASECLASS>
280 const AFX_MSGMAP* PASCAL WordProcessorCommonCommandHelper_MFC<BASECLASS>::GetThisMessageMap ()
282 using ThisClass = WordProcessorCommonCommandHelper_MFC<BASECLASS>;
283 using TheBaseClass = BASECLASS;
285 DISABLE_COMPILER_MSC_WARNING_START (4407)
287 static const AFX_MSGMAP_ENTRY _messageEntries[] = {
290 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTableIntraCellAll_CmdID) LED_MFC_HANDLE_COMMAND_M (
291 WordProcessor::kSelectTableCell_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTableRow_CmdID)
292 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTableColumn_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTable_CmdID) LED_MFC_HANDLE_COMMAND_M (
293 WordProcessor::kFontStylePlain_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kFontStyleBold_CmdID)
294 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kFontStyleItalic_CmdID) LED_MFC_HANDLE_COMMAND_M (
295 WordProcessor::kFontStyleUnderline_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kFontStyleStrikeout_CmdID)
296 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSubScriptCommand_CmdID) LED_MFC_HANDLE_COMMAND_M (
297 WordProcessor::kSuperScriptCommand_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kChooseFontCommand_CmdID)
298 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kBaseFontSize_CmdID, WordProcessor::kLastFontSize_CmdID) LED_MFC_HANDLE_COMMAND_RANGE_M (
299 WordProcessor::kFontMenuFirst_CmdID, WordProcessor::kFontMenuLast_CmdID)
300 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kBaseFontColor_CmdID, WordProcessor::kLastFontColor_CmdID)
301 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kHideSelection_CmdID, WordProcessor::kUnHideSelection_CmdID)
302 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kFirstJustification_CmdID, WordProcessor::kLastJustification_CmdID)
303 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kParagraphSpacingCommand_CmdID)
304 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kParagraphIndentsCommand_CmdID) LED_MFC_HANDLE_COMMAND_RANGE_M (
305 WordProcessor::kFirstListStyle_CmdID,
306 WordProcessor::kLastListStyle_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kIncreaseIndent_CmdID)
307 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kDecreaseIndent_CmdID) LED_MFC_HANDLE_COMMAND_RANGE_M (
308 WordProcessor::kFirstShowHideGlyph_CmdID, WordProcessor::kLastShowHideGlyph_CmdID)
309 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTable_CmdID)
310 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableRowAbove_CmdID)
311 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableRowBelow_CmdID)
312 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableColBefore_CmdID)
313 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableColAfter_CmdID)
314 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kRemoveTableRows_CmdID)
315 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kRemoveTableColumns_CmdID)
316 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertURL_CmdID)
317 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertSymbol_CmdID)
318 LED_MFC_HANDLE_COMMAND_RANGE_M (
319 WordProcessor::kFirstSelectedEmbedding_CmdID,
320 WordProcessor::kLastSelectedEmbedding_CmdID)
322 {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0}};
323 DISABLE_COMPILER_MSC_WARNING_END (4407)
324 static const AFX_MSGMAP messageMap = {&TheBaseClass::GetThisMessageMap, &_messageEntries[0]};
328#if qSupportOLEControlEmbedding
330#if !qStroika_Foundation_Debug_AssertionsChecked
331 inline COleDocument& Led_MFC_ControlItem::GetDocument ()
const
334 return *(COleDocument*)COleClientItem::GetDocument ();
336 inline Led_MFC& Led_MFC_ControlItem::GetActiveView ()
const
339 return *(Led_MFC*)COleClientItem::GetActiveView ();
344 inline Led_MFC_ControlItem::DocContextDefiner::DocContextDefiner (COleDocument* doc)
350 inline Led_MFC_ControlItem::DocContextDefiner::~DocContextDefiner ()
355 inline COleDocument* Led_MFC_ControlItem::DocContextDefiner::GetDoc ()
#define RequireNotNull(p)
basic_string< SDKChar > SDKString