#pragma once


// Диалоговое окно CSettingsDlg

class CSettingsDlg : public CDialogEx
{
		DECLARE_DYNAMIC(CSettingsDlg)
		HKEY            m_hkeyRegKey{ nullptr };
		CToolTipCtrl    m_tt;
		CString         m_strRegKeyName;
		CString         m_strDeltaImp;

		static const LPCTSTR KEY_USELONGBIN;
		static const LPCTSTR KEY_FRONTANALYSE;
		static const LPCTSTR KEY_FRONTALIASING;
		static const LPCTSTR KEY_FRONTLEVELS;
		static const LPCTSTR KEY_IGNORECRC;
		static const LPCTSTR KEY_IGNOREERRORS;
		static const LPCTSTR KEY_WORKLOG;
		static const LPCTSTR KEY_TUNESCATTER;
		static const LPCTSTR KEY_DELTAIMPULSE;
		static const LPCTSTR KEY_MULTIFILE;
		static const LPCTSTR KEY_VALTRUE;
		static const LPCTSTR KEY_VALFALSE;

	public:
		BOOL            m_bUseLongBinFormat{ FALSE }; // опция: использовать длинный формат .bin
		BOOL            m_bFrontAnalyse{ TRUE };    // опция: анализ по фронтам
		BOOL            m_bFrontAliasing{ TRUE };   // опция: сглаживание фронтов
		BOOL            m_bFrontLevels{ FALSE };    // опция: повторный анализ фронтов по уровням
		BOOL            m_bIgnoreCRC{ FALSE };      // опция: игнорировать неверную КС
		BOOL            m_bIgnoreErrors{ FALSE };   // опция: игнорировать ошибки распознавания
		BOOL            m_bWorkLog{ FALSE };        // опция: сохранять лог работы программы
		BOOL            m_bMultiFile{ FALSE };      // опция: рассматривать данные как мультифайл
		int             m_nTuneImpScatter{ 3 };     // разброс длительностей импульсов настроечной последовательности в сэмплах
		/* для стандартной скорости = 3 (при замедленных скоростях разброс возрастает,
		а так же если скорость плавает, тоже может быть больше. Может достигать 7)
		*/
		int             m_nProgressScale{ 500 };    // шаг, через сколько обновлять значение прогрессбара
		int             m_nTimerValue{ 100 };       // через сколько миллисекунд обновлять UI
		double          m_dDeltaImp{ 0.3 };
	protected:

	public:
		CSettingsDlg(CWnd *pParent = nullptr);   // стандартный конструктор
		virtual ~CSettingsDlg() override;

// Данные диалогового окна
#ifdef AFX_DESIGN_TIME
		enum { IDD = IDD_SETTINGS_DIALOG };
#endif
		void        ConfigSettings();
		void        LoadSettings();
		void        SaveSettings();

	protected:
		void        SetCheckbox();

		void        Init();
		void        Done() const;
		bool        SaveStringValue(LPCTSTR sName, CString &strValue) const;
		bool        LoadStringValue(LPCTSTR sName, CString &strValue) const;

		virtual void DoDataExchange(CDataExchange *pDX) override;    // поддержка DDX/DDV
		virtual BOOL PreTranslateMessage(MSG *pMsg) override;
		virtual BOOL OnInitDialog() override;
		virtual void OnOK() override;

		afx_msg void OnBnClickedCheckFrontAnalyse();
		DECLARE_MESSAGE_MAP()
};

extern CSettingsDlg g_Settings;

