// Attaches sub-items to a list item (before the list item is added to the list) private void SetSourceSubItems(CListableBool lbItem, CSourceRecord sr, bool bFirstColumnIsCheckbox) { // Store checkbox value because SubItems.Clear() clears item.Text and item.Checked as well! bool bWasChecked = lbItem.Checked; lbItem.SubItems.Clear(); lbItem.Checked = bWasChecked; if (bFirstColumnIsCheckbox) { // First nColumn (ie. item) is checkbox, so first sub-item is title. lbItem.SubItems.Add(new CListableSource(sr)); } string sRepositories = ""; foreach (CSourceRepositoryCitation src in sr.m_alSourceRepositoryCitations) { CRepositoryRecord rr = m_gedcom.GetRepositoryRecord(src.m_xrefRepo); if (rr != null) { if (rr.m_sNameOfRepository != null && rr.m_sNameOfRepository != "") { if (sRepositories != "") { sRepositories += ", "; } sRepositories += rr.m_sNameOfRepository; } } } lbItem.SubItems.Add(new ListViewItem.ListViewSubItem(lbItem, sRepositories)); int nBirths = 0; int nMarriages = 0; int nDeaths = 0; int nIndis = 0; int nFamilies = 0; int nNotes = 0; int nOther = 0; int nCitations = 0; if (sr.m_alBackreferences.Count > 0) { foreach (CBackReference br in sr.m_alBackreferences) { switch (br.m_sEventType) { case "BIRT": nBirths++; nCitations++; break; case "MARR": nMarriages++; nCitations++; break; case "DEAT": nCitations++; nDeaths++; break; default: switch (br.m_ertRecordType) { case ERecordType.Individual: nCitations++; nIndis++; break; case ERecordType.Family: // Strictly this should be plus 2 if husb & wife both known, otherwise 1 or 0. nCitations++; nFamilies++; break; case ERecordType.Note: nNotes++; break; default: nOther++; break; } break; } } } lbItem.SubItems.Add(new ListViewItem.ListViewSubItem(lbItem, nCitations.ToString())); lbItem.SubItems.Add(new ListViewItem.ListViewSubItem(lbItem, nBirths.ToString())); lbItem.SubItems.Add(new ListViewItem.ListViewSubItem(lbItem, nMarriages.ToString())); lbItem.SubItems.Add(new ListViewItem.ListViewSubItem(lbItem, nDeaths.ToString())); lbItem.SubItems.Add(new CListableString(sr.m_xref)); int nVisiblePics = sr.CountVisibleMFRs(); int nTotalPics = sr.CountAllMFRs(); if (nVisiblePics != nTotalPics) { lbItem.SubItems.Add(new CListableNumber(nVisiblePics, String.Format("{0}/{1}", nVisiblePics, nTotalPics))); } else { lbItem.SubItems.Add(new CListableNumber(nTotalPics, String.Format("{0}", nTotalPics))); } lbItem.Checked = bWasChecked; }