#pragma once
#include "resource.h"
#include "DocPaneDlgViewBase.h"
#include "MultiEditListCtrl.h"
#include "Screen_Sizes.h"


// константы списков: ширина колонок
constexpr auto COLUMN_WIDTH = 60;
// стандартное количество колонок (обычно в списке)
constexpr auto COLNUM_STD = 2;

static const DWORD BG_COLOR = ::GetSysColor(COLOR_BTNFACE);

// флаги, задающие валидные значения, 1 = значение есть, 0 = значения нет, и делать ничего не надо
constexpr DWORD COL_WIDTH = 1;
constexpr DWORD COL_COLOR = 2;
constexpr DWORD COL_VALUE = 4;
constexpr DWORD COL_EDITABLE = 8;

class CRegDumpDocPaneDlgViewHelper :public CDocPaneDlgViewBase
{
	DECLARE_DYNAMIC(CRegDumpDocPaneDlgViewHelper)

	protected:
		int m_nPixelW;
		int m_nPixelH;
		int m_padX;
		int m_padY;
	public:

	// номера колонок для стандартного, лвухколоночного списка
	enum LSTSTD_COL : int
	{
		NAME = 0,
		VALUE
	};

	struct ColParam_t
	{
		DWORD       dwState;    // флаги
		int         nWidth;     // ширина колонки
		COLORREF    color;      // цвет колонки
	};

	struct CellParam_t
	{
		DWORD       dwState;    // флаги
		UINT        nIDStrValue; // значение в ячейке
		COLORREF    color;      // цвет колонки
	};

	struct ListParam_t
	{
		int     nCols;
		int     nRows;
		UINT    nGrpId;
		CMultiEditListCtrl *pList;
		const ColParam_t *pCP;
		const CellParam_t *pRP;
	};

		CRegDumpDocPaneDlgViewHelper();
		virtual ~CRegDumpDocPaneDlgViewHelper() override
		{}

		void CreateList(ListParam_t &p);

		// Вход: p - элемент параметров списка
		// Вход-Выход: ptLT - координата верхней левой точки списка, если 0 - то берутся текущие
		//				maxGW - максимальная ширина группы
		void ResizeList(ListParam_t &p, CPoint &ptLT, int &maxGW);

		void SetGrpWidth(CWnd *grp, int width);
	protected:
		afx_msg LRESULT HandleInitDialog(WPARAM wp, LPARAM lp);

};

extern const CRegDumpDocPaneDlgViewHelper::ColParam_t arLSTCols[COLNUM_STD];

