5#include "Stroika/Foundation/StroikaPreComp.h"
13#include "Stroika/Foundation/Execution/ModuleGetterSetter.h"
23using namespace Stroika::Foundation::Time;
25using namespace Stroika::Frameworks::Led;
30using SearchParameters = TextInteractor::SearchParameters;
36 SearchParameters fSearchParameters{};
37 bool fSmartCutAndPaste{
true};
38 bool fWrapToWindow{
false};
39 bool fShowHiddenText{
true};
40 bool fShowParagraphGlyphs{
false};
41 bool fShowTabGlyphs{
false};
42 bool fShowSpaceGlyphs{
false};
43#if qStroika_Foundation_Common_Platform_Windows
44 bool fCheckFileAssocAtStartup{
true};
45 BLOB fDefaultNewDocFont;
49 struct Options_Storage_IMPL_ {
50 Options_Storage_IMPL_ ()
51 : fOptionsFile_{
"AppSettings"sv,
59 Led_tString* intoObj) ->
void { *intoObj = d.
As<
String> ().As<Led_tString> (); });
60 mapper.AddCommonType<vector<Led_tString>> ();
63 mapper.AddClass<SearchParameters> ({
64 {
"MatchString"sv, &SearchParameters::fMatchString},
65 {
"WrapSearch"sv, &SearchParameters::fWrapSearch},
66 {
"WholeWordSearch"sv, &SearchParameters::fWholeWordSearch},
67 {
"CaseSensativeSearch"sv, &SearchParameters::fCaseSensativeSearch},
68 {
"RecentMatchStrings"sv, &SearchParameters::fRecentFindStrings},
71 mapper.AddClass<Options_> ({
72 {
"DockBarState"sv, &Options_::fDockBarState},
73 {
"Search-Parameters"sv, &Options_::fSearchParameters},
74 {
"SmartCutAndPaste"sv, &Options_::fSmartCutAndPaste},
75 {
"WrapToWindow"sv, &Options_::fWrapToWindow},
76 {
"ShowHiddenText"sv, &Options_::fShowHiddenText},
77 {
"ShowParagraphGlyphs"sv, &Options_::fShowParagraphGlyphs},
78 {
"ShowTabGlyphs"sv, &Options_::fShowTabGlyphs},
79 {
"ShowSpaceGlyphs"sv, &Options_::fShowSpaceGlyphs},
80#if qStroika_Foundation_Common_Platform_Windows
81 {
"CheckFileAssocAtStartup"sv, &Options_::fCheckFileAssocAtStartup},
82 {
"DefaultNewDocFont"sv, &Options_::fDefaultNewDocFont},
90 OptionsFile::mkFilenameMapper (
"LedIt"sv)}
91 , fActualCurrentConfigData_{fOptionsFile_.Read<Options_> (Options_{})}
93 Set (fActualCurrentConfigData_);
97 return fActualCurrentConfigData_;
99 void Set (
const Options_& v)
101 fActualCurrentConfigData_ = v;
102 fOptionsFile_.Write (v);
107 Options_ fActualCurrentConfigData_;
118SearchParameters Options::GetSearchParameters ()
const
120 return sOptions_.
Get ().fSearchParameters;
123void Options::SetSearchParameters (
const SearchParameters& searchParameters)
125 sOptions_.Update ([=] (Options_ d) {
126 d.fSearchParameters = searchParameters;
131#if qStroika_Foundation_Common_Platform_Windows
132const CDockState& Options::GetDocBarState ()
const
134 static CDockState dockState;
135 static std::once_flag sOnce_;
136 std::call_once (sOnce_, [] () {
138 BLOB bytes = sOptions_.Get ().fDockBarState;
139 if (not bytes.
empty ()) {
141 file.Write (Traversal::Iterator2Pointer (bytes.begin ()), static_cast<UINT> (bytes.size ()));
143 CArchive ar (&file, CArchive::load);
144 dockState.Serialize (ar);
151void Options::SetDocBarState (
const CDockState& dockState)
154 CArchive ar (&file, CArchive::store);
155 CDockState& ds =
const_cast<CDockState&
> (dockState);
158 ULONG nSize =
static_cast<ULONG
> (file.GetLength ());
159 ASSERT (nSize < 4096);
160 byte* p =
new byte[nSize];
162 file.Read (p, nSize);
163 sOptions_.Update ([=] (Options_ d) {
164 d.fDockBarState =
BLOB{p, p + nSize};
171bool Options::GetSmartCutAndPaste ()
const
173 return sOptions_.Get ().fSmartCutAndPaste;
176void Options::SetSmartCutAndPaste (
bool smartCutAndPaste)
178 sOptions_.Update ([=] (Options_ d) {
179 d.fSmartCutAndPaste = smartCutAndPaste;
184bool Options::GetWrapToWindow ()
const
186 return sOptions_.Get ().fWrapToWindow;
189void Options::SetWrapToWindow (
bool wrapToWindow)
191 sOptions_.Update ([=] (Options_ d) {
192 d.fWrapToWindow = wrapToWindow;
197bool Options::GetShowHiddenText ()
const
199 return sOptions_.Get ().fShowHiddenText;
202void Options::SetShowHiddenText (
bool showHiddenText)
204 sOptions_.Update ([=] (Options_ d) {
205 d.fShowHiddenText = showHiddenText;
210bool Options::GetShowParagraphGlyphs ()
const
212 return sOptions_.Get ().fShowParagraphGlyphs;
215void Options::SetShowParagraphGlyphs (
bool showParagraphGlyphs)
217 sOptions_.Update ([=] (Options_ d) {
218 d.fShowParagraphGlyphs = showParagraphGlyphs;
223bool Options::GetShowTabGlyphs ()
const
225 return sOptions_.Get ().fShowTabGlyphs;
228void Options::SetShowTabGlyphs (
bool showTabGlyphs)
230 sOptions_.Update ([=] (Options_ d) {
231 d.fShowTabGlyphs = showTabGlyphs;
236bool Options::GetShowSpaceGlyphs ()
const
238 return sOptions_.Get ().fShowSpaceGlyphs;
241void Options::SetShowSpaceGlyphs (
bool showSpaceGlyphs)
243 sOptions_.Update ([=] (Options_ d) {
244 d.fShowSpaceGlyphs = showSpaceGlyphs;
249#if qStroika_Foundation_Common_Platform_Windows
250bool Options::GetCheckFileAssocsAtStartup ()
const
252 return sOptions_.Get ().fCheckFileAssocAtStartup;
255void Options::SetCheckFileAssocsAtStartup (
bool checkFileAssocsAtStartup)
257 sOptions_.Update ([=] (Options_ d) {
258 d.fCheckFileAssocAtStartup = checkFileAssocsAtStartup;
266#if qStroika_Foundation_Common_Platform_Windows
267 BLOB bytes = sOptions_.Get ().fDefaultNewDocFont;
268 if (not bytes.
empty ()) {
269 if (bytes.
size () == sizeof (LOGFONT)) {
271 fsp.SetOSRep (bytes.
As<LOGFONT> ());
276 return GetStaticDefaultFont ();
279void Options::SetDefaultNewDocFont ([[maybe_unused]]
const FontSpecification& defaultNewDocFont)
281#if qStroika_Foundation_Common_Platform_Windows
282 sOptions_.Update ([&] (Options_ d) {
283 d.fDefaultNewDocFont =
BLOB::FromRaw (defaultNewDocFont.GetOSRep ());
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
ObjectVariantMapper can be used to map C++ types to and from variant-union types, which can be transp...
nonvirtual void Add(const TypeMappingDetails &s)
static const ModuleDataUpgraderType kDefaultUpgrader
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
nonvirtual bool empty() const
static BLOB FromRaw(const T *s, const T *e)
Convert pointed to/referenced data to BLOB (treating the argument as raw bytes).
nonvirtual size_t size() const
Helper to define synchronized, lazy constructed, module initialization (intended to work with DataExc...