5#ifndef __LedItApplication_h__
6#define __LedItApplication_h__ 1
8#include "Stroika/Foundation/StroikaPreComp.h"
13#if qStroika_Foundation_Common_Platform_MacOS
16#include <LDocApplication.h>
17#elif qStroika_Foundation_Common_Platform_Windows
19#include "Stroika/Foundation/Execution/Platform/Windows/COM.h"
21DISABLE_COMPILER_MSC_WARNING_START (5054)
23DISABLE_COMPILER_MSC_WARNING_END (5054)
24#elif qStroika_FeatureSupported_XWindows
30#include "Stroika/Frameworks/Led/GDI.h"
31#include "Stroika/Frameworks/Led/Support.h"
32#include "Stroika/Frameworks/Led/TextStore.h"
34#include "LedItConfig.h"
36#if qIncludeBasicSpellcheckEngine
37#include "Stroika/Frameworks/Led/SpellCheckEngine_Basic.h"
40#if qStroika_Foundation_Common_Platform_MacOS
41#include "Stroika/Frameworks/Led/Platform/Led_PP.h"
42#elif qStroika_Foundation_Common_Platform_Windows
43#include "Stroika/Frameworks/Led/Platform/MFC.h"
44#elif qStroika_FeatureSupported_XWindows
45#include "Stroika/Frameworks/Led/Platform/Gtk.h"
48#if qStroika_Foundation_Common_Platform_Windows
55#if qStroika_Foundation_Common_Platform_MacOS
56using CMD_ENABLER = Platform::Led_PP_TmpCmdUpdater;
57#elif qStroika_Foundation_Common_Platform_Windows
58using CMD_ENABLER = Platform::Led_MFC_TmpCmdUpdater;
59#elif qStroika_FeatureSupported_XWindows
60using CMD_ENABLER = Platform::Led_Gtk_TmpCmdUpdater;
64#if qStroika_Foundation_Common_Platform_MacOS
65 :
public LDocApplication
66#elif qStroika_Foundation_Common_Platform_Windows
71#if qStroika_Foundation_Common_Platform_MacOS
72 using inherited = LDocApplication;
73#elif qStroika_Foundation_Common_Platform_Windows
74 using inherited = CWinApp;
79 virtual ~LedItApplication ();
82 static LedItApplication& Get ();
85 static LedItApplication* sThe;
87#if qIncludeBasicSpellcheckEngine
89 shared_ptr<SpellCheckEngine_Basic_Simple> fSpellCheckEngine;
92#if qStroika_Foundation_Common_Platform_Windows
94 nonvirtual
void FixupFontMenu (CMenu* fontMenu);
95 nonvirtual
SDKString CmdNumToFontName (UINT cmdNum);
96 nonvirtual
const vector<SDKString>& GetUsableFontNames ();
100 nonvirtual
void OnToggleSmartCutNPasteOptionCommand ();
101 nonvirtual
void OnToggleSmartCutNPasteOption_UpdateCommandUI (CMD_ENABLER* enabler);
102 nonvirtual
void OnToggleWrapToWindowOptionCommand ();
103 nonvirtual
void OnToggleWrapToWindowOption_UpdateCommandUI (CMD_ENABLER* enabler);
104 nonvirtual
void OnToggleShowHiddenTextOptionCommand ();
105 nonvirtual
void OnToggleShowHiddenTextOption_UpdateCommandUI (CMD_ENABLER* enabler);
108 nonvirtual
void UpdateViewsForPrefsChange ();
110#if qStroika_Foundation_Common_Platform_Windows
112 virtual BOOL InitInstance ()
override;
115#if _MFC_VER >= 0x0700
116 virtual void WinHelpInternal (DWORD_PTR dwData, UINT nCmd = HELP_CONTEXT)
override;
118 vitual
void WinHelp (DWORD dwData, UINT nCmd = HELP_CONTEXT)
override;
123 virtual BOOL PumpMessage ()
override;
125 nonvirtual
void HandleMFCException (CException* e)
noexcept;
126 nonvirtual
void HandleHRESULTException (HRESULT hr)
noexcept;
129 virtual BOOL OnIdle (LONG lCount)
override;
133 nonvirtual
void AddDocTemplateForString (
const char* tmplStr,
bool connectToServer);
135 COleTemplateServer fOleTemplateServer;
138 virtual BOOL ProcessShellCommand (CCommandLineInfo& rCmdInfo);
141 afx_msg
void OnAppAbout ();
142 afx_msg
void OnToggleSmartCutNPasteOptionUpdateCommandUI (CCmdUI* pCmdUI);
143 afx_msg
void OnToggleWrapToWindowOptionUpdateCommandUI (CCmdUI* pCmdUI);
144 afx_msg
void OnToggleShowHiddenTextOptionUpdateCommandUI (CCmdUI* pCmdUI);
147 DECLARE_MESSAGE_MAP ()
151 nonvirtual
void OnChooseDefaultFontCommand ();
155 nonvirtual
void HandleBadAllocException () noexcept;
156 nonvirtual
void HandleBadUserInputException () noexcept;
157 nonvirtual
void HandleUnknownException () noexcept;
160 nonvirtual
void DoAboutBox ();
161 nonvirtual
void OnGotoLedItWebPageCommand ();
162 nonvirtual
void OnGotoSophistsWebPageCommand ();
163 nonvirtual
void OnCheckForUpdatesWebPageCommand ();
165#if qStroika_Foundation_Common_Platform_MacOS
167 virtual void MakeMenuBar ()
override;
168 virtual void StartUp ()
override;
169 virtual void ProcessNextEvent ()
override;
170 virtual void HandleAppleEvent (
const AppleEvent& inAppleEvent, AppleEvent& outAEReply, AEDesc& outResult,
long inAENumber)
override;
173 nonvirtual
void HandleMacOSException (OSErr err);
174 nonvirtual
void HandlePowerPlantException (ExceptionCode err);
177 virtual void ShowAboutBox ()
override;
179 virtual Boolean ObeyCommand (CommandT inCommand,
void* ioParam = nil)
override;
180 virtual void FindCommandStatus (CommandT inCommand, Boolean& outEnabled, Boolean& outUsesMark, UInt16& outMark, Str255 outName)
override;
183 nonvirtual
void OnHelpMenuCommand ();
189 short fGotoLedItWebPageMenuItem;
192 short fGotoSophistsWebPageMenuItem;
195 short fCheckForUpdatesWebPageMenuItem;
198 virtual void UseIdleTime (
const EventRecord& inMacEvent)
override;
201 float fLastLowMemWarnAt;
204 virtual void OpenDocument (FSSpec* inMacFSSpec)
override;
205 virtual void OpenDocument (FSSpec* inMacFSSpec, FileFormat format)
override;
206 virtual LModelObject* MakeNewDocument ()
override;
209 virtual void ChooseDocument ()
override;
212 static pascal Boolean SFGetDlgModalFilter (DialogPtr dialog, EventRecord* theEvent,
short* itemHit,
void* myData);
213 static pascal
short SFGetDlgHook (
short item, DialogPtr dialog,
void* myData);
216#if qStroika_FeatureSupported_XWindows
218 nonvirtual GtkWidget* get_main_menu (GtkWidget* window);
221 static gint delete_event (GtkWidget* widget, gpointer data);
222 static void xdestroy (GtkWidget* widget, gpointer data);
225 LedItDocument* fDocument;
228 nonvirtual
void OnNewDocumentCommand ();
229 nonvirtual
void OnOpenDocumentCommand ();
230 nonvirtual
void OnSaveDocumentCommand ();
231 nonvirtual
void OnSaveAsDocumentCommand ();
232 nonvirtual
void OnQuitCommand ();
235 nonvirtual
void LoadFromFile (
const string& fileName, FileFormat fileFormat);
236 nonvirtual
void SaveAs (
const string& fileName, FileFormat fileFormat);
237 nonvirtual
void Save ();
240 nonvirtual
void UpdateFrameWindowTitle ();
243 static void AppCmdDispatcher (gpointer callback_data, guint callback_action, GtkWidget* widget);
244 static void AppCmdOnInitMenu (GtkMenuItem* menuItem, gpointer callback_data);
247 nonvirtual GtkWidget* GetAppWindow ()
const;
250 GtkWidget* fAppWindow;
251 LedItView* fTextEditor;
254 static GtkItemFactoryEntry kMenuItemResources[];
256#if qStroika_Foundation_Common_Platform_Windows
258 Execution::Platform::Windows::COMInitializer fCOMInitializer_{COINIT_APARTMENTTHREADED};
261 Execution::Logger::Activator fLogMgrActivator_;
262#if qStroika_Foundation_Common_Platform_Windows || qStroika_FeatureSupported_XWindows
264 InstalledFonts fInstalledFonts;
basic_string< SDKChar > SDKString