
// BKMEM_testDlg.h : файл заголовка
// !!!доработать

#pragma once
#include <afxcmn.h>
#include "resource.h"
#include "LockVarType.h"
#include "afxwin.h"


#define MM_FIRST_PAGE 0
#define MM_SECOND_PAGE 1
#define MM_NUM_PAGES 2

struct MM16kPage_t
{
	bool bExist;        //флаг, что эта страница существует и её надо перерисовывать
	bool bColorMode;    //режим отображения текущей стрвницы - цветной/ЧБ
	bool bBWAdaptMode;  //режим отображения текущей стрвницы - адаптивный/обычный
	BYTE *pBuffer;      //указатель на отображаемый буфер в окне экрана
	size_t nBufSize;    //размер этого буфера
};

// диалоговое окно CBKMEM_Dlg
class CScreen;

class CBKMEM_Dlg : public CDialogEx
{
		DECLARE_DYNAMIC(CBKMEM_Dlg)
		// Создание
	public:
		CBKMEM_Dlg(BOARD_MODEL nBKModel, BKFDD_MODEL nBKFDDModel, BYTE *MainMem, BYTE *AddMem, CWnd *pParent = nullptr);
		virtual ~CBKMEM_Dlg() override;
		// Данные диалогового окна

		enum
		{
			IDD = IDD_BKMEM_MAP_DIALOG
		};

		void DrawTab();

	protected:
		virtual void DoDataExchange(CDataExchange *pDX) override;   // поддержка DDX/DDV

		void CreateScreen(int nPage, int idUI);
		void CreateTabs_10();
		void CreateTabs_11M();
		void AddTabsA16M();
		void AddTabsSMK512();
		void SelectTab();
		void SetTabParam(int nPage);
		void ChangeColormode(int nPage);
		void SetColormode(int nPage, bool bMode);
		void ChangeBWMode(int nPage);
		void SetBWMode(int nPage, bool bMode);
		void ViewSprite(int nPage);
		void SaveImg(int nPage);
		void LoadImg(int nPage);

		// Реализация
	protected:
		BYTE *m_Memory;
		BYTE *m_MemoryADD;
		BOARD_MODEL m_BKModel;
		BKFDD_MODEL m_BKFDDmodel;
		LockVarType m_lockStop, m_lockDraw;

		/*
		для конфигурации БК10 - 1 вкладка: 0 и 1 страницы (1 - экран)
		для конфигурации БК11 - 4 вкладки: 8 страниц, по 2 шт. во вкладке
		для A16M - вкладка, с одной страницей. (добавить реализовать такую возможность)
		для смк512 - 16 вкладок
		*/
		int m_nTabsCount;
		int m_nSelectedTab;

		CToolTipCtrl m_ToolTip;

		CScreen *m_Screen[MM_NUM_PAGES];
		MM16kPage_t m_Container[MM_NUM_PAGES][20]; //массив окон во вкладках.

		CTabCtrl m_tab;

		// Созданные функции схемы сообщений
		virtual BOOL OnInitDialog() override;
		virtual void OnCancel() override;
		virtual BOOL PreTranslateMessage(MSG *pMsg) override;
		afx_msg void OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult);
		afx_msg void OnBnClickedButtonMmColorModeP1();
		afx_msg void OnBnClickedButtonMmBwModeP1();
		afx_msg void OnBnClickedButtonMmLoadP1();
		afx_msg void OnBnClickedButtonMmSaveP1();
		afx_msg void OnBnClickedButtonMmSpriteP1();
		afx_msg void OnBnClickedButtonMmColorModeP2();
		afx_msg void OnBnClickedButtonMmBwModeP2();
		afx_msg void OnBnClickedButtonMmLoadP2();
		afx_msg void OnBnClickedButtonMmSaveP2();
		afx_msg void OnBnClickedButtonMmSpriteP2();
		DECLARE_MESSAGE_MAP()
	public:
		afx_msg void OnDestroy();
};

