From: <sag...@us...> - 2009-10-18 16:54:29
|
Revision: 401 http://modplug.svn.sourceforge.net/modplug/?rev=401&view=rev Author: saga-games Date: 2009-10-18 16:54:18 +0000 (Sun, 18 Oct 2009) Log Message: ----------- [New] Treeview: Display playing samples / instruments (only those that are assigned to a sample). Can be enabled from setup screen. [Fix] Treeview: Broke when changing sequence count of a module from 1 to 2 [Fix] AMF Loader: Missing break command [Ref] More internal refactoring. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/View_tre.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/res/img_list.bmp trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -463,7 +463,7 @@ m_EditRestartPos.GetWindowText(s, sizeof(s)); if (s[0]) { - UINT n = atoi(s); + ORDERINDEX n = (ORDERINDEX)atoi(s); n = CLAMP(n, 0, m_pSndFile->Order.size()); for (ORDERINDEX i = 0; i <= n; i++) if (m_pSndFile->Order[i] == m_pSndFile->Order.GetInvalidPatIndex()) return; Modified: trunk/OpenMPT/mptrack/Ctrl_ins.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Ctrl_ins.h 2009-10-18 16:54:18 UTC (rev 401) @@ -71,7 +71,7 @@ CSliderCtrl m_SliderVolSwing, m_SliderPanSwing, m_SliderCutSwing, m_SliderResSwing, m_SliderCutOff, m_SliderResonance; CNoteMapWnd m_NoteMap; - UINT m_nInstrument; + INSTRUMENTINDEX m_nInstrument; // -> CODE#0027 // -> DESC="per-instrument volume ramping setup (refered as attack)" Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -1166,7 +1166,7 @@ { m_pSndFile->Order.m_sName = str; m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, HINT_SEQNAMES, this); + m_pModDoc->UpdateAllViews(NULL, (m_pSndFile->Order.GetCurrentSequenceIndex() << HINT_SHIFT_SEQUENCE) | HINT_SEQNAMES, this); } } } Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-10-18 16:54:18 UTC (rev 401) @@ -154,7 +154,8 @@ CPatEdit m_EditSpacing, m_EditPatName, m_EditOrderListMargins; CSpinButtonCtrl m_SpinInstrument, m_SpinSpacing, m_SpinOrderListMargins; CModControlBar m_ToolBar; - UINT m_nInstrument, m_nDetailLevel; + INSTRUMENTINDEX m_nInstrument; + UINT m_nDetailLevel; BOOL m_bRecord, m_bVUMeters, m_bPluginNames; // -> CODE#0012 // -> DESC="midi keyboard split" Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-10-18 16:54:18 UTC (rev 401) @@ -170,49 +170,39 @@ #define NUM_VUMETER_PENS 32 // Pattern Setup (contains also non-pattern related settings) -#define PATTERN_PLAYNEWNOTE 0x01 -#define PATTERN_LARGECOMMENTS 0x02 -#define PATTERN_STDHIGHLIGHT 0x04 -#define PATTERN_SMALLFONT 0x08 -#define PATTERN_CENTERROW 0x10 -#define PATTERN_WRAP 0x20 -#define PATTERN_EFFECTHILIGHT 0x40 -#define PATTERN_HEXDISPLAY 0x80 -#define PATTERN_FLATBUTTONS 0x100 -#define PATTERN_CREATEBACKUP 0x200 -#define PATTERN_SINGLEEXPAND 0x400 -#define PATTERN_AUTOSPACEBAR 0x800 -#define PATTERN_NOEXTRALOUD 0x1000 -#define PATTERN_DRAGNDROPEDIT 0x2000 -#define PATTERN_2NDHIGHLIGHT 0x4000 -#define PATTERN_MUTECHNMODE 0x8000 -#define PATTERN_SHOWPREVIOUS 0x10000 -#define PATTERN_CONTSCROLL 0x20000 -#define PATTERN_KBDNOTEOFF 0x40000 -#define PATTERN_FOLLOWSONGOFF 0x80000 //rewbs.noFollow +#define PATTERN_PLAYNEWNOTE 0x01 // play new notes while recording +#define PATTERN_LARGECOMMENTS 0x02 // use large font in comments +#define PATTERN_STDHIGHLIGHT 0x04 // enable primary highlight +#define PATTERN_SMALLFONT 0x08 // use small font in pattern editor +#define PATTERN_CENTERROW 0x10 // always center active row +#define PATTERN_WRAP 0x20 // wrap around cursor in editor +#define PATTERN_EFFECTHILIGHT 0x40 // effect syntax highlighting +#define PATTERN_HEXDISPLAY 0x80 // display row number in hex +#define PATTERN_FLATBUTTONS 0x100 // flat toolbar buttons +#define PATTERN_CREATEBACKUP 0x200 // create .bak files when saving +#define PATTERN_SINGLEEXPAND 0x400 // single click to expand tree +#define PATTERN_AUTOSPACEBAR 0x800 // space bar repeats previous action +#define PATTERN_NOEXTRALOUD 0x1000 // no loud samples in sample editor +#define PATTERN_DRAGNDROPEDIT 0x2000 // enable drag and drop editing +#define PATTERN_2NDHIGHLIGHT 0x4000 // activate secondary highlight +#define PATTERN_MUTECHNMODE 0x8000 // ignore muted channels +#define PATTERN_SHOWPREVIOUS 0x10000 // show prev/next patterns +#define PATTERN_CONTSCROLL 0x20000 // continous pattern scrolling +#define PATTERN_KBDNOTEOFF 0x40000 // Record note-off events +#define PATTERN_FOLLOWSONGOFF 0x80000 // follow song off by default +#define PATTERN_MIDIRECORD 0x100000 // MIDI Record on by default +//#define PATTERN_ALTERNTIVEBPMSPEED 0x200000 // deprecated +#define PATTERN_HILITETIMESIGS 0x400000 // highlight on song signature +#define PATTERN_OLDCTXMENUSTYLE 0x800000 // mpt 1.16 pattern context menu style +#define PATTERN_SYNCMUTE 0x1000000 // maintain sample sync on mute +#define PATTERN_AUTODELAY 0x2000000 // automatically insert delay commands in pattern when entering notes +#define PATTERN_NOTEFADE 0x4000000 // alt. note fade behaviour when entering notes +#define PATTERN_OVERFLOWPASTE 0x8000000 // continue paste in the next pattern instead of cutting off +#define PATTERN_POSITIONAWARETIMER 0x10000000 // try to set the timer in the statusbar when jumping around in modules +#define PATTERN_RESETCHANNELS 0x20000000 // reset channels when looping +#define PATTERN_LIVEUPDATETREE 0x40000000 // update active sample / instr icons in treeview -// -> CODE#0017 -// -> DESC="midi in record mode setup option" -#define PATTERN_MIDIRECORD 0x100000 -// -! BEHAVIOUR_CHANGE#0017 -// -> CODE#0022 -// -> DESC="alternative BPM/Speed interpretation method" -#define PATTERN_ALTERNTIVEBPMSPEED 0x200000 -// rewbs: this options is now available under song settings. It is therefore saved with the song. -// -! NEW_FEATURE#0022 - -#define PATTERN_HILITETIMESIGS 0x400000 - -#define PATTERN_OLDCTXMENUSTYLE 0x800000 -#define PATTERN_SYNCMUTE 0x1000000 -#define PATTERN_AUTODELAY 0x2000000 -#define PATTERN_NOTEFADE 0x4000000 -#define PATTERN_OVERFLOWPASTE 0x8000000 -#define PATTERN_POSITIONAWARETIMER 0x10000000 -#define PATTERN_RESETCHANNELS 0x20000000 - - // Keyboard Setup enum { KEYBOARD_CUSTOM=0, @@ -263,7 +253,9 @@ IMAGE_ASIO, IMAGE_GRAPH, IMAGE_SAMPLEMUTE, - IMAGE_INSTRMUTE + IMAGE_INSTRMUTE, + IMAGE_SAMPLEACTIVE, + IMAGE_INSTRACTIVE, }; ////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -199,7 +199,7 @@ BeginWaitCursor(); LPMIDILIBSTRUCT lpMidiLib = CTrackApp::GetMidiLibrary(); // Scan Instruments - if (lpMidiLib) for (UINT nIns=1; nIns<=m_SndFile.m_nInstruments; nIns++) if (m_SndFile.Instruments[nIns]) + if (lpMidiLib) for (INSTRUMENTINDEX nIns = 1; nIns <= m_SndFile.m_nInstruments; nIns++) if (m_SndFile.Instruments[nIns]) { LPCSTR pszMidiMapName; MODINSTRUMENT *pIns = m_SndFile.Instruments[nIns]; @@ -433,7 +433,7 @@ if(unsavedInstrument && ::MessageBox(NULL,"Do you want to save modified instruments ?",NULL,MB_ICONQUESTION | MB_YESNO | MB_APPLMODAL) == IDYES){ - for(UINT i = 0 ; i < m_SndFile.m_nInstruments ; i++){ + for(INSTRUMENTINDEX i = 0 ; i < m_SndFile.m_nInstruments ; i++){ if(m_SndFile.m_szInstrumentPath[i][0] != '\0'){ int size = strlen(m_SndFile.m_szInstrumentPath[i]); BOOL iti = _stricmp(&m_SndFile.m_szInstrumentPath[i][size-3],"iti") == 0; @@ -1707,13 +1707,13 @@ m_SndFile.m_nRow = nRow; } else { - for (UINT i=0; i<m_SndFile.Order.size(); i++) + for (ORDERINDEX nOrd = 0; nOrd < m_SndFile.Order.size(); nOrd++) { - if (m_SndFile.Order[i] == m_SndFile.Order.GetInvalidPatIndex()) break; - if (m_SndFile.Order[i] == nPat) + if (m_SndFile.Order[nOrd] == m_SndFile.Order.GetInvalidPatIndex()) break; + if (m_SndFile.Order[nOrd] == nPat) { - m_SndFile.m_nCurrentPattern = i; - m_SndFile.m_nNextPattern = i; + m_SndFile.m_nCurrentPattern = nOrd; + m_SndFile.m_nNextPattern = nOrd; m_SndFile.m_nNextRow = nNextRow; m_SndFile.m_nRow = nRow; break; Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-10-18 16:54:18 UTC (rev 401) @@ -70,6 +70,7 @@ #define HINT_BITS_SAMPLE 12 #define HINT_BITS_INST 8 #define HINT_BITS_CHNTAB 8 +#define HINT_BITS_SEQUENCE 6 //Defines bit shift values used for setting/retrieving the additional hint data to/from hint parameter. #define HINT_SHIFT_PAT (32 - HINT_BITS_PATTERN) @@ -77,6 +78,7 @@ #define HINT_SHIFT_SMP (32 - HINT_BITS_SAMPLE) #define HINT_SHIFT_INS (32 - HINT_BITS_INST) #define HINT_SHIFT_CHNTAB (32 - HINT_BITS_CHNTAB) +#define HINT_SHIFT_SEQUENCE (32 - HINT_BITS_SEQUENCE) //Check that hint bit counts are not too large given the number of hint flags. STATIC_ASSERT( ((-1 << HINT_SHIFT_PAT) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_PAT) ); @@ -84,6 +86,7 @@ STATIC_ASSERT( ((-1 << HINT_SHIFT_SMP) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_SMP) ); STATIC_ASSERT( ((-1 << HINT_SHIFT_INS) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_INS) ); STATIC_ASSERT( ((-1 << HINT_SHIFT_CHNTAB) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_CHNTAB) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_SEQUENCE) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_SEQUENCE) ); Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -661,17 +661,8 @@ OPTGEN_SHOWPREVIOUS, OPTGEN_CONTSCROLL, OPTGEN_KBDNOTEOFF, - OPTGEN_FOLLOWSONGOFF, //rewbs.noFollow -// -> CODE#0017 -// -> DESC="midi in record mode setup option" + OPTGEN_FOLLOWSONGOFF, OPTGEN_MIDIRECORD, -// -! BEHAVIOUR_CHANGE#0017 - -// -> CODE#0022 -// -> DESC="alternative BPM/Speed interpretation method" -// OPTGEN_ALTERNTIVEBPMSPEED, -// rewbs: this options is now available under song settings. It is therefore saved with the song. -// -! NEW_FEATURE#0022 OPTGEN_PATTERNCTXMENUSTYLE, OPTGEN_SYNCMUTE, OPTGEN_AUTODELAY, @@ -679,6 +670,7 @@ OPTGEN_OVERFLOWPASTE, OPTGEN_POSITIONAWARETIMER, OPTGEN_RESETCHANNELS, + OPTGEN_LIVEUPDATETREE, OPTGEN_MAXOPTIONS }; @@ -699,18 +691,8 @@ {"Show Prev/Next patterns", "Displays grayed-out version of the previous/next patterns in the pattern editor. Does not work if \"always center active row\" is disabled."}, {"Continuous scroll", "Jumps to the next pattern when moving past the end of a pattern"}, {"Record note off", "Record note off when a key is released on the PC keyboard (Only works in instrument mode)."}, - {"Follow song off by default", "Ensure follow song is off when opening or starting a new song."}, //rewbs.noFollow -// -> CODE#0017 -// -> DESC="midi in record mode setup option" + {"Follow song off by default", "Ensure follow song is off when opening or starting a new song."}, {"Midi record", "Enable midi in record by default."}, -// -! BEHAVIOUR_CHANGE#0017 - -// -> CODE#0022 -// -> DESC="alternative BPM/Speed interpretation method" -// {"Alternative BPM/Speed", "Alternative BPM/Speed interpretation where speed represents the number of tempo ticks per pattern row."}, -// rewbs: this options is now available under song settings. It is therefore saved with the song. -// -! NEW_FEATURE#0022 - {"Old style pattern context menu", "Check this option to hide unavailable items in the pattern editor context menu. Uncheck to grey-out unavailable items instead."}, {"Maintain sample sync on mute", "Samples continue to be processed when channels are muted (like in IT2 and FT2)"}, {"Automatic delay commands", "Automatically insert appropriate note-delay commands when recording notes during live playback."}, @@ -718,6 +700,7 @@ {"Overflow paste mode", "Wrap pasted pattern data into next pattern. This is useful for creating echo channels."}, {"Position aware timer", "If enabled, timer will show the playback position time if possible instead of running timer."}, {"Reset channels on loop", "If enabled, channels will be reset to their initial state when song looping is enabled.\nNote: This does not affect manual song loops (i.e. triggered by pattern commands)"}, + {"Update sample status in tree", "If enabled, active samples and instruments will be indicated by a differnt icon in the treeview."} }; @@ -763,26 +746,16 @@ case OPTGEN_SHOWPREVIOUS: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_SHOWPREVIOUS); break; case OPTGEN_CONTSCROLL: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_CONTSCROLL); break; case OPTGEN_KBDNOTEOFF: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_KBDNOTEOFF); break; - case OPTGEN_FOLLOWSONGOFF: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_FOLLOWSONGOFF); break; //rewbs.noFollow - -// -> CODE#0017 -// -> DESC="midi in record mode setup option" + case OPTGEN_FOLLOWSONGOFF: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_FOLLOWSONGOFF); break; case OPTGEN_MIDIRECORD: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_MIDIRECORD); break; -// -! BEHAVIOUR_CHANGE#0017 - -// -> CODE#0022 -// -> DESC="alternative BPM/Speed interpretation method" -// case OPTGEN_ALTERNTIVEBPMSPEED: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_ALTERNTIVEBPMSPEED); break; -// rewbs: this options is now available under song settings. It is therefore saved with the song. -// -! NEW_FEATURE#0022 - case OPTGEN_PATTERNCTXMENUSTYLE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_OLDCTXMENUSTYLE); break; - case OPTGEN_SYNCMUTE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_SYNCMUTE); break; - + case OPTGEN_PATTERNCTXMENUSTYLE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_OLDCTXMENUSTYLE); break; + case OPTGEN_SYNCMUTE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_SYNCMUTE); break; case OPTGEN_AUTODELAY: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_AUTODELAY); break; case OPTGEN_PATNOTEFADE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_NOTEFADE); break; case OPTGEN_OVERFLOWPASTE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_OVERFLOWPASTE); break; case OPTGEN_POSITIONAWARETIMER: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_POSITIONAWARETIMER); break; - case OPTGEN_RESETCHANNELS: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_RESETCHANNELS); break; + case OPTGEN_RESETCHANNELS: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_RESETCHANNELS); break; + case OPTGEN_LIVEUPDATETREE: bCheck = (CMainFrame::m_dwPatternSetup & PATTERN_LIVEUPDATETREE); break; } m_CheckList.SetCheck(i, (bCheck) ? TRUE : FALSE); } @@ -832,26 +805,16 @@ case OPTGEN_SHOWPREVIOUS: mask = PATTERN_SHOWPREVIOUS; break; case OPTGEN_CONTSCROLL: mask = PATTERN_CONTSCROLL; break; case OPTGEN_KBDNOTEOFF: mask = PATTERN_KBDNOTEOFF; break; - case OPTGEN_FOLLOWSONGOFF: mask = PATTERN_FOLLOWSONGOFF; break; //rewbs.noFollow - - -// -> CODE#0017 -// -> DESC="midi in record mode setup option" + case OPTGEN_FOLLOWSONGOFF: mask = PATTERN_FOLLOWSONGOFF; break; case OPTGEN_MIDIRECORD: mask = PATTERN_MIDIRECORD; break; -// -! BEHAVIOUR_CHANGE#0017 - -// -> CODE#0022 -// -> DESC="alternative BPM/Speed interpretation method" -// case OPTGEN_ALTERNTIVEBPMSPEED: mask = PATTERN_ALTERNTIVEBPMSPEED; break; -// rewbs: this options is now available under song settings. It is therefore saved with the song. -// -! NEW_FEATURE#0022 case OPTGEN_PATTERNCTXMENUSTYLE: mask = PATTERN_OLDCTXMENUSTYLE; break; - case OPTGEN_SYNCMUTE: mask = PATTERN_SYNCMUTE; break; - case OPTGEN_AUTODELAY: mask = PATTERN_AUTODELAY; break; - case OPTGEN_PATNOTEFADE: mask = PATTERN_NOTEFADE; break; - case OPTGEN_OVERFLOWPASTE: mask = PATTERN_OVERFLOWPASTE; break; - case OPTGEN_POSITIONAWARETIMER: mask = PATTERN_POSITIONAWARETIMER; break; - case OPTGEN_RESETCHANNELS: mask = PATTERN_RESETCHANNELS; break; + case OPTGEN_SYNCMUTE: mask = PATTERN_SYNCMUTE; break; + case OPTGEN_AUTODELAY: mask = PATTERN_AUTODELAY; break; + case OPTGEN_PATNOTEFADE: mask = PATTERN_NOTEFADE; break; + case OPTGEN_OVERFLOWPASTE: mask = PATTERN_OVERFLOWPASTE; break; + case OPTGEN_POSITIONAWARETIMER: mask = PATTERN_POSITIONAWARETIMER; break; + case OPTGEN_RESETCHANNELS: mask = PATTERN_RESETCHANNELS; break; + case OPTGEN_LIVEUPDATETREE: mask = PATTERN_LIVEUPDATETREE; break; } if (bCheck) CMainFrame::m_dwPatternSetup |= mask; else CMainFrame::m_dwPatternSetup &= ~mask; Modified: trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -81,7 +81,7 @@ bool CPatternRandomizerGUI::isVisible() { //---------------------------------- - return (bool)IsWindowVisible(); + return IsWindowVisible() ? true : false; } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -699,22 +699,19 @@ { const DWORD nPat = (lHint >> HINT_SHIFT_PAT); - // only one seq remaining: update parent item || previously only one sequence + // (only one seq remaining || previously only one sequence): update parent item if((pInfo->tiSequences.size() > 1 && pSndFile->Order.GetNumSequences() == 1) || (pInfo->tiSequences.size() == 1 && pSndFile->Order.GetNumSequences() > 1)) { - if(pInfo->tiOrders.size() != pSndFile->Order.GetNumSequences()) + for(size_t nSeq = 0; nSeq < pInfo->tiOrders.size(); nSeq++) { - for(size_t nSeq = 0; nSeq < pInfo->tiOrders.size(); nSeq++) + for(size_t nOrd = 0; nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) if (pInfo->tiOrders[nSeq][nOrd]) { - for(size_t nOrd = 0; nOrd < pInfo->tiOrders[nSeq].size(); nOrd++) if (pInfo->tiOrders[nSeq][nOrd]) - { - DeleteItem(pInfo->tiOrders[nSeq][nOrd]); pInfo->tiOrders[nSeq][nOrd] = NULL; - } - DeleteItem(pInfo->tiSequences[nSeq]); pInfo->tiSequences[nSeq] = NULL; + if(pInfo->tiOrders[nSeq][nOrd]) DeleteItem(pInfo->tiOrders[nSeq][nOrd]); pInfo->tiOrders[nSeq][nOrd] = NULL; } - pInfo->tiOrders.resize(pSndFile->Order.GetNumSequences()); - pInfo->tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); + if(pInfo->tiSequences[nSeq]) DeleteItem(pInfo->tiSequences[nSeq]); pInfo->tiSequences[nSeq] = NULL; } + pInfo->tiOrders.resize(pSndFile->Order.GetNumSequences()); + pInfo->tiSequences.resize(pSndFile->Order.GetNumSequences(), NULL); } // If there are too many sequences, delete them. @@ -734,8 +731,11 @@ HTREEITEM hAncestorNode = pInfo->hOrders; + SEQUENCEINDEX nSeqMin = 0, nSeqMax = pSndFile->Order.GetNumSequences() - 1; + SEQUENCEINDEX nHintParam = lHint >> HINT_SHIFT_SEQUENCE; + if ((hintFlagPart == HINT_SEQNAMES) && (nHintParam <= nSeqMax)) nSeqMin = nSeqMax = nHintParam; // go through all sequences - for(SEQUENCEINDEX nSeq = 0; nSeq < pSndFile->Order.GetNumSequences(); nSeq++) + for(SEQUENCEINDEX nSeq = nSeqMin; nSeq <= nSeqMax; nSeq++) { if(pSndFile->Order.GetNumSequences() > 1) { @@ -885,7 +885,8 @@ { bool bSamplePresent = (pSndFile->Samples[nSmp].pSample) ? true : false; int nImage = (bSamplePresent) ? IMAGE_SAMPLES : IMAGE_NOSAMPLE; - if(pInfo->pModDoc->IsSampleMuted(nSmp) && bSamplePresent) nImage = IMAGE_SAMPLEMUTE; + if(pInfo->bIsSamplePlaying[nSmp - 1] && bSamplePresent) nImage = IMAGE_SAMPLEACTIVE; + if(pInfo->pModDoc->IsSampleMuted(nSmp)) nImage = IMAGE_SAMPLEMUTE; wsprintf(s, "%3d: %s", nSmp, pSndFile->m_szNames[nSmp]); if (!pInfo->tiSamples[nSmp]) @@ -952,6 +953,7 @@ } int nImage = IMAGE_INSTRUMENTS; + if(pInfo->bIsInstrPlaying[nIns - 1]) nImage = IMAGE_INSTRACTIVE; if(pInfo->pModDoc->IsInstrumentMuted(nIns)) nImage = IMAGE_INSTRMUTE; if (!pInfo->tiInstruments[nIns]) @@ -2037,9 +2039,49 @@ DocInfo[nDocNdx]->nSeqSel = nNewSeq; UpdateView(nDocNdx, HINT_MODSEQUENCE); } + + // Update sample / instrument playing status icons (will only detect instruments with samples, though) + + if((CMainFrame::m_dwPatternSetup & PATTERN_LIVEUPDATETREE) == 0) return; + // TODO: Is there a way to find out if the treeview is actually visible? Or if the Sample and Instrument folders are collapsed? + /*static int nUpdateCount = 0; + nUpdateCount++; + if(nUpdateCount < 5) return; // don't update too often + nUpdateCount = 0;*/ + + memset(DocInfo[nDocNdx]->bIsSamplePlaying, false, MAX_SAMPLES * sizeof(bool)); + memset(DocInfo[nDocNdx]->bIsInstrPlaying, false, MAX_INSTRUMENTS * sizeof(bool)); + + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return; + + for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++) + { + if(pSndFile->Chn[nChn].nPos > 0) + { + for(SAMPLEINDEX nSmp = 1; nSmp <= pSndFile->m_nSamples; nSmp++) + { + if(pSndFile->Chn[nChn].pModSample == &pSndFile->Samples[nSmp]) + { + DocInfo[nDocNdx]->bIsSamplePlaying[nSmp - 1] = true; + break; + } + } + for(INSTRUMENTINDEX nIns = 1; nIns <= pSndFile->m_nInstruments; nIns++) + { + if(pSndFile->Chn[nChn].pModInstrument == pSndFile->Instruments[nIns]) + { + DocInfo[nDocNdx]->bIsInstrPlaying[nIns - 1] = true; + break; + } + } + } + } + UpdateView(nDocNdx, HINT_SAMPLEINFO | HINT_INSTRUMENT); } + ///////////////////////////////////////////////////////////////////////////// // CViewModTree message handlers Modified: trunk/OpenMPT/mptrack/View_tre.h =================================================================== --- trunk/OpenMPT/mptrack/View_tre.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/View_tre.h 2009-10-18 16:54:18 UTC (rev 401) @@ -56,7 +56,8 @@ vector<vector<HTREEITEM> > tiOrders; vector<HTREEITEM> tiSequences; HTREEITEM tiEffects[MAX_MIXPLUGINS]; - + bool bIsSamplePlaying[MAX_SAMPLES]; + bool bIsInstrPlaying[MAX_INSTRUMENTS]; MODTREEDOCINFO(const CSoundFile* const pSndFile) { @@ -77,6 +78,8 @@ memset(tiSamples, 0, sizeof(tiSamples)); memset(tiInstruments, 0, sizeof(tiInstruments)); memset(tiEffects, 0, sizeof(tiEffects)); + memset(bIsSamplePlaying, false, MAX_SAMPLES * sizeof(bool)); + memset(bIsInstrPlaying, false, MAX_INSTRUMENTS * sizeof(bool)); } }; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -3148,17 +3148,18 @@ //end rewbs.VSTcompliance -BOOL CVstPlugin::isInstrument() // ericus 18/02/2005 +bool CVstPlugin::isInstrument() // ericus 18/02/2005 //----------------------------- { - if(m_pEffect) return ((m_pEffect->flags & effFlagsIsSynth) || (!m_pEffect->numInputs)); // rewbs.dryRatio - return FALSE; + if(m_pEffect) return ((m_pEffect->flags & effFlagsIsSynth) || (!m_pEffect->numInputs)) ? true : false; // rewbs.dryRatio + return false; } -BOOL CVstPlugin::CanRecieveMidiEvents() { -//--------------------------------------- +bool CVstPlugin::CanRecieveMidiEvents() +//------------------------------------- +{ CString s = "receiveVstMidiEvent"; - return (CVstPlugin::Dispatch(effCanDo, 0, 0, (char*)(LPCTSTR)s, 0)); + return (CVstPlugin::Dispatch(effCanDo, 0, 0, (char*)(LPCTSTR)s, 0)) ? true : false; } bool CVstPlugin::KeysRequired() Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/mptrack/Vstplug.h 2009-10-18 16:54:18 UTC (rev 401) @@ -148,8 +148,8 @@ bool Bypass(); //rewbs.defaultPlugGUI bool IsBypassed(); //rewbs.defaultPlugGUI - BOOL isInstrument(); // ericus 18/02/2005 - BOOL CanRecieveMidiEvents(); + bool isInstrument(); // ericus 18/02/2005 + bool CanRecieveMidiEvents(); bool KeysRequired(); void GetOutputPlugList(CArray<CVstPlugin*,CVstPlugin*> &list); Modified: trunk/OpenMPT/mptrack/res/img_list.bmp =================================================================== (Binary files differ) Modified: trunk/OpenMPT/soundlib/LOAD_AMF.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2009-10-18 16:54:18 UTC (rev 401) @@ -152,6 +152,7 @@ case 0x17: param = (param+64)&0x7F; if (m->command) { if (!m->volcmd) { m->volcmd = VOLCMD_PANNING; m->vol = param/2; } command = 0; } else { command = CMD_PANNING8; } + break; // Unknown effects default: command = param = 0; } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-10-18 16:54:18 UTC (rev 401) @@ -1112,7 +1112,7 @@ void CSoundFile::SetCurrentPos(UINT nPos) //--------------------------------------- { - UINT nPattern; + ORDERINDEX nPattern; BYTE resetMask = (!nPos) ? CHNRESET_SETPOS_FULL : CHNRESET_SETPOS_BASIC; for (CHANNELINDEX i=0; i<MAX_CHANNELS; i++) @@ -1178,13 +1178,13 @@ -void CSoundFile::SetCurrentOrder(UINT nPos) -//----------------------------------------- +void CSoundFile::SetCurrentOrder(ORDERINDEX nOrder) +//----------------------------------------------- { //while ((nPos < Order.size()) && (Order[nPos] == 0xFE)) nPos++; - while ((nPos < Order.size()) && (Order[nPos] == Order.GetIgnoreIndex())) nPos++; - if ((nPos >= Order.size()) || (Order[nPos] >= Patterns.Size())) return; - for (UINT j=0; j<MAX_CHANNELS; j++) + while ((nOrder < Order.size()) && (Order[nOrder] == Order.GetIgnoreIndex())) nOrder++; + if ((nOrder >= Order.size()) || (Order[nOrder] >= Patterns.Size())) return; + for (CHANNELINDEX j = 0; j < MAX_CHANNELS; j++) { Chn[j].nPeriod = 0; Chn[j].nNote = NOTE_NONE; @@ -1201,12 +1201,12 @@ } Chn[j].nTremorCount = 0; } - if (!nPos) + if (!nOrder) { SetCurrentPos(0); } else { - m_nNextPattern = nPos; + m_nNextPattern = nOrder; m_nRow = m_nNextRow = 0; m_nPattern = 0; m_nTickCount = m_nMusicSpeed; @@ -1304,8 +1304,8 @@ -void CSoundFile::LoopPattern(int nPat, int nRow) -//---------------------------------------------- +void CSoundFile::LoopPattern(PATTERNINDEX nPat, ROWINDEX nRow) +//------------------------------------------------------------ { if ((nPat < 0) || (nPat >= Patterns.Size()) || (!Patterns[nPat])) { @@ -1324,8 +1324,8 @@ } } //rewbs.playSongFromCursor -void CSoundFile::DontLoopPattern(int nPat, int nRow) -//---------------------------------------------- +void CSoundFile::DontLoopPattern(PATTERNINDEX nPat, ROWINDEX nRow) +//---------------------------------------------------------------- { if ((nPat < 0) || (nPat >= Patterns.Size()) || (!Patterns[nPat])) nPat = 0; if ((nRow < 0) || (nRow >= (int)PatternSize[nPat])) nRow = 0; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2009-10-16 19:53:27 UTC (rev 400) +++ trunk/OpenMPT/soundlib/Sndfile.h 2009-10-18 16:54:18 UTC (rev 401) @@ -306,8 +306,8 @@ virtual bool IsResumed()=0; virtual void Resume()=0; virtual void Suspend()=0; - virtual BOOL isInstrument()=0; - virtual BOOL CanRecieveMidiEvents()=0; + virtual bool isInstrument()=0; + virtual bool CanRecieveMidiEvents()=0; virtual void SetDryRatio(UINT param)=0; }; @@ -643,9 +643,9 @@ double GetCurrentBPM() const; ORDERINDEX FindOrder(PATTERNINDEX nPat, UINT startFromOrder=0, bool direction = true); //rewbs.playSongFromCursor - void DontLoopPattern(int nPat, int nRow=0); //rewbs.playSongFromCursor + void DontLoopPattern(PATTERNINDEX nPat, ROWINDEX nRow = 0); //rewbs.playSongFromCursor void SetCurrentPos(UINT nPos); - void SetCurrentOrder(UINT nOrder); + void SetCurrentOrder(ORDERINDEX nOrder); void GetTitle(LPSTR s) const { lstrcpyn(s,m_szNames[0],32); } LPCSTR GetTitle() const { return m_szNames[0]; } CString GetSampleName(UINT nSample) const; @@ -667,7 +667,7 @@ void SetRepeatCount(int n) { m_nRepeatCount = n; } int GetRepeatCount() const { return m_nRepeatCount; } BOOL IsPaused() const { return (m_dwSongFlags & SONG_PAUSED) ? TRUE : FALSE; } - void LoopPattern(int nPat, int nRow=0); + void LoopPattern(PATTERNINDEX nPat, ROWINDEX nRow = 0); void CheckCPUUsage(UINT nCPU); BOOL SetPatternName(UINT nPat, LPCSTR lpszName); BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |