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"
18static_assert (qStroika_HasComponent_ATLMFC,
19 "Error: Stroika::Framework::Led::Platform MFC_WordProcessor code requires the ATLMFC feature to be set true");
21DISABLE_COMPILER_MSC_WARNING_START (5054)
23DISABLE_COMPILER_MSC_WARNING_END (5054)
30#include "Stroika/Frameworks/Led/Platform/MFC.h"
31#include "Stroika/Frameworks/Led/StyledTextIO/StyledTextIO_RTF.h"
32#include "Stroika/Frameworks/Led/WordProcessor.h"
34namespace Stroika::Frameworks::Led::Platform {
46#ifndef qSupportOLEControlEmbedding
47#define qSupportOLEControlEmbedding 1
50#if qSupportOLEControlEmbedding
51 class Led_MFC_ControlItem;
54 DISABLE_COMPILER_MSC_WARNING_START (4250)
61 template <typename BASECLASS>
62 class WordProcessorCommonCommandHelper_MFC : public BASECLASS {
64 using inherited = BASECLASS;
67 WordProcessorCommonCommandHelper_MFC ();
69#if qSupportOLEControlEmbedding
71 afx_msg
void OnPaint ();
82 class ControlItemContextInternalizer :
public WordProcessor::WordProcessorFlavorPackageInternalizer {
84 using inherited = WordProcessor::WordProcessorFlavorPackageInternalizer;
87 ControlItemContextInternalizer (COleDocument* doc, TextStore& ts,
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase,
88 const shared_ptr<AbstractParagraphDatabaseRep>& paragraphDatabase,
89 const shared_ptr<HidableTextMarkerOwner>& hiddenTextDatabase)
90 : FlavorPackageInternalizer{ts}
91 , inherited{ts, styleDatabase, paragraphDatabase, hiddenTextDatabase}
97 virtual bool InternalizeBestFlavor (ReaderFlavorPackage& flavorPackage,
size_t from,
size_t to)
override
99 typename Led_MFC_ControlItem::DocContextDefiner tmp{fDocument};
100 return inherited::InternalizeBestFlavor (flavorPackage, from, to);
104 COleDocument* fDocument;
108 virtual shared_ptr<FlavorPackageInternalizer> MakeDefaultInternalizer ()
override;
111 virtual SDKString GetPrettyTypeName (SimpleEmbeddedObjectStyleMarker* m)
override;
114 DECLARE_MESSAGE_MAP ()
117#if qSupportOLEControlEmbedding
118 friend class Led_MFC_ControlItem;
121 DISABLE_COMPILER_MSC_WARNING_END (4250)
123#if qSupportOLEControlEmbedding
132 class Led_MFC_ControlItem :
public COleClientItem,
public SimpleEmbeddedObjectStyleMarker,
public StyledTextIO::RTFIO::RTFOLEEmbedding {
134 static const Led_ClipFormat kClipFormat;
135 static const Led_PrivateEmbeddingTag kEmbeddingTag;
141 Led_MFC_ControlItem (COleDocument* pContainer = NULL);
142 ~Led_MFC_ControlItem ();
145 struct DocContextDefiner;
146 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker (
const char* embeddingTag,
const void* data,
size_t len);
147 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker (ReaderFlavorPackage& flavorPackage);
150 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker_ (
const char* embeddingTag,
const void* data,
size_t len,
151 Led_MFC_ControlItem* builtItem);
152 static SimpleEmbeddedObjectStyleMarker* mkLed_MFC_ControlItemStyleMarker_ (ReaderFlavorPackage& flavorPackage, Led_MFC_ControlItem* builtItem);
155 nonvirtual COleDocument& GetDocument ()
const;
156 nonvirtual Led_MFC& GetActiveView ()
const;
159 virtual void OnChange (OLE_NOTIFICATION wNotification, DWORD dwParam)
override;
160 virtual void OnActivate ()
override;
161 virtual BOOL DoVerb (LONG nVerb, CView* pView, LPMSG lpMsg = NULL)
override;
164 virtual void OnGetItemPosition (CRect& rPosition)
override;
165 virtual void OnDeactivateUI (BOOL bUndoable)
override;
166 virtual BOOL OnChangeItemPosition (
const CRect& rectPos)
override;
169 virtual void DrawSegment (
const StyledTextImager* imager,
const StyleRunElement& runElement, Tablet* tablet,
size_t from,
size_t to,
170 const TextLayoutBlock& text,
const Led_Rect& drawInto,
const Led_Rect& ,
171 CoordinateType useBaseLine, DistanceType* pixelsDrawn)
override;
172 virtual void MeasureSegmentWidth (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to,
173 const Led_tChar* text, DistanceType* distanceResults)
const override;
174 virtual DistanceType MeasureSegmentHeight (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
175 virtual void DidUpdateText (
const MarkerOwner::UpdateInfo& updateInfo)
noexcept override;
176 virtual bool HandleOpen ()
override;
179 virtual vector<PrivateCmdNumber> GetCmdNumbers ()
const override;
180 virtual bool IsCmdEnabled (PrivateCmdNumber cmd)
const override;
187 virtual void PostCreateSpecifyExtraInfo (TWIPS_Point size)
override;
188 virtual SDKString GetObjClassName ()
const override;
189 virtual void DoWriteToOLE1Stream (
size_t* nBytes,
byte** resultData)
override;
190 virtual Led_Size GetSize ()
override;
193 virtual const char* GetTag ()
const override;
194 virtual void Write (SinkStream& sink)
override;
195 virtual void ExternalizeFlavors (WriterFlavorPackage& flavorPackage)
override;
197 virtual void Serialize (CArchive& ar)
override;
200 DECLARE_SERIAL (Led_MFC_ControlItem)
216 struct Led_MFC_ControlItem::DocContextDefiner {
218 DocContextDefiner (COleDocument* doc);
219 ~DocContextDefiner ();
222 static COleDocument* GetDoc ();
225 static COleDocument* sDoc;
228 COleDocument* fOldDoc;
231 static set<HWND> sWindowsWhichHadDisplaySuppressed;
241 template <
typename BASECLASS>
242 inline WordProcessorCommonCommandHelper_MFC<BASECLASS>::WordProcessorCommonCommandHelper_MFC ()
246#if qSupportOLEControlEmbedding
247 template <
typename BASECLASS>
248 void WordProcessorCommonCommandHelper_MFC<BASECLASS>::OnPaint ()
250 if (Led_MFC_ControlItem::DocContextDefiner::GetDoc () != NULL) {
253 Led_MFC_ControlItem::DocContextDefiner::sWindowsWhichHadDisplaySuppressed.insert (this->GetHWND ());
256 inherited::OnPaint ();
258 template <
typename BASECLASS>
259 shared_ptr<FlavorPackageInternalizer> WordProcessorCommonCommandHelper_MFC<BASECLASS>::MakeDefaultInternalizer ()
261 return Memory::MakeSharedPtr<ControlItemContextInternalizer> (
dynamic_cast<COleDocument*
> (this->GetDocument ()),
262 this->GetTextStore (), this->GetStyleDatabase (),
263 this->GetParagraphDatabase (), this->GetHidableTextDatabase ());
266 template <
typename BASECLASS>
267 SDKString WordProcessorCommonCommandHelper_MFC<BASECLASS>::GetPrettyTypeName (SimpleEmbeddedObjectStyleMarker* m)
269#if qSupportOLEControlEmbedding
270 if (
dynamic_cast<Led_MFC_ControlItem*
> (m) != NULL) {
271 return Led_SDK_TCHAROF (
"OLE embedding");
274 return inherited::GetPrettyTypeName (m);
276 template <
typename BASECLASS>
277 const AFX_MSGMAP* WordProcessorCommonCommandHelper_MFC<BASECLASS>::GetMessageMap ()
const
279 return GetThisMessageMap ();
281 template <
typename BASECLASS>
282 const AFX_MSGMAP* PASCAL WordProcessorCommonCommandHelper_MFC<BASECLASS>::GetThisMessageMap ()
284 using ThisClass = WordProcessorCommonCommandHelper_MFC<BASECLASS>;
285 using TheBaseClass = BASECLASS;
287 DISABLE_COMPILER_MSC_WARNING_START (4407)
289 static const AFX_MSGMAP_ENTRY _messageEntries[] = {
292 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTableIntraCellAll_CmdID) LED_MFC_HANDLE_COMMAND_M (
293 WordProcessor::kSelectTableCell_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTableRow_CmdID)
294 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTableColumn_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSelectTable_CmdID) LED_MFC_HANDLE_COMMAND_M (
295 WordProcessor::kFontStylePlain_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kFontStyleBold_CmdID)
296 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kFontStyleItalic_CmdID) LED_MFC_HANDLE_COMMAND_M (
297 WordProcessor::kFontStyleUnderline_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kFontStyleStrikeout_CmdID)
298 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kSubScriptCommand_CmdID) LED_MFC_HANDLE_COMMAND_M (
299 WordProcessor::kSuperScriptCommand_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kChooseFontCommand_CmdID)
300 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kBaseFontSize_CmdID, WordProcessor::kLastFontSize_CmdID) LED_MFC_HANDLE_COMMAND_RANGE_M (
301 WordProcessor::kFontMenuFirst_CmdID, WordProcessor::kFontMenuLast_CmdID)
302 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kBaseFontColor_CmdID, WordProcessor::kLastFontColor_CmdID)
303 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kHideSelection_CmdID, WordProcessor::kUnHideSelection_CmdID)
304 LED_MFC_HANDLE_COMMAND_RANGE_M (WordProcessor::kFirstJustification_CmdID, WordProcessor::kLastJustification_CmdID)
305 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kParagraphSpacingCommand_CmdID)
306 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kParagraphIndentsCommand_CmdID) LED_MFC_HANDLE_COMMAND_RANGE_M (
307 WordProcessor::kFirstListStyle_CmdID,
308 WordProcessor::kLastListStyle_CmdID) LED_MFC_HANDLE_COMMAND_M (WordProcessor::kIncreaseIndent_CmdID)
309 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kDecreaseIndent_CmdID) LED_MFC_HANDLE_COMMAND_RANGE_M (
310 WordProcessor::kFirstShowHideGlyph_CmdID, WordProcessor::kLastShowHideGlyph_CmdID)
311 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTable_CmdID)
312 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableRowAbove_CmdID)
313 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableRowBelow_CmdID)
314 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableColBefore_CmdID)
315 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertTableColAfter_CmdID)
316 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kRemoveTableRows_CmdID)
317 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kRemoveTableColumns_CmdID)
318 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertURL_CmdID)
319 LED_MFC_HANDLE_COMMAND_M (WordProcessor::kInsertSymbol_CmdID)
320 LED_MFC_HANDLE_COMMAND_RANGE_M (
321 WordProcessor::kFirstSelectedEmbedding_CmdID,
322 WordProcessor::kLastSelectedEmbedding_CmdID)
324 {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0}};
325 DISABLE_COMPILER_MSC_WARNING_END (4407)
326 static const AFX_MSGMAP messageMap = {&TheBaseClass::GetThisMessageMap, &_messageEntries[0]};
330#if qSupportOLEControlEmbedding
332#if !qStroika_Foundation_Debug_AssertionsChecked
333 inline COleDocument& Led_MFC_ControlItem::GetDocument ()
const
336 return *(COleDocument*)COleClientItem::GetDocument ();
338 inline Led_MFC& Led_MFC_ControlItem::GetActiveView ()
const
341 return *(Led_MFC*)COleClientItem::GetActiveView ();
346 inline Led_MFC_ControlItem::DocContextDefiner::DocContextDefiner (COleDocument* doc)
352 inline Led_MFC_ControlItem::DocContextDefiner::~DocContextDefiner ()
357 inline COleDocument* Led_MFC_ControlItem::DocContextDefiner::GetDoc ()
#define RequireNotNull(p)
basic_string< SDKChar > SDKString