Exteor/include/xtr/dialog/OpSyntGUI.h

169 lines
3.9 KiB
C
Raw Normal View History

2024-06-07 20:30:06 +03:00
#pragma once
#include "xtr/doc/RSFormDoc.h"
#include "xtr/ui/ElementShell.h"
namespace xtr::dialog {
//! Synthesis options dialog
class SynthesUI : public CPropertySheet {
class OperandsPage;
class OptionsPage;
class ConfirmPage;
public:
BOOL ossModeOn;
ccl::ops::Type opType;
CString title{};
CString alias{};
ccl::ops::EquationOptions equations{};
const ccl::semantic::RSForm* operand1{ nullptr };
const ccl::semantic::RSForm* operand2{ nullptr };
private:
std::unique_ptr<OperandsPage> operandsPage;
std::unique_ptr<OptionsPage> optionsPage;
std::unique_ptr<ConfirmPage> confirmationPage;
public:
explicit SynthesUI(ccl::ops::Type type, BOOL fromOSS = FALSE, CWnd* pWndParent = nullptr);
public:
[[nodiscard]] BOOL IsCorrect() const;
private:
BOOL PreTranslateMessage(MSG* pMsg) override;
};
//! DialogPage: Choose operands
class SynthesUI::OperandsPage final : public CPropertyPage {
struct OperandsHeader;
SynthesUI& parentSht;
ui::RSListCtrl firstOperandList{};
ui::RSListCtrl secondOperandList{};
CString firstOperand{};
CString secondOperand{};
public:
explicit OperandsPage(SynthesUI& parent);
private:
void DoDataExchange(CDataExchange* pDX) override;
BOOL OnInitDialog() override;
void InitControls();
void InitHeaders();
void InputData();
private:
BOOL OnSetActive() override;
LRESULT OnWizardNext() override;
DECLARE_MESSAGE_MAP()
afx_msg void OnChangeOperands(NMHDR* pNMHDR, LRESULT* pResult);
private:
[[nodiscard]] static int32_t TypeToRadio(ccl::ops::Type type) noexcept;
[[nodiscard]] static ccl::ops::Type RadioToType(int32_t radio) noexcept;
void DDVNextBtn(int32_t nItem1, int32_t nItem2);
[[nodiscard]] static doc::RSFormDoc* GetTRSDocFromCList(const ui::RSListCtrl& lc);
static void UpdateDocList(ui::RSListCtrl& lc,
const doc::RSFormDoc* docExclude = nullptr);
};
//! DialogPage: Setup equation options
class SynthesUI::OptionsPage final : public CPropertyPage {
struct ArgHeader;
CButton operand1Btn{};
CButton operand2Btn{};
CButton equalsBtn{};
ui::RSListCtrl operand2List{};
ui::RSListCtrl operand1List{};
ui::EquationsRSLC equationsCtrl{};
BOOL basic1Flag{ TRUE };
BOOL structure1Flag{ TRUE };
BOOL term1Flag{ TRUE };
BOOL basic2Flag{ TRUE };
BOOL structure2Flag{ TRUE };
BOOL term2Flag{ TRUE };
SynthesUI& parentSht;
public:
explicit OptionsPage(SynthesUI& parent);
private:
void DoDataExchange(CDataExchange* pDX) override;
BOOL OnInitDialog() override;
void InitHeaders();
private:
BOOL OnSetActive() override;
LRESULT OnWizardNext() override;
DECLARE_MESSAGE_MAP()
afx_msg void OnIn1();
afx_msg void OnIn2();
afx_msg void OnIn3();
afx_msg void OnChange();
afx_msg void OnDblClickList(NMHDR* pNMHDR, LRESULT* pResult);
private:
static CString AskForTerm(CString initial);
void DDV_Buttons();
void AddPair(ccl::ops::Equation::Mode type);
void RemovePair();
void UpdateCstLists();
void FillCstOfType(int32_t list1Or2, ccl::semantic::CstType type, const SetOfEntities& ignoreList);
static void FillCstInCL(ui::RSListCtrl& lc, const ccl::semantic::RSForm& schema,
int32_t nameCol, int32_t termCol,
ccl::semantic::CstType type, const SetOfEntities& ignoreList);
};
//! DialogPage: Confirm options
class SynthesUI::ConfirmPage : public CPropertyPage {
public:
CString operation{};
CString firstOperand{};
CString secondOperand{};
private:
ui::EquationsRSLC equationsCtrl;
ui::CstPicker shortNameCtrl;
ui::CstPicker fullNameCtrl;
SynthesUI& parentSht;
public:
explicit ConfirmPage(SynthesUI& parent);
private:
void DoDataExchange(CDataExchange* pDX) override;
BOOL OnInitDialog() override;
void InitControls();
private:
BOOL OnSetActive() override;
DECLARE_MESSAGE_MAP()
afx_msg void OnChange();
afx_msg void OnComboChanged();
private:
void DDV_Names();
};
} // namespace xtr::dialog