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(); }