From: <sag...@us...> - 2013-07-07 14:38:37
|
Revision: 2516 http://sourceforge.net/p/modplug/code/2516 Author: saga-games Date: 2013-07-07 14:38:29 +0000 (Sun, 07 Jul 2013) Log Message: ----------- [Ref] More treeview code cleanup. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-06 23:56:03 UTC (rev 2515) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-07-07 14:38:29 UTC (rev 2516) @@ -170,7 +170,7 @@ m_hMidiLib = InsertItem("MIDI Library", IMAGE_FOLDER, IMAGE_FOLDER, TVI_ROOT, TVI_LAST); for (UINT iMidGrp=0; iMidGrp<17; iMidGrp++) { - m_tiMidiGrp[iMidGrp] = InsertItem(szMidiGroupNames[iMidGrp], IMAGE_FOLDER, IMAGE_FOLDER, m_hMidiLib, TVI_LAST); + m_tiMidiGrp[iMidGrp] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, szMidiGroupNames[iMidGrp], IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, (MODITEM_HDR_MIDIGROUP << MIDILIB_SHIFT) | iMidGrp, m_hMidiLib, TVI_LAST); } } m_hInsLib = InsertItem("Instrument Library", IMAGE_FOLDER, IMAGE_FOLDER, TVI_ROOT, TVI_LAST); @@ -367,18 +367,15 @@ for (int ilimit=0; ilimit<10; ilimit++) { HTREEITEM h = GetParentItem(hItem); - if (h == NULL) break; + if (h == nullptr) break; hItem = h; } - if (hItem != NULL) + if (hItem != nullptr) { - std::vector<ModTreeDocInfo *>::iterator iter; - for (iter = DocInfo.begin(); iter != DocInfo.end(); iter++) - { - if (hItem == (*iter)->hSong) return (*iter)->pModDoc; - } + // Root item has moddoc pointer + return (CModDoc *)GetItemData(hItem); } - return NULL; + return nullptr; } @@ -428,11 +425,11 @@ } if (!m_tiMidi[iMidi]) { - m_tiMidi[iMidi] = InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0, m_tiMidiGrp[iMidi/8], TVI_LAST); + m_tiMidi[iMidi] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi, m_tiMidiGrp[iMidi/8], TVI_LAST); } else { - tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.hItem = m_tiMidi[iMidi]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); @@ -440,8 +437,8 @@ GetItem(&tvi); if ((strcmp(s, stmp)) || (tvi.iImage != (int)dwImage)) { - SetItem(m_tiMidi[iMidi], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0); + SetItem(m_tiMidi[iMidi], TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIINSTRUMENT << MIDILIB_SHIFT) | iMidi); } } } @@ -463,11 +460,11 @@ } if (!m_tiPerc[iPerc]) { - m_tiPerc[iPerc] = InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0, m_tiMidiGrp[16], TVI_LAST); + m_tiPerc[iPerc] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc, m_tiMidiGrp[16], TVI_LAST); } else { - tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE; + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.hItem = m_tiPerc[iPerc]; tvi.pszText = stmp; tvi.cchTextMax = sizeof(stmp); @@ -476,7 +473,7 @@ if ((strcmp(s, stmp)) || (tvi.iImage != (int)dwImage)) { SetItem(m_tiPerc[iPerc], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, - s, dwImage, dwImage, 0, 0, 0); + s, dwImage, dwImage, 0, 0, (MODITEM_MIDIPERCUSSION << MIDILIB_SHIFT) | iPerc); } } } @@ -508,9 +505,8 @@ // Add DLS file folder _splitpath(pDlsBank->GetFileName(), NULL, NULL, szName, szExt); strcat(szName, szExt); - m_tiDLS[iDls] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, - szName, IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, 0, TVI_ROOT, hDlsRoot); - SetItemData(m_tiDLS[iDls], iDls); + m_tiDLS[iDls] = InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, + szName, IMAGE_FOLDER, IMAGE_FOLDER, 0, 0, iDls, TVI_ROOT, hDlsRoot); // Memorize Banks WORD wBanks[16]; HTREEITEM hBanks[16]; @@ -557,7 +553,7 @@ szNoteNames[keymax % 12], keymax / 12, regionName); } - LPARAM lParam = 0x80000000|(iRgn<<16)|iIns; + LPARAM lParam = DLS_TYPEPERC | (iRgn << DLS_REGIONSHIFT) | iIns; InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hKit, TVI_LAST); } @@ -596,7 +592,7 @@ hBanks[j] = hbank; nBanks++; } - LPARAM lParam = 0x40000000|((pDlsIns->ulInstrument & 0x7F)<<16)|(iIns); + LPARAM lParam = DLS_TYPEINST | ((pDlsIns->ulInstrument & 0x7F) << DLS_REGIONSHIFT) | (iIns); InsertItem(TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM, szName, IMAGE_INSTRUMENTS, IMAGE_INSTRUMENTS, 0, 0, lParam, hbank, TVI_LAST); } @@ -623,13 +619,8 @@ { if (m_tiDLS[iDls]) { - HTREEITEM h; - while ((h = GetChildItem(m_tiDLS[iDls])) != NULL) - { - DeleteItem(h); - } DeleteItem(m_tiDLS[iDls]); - m_tiDLS[iDls] = NULL; + m_tiDLS[iDls] = nullptr; } } } @@ -654,14 +645,15 @@ void CModTree::UpdateView(ModTreeDocInfo *pInfo, DWORD lHint) //---------------------------------------------------------- { - CModDoc *pDoc; CHAR s[256], stmp[256]; TV_ITEM tvi; const DWORD hintFlagPart = HintFlagPart(lHint); if ((pInfo == nullptr) || (pInfo->pModDoc == nullptr) || (!m_pDataTree)) return; if (!hintFlagPart) return; - pDoc = pInfo->pModDoc; - CSoundFile &sndFile = pDoc->GetrSoundFile(); + + const CModDoc *pDoc = pInfo->pModDoc; + const CSoundFile &sndFile = pDoc->GetrSoundFile(); + // Create headers s[0] = 0; if ((hintFlagPart & (HINT_MODGENERAL|HINT_MODTYPE)) || (!pInfo->hSong)) @@ -687,20 +679,22 @@ GetItem(&tvi); if ((strcmp(s, stmp)) || (tvi.iImage != IMAGE_FOLDER)) { - tvi.mask |= TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; + tvi.mask |= TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.hItem = pInfo->hSong; tvi.pszText = s; tvi.iImage = tvi.iSelectedImage = IMAGE_FOLDER; + tvi.lParam = (LPARAM)pInfo->pModDoc; SetItem(&tvi); } } - if (sndFile.GetType() & (MOD_TYPE_IT|MOD_TYPE_XM|MOD_TYPE_MPT)) + if (sndFile.GetModSpecifications().instrumentsMax > 0) { if (!pInfo->hInstruments) pInfo->hInstruments = InsertItem("Instruments", IMAGE_FOLDER, IMAGE_FOLDER, pInfo->hSong, TVI_LAST); } else { if (pInfo->hInstruments) { + //DeleteChildren(pInfo->hInstruments); for (UINT iRem=MAX_INSTRUMENTS-1; iRem; iRem--) if (pInfo->tiInstruments[iRem]) { DeleteItem(pInfo->tiInstruments[iRem]); @@ -715,15 +709,7 @@ if (hintFlagPart & (HINT_MODGENERAL|HINT_MODTYPE|HINT_MODCHANNELS|HINT_MIXPLUGINS)) { UINT nFx = 0; - for (UINT iRem=0; iRem<MAX_MIXPLUGINS; iRem++) - { - UINT n = MAX_MIXPLUGINS-1-iRem; - if (pInfo->tiEffects[n]) - { - DeleteItem(pInfo->tiEffects[n]); - pInfo->tiEffects[n] = NULL; - } - } + DeleteChildren(pInfo->hEffects); for (UINT iFx=0; iFx<MAX_MIXPLUGINS; iFx++) { const SNDMIXPLUGIN &plugin = sndFile.m_MixPlugins[iFx]; @@ -736,7 +722,7 @@ wsprintf(s, "FX%d: %s", iFx + 1, plugin.GetName()); int nImage = IMAGE_NOPLUGIN; if(plugin.pMixPlugin != nullptr) nImage = (plugin.pMixPlugin->isInstrument()) ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN; - pInfo->tiEffects[iFx] = InsertItem(s, nImage, nImage, pInfo->hEffects, TVI_LAST); + InsertItem(TVIF_TEXT | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM, s, nImage, nImage, 0, 0, iFx, pInfo->hEffects, TVI_LAST); nFx++; } } @@ -902,7 +888,7 @@ pInfo->tiPatterns.resize(sndFile.Patterns.Size(), NULL); PATTERNINDEX imin = 0, imax = sndFile.Patterns.Size()-1; if ((hintFlagPart == HINT_PATNAMES) && (nPat < sndFile.Patterns.Size())) imin = imax = nPat; - BOOL bDelPat = FALSE; + bool bDelPat = false; ASSERT(pInfo->tiPatterns.size() == sndFile.Patterns.Size()); for(PATTERNINDEX iPat = imin; iPat <= imax; iPat++) @@ -935,13 +921,14 @@ { pInfo->tiPatterns[iPat] = InsertItem(s, IMAGE_PATTERNS, IMAGE_PATTERNS, pInfo->hPatterns, TVI_LAST); } + SetItemData(pInfo->tiPatterns[iPat], iPat); } else { if (pInfo->tiPatterns[iPat]) { DeleteItem(pInfo->tiPatterns[iPat]); pInfo->tiPatterns[iPat] = NULL; - bDelPat = TRUE; + bDelPat = true; } } } @@ -978,6 +965,7 @@ SetItem(pInfo->tiSamples[nSmp], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } } + SetItemData(pInfo->tiSamples[nSmp], nSmp); } else { if (pInfo->tiSamples[nSmp]) @@ -1043,6 +1031,7 @@ if ((strcmp(s, stmp)) || (tvi.iImage != nImage)) SetItem(pInfo->tiInstruments[nIns], TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, s, nImage, nImage, 0, 0, 0); } + SetItemData(pInfo->tiInstruments[nIns], nIns); } else { if (pInfo->tiInstruments[nIns]) @@ -1061,16 +1050,17 @@ { HTREEITEM hItemParent, hItemParentParent, hRootParent; - if (!hItem) return MODITEM_NULL; + if (!hItem) return ModItem(MODITEM_NULL); // First, test root items - if (hItem == m_hInsLib) return MODITEM_HDR_INSTRUMENTLIB; - if (hItem == m_hMidiLib) return MODITEM_HDR_MIDILIB; + if (hItem == m_hInsLib) return ModItem(MODITEM_HDR_INSTRUMENTLIB); + if (hItem == m_hMidiLib) return ModItem(MODITEM_HDR_MIDILIB); hItemParent = GetParentItem(hItem); hItemParentParent = GetParentItem(hItemParent); hRootParent = hItemParent; + DWORD_PTR itemData = GetItemData(hItem); + CModDoc *pModDoc = GetDocumentFromItem(hItem); - CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : nullptr; if ((hRootParent != NULL) && (m_pDataTree)) { HTREEITEM h; @@ -1084,15 +1074,7 @@ // Midi Library if ((hRootParent == m_hMidiLib) && (m_pDataTree)) { - for (UINT iGrp=0; iGrp<17; iGrp++) - { - if (hItem == m_tiMidiGrp[iGrp]) return ModItem(MODITEM_HDR_MIDIGROUP, iGrp); - } - for (UINT iMidi=0; iMidi<128; iMidi++) - { - if (hItem == m_tiMidi[iMidi]) return ModItem(MODITEM_MIDIINSTRUMENT, iMidi); - if (hItem == m_tiPerc[iMidi]) return ModItem(MODITEM_MIDIPERCUSSION, iMidi); - } + return ModItem(static_cast<ModItemType>(itemData >> MIDILIB_SHIFT), static_cast<uint32>(itemData & MIDILIB_MASK)); } // Instrument Library if ((hRootParent == m_hInsLib) || ((!m_pDataTree) && (hItem != m_hInsLib))) @@ -1144,46 +1126,32 @@ } } } - // Pattern ? - if (hItemParent == pInfo->hPatterns && pSndFile) + + ModItem modItem(MODITEM_NULL, (uint32)itemData); + if (hItemParent == pInfo->hPatterns) { - ASSERT(pInfo->tiPatterns.size() == pSndFile->Patterns.Size()); - for (UINT i=0; i<pInfo->tiPatterns.size(); i++) - { - if (hItem == pInfo->tiPatterns[i]) return ModItem(MODITEM_PATTERN, i); - } - } - // Sample ? - if (hItemParent == pInfo->hSamples) + // Pattern + ASSERT(pInfo->tiPatterns.size() == pModDoc->GetrSoundFile().Patterns.Size()); + modItem.type = MODITEM_PATTERN; + } else if (hItemParent == pInfo->hSamples) { - for (UINT i=0; i<MAX_SAMPLES; i++) - { - if (hItem == pInfo->tiSamples[i]) return ModItem(MODITEM_SAMPLE, i); - } - } - // Instrument ? - if (hItemParent == pInfo->hInstruments) + // Sample + modItem.type = MODITEM_SAMPLE; + } else if (hItemParent == pInfo->hInstruments) { - for (UINT i=0; i<MAX_INSTRUMENTS; i++) - { - if (hItem == pInfo->tiInstruments[i]) return ModItem(MODITEM_INSTRUMENT, i); - } - } - // Effect ? - if (hItemParent == pInfo->hEffects) + // Instrument + modItem.type = MODITEM_INSTRUMENT; + } else if (hItemParent == pInfo->hEffects) { - for (UINT i=0; i<MAX_MIXPLUGINS; i++) - { - if (hItem == pInfo->tiEffects[i]) return ModItem(MODITEM_EFFECT, i); - } + // Effect + modItem.type = MODITEM_EFFECT; } - return ModItem(MODITEM_NULL); + return modItem; } } // DLS banks - DWORD_PTR itemData = GetItemData(hItem); - if(itemData < m_tiDLS.size() && hItem == m_tiDLS[itemData]) + if(hItem == m_tiDLS[itemData] && itemData < m_tiDLS.size()) return ModItem(MODITEM_DLSBANK_FOLDER, (uint32)itemData); // DLS Instruments @@ -1195,8 +1163,8 @@ if (hItem == m_tiDLS[dlsItem]) return ModItem(MODITEM_DLSBANK_FOLDER, (uint32)dlsItem); - if ((itemData & 0xC0000000) == 0x80000000 - || (itemData & 0xC0000000) == 0x40000000) + if ((itemData & DLS_TYPEMASK) == DLS_TYPEPERC + || (itemData & DLS_TYPEMASK) == DLS_TYPEINST) { return ModItem(MODITEM_DLSBANK_INSTRUMENT, itemData, (uint16)dlsItem); } @@ -1374,14 +1342,14 @@ if ((bank < CTrackApp::gpDLSBanks.size()) && (CTrackApp::gpDLSBanks[bank]) && (pMainFrm)) { CDLSBank *pDLSBank = CTrackApp::gpDLSBanks[bank]; - UINT rgn = 0, instr = (modItem.val1 & 0x00007FFF); + UINT rgn = 0, instr = (modItem.val1 & DLS_INSTRMASK); // Drum - if (modItem.val1 & 0x80000000) + if (modItem.val1 & DLS_TYPEPERC) { - rgn = (modItem.val1 & 0x007F0000) >> 16; + rgn = (modItem.val1 & DLS_REGIONMASK) >> DLS_REGIONSHIFT; } else // Melodic - if (modItem.val1 & 0x40000000) + if (modItem.val1 & DLS_TYPEINST) { rgn = pDLSBank->GetRegionFromKey(instr, nParam - NOTE_MIN); } @@ -2041,13 +2009,13 @@ break; case MODITEM_DLSBANK_INSTRUMENT: - ASSERT((m_itemDrag.val1 & 0xC0000000) != 0); + ASSERT((m_itemDrag.val1 & DLS_TYPEMASK) != 0); pdropinfo->dwDropType = DRAGONDROP_DLS; // dwDropItem = DLS Bank # pdropinfo->dwDropItem = m_itemDrag.val2; // bank # // Melodic: (Instrument) // Drums: (0x80000000) | (Region << 16) | (Instrument) - pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & 0x80FF7FFF)); + pdropinfo->lDropParam = (LPARAM)((m_itemDrag.val1 & (DLS_TYPEPERC | DLS_REGIONMASK | DLS_INSTRMASK))); break; } return (pdropinfo->dwDropType != DRAGONDROP_NOTHING); @@ -2065,12 +2033,13 @@ const ModTreeDocInfo *pInfoDrop = (m_nDocNdx < DocInfo.size() ? DocInfo[m_nDocNdx] : nullptr); CModDoc *pModDoc = (pInfoDrop) ? pInfoDrop->pModDoc : nullptr; CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + const bool sameModDoc = (pModDoc == pInfoDrag->pModDoc); switch(modItemDrop.type) { case MODITEM_ORDER: case MODITEM_SEQUENCE: - if ((m_itemDrag.type == MODITEM_ORDER) && (pModDoc) && (pSndFile) && (m_nDocNdx == m_nDragDocNdx)) + if ((m_itemDrag.type == MODITEM_ORDER) && (pModDoc) && sameModDoc) { // drop an order somewhere if (bDoDrop) @@ -2099,7 +2068,7 @@ case MODITEM_HDR_ORDERS: // Drop your sequences here. // At the moment, only dropping sequences into another module is possible. - if((m_itemDrag.type == MODITEM_SEQUENCE || m_itemDrag.type == MODITEM_HDR_ORDERS) && pSndFile && pInfoDrag && pModDoc != pInfoDrag->pModDoc) + if((m_itemDrag.type == MODITEM_SEQUENCE || m_itemDrag.type == MODITEM_HDR_ORDERS) && pSndFile && pInfoDrag && !sameModDoc) { if(bDoDrop && pInfoDrag != nullptr) { @@ -2146,7 +2115,7 @@ case MODITEM_SAMPLE: // Reorder samples in a module - if(m_itemDrag.type == MODITEM_SAMPLE && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) + if(m_itemDrag.type == MODITEM_SAMPLE && pInfoDrag != nullptr && sameModDoc) { if(bDoDrop) { @@ -2173,7 +2142,7 @@ case MODITEM_INSTRUMENT: // Reorder instruments in a module - if(m_itemDrag.type == MODITEM_INSTRUMENT && pInfoDrag != nullptr && pModDoc == pInfoDrag->pModDoc) + if(m_itemDrag.type == MODITEM_INSTRUMENT && pInfoDrag != nullptr && sameModDoc) { if(bDoDrop) { @@ -2355,9 +2324,8 @@ case MODITEM_HDR_ORDERS: // can we drag an order header? (only in MPTM format and if there's only one sequence) { - CModDoc *pModDoc = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx]->pModDoc : nullptr); - CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - if(pSndFile && pSndFile->Order.GetNumSequences() == 1) + const CModDoc *pModDoc = (m_nDragDocNdx < DocInfo.size() ? DocInfo[m_nDragDocNdx]->pModDoc : nullptr); + if(pModDoc && pModDoc->GetrSoundFile().Order.GetNumSequences() == 1) bDrag = true; } break; @@ -3398,6 +3366,24 @@ } +// Delete all children of a tree item +void CModTree::DeleteChildren(HTREEITEM hItem) +//-------------------------------------------- +{ + if(hItem != nullptr && ItemHasChildren(hItem)) + { + HTREEITEM hNextItem; + HTREEITEM hChildItem = GetChildItem(hItem); + while(hChildItem != nullptr) + { + hNextItem = GetNextSiblingItem(hChildItem); + DeleteItem(hChildItem); + hChildItem = hNextItem; + } + } +} + + // Editing sample, instrument, order, pattern, etc. labels void CModTree::OnBeginLabelEdit(NMHDR *nmhdr, LRESULT *result) //------------------------------------------------------------ Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2013-07-06 23:56:03 UTC (rev 2515) +++ trunk/OpenMPT/mptrack/View_tre.h 2013-07-07 14:38:29 UTC (rev 2516) @@ -24,14 +24,13 @@ struct ModTreeDocInfo { - CModDoc *pModDoc; // Tree state variables std::vector<std::vector<HTREEITEM> > tiOrders; std::vector<HTREEITEM> tiSequences, tiPatterns; + CModDoc *pModDoc; HTREEITEM hSong, hPatterns, hSamples, hInstruments, hComments, hOrders, hEffects; HTREEITEM tiSamples[MAX_SAMPLES]; HTREEITEM tiInstruments[MAX_INSTRUMENTS]; - HTREEITEM tiEffects[MAX_MIXPLUGINS]; // Module information ORDERINDEX nOrdSel; @@ -51,7 +50,6 @@ tiSequences.resize(sndFile.Order.GetNumSequences(), nullptr); MemsetZero(tiSamples); MemsetZero(tiInstruments); - MemsetZero(tiEffects); samplesPlaying.reset(); instrumentsPlaying.reset(); } @@ -119,6 +117,20 @@ ModItem(ModItemType t = MODITEM_NULL, uint32 v1 = 0, uint16 v2 = 0) : type(uint16(t)), val1(v1), val2(v2) { } }; + // Bit mask magic + enum + { + MIDILIB_SHIFT = 16, + MIDILIB_MASK = (1 << MIDILIB_SHIFT) - 1, + + DLS_TYPEMASK = 0xC0000000, + DLS_TYPEPERC = 0x80000000, + DLS_TYPEINST = 0x40000000, + DLS_INSTRMASK = 0x00007FFF, + DLS_REGIONMASK = 0x007F0000, + DLS_REGIONSHIFT = 16, + }; + static CSoundFile *m_SongFile; // For browsing samples and instruments inside modules on disk CModTreeDropTarget m_DropTarget; CModTree *m_pDataTree; // Pointer to instrument browser (lower part of tree view) - if it's a nullptr, this object is the instrument browser itself. @@ -169,6 +181,7 @@ bool CanDrop(HTREEITEM hItem, bool bDoDrop); void UpdatePlayPos(CModDoc *pModDoc, Notification *pNotify); bool IsItemExpanded(HTREEITEM hItem); + void DeleteChildren(HTREEITEM hItem); // Overrides // ClassWizard generated virtual function overrides This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |