// HtmlGen.h: interface for the CHtmlGen class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HTMLGEN_H__0B718F5F_5D07_47C9_B8AB_28990BE0BFA2__INCLUDED_)
#define AFX_HTMLGEN_H__0B718F5F_5D07_47C9_B8AB_28990BE0BFA2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "apl_gui.h"

#define HG_CREATE_FILE 1
#define HG_ADD_TO_FILE 2
#define HG_ALL_ITEMS 4
#define HG_VISIBLE_ITEMS 8
#define HG_SELECTED_ITEMS 16

class AFX_CLASS_EXPORT CHtmlGen  
{
public:
	static int CreateEmptyPS(CString file_name);
	static int CreateEmptyTitle(CString file_name);
	int AddParam(CString param, CString color=_T("#000000"), CString bkcolor=_T("#FFFFFF"));
	//-----------------------------------------------
	//Эти ф-ции возвращают -1 если не могут открыть файл шаблона
	// и -2 если не могут открыть или создать файл репорта
	int CreateTitle(CString params = APL_T("##;##;##;##;##;##;##;##;Инв.N подл.;Обозначение докмента;Наименование файла, документа;Идентификатор файла;Изм.;Контрольная характеристика;Примечание;Длина (байт);Дата;Контр. сумм.;"));//Создание шапки репорта
	//Необходимо чтобы переменные находились в той последовательности. в которой
	//они заданы в html файле и в необходимом количестве (можно больше)
	//Для заполнения шапки строка должна имети вид:
	//     зав№;Владелец;Идентивикатор тома;Тип носителя;№тома..;код системы;Дата созд;
	//     место на носителе;+наименования всех полей таблицы чрез ';'
	//для второго варианта строка должна содержать только наименования полей таблицы
	int AddRow(CString row=_T("1;2;3;4;5;6;7;8;9;"), COLORREF color=0);//строка таблицы
	//Должна содержать все значения полей строки разделенных ';'
	int CreatePS(CString post_script=_T(""));//после таблицы
	//-----------------------------------------------
	BYTE m_items;//количество элементов в заголовке
	BYTE m_rows;//количество элементов в строке
	void SetDotName(CString file_name);//Задать имя файла шаблона
	bool SetFileName(CString file_name);//Задать имя файла репорта
	char m_sep;//разделитель
	CHtmlGen(BYTE items = 17, BYTE rows = 9, CString dot_name = _T("table.htm"), CString file_name = _T("report.htm"), char sep = _T(';'));
	virtual ~CHtmlGen();
	CString m_file_name;//Файл репорта по умалчанию report.htm
	CString m_dot_name;//файл шаблона по умалчанию table.htm
	static int ReadHtmlToString(CString *html,CStdioFile &f);
	//Читает весь хтмл-файл в строку
	static CString GetBody(CString *html);
	//получает ис строки содержащей хтмл файл кусок ограниченный <body>...</body>
	static int WriteStrToFile(LPCTSTR html,CString fname,BYTE flag = HG_CREATE_FILE);
	//Записывает строку в файл
	/**HG_VISIBLE_ITEMS - записывает в файл только видимые элементы. не может быть использован с HG_ALL_ITEMS
	   HG_ALL_ITEMS - записывает все елементы. не может быть использован с HG_VISIBLE_ITEMS
	   HG_CREATEFILE - всегда создавать новый файл. не может быть использован с HG_ADD_TO_FILE
	   HG_ADD_TO_FILE - добавлять к существующему или создать новый если файла нет. не может быть использован с HG_CREATE_FILE*/
	static bool GenerateByListCtrl(CListCtrl *ListCtrl, CString m_file_name=_T("report.html"), BYTE flag = HG_VISIBLE_ITEMS | HG_CREATE_FILE, CUIntArray *h_cols = 0);
	//Генерирует таблицу по указателю на лист контрол. только тело без заголовков.
	static bool GenerateByListCtrl(CaplTreeListCtrl *ListCtrl, CString m_file_name=_T("report.html"), BYTE flag = HG_VISIBLE_ITEMS | HG_CREATE_FILE, CUIntArray *h_cols = 0);
	//Генерирует таблицу по указателю на TreeListCtrl. только тело без заголовков.
private:
	static bool AppendItem2Html(CaplTreeListCtrl *ListCtrl,HTREEITEM hItem, CString &html, bool bSelectdOnly, bool bOnlyWithData, int level, CUIntArray *h_cols);
	static bool AddAllRows(CaplTreeListCtrl *ListCtrl, CString &str, HTREEITEM parent, int cols, CUIntArray *h_cols = 0);
	inline CString GetNextString(CString &str);
	CStdioFile m_of;//Файловая перем. шаблона
	CStdioFile m_rf;//Файловая перем. репорта
	int add_row;
	DWORD m_pos;
	DWORD cur_pos;
};

#endif // !defined(AFX_HTMLGEN_H__0B718F5F_5D07_47C9_B8AB_28990BE0BFA2__INCLUDED_)
