Stroika Library 3.0d18
 
Loading...
Searching...
No Matches
LedItApplication.h
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5#ifndef __LedItApplication_h__
6#define __LedItApplication_h__ 1
7
8#include "Stroika/Foundation/StroikaPreComp.h"
9
10#include <string>
11#include <vector>
12
13#if qStroika_Foundation_Common_Platform_MacOS
14#include <Dialogs.h>
15
16#include <LDocApplication.h>
17#elif qStroika_Foundation_Common_Platform_Windows
18
19#include "Stroika/Foundation/Execution/Platform/Windows/COM.h"
20
21DISABLE_COMPILER_MSC_WARNING_START (5054)
22#include <afxole.h>
23DISABLE_COMPILER_MSC_WARNING_END (5054)
24#elif qStroika_FeatureSupported_XWindows
25#include <gtk/gtk.h>
26#endif
27
29
30#include "Stroika/Frameworks/Led/GDI.h"
31#include "Stroika/Frameworks/Led/Support.h"
32#include "Stroika/Frameworks/Led/TextStore.h"
33
34#include "LedItConfig.h"
35
36#if qIncludeBasicSpellcheckEngine
37#include "Stroika/Frameworks/Led/SpellCheckEngine_Basic.h"
38#endif
39
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"
46#endif
47
48#if qStroika_Foundation_Common_Platform_Windows
49class CMenu;
50#endif
51
52class LedItDocument;
53class LedItView;
54
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;
61#endif
62
63class LedItApplication
64#if qStroika_Foundation_Common_Platform_MacOS
65 : public LDocApplication
66#elif qStroika_Foundation_Common_Platform_Windows
67 : public CWinApp
68#endif
69{
70private:
71#if qStroika_Foundation_Common_Platform_MacOS
72 using inherited = LDocApplication;
73#elif qStroika_Foundation_Common_Platform_Windows
74 using inherited = CWinApp;
75#endif
76
77public:
78 LedItApplication ();
79 virtual ~LedItApplication ();
80
81public:
82 static LedItApplication& Get ();
83
84private:
85 static LedItApplication* sThe;
86
87#if qIncludeBasicSpellcheckEngine
88public:
89 shared_ptr<SpellCheckEngine_Basic_Simple> fSpellCheckEngine;
90#endif
91
92#if qStroika_Foundation_Common_Platform_Windows
93public:
94 nonvirtual void FixupFontMenu (CMenu* fontMenu);
95 nonvirtual SDKString CmdNumToFontName (UINT cmdNum);
96 nonvirtual const vector<SDKString>& GetUsableFontNames (); // perform whatever filtering will be done on sys installed fonts and return the names
97#endif
98
99protected:
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);
106
107private:
108 nonvirtual void UpdateViewsForPrefsChange ();
109
110#if qStroika_Foundation_Common_Platform_Windows
111public:
112 virtual BOOL InitInstance () override;
113
114public:
115#if _MFC_VER >= 0x0700
116 virtual void WinHelpInternal (DWORD_PTR dwData, UINT nCmd = HELP_CONTEXT) override;
117#else
118 vitual void WinHelp (DWORD dwData, UINT nCmd = HELP_CONTEXT) override;
119#endif
120
121 // handle exceptions....
122public:
123 virtual BOOL PumpMessage () override;
124
125 nonvirtual void HandleMFCException (CException* e) noexcept;
126 nonvirtual void HandleHRESULTException (HRESULT hr) noexcept;
127#if 0
128public:
129 virtual BOOL OnIdle (LONG lCount) override;
130#endif
131
132private:
133 nonvirtual void AddDocTemplateForString (const char* tmplStr, bool connectToServer);
134
135 COleTemplateServer fOleTemplateServer;
136
137public:
138 virtual BOOL ProcessShellCommand (CCommandLineInfo& rCmdInfo);
139
140protected:
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);
145
146private:
147 DECLARE_MESSAGE_MAP ()
148#endif
149
150protected:
151 nonvirtual void OnChooseDefaultFontCommand ();
152
153 // handle exceptions....
154public:
155 nonvirtual void HandleBadAllocException () noexcept;
156 nonvirtual void HandleBadUserInputException () noexcept;
157 nonvirtual void HandleUnknownException () noexcept;
158
159public:
160 nonvirtual void DoAboutBox ();
161 nonvirtual void OnGotoLedItWebPageCommand ();
162 nonvirtual void OnGotoSophistsWebPageCommand ();
163 nonvirtual void OnCheckForUpdatesWebPageCommand ();
164
165#if qStroika_Foundation_Common_Platform_MacOS
166public:
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;
171
172protected:
173 nonvirtual void HandleMacOSException (OSErr err);
174 nonvirtual void HandlePowerPlantException (ExceptionCode err);
175
176public:
177 virtual void ShowAboutBox () override;
178
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;
181
182public:
183 nonvirtual void OnHelpMenuCommand ();
184
185private:
186 short fHelpMenuItem;
187
188private:
189 short fGotoLedItWebPageMenuItem;
190
191private:
192 short fGotoSophistsWebPageMenuItem;
193
194private:
195 short fCheckForUpdatesWebPageMenuItem;
196
197public:
198 virtual void UseIdleTime (const EventRecord& inMacEvent) override;
199
200private:
201 float fLastLowMemWarnAt;
202
203public:
204 virtual void OpenDocument (FSSpec* inMacFSSpec) override;
205 virtual void OpenDocument (FSSpec* inMacFSSpec, FileFormat format) override;
206 virtual LModelObject* MakeNewDocument () override;
207
208public:
209 virtual void ChooseDocument () override;
210
211private:
212 static pascal Boolean SFGetDlgModalFilter (DialogPtr dialog, EventRecord* theEvent, short* itemHit, void* myData);
213 static pascal short SFGetDlgHook (short item, DialogPtr dialog, void* myData);
214#endif
215
216#if qStroika_FeatureSupported_XWindows
217private:
218 nonvirtual GtkWidget* get_main_menu (GtkWidget* window);
219
220public:
221 static gint delete_event (GtkWidget* widget, gpointer data);
222 static void xdestroy (GtkWidget* widget, gpointer data);
223
224private:
225 LedItDocument* fDocument;
226
227public:
228 nonvirtual void OnNewDocumentCommand ();
229 nonvirtual void OnOpenDocumentCommand ();
230 nonvirtual void OnSaveDocumentCommand ();
231 nonvirtual void OnSaveAsDocumentCommand ();
232 nonvirtual void OnQuitCommand ();
233
234public:
235 nonvirtual void LoadFromFile (const string& fileName, FileFormat fileFormat);
236 nonvirtual void SaveAs (const string& fileName, FileFormat fileFormat);
237 nonvirtual void Save ();
238
239private:
240 nonvirtual void UpdateFrameWindowTitle ();
241
242public:
243 static void AppCmdDispatcher (gpointer callback_data, guint callback_action, GtkWidget* widget);
244 static void AppCmdOnInitMenu (GtkMenuItem* menuItem, gpointer callback_data);
245
246public:
247 nonvirtual GtkWidget* GetAppWindow () const;
248
249private:
250 GtkWidget* fAppWindow;
251 LedItView* fTextEditor;
252
253private:
254 static GtkItemFactoryEntry kMenuItemResources[];
255#endif
256#if qStroika_Foundation_Common_Platform_Windows
257private:
258 Execution::Platform::Windows::COMInitializer fCOMInitializer_{COINIT_APARTMENTTHREADED};
259#endif
260private:
261 Execution::Logger::Activator fLogMgrActivator_;
262#if qStroika_Foundation_Common_Platform_Windows || qStroika_FeatureSupported_XWindows
263public:
264 InstalledFonts fInstalledFonts; // Keep a static copy for speed, and so font#s are static throughout the life of the applet
265#endif
266};
267
268/*
269 ********************************************************************************
270 ***************************** Implementation Details ***************************
271 ********************************************************************************
272 */
273#endif /*__LedItApplication_h__*/
basic_string< SDKChar > SDKString
Definition SDKString.h:38