Exteor/include/xtr/ExteorOptions.h
2024-06-07 20:30:06 +03:00

235 lines
7.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "xtr/core/rslIndex.hpp"
#include "xtr/io/OptionsIO.hpp"
namespace xtr {
//! Abstract options section
class OptionsSection {
uint32_t sectionID;
CString registrySection{};
CWinAppEx* application{ nullptr };
public:
virtual ~OptionsSection() = default;
OptionsSection(const OptionsSection&) = delete;
OptionsSection& operator=(const OptionsSection&) = delete;
OptionsSection(OptionsSection&&) noexcept = default;
OptionsSection& operator=(OptionsSection&&) noexcept = default;
explicit OptionsSection(uint32_t sectionID) noexcept
: sectionID{ sectionID } {}
public:
virtual void InitDefault() = 0;
virtual void LoadTable() = 0;
virtual BOOL SaveTable() = 0;
virtual BOOL CreateTable(CWinAppEx *pWinApp);
protected:
using EntryID = uint32_t;
BOOL Save(EntryID entry, int32_t value);
BOOL Save(EntryID entry, CString value);
void Load(EntryID entry, int32_t& output) const;
void Load(EntryID entry, CString& output) const;
CString LoadHKLMRegistry(CString folder, CString keyName, CString defaultValue);
template <typename Item, typename Object>
BOOL SaveAs(EntryID entry, const Object& obj) {
return Save(entry, static_cast<Item>(obj));
}
template<typename Item, typename Object>
void LoadAs(EntryID entry, Object& output) {
Item result = static_cast<Item>(output);
Load(entry, result);
output = static_cast<Object>(result);
}
};
//! Application options
class GeneralOptions final : public OptionsSection {
public:
using SilentGuard = ccl::types::CounterGuard<uint32_t>;
CString pathSaveAs; // полный путь директории сохранения
CString pythonPath; // Путь к Python
BOOL promptVersion; // Показывать сообщение при загрузка старых файлов
BOOL showStartPage; // Отображать стартовую страницу
BOOL disableAutoKeyboard; // Отключить автоматическое переключючение раскладки
BOOL enablePython; // Загружать Python Module
BOOL pyCrashed; // Флаг креша Python
CFont fontMath; // Математический шрифт (DejaVu Sans)
CFont fontMathComment; // Математический шрифт (DejaVu Sans) для комментов
CFont fontMathTT; // Математический шрифт (DejaVu Sans) для подсказок
CFont fontTable; // Математический шрифт (DejaVu Sans) для таблиц
CFont fontData; // Математический шрифт (DejaVu Sans) для данных
CFont fontTooltip; // Шрифт для всплывающих подсказок
CFont fontText; // Стандартный шрифт для текста
private:
uint32_t silentCount{ 0 };
public:
GeneralOptions();
public:
void InitDefault() override;
void LoadTable() override;
BOOL SaveTable() override;
[[nodiscard]] BOOL IsSilent() const noexcept {
return silentCount > 0;
}
[[nodiscard]] SilentGuard GuardSilence() noexcept {
return SilentGuard(silentCount);
}
private:
BOOL CreateFonts();
static BOOL InitializeFont(CFont& font, CString name, uint32_t size);
};
//! RSForm options
struct RSFormOptions final : OptionsSection {
BOOL inlineFunctionOnGenerate; // Генерировать полное выражение терма из терм-функции
int32_t nameWidth; // Ширина колонки с именем
int32_t typeWidth; // Ширина колонки с типизацией
int32_t expWidth; // Ширина колонки с формальным выражением
int32_t termWidth; // Ширина колонки с термином выражением
int32_t interWidth; // Ширина колонки с интерпретацией
int32_t conventionWidth; // Ширина колонки с комментарием
int32_t splitterPos; // Положение сплиттера
io::SchemaOptions exportOptions;
public:
RSFormOptions();
public:
void ResetTableWidth() noexcept;
void InitDefault() noexcept override;
void LoadTable() override;
BOOL SaveTable() override;
};
//! OSS options
struct ossOptions final : OptionsSection {
static constexpr auto zoomMin = 1U;
static constexpr auto zoomMax = 3U;
int32_t zoom; // коэфициент уменьшения 1, 2, 3
int32_t splitterPos; // Положение сплиттера
BOOL runOpAfterEdit;
BOOL showGrid;
BOOL showLegend;
public:
ossOptions();
public:
void InitDefault() noexcept override;
void LoadTable() override;
BOOL SaveTable() override;
};
//! RS parsing options
struct ParsingOptions final : OptionsSection {
BOOL autoCheck; // Проверять ФВ при изменении
BOOL colorBrackets; // Форматировать скобки цветом по уровню
BOOL showAST; // Отображать дерево разбора
BOOL enableNavigator; // Навигация по ФВ
index::IndexingParams indexing; // Параметры индексации
public:
ParsingOptions();
public:
void InitDefault() noexcept override;
void LoadTable() override;
BOOL SaveTable() override;
};
//! RSModel options
struct ModelOptions final : OptionsSection {
BOOL m_DataMode; // Режим отображения данных интерпретации
int32_t nameWidth; // Ширина колонки с именем
int32_t typeWidth; // Ширина колонки с типизацией
int32_t expWidth; // Ширина колонки с формальным выражением
int32_t valWidth; // Ширина колонки с мощностью интерпретации
int32_t termWidth; // Ширина колонки с термином выражением
int32_t interWidth; // Ширина колонки с интерпретацией
int32_t conventionWidth; // Ширина колонки с комментарием
int32_t splitterPos; // Положение сплиттера
public:
ModelOptions();
public:
void ResetTableWidth() noexcept;
void InitDefault() noexcept override;
void LoadTable() override;
BOOL SaveTable() override;
};
//! Text processing options
struct TextOptions final : OptionsSection {
BOOL editReference;
public:
TextOptions();
public:
void InitDefault() noexcept override;
void LoadTable() override;
BOOL SaveTable() override;
};
//! Abstract options object
struct ApplicationOptions : CObject {
virtual BOOL LoadParameters(CWinAppEx* app) = 0;
virtual BOOL SaveParameters() = 0;
BOOL Load(CWinAppEx* pApp);
BOOL Save();
};
//! Exteor options
struct XTROptions final : ApplicationOptions {
RSFormOptions schema;
ossOptions oss;
GeneralOptions general;
ParsingOptions parsing;
ModelOptions model;
TextOptions texting;
private:
XTROptions() = default;
public:
[[nodiscard]] static XTROptions& Get() noexcept;
[[nodiscard]] static RSFormOptions& RS() noexcept { return Get().schema; }
[[nodiscard]] static ossOptions& OSS() noexcept { return Get().oss; }
[[nodiscard]] static GeneralOptions& App() noexcept { return Get().general; }
[[nodiscard]] static ParsingOptions& ParseRSL() noexcept { return Get().parsing; }
[[nodiscard]] static ModelOptions& Model() noexcept { return Get().model; }
[[nodiscard]] static TextOptions& Text() noexcept { return Get().texting; }
public:
static void SaveWindowPlacement(const CWnd& wnd, CString entryName);
static BOOL LoadWindowPlacement(CWnd& wnd, CString entryName);
BOOL LoadParameters(CWinAppEx *pApp) override;
BOOL SaveParameters() override;
};
} // namespace xtr