#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)

	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
		{
			CMultiEditListCtrl *pList;
			const ColParam_t *pCP;
			const CellParam_t *pRP;
			int			nCols;
			int			nRows;
			UINT		nGrpId;
			bool		bVisible;
		};

	protected:
		int				m_nPixelW;
		int				m_nPixelH;
		int				m_padX;
		int				m_padY;
		std::vector <ListParam_t> m_vList;

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

		void CreateList(ListParam_t &p);
		void ReArrangeList(ListParam_t &p) const;

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

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

};

extern const CRegDumpDocPaneDlgViewHelper::ColParam_t arLSTCols[COLNUM_STD];

