void CViewComments::OnUpdate(CView *pSender, LPARAM lHint, CObject *) //------------------------------------------------------------------- { //CHAR s[256], stmp[256]; CHAR s[512], stmp[256]; //rewbs.fix3082 CModDoc *pModDoc = GetDocument(); LV_COLUMN lvc; LV_ITEM lvi, lvi2; if ((!pModDoc) || (pSender == this) || (!(m_ItemList.m_hWnd))) return; if (lHint & HINT_MPTOPTIONS) { m_ToolBar.UpdateStyle(); lHint &= ~HINT_MPTOPTIONS; } lHint &= (HINT_MODTYPE |HINT_SMPNAMES|HINT_SAMPLEINFO |HINT_INSNAMES|HINT_INSTRUMENT /*|HINT_PATNAMES|HINT_PATTERNROW*/); // pattern stuff currently unused if (!lHint) return; const CSoundFile &sndFile = pModDoc->GetrSoundFile(); m_ToolBar.ChangeBitmap(IDC_LIST_INSTRUMENTS, sndFile.GetNumInstruments() ? IMAGE_INSTRUMENTS : IMAGE_INSTRMUTE); m_ItemList.SetRedraw(FALSE); // Add sample headers if ((m_nListId != m_nCurrentListId) || (lHint & HINT_MODTYPE)) { UINT ichk = 0; m_ItemList.DeleteAllItems(); while ((m_ItemList.DeleteColumn(0)) && (ichk < 25)) ichk++; m_nCurrentListId = m_nListId; // Add Sample Headers if (m_nCurrentListId == IDC_LIST_SAMPLES) { UINT nCol = 0; for (UINT iSmp=0; iSmp<SMPLIST_COLUMNS; iSmp++) { MemsetZero(lvc); lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = (iSmp) ? LVCFMT_RIGHT : LVCFMT_LEFT; lvc.pszText = (LPTSTR)gSampleHeaders[iSmp].pszName; lvc.cx = gSampleHeaders[iSmp].cx; lvc.iSubItem = iSmp; m_ItemList.InsertColumn(nCol, &lvc); nCol++; } } else // Add Instrument Headers if (m_nCurrentListId == IDC_LIST_INSTRUMENTS) { UINT nCol = 0; for (UINT i=0; i<INSLIST_COLUMNS; i++) { MemsetZero(lvc); lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = (i) ? LVCFMT_RIGHT : LVCFMT_LEFT; lvc.pszText = (LPTSTR)gInstrumentHeaders[i].pszName; lvc.cx = gInstrumentHeaders[i].cx; lvc.iSubItem = i; m_ItemList.InsertColumn(nCol, &lvc); nCol++; } } else lHint |= HINT_MODTYPE; } // Add Items UINT nCount = m_ItemList.GetItemCount(); // Add Samples if ((m_nCurrentListId == IDC_LIST_SAMPLES) && (lHint & (HINT_MODTYPE|HINT_SMPNAMES|HINT_SAMPLEINFO))) { SAMPLEINDEX nMax = static_cast<SAMPLEINDEX>(nCount); if (nMax < sndFile.GetNumSamples()) nMax = sndFile.GetNumSamples(); for (SAMPLEINDEX iSmp = 0; iSmp < nMax; iSmp++) { if (iSmp < sndFile.GetNumSamples()) { UINT nCol = 0; for (UINT iCol=0; iCol<SMPLIST_COLUMNS; iCol++) { const ModSample &sample = sndFile.GetSample(iSmp + 1); s[0] = 0; switch(iCol) { case SMPLIST_SAMPLENAME: mpt::String::Copy(s, sndFile.m_szNames[iSmp + 1]); break; case SMPLIST_SAMPLENO: wsprintf(s, "%02d", iSmp + 1); break; case SMPLIST_SIZE: if (sample.nLength) { if(sample.GetSampleSizeInBytes() >= 1024) wsprintf(s, "%d KB", sample.GetSampleSizeInBytes() >> 10); else wsprintf(s, "%d B", sample.GetSampleSizeInBytes()); } break; case SMPLIST_TYPE: if(sample.nLength) { wsprintf(s, "%d Bit", sample.GetElementarySampleSize() * 8); } break; case SMPLIST_INSTR: if (sndFile.GetNumInstruments()) { bool first = true; for (INSTRUMENTINDEX i = 1; i <= sndFile.GetNumInstruments(); i++) { if (sndFile.IsSampleReferencedByInstrument(iSmp + 1, i)) { if (!first) strcat(s, ","); first = false; wsprintf(stmp, "%d", i); strcat(s, stmp); if (strlen(s) > sizeof(s) - 10) { strcat(s, "..."); break; } } } } break; case SMPLIST_MIDDLEC: if (sample.nLength) { wsprintf(s, "%d Hz", sample.GetSampleRate(sndFile.GetType())); } break; case SMPLIST_FILENAME: memcpy(s, sample.filename, sizeof(sample.filename)); s[CountOf(sample.filename)] = 0; break; } lvi.mask = LVIF_TEXT; lvi.iItem = iSmp; lvi.iSubItem = nCol; lvi.pszText = (LPTSTR)s; if ((iCol) || (iSmp < nCount)) { bool bOk = true; if (iSmp < nCount) { lvi2 = lvi; lvi2.pszText = (LPTSTR)stmp; lvi2.cchTextMax = sizeof(stmp); stmp[0] = 0; m_ItemList.GetItem(&lvi2); if (!strcmp(s, stmp)) bOk = false; } if (bOk) m_ItemList.SetItem(&lvi); } else { m_ItemList.InsertItem(&lvi); } nCol++; } } else