Example #1
0
void CBibitemView::PopulateFields()
{
	// At the moment nothing is selected
	m_SelField = -1;

	BeginUpdate();
	int l = -1, c = -1;
	m_ListFields.GetEditPos(l, c);

	m_ListFields.DeleteAllItems();
	POSITION h = m_TmpItem->GetHeadPosition();
	CField* fi;
	int j = 0;
	for (int i = 0; i < m_TmpItem->GetCount(); i++) {
		fi = (CField*)m_TmpItem->GetNext(h);
		if (fi) {
			j = m_ListFields.InsertItem(j, fi->GetName(), m_BibDef->GetRequired(m_TmpItem->GetType(), fi->GetName()));
			m_ListFields.SetItemText(j, 1, fi->GetValue());
			m_ListFields.SetItemData(j, (DWORD)fi);
		}
		if (h == NULL)
			break;
	}

	// Add all other fields
	CField *finew;
	CBibItem *bi = m_BibDef->FindType(m_TmpItem->GetType());
	if (bi != NULL) {
		h = bi->GetHeadPosition();
		for (i = 0; i < bi->GetCount(); i++) {
			fi = (CField*)bi->GetNext(h);
			if (fi != NULL && m_TmpItem->Find(fi->GetName()) == NULL) {
				finew = m_TmpItem->New();
				finew->SetName(fi->GetName());
				finew->SetModified(FALSE);
				j = m_ListFields.InsertItem(j, finew->GetName(), m_BibDef->GetRequired(m_TmpItem->GetType(), finew->GetName()));
				m_ListFields.SetItemText(j, 1, _T(""));
				m_ListFields.SetItemData(j, (DWORD)finew);
			}
			if (h == NULL)
				break;
		}
	}

	// Sort it
	LVSORTPARAM ss;
	ss.iHeader = 0;
	ss.pListView = &m_ListFields;
	ss.bSortAsc = TRUE;

	// Sort the list
	m_ListFields.SortItems(SortFunc, (LPARAM)&ss);

	m_SortAsc = FALSE;

	// Edit the last cell if any
	if (l > -1 && c > -1) {
		if (l >= m_ListFields.GetItemCount()) {
			m_ListFields.CancelEdit(TRUE);
			m_ListFields.EditSubItem(m_ListFields.GetItemCount()-1, c);
		} else
			m_ListFields.EditSubItem(l, c);
	}

	m_ListFields.UpdateEditor();

	EndUpdate();
}