235 lines
7.7 KiB
C
235 lines
7.7 KiB
C
![]() |
#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
|