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...