Пример #1
0
// rowParse
// Ищет в шаблоне теги <contact>, <tr> и <tc>, и добавляет соответствующие узлы
// в дерево описания контакта
// cell - поле child или next родительского контейнера
// parent - указатель на родительский контейнер
// tbuf - указатель на буфер содержащий текст шаблона
// hbuf - указатель буфера
// sequence - нужно задавать 0, это очередность нахождения
//
extern "C" BOOL rowParse(ROWCELL* &cell, ROWCELL* parent, char *tbuf, int &hbuf, int &sequence, ROWCELL* *RowTabAccess )
{
	char * word;
	word = rowParserGetNextWord(tbuf, hbuf);
	int cont;
		
	if      (!_strnicmp(word, "<tr",   strlen(word)) ||!_strnicmp(word, "<tr>",   strlen(word))) cont = TC_ROW; 
	else if (!_strnicmp(word, "<tc",   strlen(word)) ||!_strnicmp(word, "<tc>",   strlen(word))) cont = TC_COL; 
	else if (!_strnicmp(word, "/>",     strlen(word))||
			 !_strnicmp(word, "</tr>",  strlen(word))||
			 !_strnicmp(word, "</tc>",  strlen(word))) return TRUE;
	else return FALSE;
	
	rowAddCell(cell, cont);
	rowParserGetParam(cell, tbuf, hbuf);
	if (cell->type != 0 && cell->type !=TC_SPACE && cell->type !=TC_FIXED) 
		RowTabAccess[sequence++] = cell;
	
	if (!rowParse(cell->child, cell, tbuf, hbuf, sequence,RowTabAccess)) 
		return FALSE;

	if (!parent)
	{
		RowTabAccess[sequence] = NULL;
		return TRUE;
	}
	
	if (!rowParse(cell->next, parent, tbuf, hbuf, sequence,RowTabAccess))
			return FALSE;
		
	parent->sizing |= cell->sizing;
  parent->hasfixed|=cell->hasfixed;
	return TRUE;
}
Пример #2
0
void rowOptAddContainer(HWND htree, HTREEITEM hti)
{
	TVINSERTSTRUCT tvis;
	TVITEM tviparent;
	ROWCELL *cell = NULL;

	if (!hti) {
		if (TreeView_GetRoot(htree))
			return;

		rowAddCell(rowOptTmplRoot, TC_ROW);
		tvis.hParent = NULL;
		tvis.hInsertAfter = TVI_ROOT;
		tvis.item.pszText = _T("Line");
		tvis.item.lParam = (LPARAM)rowOptTmplRoot;
		cell = rowOptTmplRoot;
	}
	else {
		// Get parent item
		tviparent.hItem = hti;
		tviparent.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
		TreeView_GetItem(htree, &tviparent);
		cell = (pROWCELL)tviparent.lParam;

		if (cell->cont == TC_ROW)
			tvis.item.pszText = _T("Column");
		else
			tvis.item.pszText = _T("Line");

		if (cell->child) {
			cell = cell->child;

			while (cell->next)
				cell = cell->next;

			rowAddCell(cell->next, ((ROWCELL*)tviparent.lParam)->cont == TC_ROW ? TC_COL : TC_ROW);
			cell = cell->next;
		}
		else {
			rowAddCell(cell->child, ((ROWCELL*)tviparent.lParam)->cont == TC_ROW ? TC_COL : TC_ROW);
			cell = cell->child;
		}

		tvis.hInsertAfter = TVI_LAST;
	}

	tvis.item.lParam = (LPARAM)cell;
	tvis.hParent = hti;

	tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
	tvis.item.stateMask = TVIS_STATEIMAGEMASK;
	tvis.item.iImage = 2;
	tvis.item.iSelectedImage = 2;

	TreeView_InsertItem(htree, &tvis);

	TreeView_Expand(htree, hti, TVM_EXPAND);

	// Change icon at parent item
	tviparent.iImage = 1;
	tviparent.iSelectedImage = 0;
	TreeView_SetItem(htree, &tviparent);

	int i = 0;
	memset(rowOptTA, 0, sizeof(rowOptTA));
	rowOptBuildTA(rowOptTmplRoot, (pROWCELL*)&rowOptTA, &i);
}