From: <rel...@us...> - 2008-08-07 19:27:36
|
Revision: 217 http://modplug.svn.sourceforge.net/modplug/?rev=217&view=rev Author: relabsoluness Date: 2008-08-07 19:27:32 +0000 (Thu, 07 Aug 2008) Log Message: ----------- + Added letter 'b' to drawable letters in pattern view. / Tweaking of custom note printing in pattern view (still far from good). . nSpaceX/Y location in patternfont struct did not point to white location. / #-character used as X parameter indicator is redrawn to be the same as the sharp symbol in notenames. ? Small readability changes to mpt_midi.cpp Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/Mpt_midi.cpp trunk/OpenMPT/mptrack/res/view_pat.bmp Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-07-25 20:20:15 UTC (rev 216) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-08-07 19:27:32 UTC (rev 217) @@ -55,7 +55,7 @@ { 92,13, // Column Width & Height 0,0, // Clear location - 32,207, // Space Location + 130,8, // Space Location. {20, 20, 24, 9, 15}, // Element Widths 20,13, // Numbers 0-F (hex) 30,13, // Numbers 10-19 (dec) @@ -78,7 +78,7 @@ { 70,11, // Column Width & Height 92,0, // Clear location - 32,207, // Space Location + 130,8, // Space Location. {16, 14, 18, 7, 11}, // Element Widths 108,13, // Numbers 0-F (hex) 120,13, // Numbers 10-19 (dec) @@ -294,13 +294,18 @@ break; //end rewbs.velocity case ' ': - srcx = pfnt->nClrX; - srcy = pfnt->nClrY; + srcx = pfnt->nSpaceX; + srcy = pfnt->nSpaceY; break; case '-': - srcx = pfnt->nNoteX + pfnt->nNoteWidth/2; - srcy = pfnt->nNoteY + COLUMN_HEIGHT; + srcx = pfnt->nAlphaAM_X; + srcy = pfnt->nAlphaAM_Y + 15 * COLUMN_HEIGHT; break; + case 'b': + srcx = pfnt->nAlphaAM_X; + srcy = pfnt->nAlphaAM_Y + 14 * COLUMN_HEIGHT; + break; + } m_Dib.TextBlt(x, y, sizex, COLUMN_HEIGHT, srcx+ofsx, srcy); } @@ -326,12 +331,24 @@ } else { if(pTuning) - { + { // Drawing custom note names string noteStr = pTuning->GetNoteName(note-NOTE_MIDDLEC); - noteStr.resize(3, ' '); - DrawLetter(x, y, noteStr[0]); - DrawLetter(x + pfnt->nNoteWidth/2, y, noteStr[1]); - DrawLetter(x + pfnt->nNoteWidth, y, noteStr[2]); + if(noteStr.size() < 3) + noteStr.resize(3, ' '); + + // Hack: Manual tweaking for default/small font displays. + if(pfnt == &gDefaultPatternFont) + { + DrawLetter(x, y, noteStr[0], 7, 0); + DrawLetter(x + 7, y, noteStr[1], 6, 0); + DrawLetter(x + 13, y, noteStr[2], 7, 1); + } + else + { + DrawLetter(x, y, noteStr[0], 5, 0); + DrawLetter(x + 5, y, noteStr[1], 5, 0); + DrawLetter(x + 10, y, noteStr[2], 6, 0); + } } else //Original { Modified: trunk/OpenMPT/mptrack/Mpt_midi.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpt_midi.cpp 2008-07-25 20:20:15 UTC (rev 216) +++ trunk/OpenMPT/mptrack/Mpt_midi.cpp 2008-08-07 19:27:32 UTC (rev 217) @@ -40,18 +40,18 @@ void ApplyTransposeKeyboardSetting(CMainFrame& rMainFrm, DWORD& dwParam1) //------------------------------------------------------------------------ { - if ((CMainFrame::m_dwMidiSetup & MIDISETUP_TRANSPOSEKEYBOARD) - && ((dwParam1 & 0x0F) != 9)) + if ( (CMainFrame::m_dwMidiSetup & MIDISETUP_TRANSPOSEKEYBOARD) + && (GetFromMIDIMsg_Channel(dwParam1) != 9) ) { int nTranspose = rMainFrm.GetBaseOctave() - 4; if (nTranspose) { - int note = (dwParam1 >> 8) & 0xFF; + int note = GetFromMIDIMsg_DataByte1(dwParam1); if (note < 0x80) { note += nTranspose*12; if (note < 0) note = 0; - if (note > 119) note = 119; + if (note > NOTE_MAX - 1) note = NOTE_MAX - 1; // -> CODE#0011 // -> DESC="bug fix about transpose midi keyboard option" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-10-13 15:53:25
|
Revision: 229 http://modplug.svn.sourceforge.net/modplug/?rev=229&view=rev Author: relabsoluness Date: 2008-10-13 15:53:01 +0000 (Mon, 13 Oct 2008) Log Message: ----------- (Patch from Jojo) . Disabled special handling of '&'-character when drawing texts to various components where the special handling should not take place. (http://lpchip.com/modplug/viewtopic.php?t=1962) Modified Paths: -------------- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/Mptrack.cpp Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2008-10-13 15:19:08 UTC (rev 228) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2008-10-13 15:53:01 UTC (rev 229) @@ -596,7 +596,7 @@ HGDIOBJ oldfont = ::SelectObject(hdc, CMainFrame::GetGUIFont()); ::SetTextColor(hdc, GetSysColor(bEnable || !bActivate ? COLOR_BTNTEXT : COLOR_GRAYTEXT)); - ::DrawText(hdc, lpszText, -1, &rect, dwFlags | DT_SINGLELINE); + ::DrawText(hdc, lpszText, -1, &rect, dwFlags | DT_SINGLELINE | DT_NOPREFIX); ::SelectObject(hdc, oldfont); } } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-10-13 15:19:08 UTC (rev 228) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-10-13 15:53:01 UTC (rev 229) @@ -1951,7 +1951,7 @@ ::SetTextColor(hdc, GetSysColor((bDisabled) ? COLOR_GRAYTEXT : COLOR_BTNTEXT)); ::SetBkMode(hdc, TRANSPARENT); HGDIOBJ oldfont = ::SelectObject(hdc, CMainFrame::GetGUIFont()); - ::DrawText(hdc, lpszText, -1, &rect, dwFlags | DT_SINGLELINE); + ::DrawText(hdc, lpszText, -1, &rect, dwFlags | DT_SINGLELINE | DT_NOPREFIX); ::SelectObject(hdc, oldfont); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-10-18 12:35:59
|
Revision: 231 http://modplug.svn.sourceforge.net/modplug/?rev=231&view=rev Author: relabsoluness Date: 2008-10-18 12:35:46 +0000 (Sat, 18 Oct 2008) Log Message: ----------- Patches from Jojo (with small modifications) . File name in treeview wasn't updated when saving with new file name (bug 1731) . BPM approximation showed wrong rows per beat in some cases (bug 2532) . Playing sample selection didn't work properly in all cases (bug 1700). . Setting loop points could affect playing of sample even if loop was disabled (bug 1874) / Play sample button now stops previous note even if mod is playing (bug 1366) / Sustain loop will now be enabled when setting it to sample selection. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_smp.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-13 17:28:21 UTC (rev 230) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-18 12:35:46 UTC (rev 231) @@ -996,7 +996,9 @@ { if ((m_pModDoc) && (m_pSndFile)) { - if ((m_pSndFile->IsPaused()) && (m_pModDoc->IsNotePlaying(0, m_nSample, 0))) + // Fix (bug report 1366). + // if ((m_pSndFile->IsPaused()) && (m_pModDoc->IsNotePlaying(0, m_nSample, 0))) + if (m_pModDoc->IsNotePlaying(0, m_nSample, 0)) { m_pModDoc->NoteOff(0, TRUE); } else @@ -2488,7 +2490,12 @@ if ((n >= 0) && (n < (LONG)pins->nLength) && ((n < (LONG)pins->nLoopEnd) || (!(pins->uFlags & CHN_LOOP)))) { pins->nLoopStart = n; - m_pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + m_pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); @@ -2505,7 +2512,12 @@ if ((n >= 0) && (n <= (LONG)pins->nLength) && ((n > (LONG)pins->nLoopStart) || (!(pins->uFlags & CHN_LOOP)))) { pins->nLoopEnd = n; - m_pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + m_pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2008-10-13 17:28:21 UTC (rev 230) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2008-10-18 12:35:46 UTC (rev 231) @@ -580,6 +580,7 @@ SetModified(FALSE); m_bHasValidPath=true; m_ShowSavedialog = false; + UpdateAllViews(NULL, HINT_MODGENERAL); // Update treeview (e.g. filename might have changed). return TRUE; } else { @@ -831,12 +832,15 @@ if (nVol >= 0) pChn->nVolume = nVol; // handle sample looping. - if ((loopstart + 16 < loopend) && (loopstart >= 0) && (loopend <= (LONG)pChn->nLength)) { + // Fix: Bug report 1700. + //if ((loopstart + 16 < loopend) && (loopstart >= 0) && (loopend <= (LONG)pChn->nLength)) { + if ((loopstart + 16 < loopend) && (loopstart >= 0) && (pChn->pInstrument != 0)) + { pChn->nPos = loopstart; pChn->nPosLo = 0; pChn->nLoopStart = loopstart; pChn->nLoopEnd = loopend; - pChn->nLength = loopend; + pChn->nLength = min(UINT(loopend), pChn->pInstrument->nLength); } // handle extra-loud flag @@ -1960,7 +1964,7 @@ switch(m_SndFile.m_nTempoMode) { case tempo_mode_alternative: Message.Format("Using alternative tempo interpretation.\n\nAssuming:\n. %d ticks per second\n. %d ticks per row\n. %d rows per beat\nthe tempo is approximately: %.20g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, CMainFrame::m_nRowSpacing2, bpm); + m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nRowsPerBeat, bpm); break; case tempo_mode_modern: @@ -1970,7 +1974,7 @@ case tempo_mode_classic: default: Message.Format("Using standard tempo interpretation.\n\nAssuming:\n. A mod tempo (tick duration factor) of %d\n. %d ticks per row\n. %d rows per beat\nthe tempo is approximately: %.20g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, CMainFrame::m_nRowSpacing2, bpm); + m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nRowsPerBeat, bpm); break; } /* Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2008-10-13 17:28:21 UTC (rev 230) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2008-10-18 12:35:46 UTC (rev 231) @@ -1503,6 +1503,7 @@ { pins->nSustainStart = m_dwBeginSel; pins->nSustainEnd = m_dwEndSel; + pins->uFlags |= CHN_SUSTAINLOOP; pModDoc->SetModified(); pModDoc->AdjustEndOfSample(m_nSample); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] @@ -1914,9 +1915,9 @@ CModDoc *pModDoc = GetDocument(); if ((pModDoc) && (pMainFrm)) { - if (note >= 0xFE) + if (note >= NOTE_NOTECUT) { - pModDoc->NoteOff(0, (note == 0xFE) ? TRUE : FALSE); + pModDoc->NoteOff(0, (note == NOTE_NOTECUT) ? TRUE : FALSE); } else { @@ -1926,7 +1927,9 @@ else pModDoc->NoteOff(0, TRUE); DWORD loopstart = m_dwBeginSel, loopend = m_dwEndSel; - if (loopend - loopstart < (UINT)(4 << m_nZoom)) loopend = loopstart = 0; + if (loopend - loopstart < (UINT)(4 << m_nZoom)) + loopend = loopstart = 0; // selection is too small -> no loop + pModDoc->PlayNote(note, 0, m_nSample, FALSE, -1, loopstart, loopend); m_dwStatus |= SMPSTATUS_KEYDOWN; s[0] = 0; @@ -2148,7 +2151,12 @@ { pins->nLoopStart = m_dwMenuParam; pModDoc->SetModified(); - pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA, NULL); } @@ -2168,7 +2176,12 @@ { pins->nLoopEnd = m_dwMenuParam; pModDoc->SetModified(); - pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA, NULL); } @@ -2337,8 +2350,8 @@ case kcSampleNormalize: PostCtrlMessage(IDC_SAMPLE_NORMALIZE); return wParam; case kcSampleAmplify: PostCtrlMessage(IDC_SAMPLE_AMPLIFY); return wParam; - case kcNoteOff: PlayNote(255); return wParam; - case kcNoteCut: PlayNote(254); return wParam; + case kcNoteOff: PlayNote(NOTE_KEYOFF); return wParam; + case kcNoteCut: PlayNote(NOTE_NOTECUT); return wParam; } if (wParam>=kcSampStartNotes && wParam<=kcSampEndNotes) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-10-25 19:07:02
|
Revision: 234 http://modplug.svn.sourceforge.net/modplug/?rev=234&view=rev Author: relabsoluness Date: 2008-10-25 19:06:55 +0000 (Sat, 25 Oct 2008) Log Message: ----------- + Sample amplify now accepts negative values(inverts sample phase) (request 2219) . Fixed a typo in Setup->Colors Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-24 18:33:16 UTC (rev 233) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-25 19:06:55 UTC (rev 234) @@ -1078,7 +1078,7 @@ void CCtrlSamples::OnAmplify() //---------------------------- { - static UINT snOldAmp = 100; + static int16 snOldAmp = 100; SAMPLEVIEWSTATE viewstate; DWORD dwStart, dwEnd; MODINSTRUMENT *pins; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2008-10-24 18:33:16 UTC (rev 233) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2008-10-25 19:06:55 UTC (rev 234) @@ -2595,7 +2595,7 @@ //----------------------------------- { static UINT snOldAmp = 100; - CAmpDlg dlg(this, snOldAmp); + CAmpDlg dlg(this, snOldAmp, 0); CModDoc *pModDoc = GetDocument(); BYTE chvol[MAX_BASECHANNELS]; @@ -2604,7 +2604,7 @@ CSoundFile *pSndFile = pModDoc->GetSoundFile(); BeginWaitCursor(); PrepareUndo(m_dwBeginSel, m_dwEndSel); - snOldAmp = dlg.m_nFactor; + snOldAmp = static_cast<UINT>(dlg.m_nFactor); memset(chvol, 64, sizeof(chvol)); if (pSndFile->Patterns[m_nPattern]) { Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2008-10-24 18:33:16 UTC (rev 233) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2008-10-25 19:06:55 UTC (rev 234) @@ -11,7 +11,7 @@ #include "midi.h" #include "version.h" -#pragma warning(disable:4244) +#pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" @@ -1504,6 +1504,13 @@ /////////////////////////////////////////////////////////////////////////////// // Samples +CAmpDlg::CAmpDlg(CWnd *parent, int16 nFactor, int16 nFactorMin, int16 nFactorMax) +//------------------------------------------------------------------------------- + : CDialog(IDD_SAMPLE_AMPLIFY, parent), m_nFactor(nFactor), + m_nFactorMin(nFactorMin), m_nFactorMax(nFactorMax), + m_bFadeIn(FALSE), m_bFadeOut(FALSE) +{} + BOOL CAmpDlg::OnInitDialog() //-------------------------- { @@ -1511,8 +1518,8 @@ CSpinButtonCtrl *spin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1); if (spin) { - spin->SetRange(10, 800); - spin->SetPos(m_nFactor); + spin->SetRange32(m_nFactorMin, m_nFactorMax); + spin->SetPos32(m_nFactor); } SetDlgItemInt(IDC_EDIT1, m_nFactor); return TRUE; @@ -1522,9 +1529,16 @@ void CAmpDlg::OnOK() //------------------ { - m_nFactor = GetDlgItemInt(IDC_EDIT1); - m_bFadeIn = IsDlgButtonChecked(IDC_CHECK1); - m_bFadeOut = IsDlgButtonChecked(IDC_CHECK2); + const int nVal = static_cast<int>(GetDlgItemInt(IDC_EDIT1)); + if(nVal < m_nFactorMin || nVal > m_nFactorMax) + { + CString str; str.Format(GetStrI18N(__TEXT("Value should be within [%d, %d]")), m_nFactorMin, m_nFactorMax); + AfxMessageBox(str, MB_ICONINFORMATION); + return; + } + m_nFactor = static_cast<int16>(nVal); + m_bFadeIn = (IsDlgButtonChecked(IDC_CHECK1) != 0); + m_bFadeOut = (IsDlgButtonChecked(IDC_CHECK2) != 0); CDialog::OnOK(); } Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2008-10-24 18:33:16 UTC (rev 233) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2008-10-25 19:06:55 UTC (rev 234) @@ -316,11 +316,11 @@ //=========================== { public: - UINT m_nFactor; - BOOL m_bFadeIn, m_bFadeOut; + int16 m_nFactor, m_nFactorMin, m_nFactorMax; + bool m_bFadeIn, m_bFadeOut; public: - CAmpDlg(CWnd *parent, UINT nFactor=100):CDialog(IDD_SAMPLE_AMPLIFY, parent) { m_nFactor = nFactor; m_bFadeIn = m_bFadeOut = FALSE; } + CAmpDlg(CWnd *parent, int16 nFactor=100, int16 nFactorMin = int16_min, int16 nFactorMax = int16_max); virtual BOOL OnInitDialog(); virtual void OnOK(); }; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-10-24 18:33:16 UTC (rev 233) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-10-25 19:06:55 UTC (rev 234) @@ -454,7 +454,7 @@ LTEXT "rows",IDC_STATIC,124,88,16,8 CONTROL "",IDC_BUTTON4,"Button",BS_OWNERDRAW | BS_FLAT,54,113, 114,43 - CONTROL "Set highlights to songs' time sigatures",IDC_CHECK5, + CONTROL "Set highlights to songs' time signatures",IDC_CHECK5, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,63,136,10 END @@ -1310,7 +1310,7 @@ FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN LTEXT "Amplify by",IDC_STATIC,13,19,37,8 - EDITTEXT IDC_EDIT1,54,16,40,14,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT1,54,16,40,14,ES_AUTOHSCROLL CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,17,11,14 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-11-03 21:56:04
|
Revision: 235 http://modplug.svn.sourceforge.net/modplug/?rev=235&view=rev Author: relabsoluness Date: 2008-11-03 21:30:18 +0000 (Mon, 03 Nov 2008) Log Message: ----------- (Patch from Jojo, merged with some addition and modifications) + Sample tab: Signed/unsigned sample conversion. + Sample tab: Added button for phase invert to toolbar. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Ctrl_smp.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/res/patterns.bmp trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2008-11-03 21:30:18 UTC (rev 235) @@ -2289,6 +2289,16 @@ commands[kcVSTGUINextPresetJump].isDummy = false; commands[kcVSTGUINextPresetJump].Message = "Plugin preset forward jump"; + commands[kcSampleInvert].UID = 1784; + commands[kcSampleInvert].Message = "Invert sample phase"; + commands[kcSampleInvert].isHidden = false; + commands[kcSampleInvert].isDummy = false; + + commands[kcSampleSignUnsign].UID = 1785; + commands[kcSampleSignUnsign].Message = "Signed/Unsigned conversion"; + commands[kcSampleSignUnsign].isHidden = false; + commands[kcSampleSignUnsign].isDummy = false; + #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/CommandSet.h 2008-11-03 21:30:18 UTC (rev 235) @@ -566,7 +566,9 @@ kcSampleDelete, kcSampleZoomUp, kcSampleZoomDown, - kcEndSampleEditing=kcSampleZoomDown, + kcSampleInvert, + kcSampleSignUnsign, + kcEndSampleEditing=kcSampleSignUnsign, //kcSampStartNotes to kcInsNoteMapEndNoteStops must be contiguous. kcSampStartNotes, Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-11-03 21:30:18 UTC (rev 235) @@ -65,6 +65,8 @@ ON_COMMAND(IDC_SAMPLE_DOWNSAMPLE, OnDownsample) ON_COMMAND(IDC_SAMPLE_REVERSE, OnReverse) ON_COMMAND(IDC_SAMPLE_SILENCE, OnSilence) + ON_COMMAND(IDC_SAMPLE_INVERT, OnInvert) + ON_COMMAND(IDC_SAMPLE_SIGN_UNSIGN, OnSignUnSign) ON_COMMAND(IDC_CHECK1, OnSetPanningChanged) ON_COMMAND(ID_PREVINSTRUMENT, OnPrevInstrument) ON_COMMAND(ID_NEXTINSTRUMENT, OnNextInstrument) @@ -209,6 +211,8 @@ m_ToolBar2.AddButton(IDC_SAMPLE_DOWNSAMPLE, 29); m_ToolBar2.AddButton(IDC_SAMPLE_REVERSE, 11); m_ToolBar2.AddButton(IDC_SAMPLE_SILENCE, 22); + m_ToolBar2.AddButton(IDC_SAMPLE_INVERT, 35); + m_ToolBar2.AddButton(IDC_SAMPLE_SIGN_UNSIGN, 36); // Setup Controls m_EditName.SetLimitText(32); m_EditFileName.SetLimitText(22); @@ -457,6 +461,14 @@ OnSilence(); break; + case IDC_SAMPLE_INVERT: + OnInvert(); + break; + + case IDC_SAMPLE_SIGN_UNSIGN: + OnSignUnSign(); + break; + case IDC_SAMPLE_NORMALIZE: OnNormalize(); break; @@ -1075,20 +1087,17 @@ } -void CCtrlSamples::OnAmplify() -//---------------------------- +void CCtrlSamples::ApplyAmplify(LONG lAmp, bool bFadeIn, bool bFadeOut) +//----------------------------------------------------------------------- { - static int16 snOldAmp = 100; SAMPLEVIEWSTATE viewstate; DWORD dwStart, dwEnd; MODINSTRUMENT *pins; - CAmpDlg dlg(this, snOldAmp); memset(&viewstate, 0, sizeof(viewstate)); SendViewMessage(VIEWMSG_SAVESTATE, (LPARAM)&viewstate); if ((!m_pModDoc) || (!m_pSndFile) || (!m_pSndFile->Ins[m_nSample].pSample)) return; - if (dlg.DoModal() != IDOK) return; - snOldAmp = dlg.m_nFactor; + BeginWaitCursor(); pins = &m_pSndFile->Ins[m_nSample]; dwStart = viewstate.dwBeginSel; @@ -1102,8 +1111,7 @@ } if (pins->uFlags & CHN_STEREO) { dwStart *= 2; dwEnd *= 2; } UINT len = dwEnd - dwStart; - LONG lAmp = dlg.m_nFactor; - if ((dlg.m_bFadeIn) && (dlg.m_bFadeOut)) lAmp *= 4; + if ((bFadeIn) && (bFadeOut)) lAmp *= 4; if (pins->uFlags & CHN_16BIT) { signed short *p = ((signed short *)pins->pSample) + dwStart; @@ -1111,8 +1119,8 @@ for (UINT i=0; i<len; i++) { LONG l = (p[i] * lAmp) / 100; - if (dlg.m_bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); - if (dlg.m_bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); + if (bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); + if (bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); if (l < -32768) l = -32768; if (l > 32767) l = 32767; p[i] = (signed short)l; @@ -1124,8 +1132,8 @@ for (UINT i=0; i<len; i++) { LONG l = (p[i] * lAmp) / 100; - if (dlg.m_bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); - if (dlg.m_bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); + if (bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); + if (bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); if (l < -128) l = -128; if (l > 127) l = 127; p[i] = (signed char)l; @@ -1140,6 +1148,17 @@ } +void CCtrlSamples::OnAmplify() +//---------------------------- +{ + static int16 snOldAmp = 100; + CAmpDlg dlg(this, snOldAmp); + if (dlg.DoModal() != IDOK) return; + snOldAmp = dlg.m_nFactor; + ApplyAmplify(dlg.m_nFactor, dlg.m_bFadeIn, dlg.m_bFadeOut); +} + + const int gSinc2x16Odd[16] = { // Kaiser window, beta=7.400 -19, 97, -295, 710, -1494, 2958, -6155, 20582, 20582, -6155, 2958, -1494, 710, -295, 97, -19, @@ -2138,6 +2157,54 @@ } +void CCtrlSamples::OnInvert() +//-------------------------------- +{ + ApplyAmplify(-100); +} + + +void CCtrlSamples::OnSignUnSign() +//------------------------------- +{ + // purpose: sign/unsign a sample ("distortion") + SAMPLEVIEWSTATE viewstate; + DWORD dwStart, dwEnd; + MODINSTRUMENT *pins; + + memset(&viewstate, 0, sizeof(viewstate)); + SendViewMessage(VIEWMSG_SAVESTATE, (LPARAM)&viewstate); + if ((!m_pModDoc) || (!m_pSndFile) || (!m_pSndFile->Ins[m_nSample].pSample)) return; + BeginWaitCursor(); + pins = &m_pSndFile->Ins[m_nSample]; + dwStart = viewstate.dwBeginSel; + dwEnd = viewstate.dwEndSel; + if (dwEnd > pins->nLength) dwEnd = pins->nLength; + if (dwStart > dwEnd) dwStart = dwEnd; + if (dwStart >= dwEnd) + { + dwStart = 0; + dwEnd = pins->nLength; + } + if (pins->uFlags & CHN_STEREO) { dwStart *= 2; dwEnd *= 2; } + UINT len = dwEnd - dwStart; + if (pins->uFlags & CHN_16BIT) + { + signed short *p = ((signed short *)pins->pSample) + dwStart; + for (UINT i=0; i<len; ++i) p[i] += 0x8000; //unsign + } else { + signed char *p = ((signed char *)pins->pSample) + dwStart; + for (UINT i=0; i<len; ++i) p[i] += 0x80; //unsign + } + + m_pModDoc->AdjustEndOfSample(m_nSample); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); + m_pModDoc->SetModified(); + EndWaitCursor(); + SwitchToView(); +} + + void CCtrlSamples::OnSilence() //---------------------------- { Modified: trunk/OpenMPT/mptrack/Ctrl_smp.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.h 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/Ctrl_smp.h 2008-11-03 21:30:18 UTC (rev 235) @@ -34,6 +34,10 @@ void UpdateTimeStretchParameterString(); void ReadTimeStretchParameters(); + // Applies amplification to sample. Negative values + // can be used to invert phase. + void ApplyAmplify(LONG nAmp, bool bFadeIn = false, bool bFadeOut = false); + public: CCtrlSamples(); ~CCtrlSamples(); @@ -72,6 +76,8 @@ afx_msg void OnDownsample(); afx_msg void OnReverse(); afx_msg void OnSilence(); + afx_msg void OnInvert(); + afx_msg void OnSignUnSign(); afx_msg void OnNameChanged(); afx_msg void OnFileNameChanged(); afx_msg void OnVolumeChanged(); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2008-11-03 21:30:18 UTC (rev 235) @@ -2380,10 +2380,12 @@ case kcSampleSave: PostCtrlMessage(IDC_SAMPLE_SAVEAS); return wParam; case kcSampleNew: PostCtrlMessage(IDC_SAMPLE_NEW); return wParam; - case kcSampleReverse: PostCtrlMessage(IDC_SAMPLE_REVERSE); return wParam; - case kcSampleSilence: PostCtrlMessage(IDC_SAMPLE_SILENCE); return wParam; - case kcSampleNormalize: PostCtrlMessage(IDC_SAMPLE_NORMALIZE); return wParam; - case kcSampleAmplify: PostCtrlMessage(IDC_SAMPLE_AMPLIFY); return wParam; + case kcSampleReverse: PostCtrlMessage(IDC_SAMPLE_REVERSE); return wParam; + case kcSampleSilence: PostCtrlMessage(IDC_SAMPLE_SILENCE); return wParam; + case kcSampleNormalize: PostCtrlMessage(IDC_SAMPLE_NORMALIZE); return wParam; + case kcSampleAmplify: PostCtrlMessage(IDC_SAMPLE_AMPLIFY); return wParam; + case kcSampleInvert: PostCtrlMessage(IDC_SAMPLE_INVERT); return wParam; + case kcSampleSignUnsign: PostCtrlMessage(IDC_SAMPLE_SIGN_UNSIGN); return wParam; case kcNoteOff: PlayNote(NOTE_KEYOFF); return wParam; case kcNoteCut: PlayNote(NOTE_NOTECUT); return wParam; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-11-03 21:30:18 UTC (rev 235) @@ -751,7 +751,7 @@ CTEXT "Length: 000000 (16-bit)",IDC_TEXT5,175,6,90,13, SS_CENTERIMAGE,WS_EX_STATICEDGE CONTROL "Toolbar2",IDC_TOOLBAR2,"ToolbarWindow32",WS_GROUP | - 0x4d,268,4,136,17 + 0x4d,268,4,164,17 GROUPBOX "",IDC_STATIC,3,22,94,78 LTEXT "Default Volume",IDC_STATIC,8,32,49,8 LTEXT "Global Volume",IDC_STATIC,8,45,46,8 @@ -2433,6 +2433,8 @@ STRINGTABLE BEGIN IDC_SAMPLE_SILENCE "Silence Sample\nSilence" + IDC_SAMPLE_INVERT "Invert phase\nInvert phase" + IDC_SAMPLE_SIGN_UNSIGN "Signed/Unsigned conversion\nSigned/Unsigned conversion" IDC_INSTRUMENT_NEW "Create a new instrument\nNew instrument (hold shift to duplicate)" IDC_INSTRUMENT_OPEN "Import instrument\nImport instrument" IDC_INSTRUMENT_SAVEAS "Save the current instrument to disk\nSave instrument" Modified: trunk/OpenMPT/mptrack/res/patterns.bmp =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/resource.h 2008-11-03 21:30:18 UTC (rev 235) @@ -587,6 +587,8 @@ #define IDC_CHECK_EQ 2052 #define IDC_CHECK_AGC 2053 #define IDC_SAMPLE_SILENCE 2054 +#define IDC_SAMPLE_INVERT 2055 +#define IDC_SAMPLE_SIGN_UNSIGN 2056 #define IDC_INSTRUMENT_NEW 2060 #define IDC_INSTRUMENT_OPEN 2061 #define IDC_INSTRUMENT_SAVEAS 2062 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-01-03 13:36:08
|
Revision: 240 http://modplug.svn.sourceforge.net/modplug/?rev=240&view=rev Author: relabsoluness Date: 2009-01-03 13:36:02 +0000 (Sat, 03 Jan 2009) Log Message: ----------- + Pattern: MIDI controllers can now be used to input smooth MIDI macro commands to pattern (setup->MIDI). Modified Paths: -------------- trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2008-12-21 13:30:05 UTC (rev 239) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-01-03 13:36:02 UTC (rev 240) @@ -228,6 +228,7 @@ #define MIDISETUP_RECORDNOTEOFF 0x10 #define MIDISETUP_RESPONDTOPLAYCONTROLMSGS 0x20 #define MIDISETUP_AMPLIFYVELOCITY 0x40 +#define MIDISETUP_MIDIMACROCONTROL 0x80 Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-12-21 13:30:05 UTC (rev 239) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2009-01-03 13:36:02 UTC (rev 240) @@ -1090,6 +1090,7 @@ ON_COMMAND(IDC_CHECK3, OnSettingsChanged) ON_COMMAND(IDC_CHECK4, OnSettingsChanged) ON_COMMAND(IDC_MIDI_TO_PLUGIN, OnSettingsChanged) + ON_COMMAND(IDC_MIDI_MACRO_CONTROL, OnSettingsChanged) ON_COMMAND(IDC_MIDIVOL_TO_NOTEVOL, OnSettingsChanged) ON_COMMAND(IDC_MIDIPLAYCONTROL, OnSettingsChanged) END_MESSAGE_MAP() @@ -1119,6 +1120,7 @@ if (m_dwMidiSetup & MIDISETUP_AMPLIFYVELOCITY) CheckDlgButton(IDC_CHECK3, MF_CHECKED); if (m_dwMidiSetup & MIDISETUP_TRANSPOSEKEYBOARD) CheckDlgButton(IDC_CHECK4, MF_CHECKED); if (m_dwMidiSetup & MIDISETUP_MIDITOPLUG) CheckDlgButton(IDC_MIDI_TO_PLUGIN, MF_CHECKED); + if (m_dwMidiSetup & MIDISETUP_MIDIMACROCONTROL) CheckDlgButton(IDC_MIDI_MACRO_CONTROL, MF_CHECKED); if (m_dwMidiSetup & MIDISETUP_MIDIVOL_TO_NOTEVOL) CheckDlgButton(IDC_MIDIVOL_TO_NOTEVOL, MF_CHECKED); if (m_dwMidiSetup & MIDISETUP_RESPONDTOPLAYCONTROLMSGS) CheckDlgButton(IDC_MIDIPLAYCONTROL, MF_CHECKED); // Midi In Device @@ -1154,6 +1156,7 @@ if (IsDlgButtonChecked(IDC_CHECK3)) m_dwMidiSetup |= MIDISETUP_AMPLIFYVELOCITY; if (IsDlgButtonChecked(IDC_CHECK4)) m_dwMidiSetup |= MIDISETUP_TRANSPOSEKEYBOARD; if (IsDlgButtonChecked(IDC_MIDI_TO_PLUGIN)) m_dwMidiSetup |= MIDISETUP_MIDITOPLUG; + if (IsDlgButtonChecked(IDC_MIDI_MACRO_CONTROL)) m_dwMidiSetup |= MIDISETUP_MIDIMACROCONTROL; if (IsDlgButtonChecked(IDC_MIDIVOL_TO_NOTEVOL)) m_dwMidiSetup |= MIDISETUP_MIDIVOL_TO_NOTEVOL; if (IsDlgButtonChecked(IDC_MIDIPLAYCONTROL)) m_dwMidiSetup |= MIDISETUP_RESPONDTOPLAYCONTROLMSGS; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2008-12-21 13:30:05 UTC (rev 239) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-01-03 13:36:02 UTC (rev 240) @@ -2953,6 +2953,21 @@ break; } + // Checking whether to record MIDI controller change as MIDI macro change. + if((CMainFrame::m_dwMidiSetup & MIDISETUP_MIDIMACROCONTROL) && IsEditingEnabled()) + { + CModDoc* const pModdoc = GetDocument(); + if(pModDoc != 0) + { + MODCOMMAND *p = pModdoc->GetSoundFile()->Patterns[m_nPattern].GetpModCommand(m_nRow, GetChanFromCursor(m_dwCursor)); + if(p->command == 0 || p->command == CMD_SMOOTHMIDI) + { // Write command only if there's no existing command or already a smooth midi macro command. + p->command = CMD_SMOOTHMIDI; + p->param = nByte2; + } + } + } + default: if(CMainFrame::m_dwMidiSetup & MIDISETUP_RESPONDTOPLAYCONTROLMSGS) { @@ -3574,7 +3589,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (pMainFrm)) + if ((pModDoc) && (pMainFrm) && (IsEditingEnabled_bmsg())) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); @@ -3602,8 +3617,8 @@ p->command = (p->param <= maxspd) ? CMD_SPEED : CMD_TEMPO; } - if (IsEditingEnabled_bmsg()) - { + //if (IsEditingEnabled_bmsg()) + //{ DWORD sel = (m_nRow << 16) | m_dwCursor; SetCurSel(sel, sel); sel &= ~7; @@ -3613,8 +3628,8 @@ InvalidateArea(sel, sel+5); UpdateIndicator(); } - } - } // end if mainframe & moddoc exist + //} + } // end if mainframe & moddoc exist & editing enabled } @@ -3624,7 +3639,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (pMainFrm)) + if ((pModDoc) && (pMainFrm) && (IsEditingEnabled_bmsg())) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); MODCOMMAND oldcmd; // This is the command we are about to overwrite @@ -3660,8 +3675,8 @@ p->command = (p->param <= maxspd) ? CMD_SPEED : CMD_TEMPO; } - if (IsEditingEnabled()) - { + //if (IsEditingEnabled()) + //{ DWORD sel = (m_nRow << 16) | m_dwCursor; SetCurSel(sel, sel); sel &= ~7; @@ -3671,7 +3686,7 @@ InvalidateArea(sel, sel+5); UpdateIndicator(); } - } + //} } } void CViewPattern::TempStopNote(int note, bool fromMidi) Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-12-21 13:30:05 UTC (rev 239) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-01-03 13:36:02 UTC (rev 240) @@ -458,12 +458,12 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,63,136,10 END -IDD_MIDISETUP DIALOGEX 0, 0, 240, 180 +IDD_MIDISETUP DIALOGEX 0, 0, 240, 191 STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Midi" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "",IDC_STATIC,5,3,235,174 + GROUPBOX "",IDC_STATIC,5,14,235,174 LTEXT "Midi Input Device:",IDC_STATIC,13,14,67,8 COMBOBOX IDC_COMBO1,13,24,144,74,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -472,13 +472,13 @@ COMBOBOX IDC_COMBO2,13,54,144,73,CBS_DROPDOWNLIST | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP CONTROL "Transpose external midi keyboard",IDC_CHECK4,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,11,81,126,10 + BS_AUTOCHECKBOX | WS_TABSTOP,11,82,126,9 CONTROL "Amplify Midi Velocity",IDC_CHECK3,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,11,94,113,10 + BS_AUTOCHECKBOX | WS_TABSTOP,11,93,113,9 CONTROL "Record note velocity",IDC_CHECK1,"Button", - BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,11,108,132,10 + BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,11,104,132,9 CONTROL "Record Note Off (Instruments Only)",IDC_CHECK2,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,11,134,130,10 + BS_AUTOCHECKBOX | WS_TABSTOP,11,126,130,9 GROUPBOX "File import",IDC_STATIC,176,14,53,74 LTEXT "Speed:",IDC_STATIC,183,26,24,8 EDITTEXT IDC_EDIT1,183,37,39,12,ES_AUTOHSCROLL | ES_NUMBER @@ -492,13 +492,16 @@ 11,14 CONTROL "Pass MIDI to active instrument plugin (experimental)", IDC_MIDI_TO_PLUGIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 11,148,222,8 + 11,148,222,9 CONTROL "Combine midi volume to note velocity", IDC_MIDIVOL_TO_NOTEVOL,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,11,121,139,10 + WS_TABSTOP,11,115,139,9 CONTROL "Respond to play/continue/stop song messages (untested)", IDC_MIDIPLAYCONTROL,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,11,161,202,9 + WS_TABSTOP,11,172,202,9 + CONTROL "Record MIDI controller changes as MIDI macro changes (in pattern)", + IDC_MIDI_MACRO_CONTROL,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,11,160,226,9 END IDD_LOADRAWSAMPLE DIALOG 0, 0, 168, 84 @@ -1990,7 +1993,7 @@ IDD_MIDISETUP, DIALOG BEGIN - BOTTOMMARGIN, 177 + BOTTOMMARGIN, 188 END IDD_CONTROL_COMMENTS, DIALOG Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2008-12-21 13:30:05 UTC (rev 239) +++ trunk/OpenMPT/mptrack/resource.h 2009-01-03 13:36:02 UTC (rev 240) @@ -823,6 +823,7 @@ #define IDC_EQ_WARNING 2333 #define IDC_TEXT_STRETCHPARAMS 2337 #define IDC_EDIT_STRETCHPARAMS 2338 +#define IDC_MIDI_MACRO_CONTROL 2339 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1054,7 +1055,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 516 #define _APS_NEXT_COMMAND_VALUE 59212 -#define _APS_NEXT_CONTROL_VALUE 2339 +#define _APS_NEXT_CONTROL_VALUE 2340 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-01-10 11:10:56
|
Revision: 244 http://modplug.svn.sourceforge.net/modplug/?rev=244&view=rev Author: relabsoluness Date: 2009-01-10 11:10:49 +0000 (Sat, 10 Jan 2009) Log Message: ----------- / Pattern: The keyboard split 'feature' when entering chords is removed (bug 2790). . Pattern: Undo should now work with chords. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/pattern.h Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-01-10 07:52:25 UTC (rev 243) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-01-10 11:10:49 UTC (rev 244) @@ -4096,20 +4096,19 @@ if ((pModDoc) && (pMainFrm)) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODCOMMAND *p = pSndFile->Patterns[m_nPattern], *prowbase; - MODCOMMAND oldcmd; // This is the command we are about to overwrite - UINT nChn = (m_dwCursor & 0xFFFF) >> 3; + const CHANNELINDEX nChn = GetChanFromCursor(m_dwCursor); UINT nPlayIns = 0; - PrepareUndo(m_dwBeginSel, m_dwEndSel); - bool isSplit; + // Simply backup the whole row. + pModDoc->PrepareUndo(m_nPattern, nChn, m_nRow, pSndFile->GetNumChannels(), 1); - // -- Work out where to put the new note - prowbase = p + m_nRow * pSndFile->m_nChannels; - p = prowbase + nChn; - oldcmd = *p; + PatternRow prowbase = pSndFile->Patterns[m_nPattern].GetRow(m_nRow); + MODCOMMAND* p = &prowbase[nChn]; + const MODCOMMAND oldcmd = *p; // This is the command we are about to overwrite + // -- establish note data - isSplit = HandleSplit(p, note); + //const bool isSplit = HandleSplit(p, note); + HandleSplit(p, note); PMPTCHORD pChords = pMainFrm->GetChords(); UINT baseoctave = pMainFrm->GetBaseOctave(); @@ -4117,11 +4116,12 @@ UINT nNote; if (nchord < 3*12) { - UINT nchordnote; - if (isSplit) - nchordnote = pChords[nchord].key + baseoctave*(p->note%12) + 1; - else - nchordnote = pChords[nchord].key + baseoctave*12 + 1; + UINT nchordnote = pChords[nchord].key + baseoctave*12 + 1; + // Rev. 244, commented the isSplit conditions below, can't see the point in it. + //if (isSplit) + // nchordnote = pChords[nchord].key + baseoctave*(p->note%12) + 1; + //else + // nchordnote = pChords[nchord].key + baseoctave*12 + 1; if (nchordnote <= NOTE_MAX) { UINT nchordch = nChn, nchno = 0; @@ -4174,8 +4174,7 @@ InvalidateRow(); UpdateIndicator(); } - if (((pMainFrm->GetFollowSong(pModDoc) != m_hWnd) || (pSndFile->IsPaused()) - || (!(m_dwStatus & PATSTATUS_FOLLOWSONG)))) + if ( IsLiveRecord(*pMainFrm, *pModDoc, *pSndFile) == false ) { if ((m_nSpacing > 0) && (m_nSpacing <= MAX_SPACING)) SetCurrentRow(m_nRow+m_nSpacing); Modified: trunk/OpenMPT/mptrack/pattern.h =================================================================== --- trunk/OpenMPT/mptrack/pattern.h 2009-01-10 07:52:25 UTC (rev 243) +++ trunk/OpenMPT/mptrack/pattern.h 2009-01-10 11:10:49 UTC (rev 244) @@ -8,7 +8,9 @@ class CPatternContainer; +typedef MODCOMMAND* PatternRow; + //============ class CPattern //============ @@ -39,6 +41,10 @@ // Return true if modcommand can be accessed from given row, false otherwise. bool IsValidRow(const ROWINDEX iRow) const {return (iRow < GetNumRows());} + // Return PatternRow object which has operator[] defined so that MODCOMMAND + // at (iRow, iChn) can be accessed with GetRow(iRow)[iChn]. + PatternRow GetRow(const ROWINDEX iRow) {return GetpModCommand(iRow, 0);} + CHANNELINDEX GetNumChannels() const; bool Resize(const ROWINDEX newRowCount, const bool showDataLossWarning = true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-02-14 16:22:12
|
Revision: 249 http://modplug.svn.sourceforge.net/modplug/?rev=249&view=rev Author: relabsoluness Date: 2009-02-14 16:22:07 +0000 (Sat, 14 Feb 2009) Log Message: ----------- (Patch from Jojo, merged somewhat modified) + Can now optionally normalize all samples instead of just one (click normalize with shift down) Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-01-29 20:46:51 UTC (rev 248) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-02-14 16:22:07 UTC (rev 249) @@ -1032,63 +1032,88 @@ void CCtrlSamples::OnNormalize() //------------------------------ { + if(!m_pModDoc || !m_pSndFile) + return; + + //Default case: Normalize current sample + UINT iMinSample = m_nSample, iMaxSample = m_nSample; + + //Shift -> Normalize all samples + if(CMainFrame::GetInputHandler()->ShiftPressed()) + { + int ans = MessageBox(GetStrI18N(TEXT("This will normalize all samples independently. Continue?")), GetStrI18N(TEXT("Normalize")), MB_YESNO | MB_ICONQUESTION); + if(ans == IDNO) return; + iMinSample = 1; + iMaxSample = m_pSndFile->m_nSamples; + } + + BeginWaitCursor(); - if ((m_pModDoc) && (m_pSndFile) && (m_pSndFile->Ins[m_nSample].pSample)) + BOOL bModified = FALSE; + + for(UINT iSmp = iMinSample; iSmp <= iMaxSample; iSmp++) { - BOOL bOk = FALSE; - MODINSTRUMENT *pins = &m_pSndFile->Ins[m_nSample]; - - if (pins->uFlags & CHN_16BIT) + if (m_pSndFile->Ins[iSmp].pSample) { - UINT len = pins->nLength; - signed short *p = (signed short *)pins->pSample; - if (pins->uFlags & CHN_STEREO) len *= 2; - int max = 1; - for (UINT i=0; i<len; i++) + BOOL bOk = FALSE; + MODINSTRUMENT *pins = &m_pSndFile->Ins[iSmp]; + + if (pins->uFlags & CHN_16BIT) { - if (p[i] > max) max = p[i]; - if (-p[i] > max) max = -p[i]; - } - if (max < 32767) + UINT len = pins->nLength; + signed short *p = (signed short *)pins->pSample; + if (pins->uFlags & CHN_STEREO) len *= 2; + int max = 1; + for (UINT i=0; i<len; i++) + { + if (p[i] > max) max = p[i]; + if (-p[i] > max) max = -p[i]; + } + if (max < 32767) + { + max++; + for (UINT j=0; j<len; j++) + { + int l = p[j]; + p[j] = (l << 15) / max; + } + bModified = bOk = TRUE; + } + } else { - max++; - for (UINT j=0; j<len; j++) + UINT len = pins->nLength; + signed char *p = (signed char *)pins->pSample; + if (pins->uFlags & CHN_STEREO) len *= 2; + int max = 1; + for (UINT i=0; i<len; i++) { - int l = p[j]; - p[j] = (l << 15) / max; + if (p[i] > max) max = p[i]; + if (-p[i] > max) max = -p[i]; } - bOk = TRUE; + if (max < 127) + { + max++; + for (UINT j=0; j<len; j++) + { + int l = p[j]; + p[j] = (l << 7) / max; + } + bModified = bOk = TRUE; + } } - } else - { - UINT len = pins->nLength; - signed char *p = (signed char *)pins->pSample; - if (pins->uFlags & CHN_STEREO) len *= 2; - int max = 1; - for (UINT i=0; i<len; i++) + + if (bOk) { - if (p[i] > max) max = p[i]; - if (-p[i] > max) max = -p[i]; + m_pModDoc->AdjustEndOfSample(iSmp); + m_pModDoc->UpdateAllViews(NULL, (iSmp << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); } - if (max < 127) - { - max++; - for (UINT j=0; j<len; j++) - { - int l = p[j]; - p[j] = (l << 7) / max; - } - bOk = TRUE; - } } - if (bOk) - { - m_pModDoc->AdjustEndOfSample(m_nSample); - // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); - m_pModDoc->SetModified(); - } } + + if(bModified) + { + m_pModDoc->SetModified(); + } EndWaitCursor(); SwitchToView(); } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-01-29 20:46:51 UTC (rev 248) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-02-14 16:22:07 UTC (rev 249) @@ -2421,7 +2421,7 @@ IDC_SAMPLE_NEW "Create a new sample\nNew Sample" IDC_SAMPLE_OPEN "Load sample from disk\nImport sample" IDC_SAMPLE_SAVEAS "Save the current sample to disk\nSave sample" - IDC_SAMPLE_NORMALIZE "Normalize the current sample (full scale)\nNormalize" + IDC_SAMPLE_NORMALIZE "Normalize the current sample (full scale)\nNormalize (hold shift to normalize all samples)" IDC_SAMPLE_AMPLIFY "Amplify selection\nAmplify" IDC_SAMPLE_UPSAMPLE "Stretch selection\nUpsample" IDC_SAMPLE_REVERSE "Reverse selection\nReverse" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-04-04 19:09:52
|
Revision: 253 http://modplug.svn.sourceforge.net/modplug/?rev=253&view=rev Author: relabsoluness Date: 2009-04-04 19:09:48 +0000 (Sat, 04 Apr 2009) Log Message: ----------- / Small tweaks(ctrl_smp, setup dialog). Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-03-30 22:41:07 UTC (rev 252) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-04-04 19:09:48 UTC (rev 253) @@ -1665,7 +1665,7 @@ default: wsprintf(str,"Unknown Error..."); break; } - ::MessageBox(NULL,str,"Error",MB_ICONERROR); + AfxMessageBox(str, MB_ICONERROR); } // Update sample view @@ -1759,12 +1759,26 @@ MODINSTRUMENT *pins = &m_pSndFile->Ins[m_nSample]; if(!pins) return -1; + const uint32 nSampleRate = pins->GetSampleRate(m_pSndFile->GetType()); + + // SoundTouch(v1.4.0) documentation says that sample rates 8000-48000 are supported. + // Check whether sample rate is within that range, and if not, + // ask user whether to proceed. + if(nSampleRate < 8000 || nSampleRate > 48000) + { + CString str; + str.Format(TEXT(GetStrI18N("Current samplerate, %u Hz, is not in the supported samplerate range 8000 Hz - 48000 Hz. Continue?")), nSampleRate); + if(AfxMessageBox(str, MB_ICONQUESTION|MB_YESNO) != IDYES) + return -1; + + } + // Stretching is implemented only for 16-bit samples. Return with // error if trying to use wtih non 16-bit samples. if(pins->GetElementarySampleSize() != 2) return 4; - // SoundTouch seems to crash with short samples. Don't know what + // SoundTouch(1.3.1) seems to crash with short samples. Don't know what // the actual limit or whether it depends on sample rate, // but simply set some semiarbitrary threshold here. if(pins->nLength < 256) @@ -1832,7 +1846,6 @@ // Initialize soundtouch object. { - const uint32 nSampleRate = pins->GetSampleRate(m_pSndFile->GetType()); if(nSampleRate < 300) // Too low samplerate crashes soundtouch. { // Limiting it to value 300(quite arbitrarily chosen). delete pSoundTouch; @@ -2209,6 +2222,9 @@ memset(&viewstate, 0, sizeof(viewstate)); SendViewMessage(VIEWMSG_SAVESTATE, (LPARAM)&viewstate); if ((!m_pModDoc) || (!m_pSndFile) || (!m_pSndFile->Ins[m_nSample].pSample)) return; + if( AfxMessageBox(TEXT(GetStrI18N("Apply signed/unsigned conversion(distortion)?\n\n" + "Note: in many cases this increases volume level significantly.")), MB_YESNO|MB_ICONQUESTION) == IDNO ) + return; BeginWaitCursor(); pins = &m_pSndFile->Ins[m_nSample]; dwStart = viewstate.dwBeginSel; Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2009-03-30 22:41:07 UTC (rev 252) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2009-04-04 19:09:48 UTC (rev 253) @@ -283,7 +283,7 @@ else { m_PreAmpNoteShowed = true; - MessageBox(str_preampChangeNote, _TEXT(""), MB_ICONINFORMATION); + AfxMessageBox(str_preampChangeNote, MB_ICONINFORMATION); SetPreAmpSliderPosition(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-05-17 14:54:15
|
Revision: 258 http://modplug.svn.sourceforge.net/modplug/?rev=258&view=rev Author: relabsoluness Date: 2009-05-17 14:54:05 +0000 (Sun, 17 May 2009) Log Message: ----------- . Pattern tab: Fix to possible crash when using undo after pattern resize (bug introduced in rev. 168). ./ Miscellaneous tweaks (typo fixes etc.). Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-05-09 23:01:26 UTC (rev 257) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-05-17 14:54:05 UTC (rev 258) @@ -2093,10 +2093,11 @@ MODCOMMAND *newPattern = CSoundFile::AllocatePattern(nRows, m_SndFile.m_nChannels); MODCOMMAND *oldPattern = m_SndFile.Patterns[nPattern]; if (!newPattern) return (UINT)-1; + const ROWINDEX nOldRowCount = m_SndFile.Patterns[nPattern].GetNumRows(); m_SndFile.Patterns[nPattern].SetData(newPattern, nRows); if (oldPattern) { - memcpy(newPattern, oldPattern, m_SndFile.m_nChannels*m_SndFile.PatternSize[nPattern]*sizeof(MODCOMMAND)); + memcpy(newPattern, oldPattern, m_SndFile.m_nChannels*nOldRowCount*sizeof(MODCOMMAND)); CSoundFile::FreePattern(oldPattern); } } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-05-09 23:01:26 UTC (rev 257) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-05-17 14:54:05 UTC (rev 258) @@ -231,9 +231,9 @@ " [Mod] mptm files made with this version will be recognized as IT in 1.17.02.48.\n" " [Mod] Automatic update check on startup is no longer available.\n" " [Fix] Copy/Paste in pattern was partly broken when working with MOD format.\n" - " [Fix] Fixed wrong version in IT files saved with compatibility save.\n" + " [Fix] Fixed wrong version in IT files saved with compatibility export.\n" "\n" - " For more detail, see history.txt."; + " For more detailed list of changes, see history.txt."; CMainFrame::GetMainFrame()->MessageBox(firstOpenMessage, "OpenMPT v." MPT_VERSION_STR, MB_ICONINFORMATION); } @@ -1264,7 +1264,7 @@ // -> DESC="IT project files (.itp)" "Impulse Tracker Projects (*.itp)|*.itp;*.itpz|" // -! NEW_FEATURE#0023 - "Open MPT Modules (*.mptm)|*.mptm;*.mptmz|" + "OpenMPT Modules (*.mptm)|*.mptm;*.mptmz|" "Other Modules (mtm,okt,mdl,669,far,...)|*.mtm;*.669;*.ult;*.wow;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.med;*.ams;*.dbm;*.dsm;*.umx;*.amf;*.psm;*.mt2|" "Wave Files (*.wav)|*.wav|" "Midi Files (*.mid,*.rmi)|*.mid;*.rmi;*.smf|" @@ -1651,7 +1651,7 @@ m_bmp.LoadBitmap(MAKEINTRESOURCE(IDB_MPTRACK)); wsprintf(s, "Build Date: %s", gszBuildDate); SetDlgItemText(IDC_EDIT2, s); - SetDlgItemText(IDC_EDIT3, CString("Open Modplug Tracker, version ") + MptVersion::str + " (development build)"); + SetDlgItemText(IDC_EDIT3, CString("OpenMPT, version ") + MptVersion::str + " (development build)"); m_heContact.SetWindowText( "Contact / Discussion:\r\n\ Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-05-09 23:01:26 UTC (rev 257) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-05-17 14:54:05 UTC (rev 258) @@ -1967,7 +1967,7 @@ int param = m_pModDoc->MacroToPlugParam(&(m_MidiCfg.szMidiSFXExt[sfx*32])); CVstPlugin *pVstPlugin; char s[256]; - message.Format("These are the parameters that can be conrolled by macro SF%X:\n\n",sfx); + message.Format("These are the parameters that can be controlled by macro SF%X:\n\n",sfx); for (UINT plug=0; plug<MAX_MIXPLUGINS; plug++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-06-06 18:40:37
|
Revision: 261 http://modplug.svn.sourceforge.net/modplug/?rev=261&view=rev Author: relabsoluness Date: 2009-06-06 18:40:29 +0000 (Sat, 06 Jun 2009) Log Message: ----------- / VST: Changed host IDs and a couple of related return values. If compatibility problems occur, old IDs can be set with ini-settings. ? Misc: Modifications to remove some compiler warnings(in mptrack.cpp). ? Misc: Changed version to 1.17.03.01. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/version.h Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-05-30 21:38:42 UTC (rev 260) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-06-06 18:40:29 UTC (rev 261) @@ -220,6 +220,7 @@ static void ShowChangesDialog() //----------------------------- { + /* const char* const firstOpenMessage = "OpenMPT development build " MPT_VERSION_STR ".\n\n" "Some notable changes since version 1.17.02.48:\n\n" " [New] Name filter in plugin selection dialog.\n" @@ -236,6 +237,7 @@ " For more detailed list of changes, see history.txt."; CMainFrame::GetMainFrame()->MessageBox(firstOpenMessage, "OpenMPT v." MPT_VERSION_STR, MB_ICONINFORMATION); + */ } @@ -1551,7 +1553,7 @@ if (t > 256) m_bFirst = FALSE; - dir = (t/256) % 2; //change dir every 256 t + dir = ((t/256) % 2 != 0); //change dir every 256 t t = t%256; if (!dir) t = (256-t); @@ -2209,9 +2211,9 @@ UINT m = (m_Dib.bmiColors[i].rgbRed >> 2) + (m_Dib.bmiColors[i].rgbGreen >> 1) + (m_Dib.bmiColors[i].rgbBlue >> 2); - m_Dib.bmiColors[i|0x80].rgbRed = (m + r)>>1; - m_Dib.bmiColors[i|0x80].rgbGreen = (m + g)>>1; - m_Dib.bmiColors[i|0x80].rgbBlue = (m + b)>>1; + m_Dib.bmiColors[i|0x80].rgbRed = static_cast<BYTE>((m + r)>>1); + m_Dib.bmiColors[i|0x80].rgbGreen = static_cast<BYTE>((m + g)>>1); + m_Dib.bmiColors[i|0x80].rgbBlue = static_cast<BYTE>((m + b)>>1); } } @@ -2921,6 +2923,17 @@ m_pPluginManager = new CVstPluginManager; if (!m_pPluginManager) return FALSE; nPlugins = GetPrivateProfileInt("VST Plugins", "NumPlugins", 0, m_szConfigFileName); + + #ifndef NO_VST + char buffer[64]; + GetPrivateProfileString("VST Plugins", "HostProductString", CVstPluginManager::s_szHostProductString, buffer, ARRAYELEMCOUNT(buffer), m_szConfigFileName); + strcpy(CVstPluginManager::s_szHostProductString, buffer); + GetPrivateProfileString("VST Plugins", "HostVendorString", CVstPluginManager::s_szHostVendorString, buffer, ARRAYELEMCOUNT(buffer), m_szConfigFileName); + strcpy(CVstPluginManager::s_szHostVendorString, buffer); + CVstPluginManager::s_nHostVendorVersion = GetPrivateProfileInt("VST Plugins", "HostVendorVersion", CVstPluginManager::s_nHostVendorVersion, m_szConfigFileName); + #endif + + CString nonFoundPlugs; for (LONG iPlug=0; iPlug<nPlugins; iPlug++) { @@ -2962,6 +2975,14 @@ } wsprintf(s, "%d", iPlug); WritePrivateProfileString("VST Plugins", "NumPlugins", s, m_szConfigFileName); + + #ifndef NO_VST + WritePrivateProfileString("VST Plugins", "HostProductString", CVstPluginManager::s_szHostProductString, m_szConfigFileName); + WritePrivateProfileString("VST Plugins", "HostVendorString", CVstPluginManager::s_szHostVendorString, m_szConfigFileName); + CMainFrame::WritePrivateProfileLong("VST Plugins", "HostVendorVersion", CVstPluginManager::s_nHostVendorVersion, m_szConfigFileName); + #endif + + if (m_pPluginManager) { delete m_pPluginManager; Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2009-05-30 21:38:42 UTC (rev 260) +++ trunk/OpenMPT/mptrack/Mptrack.h 2009-06-06 18:40:29 UTC (rev 261) @@ -344,7 +344,7 @@ MODPLUGFASTDIB m_Dib; UINT m_nTextColor, m_nBkColor; LPMODPLUGDIB m_pTextDib; - BOOL m_nBlendOffset; + BYTE m_nBlendOffset; BYTE m_n4BitPalette[16]; public: @@ -359,7 +359,7 @@ void SetColor(UINT nIndex, COLORREF cr); void SetAllColors(UINT nBaseIndex, UINT nColors, COLORREF *pcr); void TextBlt(int x, int y, int cx, int cy, int srcx, int srcy, LPMODPLUGDIB lpdib=NULL); - void SetBlendMode(UINT nBlendOfs) { m_nBlendOffset = nBlendOfs; } + void SetBlendMode(BYTE nBlendOfs) { m_nBlendOffset = nBlendOfs; } void SetBlendColor(COLORREF cr); }; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2009-05-30 21:38:42 UTC (rev 260) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2009-06-06 18:40:29 UTC (rev 261) @@ -13,9 +13,14 @@ #include "VstEditor.h" //rewbs.defaultPlugGUI #include "defaultvsteditor.h" //rewbs.defaultPlugGUI #include "midi.h" +#include "version.h" #ifndef NO_VST +char CVstPluginManager::s_szHostProductString[64] = "OpenMPT"; +char CVstPluginManager::s_szHostVendorString[64] = "OpenMPT project"; +long CVstPluginManager::s_nHostVendorVersion = MptVersion::num; + //#define VST_LOG //#define ENABLE_BUZZ #define DMO_LOG @@ -861,16 +866,19 @@ case audioMasterGetOutputSpeakerArrangement: Log("VST plugin to host: Get Output Speaker Arrangement\n"); break; - case audioMasterGetVendorString: // Prentending to be Steinberg for compat. - strcpy((char*)ptr,"Steinberg"); -// strcpy((char*)ptr,"OpenMPT"); - return 0; - case audioMasterGetVendorVersion: // Prentending to be Cubase VST 7. :) - return 7000; - case audioMasterGetProductString: // Prentending to be Cubase VST for compat. - strcpy((char*)ptr,"Cubase VST"); -// strcpy((char*)ptr,"OpenMPT"); - return 0; + case audioMasterGetVendorString: + strcpy((char*)ptr, s_szHostVendorString); + //strcpy((char*)ptr,"Steinberg"); + //return 0; + return true; + case audioMasterGetVendorVersion: + return s_nHostVendorVersion; + //return 7000; + case audioMasterGetProductString: + strcpy((char*)ptr, s_szHostProductString); + //strcpy((char*)ptr,"Cubase VST"); + //return 0; + return true; case audioMasterVendorSpecific: return 0; // void* in <ptr>, format not defined yet Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2009-05-30 21:38:42 UTC (rev 260) +++ trunk/OpenMPT/mptrack/Vstplug.h 2009-06-06 18:40:29 UTC (rev 261) @@ -249,6 +249,12 @@ static long VSTCALLBACK MasterCallBack(AEffect *effect, long opcode, long index, long value, void *ptr, float opt); static BOOL __cdecl CreateMixPluginProc(PSNDMIXPLUGIN, CSoundFile*); VstTimeInfo timeInfo; //rewbs.VSTcompliance + +public: + static char s_szHostProductString[64]; + static char s_szHostVendorString[64]; + static long s_nHostVendorVersion; + #else // NO_VST public: PVSTPLUGINLIB AddPlugin(LPCSTR, BOOL =TRUE, const bool = false, CString* const = 0) {return 0;} Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2009-05-30 21:38:42 UTC (rev 260) +++ trunk/OpenMPT/mptrack/version.h 2009-06-06 18:40:29 UTC (rev 261) @@ -14,8 +14,8 @@ //Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 #define VER_MAJOR 17 -#define VER_MINOR 02 -#define VER_MINORMINOR 53 +#define VER_MINOR 03 +#define VER_MINORMINOR 01 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-06-06 18:49:54
|
Revision: 262 http://modplug.svn.sourceforge.net/modplug/?rev=262&view=rev Author: relabsoluness Date: 2009-06-06 18:49:52 +0000 (Sat, 06 Jun 2009) Log Message: ----------- Pattern tab: + Channel reset(stops note, sets initial chn settings). Available from channel header context menu and new key binding. . Fixed wrong interpretations of "Old style pattern context menu"-option. / Channel control context menu will now be visible only in channel header context. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-06-06 18:40:29 UTC (rev 261) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-06-06 18:49:52 UTC (rev 262) @@ -2299,6 +2299,11 @@ commands[kcSampleSignUnsign].isHidden = false; commands[kcSampleSignUnsign].isDummy = false; + commands[kcChannelReset].UID = 1786; + commands[kcChannelReset].isHidden = false; + commands[kcChannelReset].isDummy = false; + commands[kcChannelReset].Message = "Reset channel"; + #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2009-06-06 18:40:29 UTC (rev 261) +++ trunk/OpenMPT/mptrack/CommandSet.h 2009-06-06 18:49:52 UTC (rev 262) @@ -230,6 +230,7 @@ kcToggleChanMuteOnPatTransition, kcUnmuteAllChnOnPatTransition, kcSoloChnOnPatTransition, + kcChannelReset, kcCopyAndLoseSelection, kcTransposeUp, kcTransposeDown, Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-06-06 18:40:29 UTC (rev 261) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-06-06 18:49:52 UTC (rev 262) @@ -229,9 +229,9 @@ for (int c=kcClearRow; c<=kcInsertAllRows; c++) newCat->commands.Add(c); newCat->separators.Add(kcInsertAllRows); //-------------------------------------- - for (int c=kcChannelMute; c<=kcSoloChnOnPatTransition; c++) + for (int c=kcChannelMute; c<=kcChannelReset; c++) newCat->commands.Add(c); - newCat->separators.Add(kcSoloChnOnPatTransition); //-------------------------------------- + newCat->separators.Add(kcChannelReset); //-------------------------------------- for (int c=kcTransposeUp; c<=kcTransposeOctDown; c++) newCat->commands.Add(c); newCat->separators.Add(kcTransposeOctDown); //-------------------------------------- Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-06-06 18:40:29 UTC (rev 261) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-06-06 18:49:52 UTC (rev 262) @@ -66,6 +66,7 @@ ON_COMMAND(ID_EDIT_SPLITRECSELECT, OnSplitRecordSelect) // -! NEW_FEATURE#0012 ON_COMMAND(ID_EDIT_UNDO, OnEditUndo) + ON_COMMAND(ID_PATTERN_CHNRESET, OnChannelReset) ON_COMMAND(ID_PATTERN_MUTE, OnMuteFromClick) //rewbs.customKeys ON_COMMAND(ID_PATTERN_SOLO, OnSoloFromClick) //rewbs.customKeys ON_COMMAND(ID_PATTERN_TRANSITIONMUTE, OnTogglePendingMuteFromClick) @@ -1218,8 +1219,8 @@ //------ Standard Menu ---------- : else if ((pt.x >= m_szHeader.cx) && (pt.y > m_szHeader.cy)) { - if (BuildSoloMuteCtxMenu(hMenu, ih, nChn, pSndFile)) - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + /*if (BuildSoloMuteCtxMenu(hMenu, ih, nChn, pSndFile)) + AppendMenu(hMenu, MF_SEPARATOR, 0, "");*/ if (BuildSelectionCtxMenu(hMenu, ih)) AppendMenu(hMenu, MF_SEPARATOR, 0, ""); if (BuildEditCtxMenu(hMenu, ih, pModDoc)) @@ -1376,8 +1377,23 @@ } } +void CViewPattern::OnChannelReset() +//--------------------------------- +{ + const CHANNELINDEX nChn = GetChanFromCursor(m_nMenuParam); + CModDoc *pModDoc = GetDocument(); + CSoundFile* pSndFile; + if (pModDoc == 0 || (pSndFile = pModDoc->GetSoundFile()) == 0) return; + const bool bIsMuted = pModDoc->IsChannelMuted(nChn); + if(!bIsMuted) pModDoc->MuteChannel(nChn, true); + pSndFile->ResetChannelState(nChn, CHNRESET_TOTAL); + if(!bIsMuted) pModDoc->MuteChannel(nChn, false); +} + + void CViewPattern::OnMuteFromClick() +//---------------------------------- { OnMuteChannel(false); } @@ -3328,6 +3344,7 @@ case kcChannelUnmuteAll: OnUnmuteAll(); return wParam; case kcToggleChanMuteOnPatTransition: TogglePendingMute(GetChanFromCursor(m_dwCursor)); return wParam; case kcUnmuteAllChnOnPatTransition: OnPendingUnmuteAllChnFromClick(); return wParam; + case kcChannelReset: OnChannelReset(); return wParam; case kcTimeAtRow: OnShowTimeAtRow(); return wParam; case kcSoloChnOnPatTransition: PendingSoloChn(GetCurrentChannel()); return wParam; case kcTransposeUp: OnTransposeUp(); return wParam; @@ -4486,6 +4503,8 @@ AppendMenu(hMenu, MF_STRING, ID_PATTERN_TRANSITION_UNMUTEALL, "On transition: Unmute all\t" + ih->GetKeyTextFromCommand(kcUnmuteAllChnOnPatTransition)); AppendMenu(hMenu, MF_STRING, ID_PATTERN_TRANSITIONSOLO, "On transition: Solo\t" + ih->GetKeyTextFromCommand(kcSoloChnOnPatTransition)); + + AppendMenu(hMenu, MF_STRING, ID_PATTERN_CHNRESET, "Reset Channel\t" + ih->GetKeyTextFromCommand(kcChannelReset)); return true; } @@ -4518,11 +4537,8 @@ bool CViewPattern::BuildMiscCtxMenu(HMENU hMenu, CInputHandler* ih) //----------------------------------------------------------------- { - if (CMainFrame::m_dwPatternSetup & PATTERN_OLDCTXMENUSTYLE) return false; - AppendMenu(hMenu, MF_STRING, ID_SHOWTIMEATROW, "Show row play time\t" + ih->GetKeyTextFromCommand(kcTimeAtRow)); return true; - } bool CViewPattern::BuildSelectionCtxMenu(HMENU hMenu, CInputHandler* ih) @@ -4701,9 +4717,6 @@ bool CViewPattern::BuildChannelControlCtxMenu(HMENU hMenu) //-------------------------------------------------------------------- { - if (CMainFrame::m_dwPatternSetup&PATTERN_OLDCTXMENUSTYLE) return false; - //Not doing the menuentries if opted to use old style menu style. - AppendMenu(hMenu, MF_SEPARATOR, 0, ""); AppendMenu(hMenu, MF_STRING, ID_PATTERN_DUPLICATECHANNEL, "Duplicate this channel"); @@ -4729,11 +4742,8 @@ CArray<UINT, UINT> validChans; DWORD greyed = (ListChansWhereColSelected(INST_COLUMN, validChans)>0)?FALSE:MF_GRAYED; - if (CMainFrame::m_dwPatternSetup&PATTERN_OLDCTXMENUSTYLE && (!greyed)) { - // Case: User has opted to use old style menu style. - AppendMenu(hMenu, MF_STRING, ID_PATTERN_SETINSTRUMENT, "Change Instrument\t" + ih->GetKeyTextFromCommand(kcPatternSetInstrument)); - } - else { + if (!greyed || !(CMainFrame::m_dwPatternSetup&PATTERN_OLDCTXMENUSTYLE)) + { // Create the new menu and add it to the existing menu. HMENU instrumentChangeMenu = ::CreatePopupMenu(); AppendMenu(hMenu, MF_POPUP|greyed, (UINT)instrumentChangeMenu, "Change Instrument\t" + ih->GetKeyTextFromCommand(kcPatternSetInstrument)); @@ -4741,32 +4751,39 @@ if(pSndFile == NULL) return false; + if(!greyed) + { + if (pSndFile->m_nInstruments) + { + for (UINT i=1; i<=pSndFile->m_nInstruments; i++) + { + if (pSndFile->Headers[i] == NULL) + continue; - if (pSndFile->m_nInstruments) { - for (UINT i=1; i<=pSndFile->m_nInstruments; i++) { - if (pSndFile->Headers[i] == NULL) { - continue; - } CString instString = pSndFile->GetPatternViewInstrumentName(i, true); if(instString.GetLength() > 0) AppendMenu(instrumentChangeMenu, MF_STRING, ID_CHANGE_INSTRUMENT+i, pSndFile->GetPatternViewInstrumentName(i)); //Adding the entry to the list only if it has some name, since if the name is empty, //it likely is some non-used instrument. } - } else { + } + else + { CHAR s[256]; UINT nmax = pSndFile->m_nSamples; while ((nmax > 1) && (pSndFile->Ins[nmax].pSample == NULL) && (!pSndFile->m_szNames[nmax][0])) nmax--; - for (UINT i=1; i<=nmax; i++) if ((pSndFile->m_szNames[i][0]) || (pSndFile->Ins[i].pSample)) { + for (UINT i=1; i<=nmax; i++) if ((pSndFile->m_szNames[i][0]) || (pSndFile->Ins[i].pSample)) + { wsprintf(s, "%02d: %s", i, pSndFile->m_szNames[i]); AppendMenu(instrumentChangeMenu, MF_STRING, ID_CHANGE_INSTRUMENT+i, s); } } - //Add options to remove instrument from selection. - AppendMenu(instrumentChangeMenu, MF_SEPARATOR, 0, 0); - AppendMenu(instrumentChangeMenu, MF_STRING, ID_CHANGE_INSTRUMENT, "Remove instrument"); - AppendMenu(instrumentChangeMenu, MF_STRING, ID_CHANGE_INSTRUMENT+GetCurrentInstrument(), "Set to current instrument"); + //Add options to remove instrument from selection. + AppendMenu(instrumentChangeMenu, MF_SEPARATOR, 0, 0); + AppendMenu(instrumentChangeMenu, MF_STRING, ID_CHANGE_INSTRUMENT, "Remove instrument"); + AppendMenu(instrumentChangeMenu, MF_STRING, ID_CHANGE_INSTRUMENT+GetCurrentInstrument(), "Set to current instrument"); + } return true; } return false; Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2009-06-06 18:40:29 UTC (rev 261) +++ trunk/OpenMPT/mptrack/View_pat.h 2009-06-06 18:49:52 UTC (rev 262) @@ -228,6 +228,7 @@ afx_msg void OnEditGoto(); afx_msg void OnEditFindNext(); afx_msg void OnEditUndo(); + afx_msg void OnChannelReset(); afx_msg void OnMuteFromClick(); //rewbs.customKeys afx_msg void OnSoloFromClick(); //rewbs.customKeys afx_msg void OnTogglePendingMuteFromClick(); //rewbs.customKeys Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-06-06 18:40:29 UTC (rev 261) +++ trunk/OpenMPT/mptrack/resource.h 2009-06-06 18:49:52 UTC (rev 262) @@ -961,6 +961,7 @@ #define ID_PATTERN_PLAYNOLOOP 32901 #define ID_PATTERN_OPEN_RANDOMIZER 32905 #define ID_PATTERN_INTERPOLATE_NOTE 32906 +#define ID_PATTERN_CHNRESET 32907 #define ID_PRESET_LOAD 32915 #define ID_PRESET_SAVE 32916 #define ID_PRESET_RANDOM 32917 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-06-08 19:27:34
|
Revision: 264 http://modplug.svn.sourceforge.net/modplug/?rev=264&view=rev Author: relabsoluness Date: 2009-06-08 19:25:03 +0000 (Mon, 08 Jun 2009) Log Message: ----------- . Pattern tab: It's now possible to use the old note fade behaviour when playing notes in pattern tab(see setup->general). Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-06-06 19:11:18 UTC (rev 263) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-06-08 19:25:03 UTC (rev 264) @@ -425,6 +425,9 @@ gnMidiPatternLen = GetPrivateProfileLong("MIDI Settings", "MidiImportPatLen", gnMidiPatternLen, iniFile); m_dwPatternSetup = GetPrivateProfileDWord("Pattern Editor", "PatternSetup", m_dwPatternSetup, iniFile); + if(gcsPreviousVersion != "" && MptVersion::ToNum(gcsPreviousVersion) < MAKE_VERSION_NUMERIC(1,17,02,50)) + m_dwPatternSetup |= PATTERN_NOTEFADE; + m_nRowSpacing = GetPrivateProfileDWord("Pattern Editor", "RowSpacing", 16, iniFile); m_nRowSpacing2 = GetPrivateProfileDWord("Pattern Editor", "RowSpacing2", 4, iniFile); gbLoopSong = GetPrivateProfileDWord("Pattern Editor", "LoopSong", true, iniFile); @@ -541,6 +544,7 @@ RegQueryValueEx(key, "MidiSetup", NULL, &dwREG_DWORD, (LPBYTE)&m_dwMidiSetup, &dwDWORDSize); RegQueryValueEx(key, "MidiDevice", NULL, &dwREG_DWORD, (LPBYTE)&m_nMidiDevice, &dwDWORDSize); RegQueryValueEx(key, "PatternSetup", NULL, &dwREG_DWORD, (LPBYTE)&m_dwPatternSetup, &dwDWORDSize); + m_dwPatternSetup |= PATTERN_NOTEFADE; // Set flag to maintain old behaviour(was changed in 1.17.02.50). RegQueryValueEx(key, "RowSpacing", NULL, &dwREG_DWORD, (LPBYTE)&m_nRowSpacing, &dwDWORDSize); RegQueryValueEx(key, "RowSpacing2", NULL, &dwREG_DWORD, (LPBYTE)&m_nRowSpacing2, &dwDWORDSize); RegQueryValueEx(key, "LoopSong", NULL, &dwREG_DWORD, (LPBYTE)&gbLoopSong, &dwDWORDSize); Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-06-06 19:11:18 UTC (rev 263) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-06-08 19:25:03 UTC (rev 264) @@ -206,6 +206,7 @@ #define PATTERN_OLDCTXMENUSTYLE 0x800000 #define PATTERN_SYNCMUTE 0x1000000 #define PATTERN_AUTODELAY 0x2000000 +#define PATTERN_NOTEFADE 0x4000000 // Keyboard Setup Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-06-06 19:11:18 UTC (rev 263) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-06-08 19:25:03 UTC (rev 264) @@ -601,6 +601,7 @@ OPTGEN_PATTERNCTXMENUSTYLE, OPTGEN_SYNCMUTE, OPTGEN_AUTODELAY, + OPTGEN_PATNOTEFADE, OPTGEN_MAXOPTIONS }; @@ -636,6 +637,7 @@ {"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."}, + {"Note fade on key up", "Enable to fade/stop notes on key up in pattern tab." } }; @@ -697,6 +699,7 @@ 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; } m_CheckList.SetCheck(i, (bCheck) ? TRUE : FALSE); } @@ -754,6 +757,7 @@ 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; } if (bCheck) CMainFrame::m_dwPatternSetup |= mask; else CMainFrame::m_dwPatternSetup &= ~mask; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-06-06 19:11:18 UTC (rev 263) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-06-08 19:25:03 UTC (rev 264) @@ -3804,8 +3804,12 @@ pModDoc->NoteOff(0, TRUE, ins, m_dwCursor & 0xFFFF); } else - pModDoc->NoteOff(note, FALSE, ins, GetChanFromCursor(m_dwCursor)); - //pModDoc->NoteOff(note, TRUE, ins, (m_dwCursor & 0xFFFF) >> 3); + { + if(CMainFrame::m_dwPatternSetup & PATTERN_NOTEFADE) + pModDoc->NoteOff(note, TRUE, ins, GetChanFromCursor(m_dwCursor)); + else + pModDoc->NoteOff(note, FALSE, ins, GetChanFromCursor(m_dwCursor)); + } } //Enter note off in pattern? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2009-07-06 15:53:10
|
Revision: 281 http://modplug.svn.sourceforge.net/modplug/?rev=281&view=rev Author: relabsoluness Date: 2009-07-06 15:27:09 +0000 (Mon, 06 Jul 2009) Log Message: ----------- (patches from Jojo, merged somewhat modified) [New] General: New default directories: plugins and plugin presets. Includes some related refactoring. (merge edit: some changes and fixes) [Fix] Internal: Fixed buffer overrun in tree view. (merged modified) Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Moptions.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -115,8 +115,12 @@ CFileDialog dlg(TRUE, "fxp", NULL, OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); + dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS); + if (!(dlg.DoModal() == IDOK)) return; + CMainFrame::SetWorkingDirectory(dlg.GetFileName(), DIR_PLUGINPRESETS, true); + //TODO: exception handling to distinguish errors at this level. if (!(m_pVstPlugin->LoadProgram(dlg.GetFileName()))) ::AfxMessageBox("Error loading preset. Are you sure it is for this plugin?"); Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -1237,7 +1237,6 @@ BOOL CCtrlInstruments::OpenInstrument(LPCSTR lpszFileName) //-------------------------------------------------------- { - CHAR szName[_MAX_FNAME], szExt[_MAX_EXT]; CMappedFile f; BOOL bFirst, bOk; DWORD len; @@ -1287,10 +1286,9 @@ INSTRUMENTHEADER *penv = m_pSndFile->Headers[m_nInstrument]; if (penv) { - CHAR szPath[_MAX_PATH], szNewPath[_MAX_PATH]; - _splitpath(lpszFileName, szNewPath, szPath, szName, szExt); - strcat(szNewPath, szPath); - strcpy(CMainFrame::m_szCurInsDir, szNewPath); + TCHAR szName[_MAX_FNAME], szExt[_MAX_EXT]; + _tsplitpath(lpszFileName, nullptr, nullptr, szName, szExt); + CMainFrame::SetWorkingDirectory(lpszFileName, DIR_INSTRUMENTS, true); if (!penv->name[0]) { @@ -1528,10 +1526,11 @@ "Impulse Tracker Instruments (*.iti)|*.iti|" "All Files (*.*)|*.*||", this); - if (CMainFrame::m_szCurInsDir[0]) - { - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurInsDir; - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_INSTRUMENTS); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size. vector<char> filenameBuffer(bufferSize, 0); dlg.GetOFN().lpstrFile = &filenameBuffer[0]; @@ -1601,10 +1600,11 @@ this); // -! BUG_FIX#0019 - if (CMainFrame::m_szCurInsDir[0]) - { - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurInsDir; - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_INSTRUMENTS); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + if (dlg.DoModal() != IDOK) return; BeginWaitCursor(); _splitpath(dlg.GetPathName(), drive, path, NULL, ext); @@ -1625,8 +1625,11 @@ EndWaitCursor(); if (!bOk) ErrorBox(IDS_ERR_SAVEINS, this); else { - strcpy(CMainFrame::m_szCurInsDir, drive); - strcat(CMainFrame::m_szCurInsDir, path); + strcpy(szFileName, drive); + strcat(szFileName, path); + + CMainFrame::SetWorkingDirectory(szFileName, DIR_INSTRUMENTS); + // -> CODE#0023 // -> DESC="IT project files (.itp)" // m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT); Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -774,30 +774,30 @@ EndWaitCursor(); if (bOk) { - CHAR szPath[_MAX_PATH], szNewPath[_MAX_PATH]; MODINSTRUMENT *pins = &m_pSndFile->Ins[m_nSample]; - _splitpath(lpszFileName, szNewPath, szPath, szName, szExt); - strcat(szNewPath, szPath); - strcpy(CMainFrame::m_szCurSmpDir, szNewPath); + CMainFrame::SetWorkingDirectory(lpszFileName, DIR_SAMPLES, true); if (!pins->name[0]) { - memset(szPath, 0, 32); - strcpy(szPath, szName); + CHAR szFullFilename[_MAX_PATH]; + _splitpath(lpszFileName, 0, 0, szName, szExt); + + memset(szFullFilename, 0, 32); + strcpy(szFullFilename, szName); if (m_pSndFile->m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) { // MOD/XM - strcat(szPath, szExt); - szPath[31] = 0; - memcpy(m_pSndFile->m_szNames[m_nSample], szPath, 32); + strcat(szFullFilename, szExt); + szFullFilename[31] = 0; + memcpy(m_pSndFile->m_szNames[m_nSample], szFullFilename, 32); } else { // S3M/IT - szPath[31] = 0; - if (!m_pSndFile->m_szNames[m_nSample][0]) memcpy(m_pSndFile->m_szNames[m_nSample], szPath, 32); - if (strlen(szPath) < 9) strcat(szPath, szExt); + szFullFilename[31] = 0; + if (!m_pSndFile->m_szNames[m_nSample][0]) memcpy(m_pSndFile->m_szNames[m_nSample], szFullFilename, 32); + if (strlen(szFullFilename) < 9) strcat(szFullFilename, szExt); } - szPath[21] = 0; - memcpy(pins->name, szPath, 22); + szFullFilename[21] = 0; + memcpy(pins->name, szFullFilename, 22); } if ((m_pSndFile->m_nType & MOD_TYPE_XM) && (!(pins->uFlags & CHN_PANNING))) { @@ -925,10 +925,11 @@ "Raw Samples (*.raw,*.snd,*.pcm)|*.raw;*.snd;*.pcm|" "All Files (*.*)|*.*||", this); - if (CMainFrame::m_szCurSmpDir[0]) - { - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurSmpDir; - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_SAMPLES); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + dlg.m_ofn.nFilterIndex = nLastIndex; const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006). vector<char> filenameBuffer(bufferSize, 0); @@ -992,10 +993,11 @@ "Wave File (*.wav)|*.wav|" "RAW Audio (*.raw)|*.raw||", this); - if (CMainFrame::m_szCurSmpDir[0]) - { - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurSmpDir; - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_SAMPLES); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + if (dlg.DoModal() != IDOK) return; BeginWaitCursor(); @@ -1011,10 +1013,7 @@ ErrorBox(IDS_ERR_SAVESMP, this); } else { - CHAR drive[_MAX_DRIVE], path[_MAX_PATH]; - _splitpath(dlg.GetPathName(), drive, path, NULL, NULL); - strcpy(CMainFrame::m_szCurSmpDir, drive); - strcat(CMainFrame::m_szCurSmpDir, path); + CMainFrame::SetWorkingDirectory(dlg.GetPathName(), DIR_SAMPLES, true); } SwitchToView(); } Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -257,16 +257,12 @@ 0x00FF00, 0x00FFFF, 0x0000FF, }; -// Arrays -CHAR CMainFrame::m_szModDir[_MAX_PATH] = ""; -CHAR CMainFrame::m_szSmpDir[_MAX_PATH] = ""; -CHAR CMainFrame::m_szInsDir[_MAX_PATH] = ""; -CHAR CMainFrame::m_szKbdFile[_MAX_PATH] = ""; //rewbs.customKeys -CHAR CMainFrame::m_szCurModDir[_MAX_PATH] = ""; -CHAR CMainFrame::m_szCurSmpDir[_MAX_PATH] = ""; -CHAR CMainFrame::m_szCurInsDir[_MAX_PATH] = ""; -//CHAR CMainFrame::m_szCurKbdFile[_MAX_PATH] = ""; //rewbs.customKeys +// Directory Arrays (Default + Last) +TCHAR CMainFrame::m_szDefaultDirectory[NUM_DIRS][_MAX_PATH] = {0}; +TCHAR CMainFrame::m_szWorkingDirectory[NUM_DIRS][_MAX_PATH] = {0}; +TCHAR CMainFrame::m_szKbdFile[_MAX_PATH] = ""; //rewbs.customKeys + CInputHandler *CMainFrame::m_InputHandler = NULL; //rewbs.customKeys CAutoSaver *CMainFrame::m_pAutoSaver = NULL; //rewbs.autosave CPerformanceCounter *CMainFrame::m_pPerfCounter = NULL; @@ -318,8 +314,13 @@ m_szUserText[0] = 0; m_szInfoText[0] = 0; m_szXInfoText[0]= 0; //rewbs.xinfo - m_szPluginsDir[0] = 0; - m_szExportDir[0] = 0; + + for(UINT i = 0; i < NUM_DIRS; i++) + { + m_szDefaultDirectory[i][0] = 0; + m_szWorkingDirectory[i][0] = 0; + } + m_dTotalCPU=0; memset(gpenVuMeter, 0, sizeof(gpenVuMeter)); @@ -442,10 +443,19 @@ CSoundFile::s_DefaultPlugVolumeHandling = static_cast<uint8>(GetPrivateProfileInt("Misc", "DefaultPlugVolumeHandling", PLUGIN_VOLUMEHANDLING_IGNORE, iniFile)); if(CSoundFile::s_DefaultPlugVolumeHandling > 2) CSoundFile::s_DefaultPlugVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; - GetPrivateProfileString("Paths", "Songs_Directory", m_szModDir, m_szModDir, INIBUFFERSIZE, iniFile); - GetPrivateProfileString("Paths", "Samples_Directory", m_szSmpDir, m_szSmpDir, INIBUFFERSIZE, iniFile); - GetPrivateProfileString("Paths", "Instruments_Directory", m_szInsDir, m_szInsDir, INIBUFFERSIZE, iniFile); - GetPrivateProfileString("Paths", "Plugins_Directory", m_szPluginsDir, m_szPluginsDir, INIBUFFERSIZE, iniFile); + TCHAR szPath[_MAX_PATH] = ""; + GetPrivateProfileString("Paths", "Songs_Directory", GetDefaultDirectory(DIR_MODS), szPath, INIBUFFERSIZE, iniFile); + SetDefaultDirectory(szPath, DIR_MODS); + GetPrivateProfileString("Paths", "Samples_Directory", GetDefaultDirectory(DIR_SAMPLES), szPath, INIBUFFERSIZE, iniFile); + SetDefaultDirectory(szPath, DIR_SAMPLES); + GetPrivateProfileString("Paths", "Instruments_Directory", GetDefaultDirectory(DIR_INSTRUMENTS), szPath, INIBUFFERSIZE, iniFile); + SetDefaultDirectory(szPath, DIR_INSTRUMENTS); + GetPrivateProfileString("Paths", "Plugins_Directory", GetDefaultDirectory(DIR_PLUGINS), szPath, INIBUFFERSIZE, iniFile); + SetDefaultDirectory(szPath, DIR_PLUGINS); + GetPrivateProfileString("Paths", "Plugin_Presets_Directory", GetDefaultDirectory(DIR_PLUGINPRESETS), szPath, INIBUFFERSIZE, iniFile); + SetDefaultDirectory(szPath, DIR_PLUGINPRESETS); + GetPrivateProfileString("Paths", "Export_Directory", GetDefaultDirectory(DIR_EXPORT), szPath, INIBUFFERSIZE, iniFile); + SetDefaultDirectory(szPath, DIR_EXPORT); GetPrivateProfileString("Paths", "Key_Config_File", m_szKbdFile, m_szKbdFile, INIBUFFERSIZE, iniFile); CSoundFile::m_nXBassDepth = GetPrivateProfileLong("Effects", "XBassDepth", 0, iniFile); @@ -479,7 +489,6 @@ DWORD dwREG_DWORD = REG_DWORD; DWORD dwREG_SZ = REG_SZ; DWORD dwDWORDSize = sizeof(UINT); - DWORD dwSZSIZE = sizeof(m_szModDir); DWORD dwCRSIZE = sizeof(COLORREF); @@ -524,15 +533,23 @@ RegQueryValueEx(key, "BufferLength", NULL, &dwREG_DWORD, (LPBYTE)&m_nBufferLength, &dwDWORDSize); if ((m_nBufferLength < 10) || (m_nBufferLength > 200)) m_nBufferLength = 100; RegQueryValueEx(key, "PreAmp", NULL, &dwREG_DWORD, (LPBYTE)&m_nPreAmp, &dwDWORDSize); - RegQueryValueEx(key, "Songs_Directory", NULL, &dwREG_SZ, (LPBYTE)m_szModDir, &dwSZSIZE); - dwSZSIZE = sizeof(m_szSmpDir); - RegQueryValueEx(key, "Samples_Directory", NULL, &dwREG_SZ, (LPBYTE)m_szSmpDir, &dwSZSIZE); - dwSZSIZE = sizeof(m_szInsDir); - RegQueryValueEx(key, "Instruments_Directory", NULL, &dwREG_SZ, (LPBYTE)m_szInsDir, &dwSZSIZE); - dwSZSIZE = sizeof(m_szPluginsDir); - RegQueryValueEx(key, "Plugins_Directory", NULL, &dwREG_SZ, (LPBYTE)m_szPluginsDir, &dwSZSIZE); + + CHAR sPath[_MAX_PATH] = ""; + DWORD dwSZSIZE = sizeof(sPath); + RegQueryValueEx(key, "Songs_Directory", NULL, &dwREG_SZ, (LPBYTE)sPath, &dwSZSIZE); + SetDefaultDirectory(sPath, DIR_MODS); + dwSZSIZE = sizeof(sPath); + RegQueryValueEx(key, "Samples_Directory", NULL, &dwREG_SZ, (LPBYTE)sPath, &dwSZSIZE); + SetDefaultDirectory(sPath, DIR_SAMPLES); + dwSZSIZE = sizeof(sPath); + RegQueryValueEx(key, "Instruments_Directory", NULL, &dwREG_SZ, (LPBYTE)sPath, &dwSZSIZE); + SetDefaultDirectory(sPath, DIR_INSTRUMENTS); + dwSZSIZE = sizeof(sPath); + RegQueryValueEx(key, "Plugins_Directory", NULL, &dwREG_SZ, (LPBYTE)sPath, &dwSZSIZE); + SetDefaultDirectory(sPath, DIR_PLUGINS); dwSZSIZE = sizeof(m_szKbdFile); RegQueryValueEx(key, "Key_Config_File", NULL, &dwREG_SZ, (LPBYTE)m_szKbdFile, &dwSZSIZE); + RegQueryValueEx(key, "XBassDepth", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_nXBassDepth, &dwDWORDSize); RegQueryValueEx(key, "XBassRange", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_nXBassRange, &dwDWORDSize); RegQueryValueEx(key, "ReverbDepth", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_nReverbDepth, &dwDWORDSize); @@ -658,11 +675,12 @@ } } // Default directory location - strcpy(m_szCurModDir, m_szModDir); - strcpy(m_szCurSmpDir, m_szSmpDir); - strcpy(m_szCurInsDir, m_szInsDir); -// strcpy(m_szCurKbdFile, m_szKbdFile); //rewbs.customKeys - if (m_szModDir[0]) SetCurrentDirectory(m_szModDir); + for(UINT i = 0; i < NUM_DIRS; i++) + { + _tcscpy(m_szWorkingDirectory[i], m_szDefaultDirectory[i]); + } + if (m_szDefaultDirectory[DIR_MODS][0]) SetCurrentDirectory(m_szDefaultDirectory[DIR_MODS]); + // Create Audio Thread m_hAudioWakeUp = CreateEvent(NULL, FALSE, FALSE, NULL); m_hNotifyWakeUp = CreateEvent(NULL, FALSE, FALSE, NULL); @@ -948,10 +966,12 @@ WritePrivateProfileDWord("Pattern Editor", "Record", gbPatternRecord, iniFile); WritePrivateProfileDWord("Pattern Editor", "AutoChordWaitTime", gnAutoChordWaitTime, iniFile); - WritePrivateProfileString("Paths", "Songs_Directory", m_szModDir, iniFile); - WritePrivateProfileString("Paths", "Samples_Directory", m_szSmpDir, iniFile); - WritePrivateProfileString("Paths", "Instruments_Directory", m_szInsDir, iniFile); - WritePrivateProfileString("Paths", "Plugins_Directory", m_szPluginsDir, iniFile); + WritePrivateProfileString("Paths", "Songs_Directory", GetDefaultDirectory(DIR_MODS), iniFile); + WritePrivateProfileString("Paths", "Samples_Directory", GetDefaultDirectory(DIR_SAMPLES), iniFile); + WritePrivateProfileString("Paths", "Instruments_Directory", GetDefaultDirectory(DIR_INSTRUMENTS), iniFile); + WritePrivateProfileString("Paths", "Plugins_Directory", GetDefaultDirectory(DIR_PLUGINS), iniFile); + WritePrivateProfileString("Paths", "Plugin_Presets_Directory", GetDefaultDirectory(DIR_PLUGINPRESETS), iniFile); + WritePrivateProfileString("Paths", "Export_Directory", GetDefaultDirectory(DIR_EXPORT), iniFile); WritePrivateProfileString("Paths", "Key_Config_File", m_szKbdFile, iniFile); WritePrivateProfileLong("Effects", "XBassDepth", CSoundFile::m_nXBassDepth, iniFile); @@ -2179,15 +2199,16 @@ } -BOOL CMainFrame::SetupDirectories(LPCSTR songs, LPCSTR samples, LPCSTR instr) +BOOL CMainFrame::SetupDirectories(LPCTSTR szModDir, LPCTSTR szSampleDir, LPCTSTR szInstrDir, LPCTSTR szVstDir, LPCTSTR szPresetDir) //--------------------------------------------------------------------------- { - strcpy(m_szModDir, songs); - strcpy(m_szSmpDir, samples); - strcpy(m_szInsDir, instr); - if (songs[0]) strcpy(m_szCurModDir, songs); - if (samples[0]) strcpy(m_szCurSmpDir, samples); - if (instr[0]) strcpy(m_szCurInsDir, instr); + // will also set working directory + SetDefaultDirectory(szModDir, DIR_MODS); + SetDefaultDirectory(szSampleDir, DIR_SAMPLES); + SetDefaultDirectory(szInstrDir, DIR_INSTRUMENTS); + SetDefaultDirectory(szVstDir, DIR_PLUGINS); + SetDefaultDirectory(szPresetDir, DIR_PLUGINPRESETS); + // This shouldn't be here (misc options) m_wndToolBar.EnableFlatButtons(m_dwPatternSetup & PATTERN_FLATBUTTONS); UpdateAllViews(HINT_MPTOPTIONS, NULL); @@ -3003,3 +3024,56 @@ CBox.SetItemData(CBox.AddString(s), i); } } + + +// retrieve / set default directory from given string and store it our setup variables +// TODO: Let some magic happen to convert between absolute and relative paths. m_csExecutableDirectoryPath might be helpful + +void CMainFrame::SetDirectory(const LPCTSTR szFilenameFrom, Directory dir, TCHAR (&directories)[NUM_DIRS][_MAX_PATH], bool bStripFilename) +//---------------------------------------------------------------------------- +{ + TCHAR szPath[_MAX_PATH], szDir[_MAX_DIR]; + + if(bStripFilename) + { + _tsplitpath(szFilenameFrom, szPath, szDir, 0, 0); + _tcscat(szPath, szDir); + } + else + { + _tcscpy(szPath, szFilenameFrom); + } + + _tcscpy(directories[dir], szPath); + + // When updating default directory, also update the working directory. + if(szPath[0] && directories == m_szDefaultDirectory) + SetWorkingDirectory(szPath, dir); +} + +void CMainFrame::SetDefaultDirectory(const LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename) +//---------------------------------------------------------------------------- +{ + SetDirectory(szFilenameFrom, dir, m_szDefaultDirectory, bStripFilename); +} + + +void CMainFrame::SetWorkingDirectory(const LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename) +//---------------------------------------------------------------------------- +{ + SetDirectory(szFilenameFrom, dir, m_szWorkingDirectory, bStripFilename); +} + + +LPCTSTR CMainFrame::GetDefaultDirectory(Directory dir) +//---------------------------------------------------------------------------- +{ + return m_szDefaultDirectory[dir]; +} + + +LPCTSTR CMainFrame::GetWorkingDirectory(Directory dir) +//---------------------------------------------------------------------------- +{ + return m_szWorkingDirectory[dir]; +} Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-07-06 15:27:09 UTC (rev 281) @@ -340,6 +340,22 @@ ///////////////////////////////////////////////////////////////////////// +// Default directories + +enum Directory +{ + DIR_MODS = 0, + DIR_SAMPLES, + DIR_INSTRUMENTS, + DIR_PLUGINS, + DIR_PLUGINPRESETS, + DIR_EXPORT, + NUM_DIRS +}; + + + +///////////////////////////////////////////////////////////////////////// // Misc. Macros @@ -400,9 +416,8 @@ static COLORREF rgbCustomColors[MAX_MODCOLORS]; static LPMODPLUGDIB bmpPatterns, bmpNotes, bmpVUMeters, bmpVisNode; static HPEN gpenVuMeter[NUM_VUMETER_PENS*2]; - // Arrays - static CHAR m_szModDir[_MAX_PATH], m_szSmpDir[_MAX_PATH], m_szInsDir[_MAX_PATH], m_szKbdFile[_MAX_PATH]; - static CHAR m_szCurModDir[_MAX_PATH], m_szCurSmpDir[_MAX_PATH], m_szCurInsDir[_MAX_PATH], m_szCurKbdDir[_MAX_PATH]; + // key config + static TCHAR m_szKbdFile[_MAX_PATH]; // Low-Level Audio public: @@ -452,8 +467,6 @@ // Notification Buffer MPTNOTIFICATION NotifyBuffer[MAX_UPDATE_HISTORY]; // Misc - CHAR m_szPluginsDir[_MAX_PATH]; - CHAR m_szExportDir[_MAX_PATH]; bool m_bOptionsLocked; //rewbs.customKeys double m_dTotalCPU; CModDoc* m_pJustModifiedDoc; @@ -480,10 +493,6 @@ BOOL dsoundFillBuffers(LPBYTE lpBuf, DWORD dwSize); BOOL DSoundDone(LPBYTE lpBuffer, DWORD dwBytes); BOOL DoNotification(DWORD dwSamplesRead, DWORD dwLatency); - LPCSTR GetPluginsDir() const { return m_szPluginsDir; } - VOID SetPluginsDir(LPCSTR pszDir) { lstrcpyn(m_szPluginsDir, pszDir, sizeof(m_szPluginsDir)); } - LPCSTR GetExportDir() const { return m_szExportDir; } - VOID SetExportDir(LPCSTR pszDir) { lstrcpyn(m_szExportDir, pszDir, sizeof(m_szExportDir)); } // Midi Input Functions public: @@ -517,7 +526,7 @@ static CString GetPrivateProfileCString(const CString section, const CString key, const CString defaultValue, const CString iniFile); -// Misc functions + // Misc functions public: VOID SetUserText(LPCSTR lpszText); VOID SetInfoText(LPCSTR lpszText); @@ -561,7 +570,7 @@ BOOL StopRenderer(CSoundFile*); //rewbs.VSTTimeInfo void SwitchToActiveView(); BOOL SetupSoundCard(DWORD q, DWORD rate, UINT nbits, UINT chns, UINT bufsize, LONG wd); - BOOL SetupDirectories(LPCSTR s, LPCSTR s2, LPCSTR s3); + BOOL SetupDirectories(LPCTSTR szModDir, LPCTSTR szSampleDir, LPCTSTR szInstrDir, LPCTSTR szVstDir, LPCTSTR szPresetDir); BOOL SetupPlayer(DWORD, DWORD, BOOL bForceUpdate=FALSE); BOOL SetupMidi(DWORD d, LONG n); void SetPreAmp(UINT n); @@ -570,6 +579,19 @@ BOOL ResetNotificationBuffer(HWND hwnd=NULL); +public: + // access to default + working directories + static void SetWorkingDirectory(const LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename = false); + static LPCTSTR GetWorkingDirectory(Directory dir); + static void SetDefaultDirectory(const LPCTSTR szFilenameFrom, Directory dir, bool bStripFilename = false); + static LPCTSTR GetDefaultDirectory(Directory dir); +protected: + static void SetDirectory(const LPCTSTR szFilenameFrom, Directory dir, TCHAR (&pDirs)[NUM_DIRS][_MAX_PATH], bool bStripFilename); + // Directory Arrays (default dir + last dir) + static TCHAR m_szDefaultDirectory[NUM_DIRS][_MAX_PATH]; + static TCHAR m_szWorkingDirectory[NUM_DIRS][_MAX_PATH]; + + // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMainFrame) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -550,15 +550,15 @@ OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, lpszFilter, theApp.m_pMainWnd); - if (CMainFrame::m_szCurModDir[0]) - { - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurModDir; - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_MODS); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + if (dlg.DoModal() != IDOK) return FALSE; strcpy(s, dlg.GetPathName()); + CMainFrame::SetWorkingDirectory(s, DIR_MODS, true); _splitpath(s, drive, path, fname, fext); - strcpy(CMainFrame::m_szCurModDir, drive); - strcat(CMainFrame::m_szCurModDir, path); } else { _splitpath(lpszPathName, drive, path, fname, NULL); @@ -1374,15 +1374,15 @@ CFileDialog dlg(FALSE, "wav", s, OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, "Wave Files (*.wav)|*.wav||", pMainFrm); - dlg.m_ofn.lpstrInitialDir = pMainFrm->GetExportDir(); + dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_EXPORT); CWaveConvert wsdlg(pMainFrm); if (wsdlg.DoModal() != IDOK) return; if (dlg.DoModal() != IDOK) return; //rewbs: made filename dialog appear after wav settings dialog - s[0] = 0; - _splitpath(dlg.GetPathName(), s, path, NULL, NULL); - strcat(s, path); - pMainFrm->SetExportDir(s); + + // will set default dir here because there's no setup option for export dir yet (feel free to add one...) + pMainFrm->SetDefaultDirectory(dlg.GetPathName(), DIR_EXPORT, true); + strcpy(s, dlg.GetPathName()); // Saving as wave file @@ -1505,16 +1505,17 @@ OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, "MPEG Layer III Files (*.mp3)|*.mp3|Layer3 Wave Files (*.wav)|*.wav||", pMainFrm); dlg.m_ofn.nFilterIndex = 0; - dlg.m_ofn.lpstrInitialDir = pMainFrm->GetExportDir(); + + dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_EXPORT); + if (dlg.DoModal() == IDOK) { MPEGLAYER3WAVEFORMAT wfx; HACMDRIVERID hadid; - s[0] = 0; - _splitpath(dlg.GetPathName(), s, path, NULL, NULL); - strcat(s, path); - pMainFrm->SetExportDir(s); + // will set default dir here because there's no setup option for export dir yet (feel free to add one...) + pMainFrm->SetDefaultDirectory(dlg.GetPathName(), DIR_EXPORT, true); + strcpy(s, dlg.GetPathName()); _splitpath(s, NULL, NULL, NULL, fext); if (strlen(fext) <= 1) Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -556,14 +556,17 @@ // COptionsGeneral BEGIN_MESSAGE_MAP(COptionsGeneral, CPropertyPage) - ON_EN_CHANGE(IDC_EDIT1, OnSettingsChanged) - ON_EN_CHANGE(IDC_EDIT2, OnSettingsChanged) - ON_EN_CHANGE(IDC_EDIT3, OnSettingsChanged) - ON_LBN_SELCHANGE(IDC_LIST1, OnOptionSelChanged) - ON_COMMAND(IDC_BUTTON1, OnBrowseSongs) - ON_COMMAND(IDC_BUTTON2, OnBrowseSamples) - ON_COMMAND(IDC_BUTTON3, OnBrowseInstruments) - ON_CLBN_CHKCHANGE(IDC_LIST1, OnSettingsChanged) + ON_EN_CHANGE(IDC_OPTIONS_DIR_MODS, OnSettingsChanged) + ON_EN_CHANGE(IDC_OPTIONS_DIR_SAMPS, OnSettingsChanged) + ON_EN_CHANGE(IDC_OPTIONS_DIR_INSTS, OnSettingsChanged) + ON_EN_CHANGE(IDC_OPTIONS_DIR_VSTPRESETS, OnSettingsChanged) + ON_LBN_SELCHANGE(IDC_LIST1, OnOptionSelChanged) + ON_COMMAND(IDC_BUTTON_CHANGE_MODDIR, OnBrowseSongs) + ON_COMMAND(IDC_BUTTON_CHANGE_SAMPDIR, OnBrowseSamples) + ON_COMMAND(IDC_BUTTON_CHANGE_INSTRDIR, OnBrowseInstruments) + ON_COMMAND(IDC_BUTTON_CHANGE_VSTDIR, OnBrowsePlugins) + ON_COMMAND(IDC_BUTTON_CHANGE_VSTPRESETSDIR, OnBrowsePresets) + ON_CLBN_CHKCHANGE(IDC_LIST1, OnSettingsChanged) END_MESSAGE_MAP() typedef struct OPTGENDESC @@ -711,9 +714,13 @@ } m_CheckList.SetCurSel(0); OnOptionSelChanged(); - SetDlgItemText(IDC_EDIT1, CMainFrame::m_szModDir); - SetDlgItemText(IDC_EDIT2, CMainFrame::m_szSmpDir); - SetDlgItemText(IDC_EDIT3, CMainFrame::m_szInsDir); + + SetDlgItemText(IDC_OPTIONS_DIR_MODS, CMainFrame::GetDefaultDirectory(DIR_MODS)); + SetDlgItemText(IDC_OPTIONS_DIR_SAMPS, CMainFrame::GetDefaultDirectory(DIR_SAMPLES)); + SetDlgItemText(IDC_OPTIONS_DIR_INSTS, CMainFrame::GetDefaultDirectory(DIR_INSTRUMENTS)); + SetDlgItemText(IDC_OPTIONS_DIR_VSTS, CMainFrame::GetDefaultDirectory(DIR_PLUGINS)); + SetDlgItemText(IDC_OPTIONS_DIR_VSTPRESETS, CMainFrame::GetDefaultDirectory(DIR_PLUGINPRESETS)); + return TRUE; } @@ -721,12 +728,16 @@ void COptionsGeneral::OnOK() //-------------------------- { - CHAR szModDir[_MAX_DIR], szSmpDir[_MAX_PATH], szInsDir[_MAX_PATH]; - szModDir[0] = szInsDir[0] = szSmpDir[0] = 0; - GetDlgItemText(IDC_EDIT1, szModDir, _MAX_PATH); - GetDlgItemText(IDC_EDIT2, szSmpDir, _MAX_PATH); - GetDlgItemText(IDC_EDIT3, szInsDir, _MAX_PATH); - for (UINT i=0; i<OPTGEN_MAXOPTIONS; i++) + // Default paths + TCHAR szModDir[_MAX_PATH], szSmpDir[_MAX_PATH], szInsDir[_MAX_PATH], szVstDir[_MAX_PATH], szPresetDir[_MAX_PATH]; + szModDir[0] = szInsDir[0] = szSmpDir[0] = szVstDir[0] = szPresetDir[0] = 0; + GetDlgItemText(IDC_OPTIONS_DIR_MODS, szModDir, _MAX_PATH); + GetDlgItemText(IDC_OPTIONS_DIR_SAMPS, szSmpDir, _MAX_PATH); + GetDlgItemText(IDC_OPTIONS_DIR_INSTS, szInsDir, _MAX_PATH); + GetDlgItemText(IDC_OPTIONS_DIR_VSTS, szVstDir, _MAX_PATH); + GetDlgItemText(IDC_OPTIONS_DIR_VSTPRESETS, szPresetDir, _MAX_PATH); + + for (UINT i=0; i < OPTGEN_MAXOPTIONS; i++) { DWORD mask = 0; BOOL bCheck = m_CheckList.GetCheck(i); @@ -774,7 +785,7 @@ CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if (pMainFrm) { - pMainFrm->SetupDirectories(szModDir, szSmpDir, szInsDir); + pMainFrm->SetupDirectories(szModDir, szSmpDir, szInsDir, szVstDir, szPresetDir); pMainFrm->UpdateTree(NULL, HINT_MPTOPTIONS); } CPropertyPage::OnOK(); Modified: trunk/OpenMPT/mptrack/Moptions.h =================================================================== --- trunk/OpenMPT/mptrack/Moptions.h 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Moptions.h 2009-07-06 15:27:09 UTC (rev 281) @@ -35,9 +35,11 @@ virtual void DoDataExchange(CDataExchange* pDX); afx_msg void OnOptionSelChanged(); afx_msg void OnSettingsChanged() { SetModified(TRUE); } - afx_msg void OnBrowseSongs() { BrowseForFolder(IDC_EDIT1); } - afx_msg void OnBrowseSamples() { BrowseForFolder(IDC_EDIT2); } - afx_msg void OnBrowseInstruments() { BrowseForFolder(IDC_EDIT3); } + afx_msg void OnBrowseSongs() { BrowseForFolder(IDC_OPTIONS_DIR_MODS); } + afx_msg void OnBrowseSamples() { BrowseForFolder(IDC_OPTIONS_DIR_SAMPS); } + afx_msg void OnBrowseInstruments() { BrowseForFolder(IDC_OPTIONS_DIR_INSTS); } + afx_msg void OnBrowsePlugins() { BrowseForFolder(IDC_OPTIONS_DIR_VSTS); } + afx_msg void OnBrowsePresets() { BrowseForFolder(IDC_OPTIONS_DIR_VSTPRESETS); } //rewbs.customkeys: COptionsKeyboard moved to separate file DECLARE_MESSAGE_MAP(); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -1277,10 +1277,11 @@ "All Files (*.*)|*.*||", NULL); dlg.m_ofn.nFilterIndex = CMainFrame::m_nFilterIndex; - if (CMainFrame::m_szCurModDir[0]) - { - dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurModDir; - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_MODS); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006). vector<char> filenameBuffer(bufferSize, 0); dlg.GetOFN().lpstrFile = &filenameBuffer[0]; @@ -1290,11 +1291,8 @@ POSITION pos = dlg.GetStartPosition(); while(pos != NULL) { - CHAR szDrive[_MAX_PATH], szDir[_MAX_PATH]; CString pathName = dlg.GetNextPathName(pos); - _splitpath(pathName, szDrive, szDir, NULL, NULL); - strcpy(CMainFrame::m_szCurModDir, szDrive); - strcat(CMainFrame::m_szCurModDir, szDir); + CMainFrame::SetWorkingDirectory(pathName, DIR_MODS, true); CMainFrame::m_nFilterIndex = dlg.m_ofn.nFilterIndex; OpenDocumentFile(pathName); } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -150,7 +150,7 @@ m_dwStatus |= TREESTATUS_SINGLEEXPAND; } ModifyStyle(dwRemove, dwAdd); - strcpy(m_szInstrLibPath, CMainFrame::m_szSmpDir); + strcpy(m_szInstrLibPath, CMainFrame::GetDefaultDirectory(DIR_SAMPLES)); SetImageList(CMainFrame::GetMainFrame()->GetImageList(), TVSIL_NORMAL); if (m_pDataTree) { @@ -1705,7 +1705,8 @@ if (!GetCurrentDirectory(sizeof(s), s)) s[0] = 0; if (!strcmp(lpszDir+1, ":\\")) { - strcpy(sdrive, lpszDir); + sdrive[0] = lpszDir[0]; + sdrive[1] = lpszDir[1]; sdrive[2] = 0; lpszDir = sdrive; } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2009-07-06 15:27:09 UTC (rev 281) @@ -1376,15 +1376,11 @@ OFN_FILEMUSTEXIST|OFN_ENABLESIZING |OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FORCESHOWHIDDEN|OFN_ALLOWMULTISELECT, "VST Plugins (*.dll)|*.dll||", this); - CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) - { - LPCSTR pszDir = pMainFrm->GetPluginsDir(); - if (pszDir[0]) - { - dlg.m_ofn.lpstrInitialDir = pszDir; - } - } + + const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_PLUGINS); + if(pszWdir[0]) + dlg.m_ofn.lpstrInitialDir = pszWdir; + pszFileNames = new CHAR[MAX_FILEOPEN_BUFSIZE]; if (!pszFileNames) return; pszFileNames[0] = 0; @@ -1393,7 +1389,6 @@ dlg.m_ofn.nMaxFile = MAX_FILEOPEN_BUFSIZE; if (dlg.DoModal() == IDOK) { - CHAR s[_MAX_PATH], sdir[_MAX_PATH]; CVstPluginManager *pManager = theApp.GetPluginManager(); pszFileNames[MAX_FILEOPEN_BUFSIZE-1] = 0; POSITION pos = dlg.GetStartPosition(); @@ -1403,16 +1398,14 @@ PVSTPLUGINLIB plugLib = NULL; while (pos != NULL) { - CString str = dlg.GetNextPathName(pos); + CString sFilename = dlg.GetNextPathName(pos); if (!n) { - _splitpath(str, s, sdir, NULL, NULL); - strcat(s, sdir); - if (pMainFrm) pMainFrm->SetPluginsDir(s); + CMainFrame::SetWorkingDirectory(sFilename, DIR_PLUGINS, true); } n++; if (pManager) { - plugLib = pManager->AddPlugin(str, FALSE); + plugLib = pManager->AddPlugin(sFilename, FALSE); if (plugLib) { bOk = TRUE; } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-07-06 15:27:09 UTC (rev 281) @@ -762,7 +762,7 @@ CTEXT "Length: 000000 (16-bit)",IDC_TEXT5,175,6,90,13, SS_CENTERIMAGE,WS_EX_STATICEDGE CONTROL "Toolbar2",IDC_TOOLBAR2,"ToolbarWindow32",WS_GROUP | - 0x4d,268,4,195,17 + 0x4d,268,4,186,17 GROUPBOX "",IDC_STATIC,3,22,94,78 LTEXT "Default Volume",IDC_STATIC,8,32,49,8 LTEXT "Global Volume",IDC_STATIC,8,45,46,8 @@ -1416,21 +1416,35 @@ CAPTION "General" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "Directories",IDC_STATIC,5,5,261,67 - LTEXT "Songs:",IDC_STATIC,15,20,36,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT1,59,20,174,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON1,240,20,12,11,NOT WS_TABSTOP - LTEXT "Samples:",IDC_STATIC,15,37,41,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT2,59,37,174,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON2,240,36,12,11,NOT WS_TABSTOP - LTEXT "Instruments:",IDC_STATIC,15,53,40,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT3,59,53,174,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_BUTTON3,240,54,12,11,NOT WS_TABSTOP - GROUPBOX "Options",IDC_STATIC,4,75,261,200 - LTEXT "Description",IDC_TEXT1,144,86,111,175 - LISTBOX IDC_LIST1,9,86,129,181,LBS_OWNERDRAWFIXED | + GROUPBOX "Default Directories",IDC_STATIC,6,6,261,102 + RTEXT "Songs:",IDC_STATIC_MODDIR,12,18,48,12,SS_CENTERIMAGE + EDITTEXT IDC_OPTIONS_DIR_MODS,66,18,174,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_CHANGE_MODDIR,246,18,12,11,NOT + WS_TABSTOP + RTEXT "Samples:",IDC_STATIC_SAMPDIR,12,36,48,12,SS_CENTERIMAGE + EDITTEXT IDC_OPTIONS_DIR_SAMPS,66,36,174,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_CHANGE_SAMPDIR,246,36,12,11,NOT + WS_TABSTOP + RTEXT "Instruments:",IDC_STATIC_INSTRDIR,12,54,48,12, + SS_CENTERIMAGE + EDITTEXT IDC_OPTIONS_DIR_INSTS,66,54,174,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_CHANGE_INSTRDIR,246,54,12,11,NOT + WS_TABSTOP + GROUPBOX "Options",IDC_STATIC,4,114,261,161 + LTEXT "Description",IDC_TEXT1,144,126,111,138 + LISTBOX IDC_LIST1,9,126,129,141,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + RTEXT "VST Plugins:",IDC_STATIC_VSTDIR,12,72,48,12, + SS_CENTERIMAGE + EDITTEXT IDC_OPTIONS_DIR_VSTS,66,72,174,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_CHANGE_VSTDIR,246,72,12,11,NOT + WS_TABSTOP + RTEXT "VST Presets:",IDC_STATIC_VSTPRESETDIR,12,90,48,12, + SS_CENTERIMAGE + EDITTEXT IDC_OPTIONS_DIR_VSTPRESETS,66,90,174,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_CHANGE_VSTPRESETSDIR,246,90,12,11,NOT + WS_TABSTOP END IDD_OPTIONS_SOUNDCARD DIALOGEX 0, 0, 272, 276 @@ -1438,7 +1452,6 @@ CAPTION "Sound Card" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "",IDC_STATIC,5,5,232,170 LTEXT "Sound Device:",IDC_STATIC,11,14,79,8 CONTROL "",IDC_COMBO1,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,11,25,219,96 @@ -1472,6 +1485,7 @@ WS_TABSTOP,133,92,64,10 LTEXT "Note: The Pre-Amp and Soft Panning settings are ignored by songs with mix levels set to 1.17RC3 or later in Song Properties.", IDC_STATIC,17,152,204,18 + GROUPBOX "",IDC_STATIC,5,5,232,170 END IDD_MIDIMACRO DIALOGEX 0, 0, 349, 345 @@ -1930,24 +1944,24 @@ LTEXT "around current",IDC_STATIC,156,84,49,8 END -IDD_ADDSILENCE DIALOGEX 0, 0, 175, 63 +IDD_ADDSILENCE DIALOGEX 0, 0, 175, 71 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Insert Silence" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "OK",IDOK,118,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,118,25,50,14 - GROUPBOX "",IDC_STATIC,7,3,106,55 - EDITTEXT IDC_EDIT1,25,14,40,14,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "OK",IDOK,120,12,50,14 + PUSHBUTTON "Cancel",IDCANCEL,120,30,50,14 + GROUPBOX "",IDC_STATIC,6,6,108,60 + EDITTEXT IDC_EDIT1,12,18,40,14,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | - UDS_NOTHOUSANDS,57,15,11,14 - LTEXT "samples",IDC_STATIC,74,17,26,8 + UDS_NOTHOUSANDS,44,18,11,14 + LTEXT "samples",IDC_STATIC,59,21,35,8 CONTROL "At beginning of sample",IDC_RADIO1,"Button", - BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,11,32,89,10 + BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,36,97,10 CONTROL "At end of sample",IDC_RADIO2,"Button", - BS_AUTORADIOBUTTON | WS_TABSTOP,11,46,70,10 + BS_AUTORADIOBUTTON | WS_TABSTOP,12,48,97,10 END IDD_PATTERNRANDOMIZER_EFFECT DIALOGEX 0, 0, 235, 172 @@ -2239,7 +2253,7 @@ LEFTMARGIN, 7 RIGHTMARGIN, 168 TOPMARGIN, 7 - BOTTOMMARGIN, 56 + BOTTOMMARGIN, 64 END END Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-07-05 21:01:58 UTC (rev 280) +++ trunk/OpenMPT/mptrack/resource.h 2009-07-06 15:27:09 UTC (rev 281) @@ -830,6 +830,24 @@ #define IDC_DONTSHOWAGAIN 2341 #define IDC_MESSAGETEXT 2342 #define IDC_SAMPLE_DCOFFSET 2343 +#define IDC_OPTIONS_DIR_MODS 2344 +#define IDC_OPTIONS_DIR_SAMPS 2345 +#define IDC_OPTIONS_DIR_INSTS 2346 +#define IDC_OPTIONS_DIR_VSTS 2347 +#define IDC_STATIC_MODDIR 2348 +#define IDC_STATIC_SAMPDIR 2349 +#define IDC_STATIC_INSTRDIR 2350 +#define IDC_STATIC_VSTDIR 2351 +#define IDC_BUTTON_CHANGE_MODDIR 2352 +#define IDC_BUTTON_CHANGE_SAMPDIR 2353 +#define IDC_BUTTON_CHANGE_INSTRDIR 2354 +#define IDC_BUTTON_CHANGE_VSTDIR 2355 +#define IDC_STATIC_AUTOSAVE_OPTIONS 2356 +#define IDC_STATIC_AUTOSAVE_LOCATION 2357 +#define IDC_OPTIONS_DIR_VSTPRESETS 2357 +#define IDC_BUTTON_CHANGE_VSTDIR2 2358 +#define IDC_BUTTON_CHANGE_VSTPRESETSDIR 2358 +#define IDC_STATIC_VSTPRESETDIR 2359 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1067,7 +1085,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 518 #define _APS_NEXT_COMMAND_VALUE 59226 -#define _APS_NEXT_CONTROL_VALUE 2344 +#define _APS_NEXT_CONTROL_VALUE 2360 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-07-06 17:34:54
|
Revision: 282 http://modplug.svn.sourceforge.net/modplug/?rev=282&view=rev Author: saga-games Date: 2009-07-06 17:34:31 +0000 (Mon, 06 Jul 2009) Log Message: ----------- Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moptions.cpp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-07-06 15:27:09 UTC (rev 281) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-07-06 17:34:31 UTC (rev 282) @@ -2208,15 +2208,22 @@ SetDefaultDirectory(szInstrDir, DIR_INSTRUMENTS); SetDefaultDirectory(szVstDir, DIR_PLUGINS); SetDefaultDirectory(szPresetDir, DIR_PLUGINPRESETS); + return TRUE; +} - // This shouldn't be here (misc options) - m_wndToolBar.EnableFlatButtons(m_dwPatternSetup & PATTERN_FLATBUTTONS); - UpdateAllViews(HINT_MPTOPTIONS, NULL); - if (m_dwPatternSetup & PATTERN_MUTECHNMODE) +BOOL CMainFrame::SetupMiscOptions() +//--------------------------------- +{ + if (CMainFrame::m_dwPatternSetup & PATTERN_MUTECHNMODE) CSoundFile::gdwSoundSetup |= SNDMIX_MUTECHNMODE; else CSoundFile::gdwSoundSetup &= ~SNDMIX_MUTECHNMODE; - return TRUE; + + m_wndToolBar.EnableFlatButtons(m_dwPatternSetup & PATTERN_FLATBUTTONS); + + UpdateTree(NULL, HINT_MPTOPTIONS); + UpdateAllViews(HINT_MPTOPTIONS, NULL); + return true; } Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-07-06 15:27:09 UTC (rev 281) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-07-06 17:34:31 UTC (rev 282) @@ -571,6 +571,7 @@ void SwitchToActiveView(); BOOL SetupSoundCard(DWORD q, DWORD rate, UINT nbits, UINT chns, UINT bufsize, LONG wd); BOOL SetupDirectories(LPCTSTR szModDir, LPCTSTR szSampleDir, LPCTSTR szInstrDir, LPCTSTR szVstDir, LPCTSTR szPresetDir); + BOOL SetupMiscOptions(); BOOL SetupPlayer(DWORD, DWORD, BOOL bForceUpdate=FALSE); BOOL SetupMidi(DWORD d, LONG n); void SetPreAmp(UINT n); Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2009-07-06 15:27:09 UTC (rev 281) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2009-07-06 17:34:31 UTC (rev 282) @@ -782,12 +782,14 @@ if (bCheck) CMainFrame::m_dwPatternSetup |= mask; else CMainFrame::m_dwPatternSetup &= ~mask; m_CheckList.SetCheck(i, (bCheck) ? TRUE : FALSE); } + CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if (pMainFrm) { pMainFrm->SetupDirectories(szModDir, szSmpDir, szInsDir, szVstDir, szPresetDir); - pMainFrm->UpdateTree(NULL, HINT_MPTOPTIONS); + pMainFrm->SetupMiscOptions(); } + CPropertyPage::OnOK(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-07-08 09:13:00
|
Revision: 285 http://modplug.svn.sourceforge.net/modplug/?rev=285&view=rev Author: saga-games Date: 2009-07-08 08:55:44 +0000 (Wed, 08 Jul 2009) Log Message: ----------- [Mod] Compo cleanup: Resets a few more variables to default values [Fix] Mod conversion: Proper conversion between IT 8-Bit panning effect and S3M 7-Bit panning effect with surround Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Modedit.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-07-06 22:12:39 UTC (rev 284) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-07-08 08:55:44 UTC (rev 285) @@ -970,44 +970,101 @@ void CCtrlSamples::OnSampleSave() //------------------------------- { - CHAR szFileName[_MAX_PATH] = "", ext[_MAX_EXT]; + if(!m_pSndFile) return; - if ((!m_pSndFile) || (!m_nSample) || (!m_pSndFile->Ins[m_nSample].pSample)) + CHAR szFileName[_MAX_PATH] = ""; + BOOL bBatchSave = CMainFrame::GetInputHandler()->ShiftPressed(); + + if(!bBatchSave) { - SwitchToView(); - return; + // save this sample + if ((!m_nSample) || (!m_pSndFile->Ins[m_nSample].pSample)) + { + SwitchToView(); + return; + } + if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) + { + memcpy(szFileName, m_pSndFile->Ins[m_nSample].name, 22); + szFileName[22] = 0; + } else + { + memcpy(szFileName, m_pSndFile->m_szNames[m_nSample], 32); + szFileName[32] = 0; + } + if (!szFileName[0]) strcpy(szFileName, "untitled"); } - if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) + else { - memcpy(szFileName, m_pSndFile->Ins[m_nSample].name, 22); - szFileName[22] = 0; - } else - { - memcpy(szFileName, m_pSndFile->m_szNames[m_nSample], 32); - szFileName[32] = 0; + // save all samples + CString sPath = m_pSndFile->m_pModDoc->GetPathName(); + if(sPath.IsEmpty()) sPath = "untitled"; + + sPath += " - %sample_number% - "; + if(m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_MOD)) + sPath += "%sample_name%.wav"; + else + sPath += "%sample_filename%.wav"; + sPath += ".wav"; + _splitpath(sPath, NULL, NULL, szFileName, NULL); } - if (!szFileName[0]) strcpy(szFileName, "untitled"); + CFileDialog dlg(FALSE, "wav", szFileName, OFN_HIDEREADONLY| OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, "Wave File (*.wav)|*.wav|" "RAW Audio (*.raw)|*.raw||", this); - - const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_SAMPLES); - if(pszWdir[0]) - dlg.m_ofn.lpstrInitialDir = pszWdir; - + dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_SAMPLES); if (dlg.DoModal() != IDOK) return; BeginWaitCursor(); + TCHAR ext[_MAX_EXT]; _splitpath(dlg.GetPathName(), NULL, NULL, NULL, ext); + BOOL bOk = FALSE; - if (!lstrcmpi(ext, ".raw")) - bOk = m_pSndFile->SaveRAWSample(m_nSample, dlg.GetPathName()); - else - bOk = m_pSndFile->SaveWAVSample(m_nSample, dlg.GetPathName()); + UINT iMinSmp = m_nSample, iMaxSmp = m_nSample; + CString sFilename = dlg.GetPathName(), sNumberFormat; + if(bBatchSave) + { + iMinSmp = 1; + iMaxSmp = m_pSndFile->m_nSamples; + sNumberFormat.Format("%s%d%s", "%.", ((int)log10((float)iMaxSmp)) + 1, "d"); + } + + const CString sForbiddenChars = "\\/:\"?<>*"; + + for(UINT iSmp = iMinSmp; iSmp <= iMaxSmp; iSmp++) + { + if (m_pSndFile->Ins[iSmp].pSample) + { + if(bBatchSave) + { + CString sSampleNumber, sSampleName, sSampleFilename; + sSampleNumber.Format(sNumberFormat, iSmp); + + sSampleName = (m_pSndFile->m_szNames[iSmp]) ? m_pSndFile->m_szNames[iSmp] : "untitled"; + sSampleFilename = (m_pSndFile->Ins[iSmp].name[0]) ? m_pSndFile->Ins[iSmp].name : m_pSndFile->m_szNames[iSmp]; + for(UINT i = 0; i < sForbiddenChars.GetLength(); i++) + { + sSampleName.Remove(sForbiddenChars.GetAt(i)); + sSampleFilename.Remove(sForbiddenChars.GetAt(i)); + } + + //sFilename.Format("%s%s%s%s", drive, path, filename, ext); + sFilename = dlg.GetPathName(); + sFilename.Replace("%sample_number%", sSampleNumber); + sFilename.Replace("%sample_filename%", sSampleFilename); + sFilename.Replace("%sample_name%", sSampleName); + } + if (!lstrcmpi(ext, ".raw")) + bOk = m_pSndFile->SaveRAWSample(iSmp, sFilename); + else + bOk = m_pSndFile->SaveWAVSample(iSmp, sFilename); + } + } EndWaitCursor(); + if (!bOk) { ErrorBox(IDS_ERR_SAVESMP, this); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-07-06 22:12:39 UTC (rev 284) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-07-08 08:55:44 UTC (rev 285) @@ -57,7 +57,8 @@ const bool oldTypeIsMOD = (oldtype == MOD_TYPE_MOD), oldTypeIsXM = (oldtype == MOD_TYPE_XM), oldTypeIsS3M = (oldtype == MOD_TYPE_S3M), oldTypeIsIT = (oldtype == MOD_TYPE_IT), oldTypeIsMPT = (oldtype == MOD_TYPE_MPT), oldTypeIsMOD_XM = (oldTypeIsMOD || oldTypeIsXM), - oldTypeIsS3M_IT_MPT = (oldTypeIsS3M || oldTypeIsIT || oldTypeIsMPT); + oldTypeIsS3M_IT_MPT = (oldTypeIsS3M || oldTypeIsIT || oldTypeIsMPT), + oldTypeIsIT_MPT = (oldTypeIsIT || oldTypeIsMPT); const bool newTypeIsMOD = (nNewType == MOD_TYPE_MOD), newTypeIsXM = (nNewType == MOD_TYPE_XM), newTypeIsS3M = (nNewType == MOD_TYPE_S3M), newTypeIsIT = (nNewType == MOD_TYPE_IT), @@ -327,8 +328,62 @@ } } if (bBrokenNoteMap) AddToLog("WARNING: Note Mapping will be lost when saving as XM\n"); + } else + // Convert S3M to IT + if (oldTypeIsS3M && newTypeIsIT_MPT) + { + for (UINT nPat=0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) + { + MODCOMMAND *m = m_SndFile.Patterns[nPat]; + for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len--; m++) + { + switch(m->command) + { + case CMD_PANNING8: + if(m->param == 0xA4) + { + // surround remap + m->command = CMD_S3MCMDEX; + m->param = 0x91; + } + else + { + m->param = min(m->param << 1, 0xFF); + } + break; + default: + break; + } + } + } + } else + // Convert IT to S3M + if (oldTypeIsIT_MPT && newTypeIsS3M) + { + for (UINT nPat=0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) + { + MODCOMMAND *m = m_SndFile.Patterns[nPat]; + for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len--; m++) + { + switch(m->command) + { + case CMD_PANNING8: + m->param = (m->param + 1) >> 1; + case CMD_S3MCMDEX: + if(m->param == 0x91) + { + // surround remap (this is the "official" command) + m->command = CMD_PANNING8; + m->param = 0xA4; + } + default: + break; + } + } + } } - // Too many samples ? + + // Too many samples? if (newTypeIsMOD && (m_SndFile.m_nSamples > 31)) { AddToLog("WARNING: Samples above 31 will be lost when saving this file as MOD!\n"); @@ -1067,6 +1122,9 @@ // convert to IT... ChangeModType(MOD_TYPE_IT); + m_SndFile.m_nMixLevels = mixLevels_original; + m_SndFile.m_nTempoMode = tempo_mode_classic; + m_SndFile.m_dwSongFlags = SONG_LINEARSLIDES | SONG_EXFILTERRANGE; // clear order list m_SndFile.Order.Init(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-08-15 15:09:38
|
Revision: 324 http://modplug.svn.sourceforge.net/modplug/?rev=324&view=rev Author: saga-games Date: 2009-08-15 15:09:25 +0000 (Sat, 15 Aug 2009) Log Message: ----------- [Imp] Mod Conversion: Tentative conversion of Param Control effects. The conversion is obviously not lossless. [Fix] Pattern Editor: Apply Instrument to all notes won't affect Param Control and Note Fade. Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-15 12:36:22 UTC (rev 323) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-15 15:09:25 UTC (rev 324) @@ -186,8 +186,21 @@ m->param = min(m->param << 1, 0xFF); } } - } + } // End if(m->command == CMD_PANNING8) + ////////////////////////// + // Convert param control + if(oldTypeIsMPT) + { + if(m->note == NOTE_PC || m->note == NOTE_PCS) + { + m->param = min(MODCOMMAND::maxColumnValue, m->GetValueEffectCol()) * 0x7F / MODCOMMAND::maxColumnValue; + m->command = (m->note == NOTE_PC) ? CMD_MIDI : CMD_SMOOTHMIDI; + m->volcmd = VOLCMD_NONE; + m->note = NOTE_NONE; + } + } // End if(oldTypeIsMPT) + ///////////////////////////////////////// // Convert MOD / XM to S3M / IT / MPTM if(oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-08-15 12:36:22 UTC (rev 323) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-08-15 15:09:25 UTC (rev 324) @@ -2486,7 +2486,7 @@ p = pSndFile->Patterns[m_nPattern] + r * pSndFile->m_nChannels + c; // If a note or an instr is present on the row, do the change, if required. // Do not set instr if note and instr are both blank. - if ( ((p->note > 0 && p->note < NOTE_NOTECUT) ||p->instr) && (p->instr!=nIns) ) { + if ( ((p->note > 0 && p->note < NOTE_MIN_SPECIAL) ||p->instr) && (p->instr!=nIns) ) { p->instr = nIns; bModified = TRUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-08-18 23:06:19
|
Revision: 333 http://modplug.svn.sourceforge.net/modplug/?rev=333&view=rev Author: saga-games Date: 2009-08-18 23:06:08 +0000 (Tue, 18 Aug 2009) Log Message: ----------- [Fix] Pattern editor: Multiselect Pattern Duplicate shouldn't crash anymore if a non-existing pattern is being duplicated. [Ref] Instrument editor code: Making use of the new INSTRUMENTENVELOPE sub-objects to reduce redundancy A LOT; Also using bool instead of BOOL. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-08-18 20:38:41 UTC (rev 332) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-08-18 23:06:08 UTC (rev 333) @@ -873,13 +873,14 @@ if (m_pModDoc) { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); + ORD_SELECTION selection = m_OrderList.GetCurSel(false); ORDERINDEX nInsertCount = selection.nOrdHi - selection.nOrdLo; ORDERINDEX nInsertWhere = selection.nOrdLo + nInsertCount + 1; bool bSuccess = false; // has this pattern been duplicated already? (for multiselect) - PATTERNINDEX pReplaceIndex[MAX_PATTERNS]; // TODO I think this is a bit much... - memset(&pReplaceIndex, PATTERNINDEX_INVALID, sizeof(PATTERNINDEX) * MAX_PATTERNS); + vector<PATTERNINDEX> pReplaceIndex; + pReplaceIndex.resize(pSndFile->Patterns.Size(), PATTERNINDEX_INVALID); for(ORDERINDEX i = 0; i <= nInsertCount; i++) { @@ -887,13 +888,12 @@ ROWINDEX rows = 64; if (nCurPat < pSndFile->Patterns.Size() && pReplaceIndex[nCurPat] == PATTERNINDEX_INVALID) { - if ((pSndFile->Patterns[nCurPat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) - { - rows = pSndFile->PatternSize[nCurPat]; - if (rows < pSndFile->GetModSpecifications().patternRowsMin) rows = pSndFile->GetModSpecifications().patternRowsMin; - } + rows = pSndFile->PatternSize[nCurPat]; + if (rows < pSndFile->GetModSpecifications().patternRowsMin) rows = pSndFile->GetModSpecifications().patternRowsMin; + if (rows > pSndFile->GetModSpecifications().patternRowsMax) rows = pSndFile->GetModSpecifications().patternRowsMax; + PATTERNINDEX nNewPat = m_pModDoc->InsertPattern(nInsertWhere + i, rows); - if ((nNewPat >= 0) && (nNewPat < pSndFile->Patterns.Size())) + if ((nNewPat >= 0) && (nNewPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nCurPat] != nullptr)) { MODCOMMAND *pSrc = pSndFile->Patterns[nCurPat]; MODCOMMAND *pDest = pSndFile->Patterns[nNewPat]; Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2009-08-18 20:38:41 UTC (rev 332) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-08-18 23:06:08 UTC (rev 333) @@ -268,10 +268,10 @@ } -BOOL CViewInstrument::EnvSetValue(int nPoint, int nTick, int nValue) +bool CViewInstrument::EnvSetValue(int nPoint, int nTick, int nValue) //------------------------------------------------------------------ { - BOOL bOk = FALSE; + bool bOk = false; CModDoc *pModDoc = GetDocument(); if (pModDoc) { @@ -282,24 +282,14 @@ LPWORD pPoints = NULL; LPBYTE pData = NULL; UINT maxpoints = 0; - switch(m_nEnv) - { - case ENV_VOLUME: - maxpoints = pIns->VolEnv.nNodes; - pPoints = pIns->VolEnv.Ticks; - pData = pIns->VolEnv.Values; - break; - case ENV_PANNING: - maxpoints = pIns->PanEnv.nNodes; - pPoints = pIns->PanEnv.Ticks; - pData = pIns->PanEnv.Values; - break; - case ENV_PITCH: - maxpoints = pIns->PitchEnv.nNodes; - pPoints = pIns->PitchEnv.Ticks; - pData = pIns->PitchEnv.Values; - break; - } + + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return false; + + maxpoints = envelope->nNodes; + pPoints = envelope->Ticks; + pData = envelope->Values; + if (!nPoint) nTick = 0; if ((nPoint < (int)maxpoints) && (pPoints) && (pData)) { @@ -313,7 +303,7 @@ if (nTick != pPoints[nPoint]) { pPoints[nPoint] = (WORD)nTick; - bOk = TRUE; + bOk = true; } } if (nValue >= 0) @@ -322,7 +312,7 @@ if (nValue != pData[nPoint]) { pData[nPoint] = (BYTE)nValue; - bOk = TRUE; + bOk = true; } } } @@ -335,28 +325,9 @@ UINT CViewInstrument::EnvGetNumPoints() const //------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: - if (pIns->VolEnv.nNodes) return pIns->VolEnv.nNodes; - break; - case ENV_PANNING: - if (pIns->PanEnv.nNodes) return pIns->PanEnv.nNodes; - break; - case ENV_PITCH: - if (pIns->PitchEnv.nNodes) return pIns->PitchEnv.nNodes; - break; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->nNodes; } @@ -369,7 +340,7 @@ } -BOOL CViewInstrument::EnvGetLoop() const +bool CViewInstrument::EnvGetLoop() const //-------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -382,22 +353,22 @@ switch(m_nEnv) { case ENV_VOLUME: - if (pIns->dwFlags & ENV_VOLLOOP) return TRUE; + if (pIns->dwFlags & ENV_VOLLOOP) return true; break; case ENV_PANNING: - if (pIns->dwFlags & ENV_PANLOOP) return TRUE; + if (pIns->dwFlags & ENV_PANLOOP) return true; break; case ENV_PITCH: - if (pIns->dwFlags & ENV_PITCHLOOP) return TRUE; + if (pIns->dwFlags & ENV_PITCHLOOP) return true; break; } } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvGetSustain() const +bool CViewInstrument::EnvGetSustain() const //----------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -410,22 +381,22 @@ switch(m_nEnv) { case ENV_VOLUME: - if (pIns->dwFlags & ENV_VOLSUSTAIN) return TRUE; + if (pIns->dwFlags & ENV_VOLSUSTAIN) return true; break; case ENV_PANNING: - if (pIns->dwFlags & ENV_PANSUSTAIN) return TRUE; + if (pIns->dwFlags & ENV_PANSUSTAIN) return true; break; case ENV_PITCH: - if (pIns->dwFlags & ENV_PITCHSUSTAIN) return TRUE; + if (pIns->dwFlags & ENV_PITCHSUSTAIN) return true; break; } } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvGetCarry() const +bool CViewInstrument::EnvGetCarry() const //--------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -438,110 +409,58 @@ switch(m_nEnv) { case ENV_VOLUME: - if (pIns->dwFlags & ENV_VOLCARRY) return TRUE; + if (pIns->dwFlags & ENV_VOLCARRY) return true; break; case ENV_PANNING: - if (pIns->dwFlags & ENV_PANCARRY) return TRUE; + if (pIns->dwFlags & ENV_PANCARRY) return true; break; case ENV_PITCH: - if (pIns->dwFlags & ENV_PITCHCARRY) return TRUE; + if (pIns->dwFlags & ENV_PITCHCARRY) return true; break; } } } - return FALSE; + return false; } UINT CViewInstrument::EnvGetLoopStart() const //------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: return pIns->VolEnv.nLoopStart; - case ENV_PANNING: return pIns->PanEnv.nLoopStart; - case ENV_PITCH: return pIns->PitchEnv.nLoopStart; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->nLoopStart; } UINT CViewInstrument::EnvGetLoopEnd() const //----------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: return pIns->VolEnv.nLoopEnd; - case ENV_PANNING: return pIns->PanEnv.nLoopEnd; - case ENV_PITCH: return pIns->PitchEnv.nLoopEnd; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->nLoopEnd; } UINT CViewInstrument::EnvGetSustainStart() const //---------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: return pIns->VolEnv.nSustainStart; - case ENV_PANNING: return pIns->PanEnv.nSustainStart; - case ENV_PITCH: return pIns->PitchEnv.nSustainStart; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->nSustainStart; } UINT CViewInstrument::EnvGetSustainEnd() const //-------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: return pIns->VolEnv.nSustainEnd; - case ENV_PANNING: return pIns->PanEnv.nSustainEnd; - case ENV_PITCH: return pIns->PitchEnv.nSustainEnd; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->nSustainEnd; } -BOOL CViewInstrument::EnvGetVolEnv() const +bool CViewInstrument::EnvGetVolEnv() const //---------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -549,13 +468,13 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) return (pIns->dwFlags & ENV_VOLUME) ? TRUE : FALSE; + if (pIns) return (pIns->dwFlags & ENV_VOLUME) ? true : false; } - return FALSE; + return false; } -BOOL CViewInstrument::EnvGetPanEnv() const +bool CViewInstrument::EnvGetPanEnv() const //---------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -563,13 +482,13 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) return (pIns->dwFlags & ENV_PANNING) ? TRUE : FALSE; + if (pIns) return (pIns->dwFlags & ENV_PANNING) ? true : false; } - return FALSE; + return false; } -BOOL CViewInstrument::EnvGetPitchEnv() const +bool CViewInstrument::EnvGetPitchEnv() const //------------------------------------------ { CModDoc *pModDoc = GetDocument(); @@ -577,13 +496,13 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) return ((pIns->dwFlags & (ENV_PITCH|ENV_FILTER)) == ENV_PITCH) ? TRUE : FALSE; + if (pIns) return ((pIns->dwFlags & (ENV_PITCH|ENV_FILTER)) == ENV_PITCH) ? true : false; } - return FALSE; + return false; } -BOOL CViewInstrument::EnvGetFilterEnv() const +bool CViewInstrument::EnvGetFilterEnv() const //------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -591,185 +510,95 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) return ((pIns->dwFlags & (ENV_PITCH|ENV_FILTER)) == (ENV_PITCH|ENV_FILTER)) ? TRUE : FALSE; + if (pIns) return ((pIns->dwFlags & (ENV_PITCH|ENV_FILTER)) == (ENV_PITCH|ENV_FILTER)) ? true : false; } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetLoopStart(int nPoint) +bool CViewInstrument::EnvSetLoopStart(int nPoint) //----------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (nPoint >= 0) && (nPoint <= (int)EnvGetLastPoint())) + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return false; + if(nPoint < 0 || nPoint > (int)EnvGetLastPoint()) return false; + + if (nPoint != envelope->nLoopStart) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: - if (nPoint != pIns->VolEnv.nLoopStart) - { - pIns->VolEnv.nLoopStart = (BYTE)nPoint; - if (pIns->VolEnv.nLoopEnd < nPoint) pIns->VolEnv.nLoopEnd = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PANNING: - if (nPoint != pIns->PanEnv.nLoopStart) - { - pIns->PanEnv.nLoopStart = (BYTE)nPoint; - if (pIns->PanEnv.nLoopEnd < nPoint) pIns->PanEnv.nLoopEnd = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PITCH: - if (nPoint != pIns->PitchEnv.nLoopStart) - { - pIns->PitchEnv.nLoopStart = (BYTE)nPoint; - if (pIns->PitchEnv.nLoopEnd < nPoint) pIns->PitchEnv.nLoopEnd = (BYTE)nPoint; - return TRUE; - } - break; - } - } + envelope->nLoopStart = (BYTE)nPoint; + if (envelope->nLoopEnd < nPoint) envelope->nLoopEnd = (BYTE)nPoint; + return true; + } else + { + return false; } - return FALSE; } -BOOL CViewInstrument::EnvSetLoopEnd(int nPoint) +bool CViewInstrument::EnvSetLoopEnd(int nPoint) //--------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (nPoint >= 0) && (nPoint <= (int)EnvGetLastPoint())) + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return false; + if(nPoint < 0 || nPoint > (int)EnvGetLastPoint()) return false; + + if (nPoint != envelope->nLoopEnd) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: - if (nPoint != pIns->VolEnv.nLoopEnd) - { - pIns->VolEnv.nLoopEnd = (BYTE)nPoint; - if (pIns->VolEnv.nLoopStart > nPoint) pIns->VolEnv.nLoopStart = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PANNING: - if (nPoint != pIns->PanEnv.nLoopEnd) - { - pIns->PanEnv.nLoopEnd = (BYTE)nPoint; - if (pIns->PanEnv.nLoopStart > nPoint) pIns->PanEnv.nLoopStart = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PITCH: - if (nPoint != pIns->PitchEnv.nLoopEnd) - { - pIns->PitchEnv.nLoopEnd = (BYTE)nPoint; - if (pIns->PitchEnv.nLoopStart > nPoint) pIns->PitchEnv.nLoopStart = (BYTE)nPoint; - return TRUE; - } - break; - } - } + envelope->nLoopEnd = (BYTE)nPoint; + if (envelope->nLoopStart > nPoint) envelope->nLoopStart = (BYTE)nPoint; + return true; + } else + { + return false; } - return FALSE; } -BOOL CViewInstrument::EnvSetSustainStart(int nPoint) +bool CViewInstrument::EnvSetSustainStart(int nPoint) //-------------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (nPoint >= 0) && (nPoint <= (int)EnvGetLastPoint())) + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return false; + if(nPoint < 0 || nPoint > (int)EnvGetLastPoint()) return false; + + // We won't do any security checks here as GetEnvelopePtr() does that for us. + CSoundFile *pSndFile = GetDocument()->GetSoundFile(); + + if (nPoint != envelope->nSustainStart) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: - if (nPoint != pIns->VolEnv.nSustainStart) - { - pIns->VolEnv.nSustainStart = (BYTE)nPoint; - if ((pIns->VolEnv.nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->VolEnv.nSustainEnd = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PANNING: - if (nPoint != pIns->PanEnv.nSustainStart) - { - pIns->PanEnv.nSustainStart = (BYTE)nPoint; - if ((pIns->PanEnv.nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PanEnv.nSustainEnd = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PITCH: - if (nPoint != pIns->PitchEnv.nSustainStart) - { - pIns->PitchEnv.nSustainStart = (BYTE)nPoint; - if ((pIns->PitchEnv.nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PitchEnv.nSustainEnd = (BYTE)nPoint; - return TRUE; - } - break; - } - } + envelope->nSustainStart = (BYTE)nPoint; + if ((envelope->nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) envelope->nSustainEnd = (BYTE)nPoint; + return true; + } else + { + return false; } - return FALSE; } -BOOL CViewInstrument::EnvSetSustainEnd(int nPoint) +bool CViewInstrument::EnvSetSustainEnd(int nPoint) //------------------------------------------------ { - CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (nPoint >= 0) && (nPoint <= (int)EnvGetLastPoint())) + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return false; + if(nPoint < 0 || nPoint > (int)EnvGetLastPoint()) return false; + + // We won't do any security checks here as GetEnvelopePtr() does that for us. + CSoundFile *pSndFile = GetDocument()->GetSoundFile(); + + if (nPoint != envelope->nSustainEnd) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) - { - switch(m_nEnv) - { - case ENV_VOLUME: - if (nPoint != pIns->VolEnv.nSustainEnd) - { - pIns->VolEnv.nSustainEnd = (BYTE)nPoint; - if ((pIns->VolEnv.nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->VolEnv.nSustainStart = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PANNING: - if (nPoint != pIns->PanEnv.nSustainEnd) - { - pIns->PanEnv.nSustainEnd = (BYTE)nPoint; - if ((pIns->PanEnv.nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PanEnv.nSustainStart = (BYTE)nPoint; - return TRUE; - } - break; - case ENV_PITCH: - if (nPoint != pIns->PitchEnv.nSustainEnd) - { - pIns->PitchEnv.nSustainEnd = (BYTE)nPoint; - if ((pIns->PitchEnv.nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PitchEnv.nSustainStart = (BYTE)nPoint; - return TRUE; - } - break; - } - } + envelope->nSustainEnd = (BYTE)nPoint; + if ((envelope->nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) envelope->nSustainStart = (BYTE)nPoint; + return true; + } else + { + return false; } - return FALSE; } -BOOL CViewInstrument::EnvSetLoop(BOOL bLoop) +bool CViewInstrument::EnvSetLoop(bool bLoop) //------------------------------------------ { CModDoc *pModDoc = GetDocument(); @@ -786,29 +615,29 @@ case ENV_PANNING: dwMask = ENV_PANLOOP; break; case ENV_PITCH: dwMask = ENV_PITCHLOOP; break; } - if (!dwMask) return FALSE; + if (!dwMask) return false; if (bLoop) { if (!(pIns->dwFlags & dwMask)) { pIns->dwFlags |= dwMask; - return TRUE; + return true; } } else { if (pIns->dwFlags & dwMask) { pIns->dwFlags &= ~dwMask; - return TRUE; + return true; } } } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetSustain(BOOL bSustain) +bool CViewInstrument::EnvSetSustain(bool bSustain) //------------------------------------------------ { CModDoc *pModDoc = GetDocument(); @@ -825,29 +654,29 @@ case ENV_PANNING: dwMask = ENV_PANSUSTAIN; break; case ENV_PITCH: dwMask = ENV_PITCHSUSTAIN; break; } - if (!dwMask) return FALSE; + if (!dwMask) return false; if (bSustain) { if (!(pIns->dwFlags & dwMask)) { pIns->dwFlags |= dwMask; - return TRUE; + return true; } } else { if (pIns->dwFlags & dwMask) { pIns->dwFlags &= ~dwMask; - return TRUE; + return true; } } } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetCarry(BOOL bCarry) +bool CViewInstrument::EnvSetCarry(bool bCarry) //-------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -864,29 +693,29 @@ case ENV_PANNING: dwMask = ENV_PANCARRY; break; case ENV_PITCH: dwMask = ENV_PITCHCARRY; break; } - if (!dwMask) return FALSE; + if (!dwMask) return false; if (bCarry) { if (!(pIns->dwFlags & dwMask)) { pIns->dwFlags |= dwMask; - return TRUE; + return true; } } else { if (pIns->dwFlags & dwMask) { pIns->dwFlags &= ~dwMask; - return TRUE; + return true; } } } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetVolEnv(BOOL bEnable) +bool CViewInstrument::EnvSetVolEnv(bool bEnable) //---------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -912,14 +741,14 @@ { pIns->dwFlags &= ~ENV_VOLUME; } - return TRUE; + return true; } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetPanEnv(BOOL bEnable) +bool CViewInstrument::EnvSetPanEnv(bool bEnable) //---------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -945,14 +774,14 @@ { pIns->dwFlags &= ~ENV_PANNING; } - return TRUE; + return true; } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetPitchEnv(BOOL bEnable) +bool CViewInstrument::EnvSetPitchEnv(bool bEnable) //------------------------------------------------ { CModDoc *pModDoc = GetDocument(); @@ -979,14 +808,14 @@ { pIns->dwFlags &= ~(ENV_PITCH|ENV_FILTER); } - return TRUE; + return true; } } - return FALSE; + return false; } -BOOL CViewInstrument::EnvSetFilterEnv(BOOL bEnable) +bool CViewInstrument::EnvSetFilterEnv(bool bEnable) //------------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -1012,10 +841,10 @@ { pIns->dwFlags &= ~(ENV_PITCH|ENV_FILTER); } - return TRUE; + return true; } } - return FALSE; + return false; } @@ -1351,72 +1180,27 @@ } BYTE CViewInstrument::EnvGetReleaseNode() -//-------------------------------------- +//--------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) { - switch(m_nEnv) { - case ENV_VOLUME: - return pIns->VolEnv.nReleaseNode; - case ENV_PANNING: - return pIns->PanEnv.nReleaseNode; - case ENV_PITCH: - return pIns->PitchEnv.nReleaseNode; - default: - return ENV_RELEASE_NODE_UNSET; - } - } - } - return ENV_RELEASE_NODE_UNSET; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return ENV_RELEASE_NODE_UNSET; + return envelope->nReleaseNode; } WORD CViewInstrument::EnvGetReleaseNodeValue() -//-------------------------------------- +//-------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) { - switch(m_nEnv) { - case ENV_VOLUME: - return pIns->VolEnv.Values[EnvGetReleaseNode()]; - case ENV_PANNING: - return pIns->PanEnv.Values[EnvGetReleaseNode()]; - case ENV_PITCH: - return pIns->PitchEnv.Values[EnvGetReleaseNode()]; - default: - return 0; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->Values[EnvGetReleaseNode()]; } WORD CViewInstrument::EnvGetReleaseNodeTick() -//-------------------------------------- +//------------------------------------------- { - CModDoc *pModDoc = GetDocument(); - if (pModDoc) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - if (pIns) { - switch(m_nEnv) { - case ENV_VOLUME: - return pIns->VolEnv.Ticks[EnvGetReleaseNode()]; - case ENV_PANNING: - return pIns->PanEnv.Ticks[EnvGetReleaseNode()]; - case ENV_PITCH: - return pIns->PitchEnv.Ticks[EnvGetReleaseNode()]; - default: - return 0; - } - } - } - return 0; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return 0; + return envelope->Ticks[EnvGetReleaseNode()]; } @@ -1914,6 +1698,14 @@ SetCapture(); m_dwStatus |= INSSTATUS_DRAGGING; } + else + { + if(CMainFrame::GetMainFrame()->GetInputHandler()->ShiftPressed()) + { + m_ptMenu = pt; + OnEnvInsertPoint(); + } + } } } @@ -2054,29 +1846,16 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; - switch(m_nEnv) { - case ENV_VOLUME: - if (pIns->VolEnv.nReleaseNode == node) { - pIns->VolEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; - } else { - pIns->VolEnv.nReleaseNode = node; - } - break; - case ENV_PANNING: - if (pIns->PanEnv.nReleaseNode == node) { - pIns->PanEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; - } else { - pIns->PanEnv.nReleaseNode = node; - } - break; - case ENV_PITCH: - if (pIns->PitchEnv.nReleaseNode == node) { - pIns->PitchEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; - } else { - pIns->PitchEnv.nReleaseNode = node; - } - break; + + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return; + + if (envelope->nReleaseNode == node) { + envelope->nReleaseNode = ENV_RELEASE_NODE_UNSET; + } else { + envelope->nReleaseNode = node; } + pModDoc->SetModified(); InvalidateRect(NULL, FALSE); } @@ -2154,73 +1933,27 @@ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; if (pIns) { - BOOL bOk = FALSE; + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr || envelope->nNodes == 0) return; + UINT nPoint = m_nDragItem - 1; - switch(m_nEnv) + + envelope->nNodes--; + for (UINT i=nPoint; i<envelope->nNodes; i++) { - case ENV_VOLUME: - if (pIns->VolEnv.nNodes > 1) - { - pIns->VolEnv.nNodes--; - for (UINT i=nPoint; i<pIns->VolEnv.nNodes; i++) - { - pIns->VolEnv.Ticks[i] = pIns->VolEnv.Ticks[i+1]; - pIns->VolEnv.Values[i] = pIns->VolEnv.Values[i+1]; - } - if (nPoint >= pIns->VolEnv.nNodes) nPoint = pIns->VolEnv.nNodes-1; - if (pIns->VolEnv.nLoopStart > nPoint) pIns->VolEnv.nLoopStart--; - if (pIns->VolEnv.nLoopEnd > nPoint) pIns->VolEnv.nLoopEnd--; - if (pIns->VolEnv.nSustainStart > nPoint) pIns->VolEnv.nSustainStart--; - if (pIns->VolEnv.nSustainEnd > nPoint) pIns->VolEnv.nSustainEnd--; - if (pIns->VolEnv.nReleaseNode>nPoint && pIns->VolEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->VolEnv.nReleaseNode--; - pIns->VolEnv.Ticks[0] = 0; - bOk = TRUE; - } - break; - case ENV_PANNING: - if (pIns->PanEnv.nNodes > 1) - { - pIns->PanEnv.nNodes--; - for (UINT i=nPoint; i<pIns->PanEnv.nNodes; i++) - { - pIns->PanEnv.Ticks[i] = pIns->PanEnv.Ticks[i+1]; - pIns->PanEnv.Values[i] = pIns->PanEnv.Values[i+1]; - } - if (nPoint >= pIns->PanEnv.nNodes) nPoint = pIns->PanEnv.nNodes-1; - if (pIns->PanEnv.nLoopStart > nPoint) pIns->PanEnv.nLoopStart--; - if (pIns->PanEnv.nLoopEnd > nPoint) pIns->PanEnv.nLoopEnd--; - if (pIns->PanEnv.nSustainStart > nPoint) pIns->PanEnv.nSustainStart--; - if (pIns->PanEnv.nSustainEnd > nPoint) pIns->PanEnv.nSustainEnd--; - if (pIns->PanEnv.nReleaseNode>nPoint && pIns->PanEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PanEnv.nReleaseNode--; - pIns->PanEnv.Ticks[0] = 0; - bOk = TRUE; - } - break; - case ENV_PITCH: - if (pIns->PitchEnv.nNodes > 1) - { - pIns->PitchEnv.nNodes--; - for (UINT i=nPoint; i<pIns->PitchEnv.nNodes; i++) - { - pIns->PitchEnv.Ticks[i] = pIns->PitchEnv.Ticks[i+1]; - pIns->PitchEnv.Values[i] = pIns->PitchEnv.Values[i+1]; - } - if (nPoint >= pIns->PitchEnv.nNodes) nPoint = pIns->PitchEnv.nNodes-1; - if (pIns->PitchEnv.nLoopStart > nPoint) pIns->PitchEnv.nLoopStart--; - if (pIns->PitchEnv.nLoopEnd > nPoint) pIns->PitchEnv.nLoopEnd--; - if (pIns->PitchEnv.nSustainStart > nPoint) pIns->PitchEnv.nSustainStart--; - if (pIns->PitchEnv.nSustainEnd > nPoint) pIns->PitchEnv.nSustainEnd--; - if (pIns->PitchEnv.nReleaseNode>nPoint && pIns->PitchEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PitchEnv.nReleaseNode--; - pIns->PitchEnv.Ticks[0] = 0; - bOk = TRUE; - } - break; + envelope->Ticks[i] = envelope->Ticks[i + 1]; + envelope->Values[i] = envelope->Values[i + 1]; } - if (bOk) - { - pModDoc->SetModified(); - pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); - } + if (nPoint >= envelope->nNodes) nPoint = envelope->nNodes-1; + if (envelope->nLoopStart > nPoint) envelope->nLoopStart--; + if (envelope->nLoopEnd > nPoint) envelope->nLoopEnd--; + if (envelope->nSustainStart > nPoint) envelope->nSustainStart--; + if (envelope->nSustainEnd > nPoint) envelope->nSustainEnd--; + if (envelope->nReleaseNode>nPoint && envelope->nReleaseNode!=ENV_RELEASE_NODE_UNSET) envelope->nReleaseNode--; + envelope->Ticks[0] = 0; + + pModDoc->SetModified(); + pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); } } } @@ -2236,100 +1969,58 @@ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; if (pIns) { - BOOL bOk = FALSE; int nTick = ScreenToTick(m_ptMenu.x); int nValue = ScreenToValue(m_ptMenu.y); + if(nTick < 0) return; + UINT maxpoints = (pSndFile->m_nType == MOD_TYPE_XM) ? 12 : 25; //To check: Should there be MAX_ENVPOINTS? - if (nValue < 0) nValue = 0; - if (nValue > 64) nValue = 64; - if (nTick >= 0) switch(m_nEnv) + nValue = CLAMP(nValue, 0, 64); + + INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); + if(envelope == nullptr) return; + BYTE cDefaultValue; + + switch(m_nEnv) { - case ENV_VOLUME: - if (pIns->VolEnv.nNodes < maxpoints) + case ENV_VOLUME: + cDefaultValue = 64; + break; + case ENV_PANNING: + cDefaultValue = 32; + break; + case ENV_PITCH: + cDefaultValue = (pIns->dwFlags & ENV_FILTER) ? 64 : 32; + break; + default: + return; + } + + if (envelope->nNodes < maxpoints) + { + if (!envelope->nNodes) { - if (!pIns->VolEnv.nNodes) - { - pIns->VolEnv.Ticks[0] = 0; - pIns->VolEnv.Values[0] = 64; - pIns->VolEnv.nNodes = 1; - } - UINT i = 0; - for (i=0; i<pIns->VolEnv.nNodes; i++) if (nTick <= pIns->VolEnv.Ticks[i]) break; - for (UINT j=pIns->VolEnv.nNodes; j>i; j--) - { - pIns->VolEnv.Ticks[j] = pIns->VolEnv.Ticks[j-1]; - pIns->VolEnv.Values[j] = pIns->VolEnv.Values[j-1]; - } - pIns->VolEnv.Ticks[i] = (WORD)nTick; - pIns->VolEnv.Values[i] = (BYTE)nValue; - pIns->VolEnv.nNodes++; - if (pIns->VolEnv.nLoopStart >= i) pIns->VolEnv.nLoopStart++; - if (pIns->VolEnv.nLoopEnd >= i) pIns->VolEnv.nLoopEnd++; - if (pIns->VolEnv.nSustainStart >= i) pIns->VolEnv.nSustainStart++; - if (pIns->VolEnv.nSustainEnd >= i) pIns->VolEnv.nSustainEnd++; - if (pIns->VolEnv.nReleaseNode>=i && pIns->VolEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->VolEnv.nReleaseNode++; - bOk = TRUE; + envelope->Ticks[0] = 0; + envelope->Values[0] = cDefaultValue; + envelope->nNodes = 1; } - break; - case ENV_PANNING: - if (pIns->PanEnv.nNodes < maxpoints) + UINT i = 0; + for (i = 0; i < envelope->nNodes; i++) if (nTick <= envelope->Ticks[i]) break; + for (UINT j = envelope->nNodes; j > i; j--) { - if (!pIns->PanEnv.nNodes) - { - pIns->PanEnv.Ticks[0] = 0; - pIns->PanEnv.Values[0] = 32; - pIns->PanEnv.nNodes = 1; - } - UINT i = 0; - for (i=0; i<pIns->PanEnv.nNodes; i++) if (nTick <= pIns->PanEnv.Ticks[i]) break; - for (UINT j=pIns->PanEnv.nNodes; j>i; j--) - { - pIns->PanEnv.Ticks[j] = pIns->PanEnv.Ticks[j-1]; - pIns->PanEnv.Values[j] = pIns->PanEnv.Values[j-1]; - } - pIns->PanEnv.Ticks[i] = (WORD)nTick; - pIns->PanEnv.Values[i] =(BYTE)nValue; - pIns->PanEnv.nNodes++; - if (pIns->PanEnv.nLoopStart >= i) pIns->PanEnv.nLoopStart++; - if (pIns->PanEnv.nLoopEnd >= i) pIns->PanEnv.nLoopEnd++; - if (pIns->PanEnv.nSustainStart >= i) pIns->PanEnv.nSustainStart++; - if (pIns->PanEnv.nSustainEnd >= i) pIns->PanEnv.nSustainEnd++; - if (pIns->PanEnv.nReleaseNode>=i && pIns->PanEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PanEnv.nReleaseNode++; - bOk = TRUE; + envelope->Ticks[j] = envelope->Ticks[j - 1]; + envelope->Values[j] = envelope->Values[j - 1]; } - break; - case ENV_PITCH: - if (pIns->PitchEnv.nNodes < maxpoints) - { - if (!pIns->PitchEnv.nNodes) - { - pIns->PitchEnv.Ticks[0] = 0; - pIns->PitchEnv.Values[0] = 32; - pIns->PitchEnv.nNodes = 1; - } - UINT i = 0; - for (i=0; i<pIns->PitchEnv.nNodes; i++) if (nTick <= pIns->PitchEnv.Ticks[i]) break; - for (UINT j=pIns->PitchEnv.nNodes; j>i; j--) - { - pIns->PitchEnv.Ticks[j] = pIns->PitchEnv.Ticks[j-1]; - pIns->PitchEnv.Values[j] = pIns->PitchEnv.Values[j-1]; - } - pIns->PitchEnv.Ticks[i] = (WORD)nTick; - pIns->PitchEnv.Values[i] = (BYTE)nValue; - pIns->PitchEnv.nNodes++; - if (pIns->PitchEnv.nLoopStart >= i) pIns->PitchEnv.nLoopStart++; - if (pIns->PitchEnv.nLoopEnd >= i) pIns->PitchEnv.nLoopEnd++; - if (pIns->PitchEnv.nSustainStart >= i) pIns->PitchEnv.nSustainStart++; - if (pIns->PitchEnv.nSustainEnd >= i) pIns->PitchEnv.nSustainEnd++; - if (pIns->PitchEnv.nReleaseNode>=i && pIns->PitchEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PitchEnv.nReleaseNode++; - bOk = TRUE; - } - break; - } - if (bOk) - { + envelope->Ticks[i] = (WORD)nTick; + envelope->Values[i] = (BYTE)nValue; + envelope->nNodes++; + if (envelope->nLoopStart >= i) envelope->nLoopStart++; + if (envelope->nLoopEnd >= i) envelope->nLoopEnd++; + if (envelope->nSustainStart >= i) envelope->nSustainStart++; + if (envelope->nSustainEnd >= i) envelope->nSustainEnd++; + if (envelope->nReleaseNode >= i && envelope->nReleaseNode != ENV_RELEASE_NODE_UNSET) envelope->nReleaseNode++; + pModDoc->SetModified(); pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); } @@ -2719,3 +2410,34 @@ } + +INSTRUMENTENVELOPE *CViewInstrument::GetEnvelopePtr() const +//--------------------------------------------------------- +{ + // Get a pointer to the currently selected envelope. + // First do some standard checks... + CModDoc *pModDoc = GetDocument(); + if(pModDoc == nullptr) return nullptr; + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + if(pSndFile == nullptr) return nullptr; + MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; + if(pIns == nullptr) return nullptr; + + // Now for the real thing. + INSTRUMENTENVELOPE *envelope = nullptr; + + switch(m_nEnv) + { + case ENV_VOLUME: + envelope = &pIns->VolEnv; + break; + case ENV_PANNING: + envelope = &pIns->PanEnv; + break; + case ENV_PITCH: + envelope = &pIns->PitchEnv; + break; + } + + return envelope; +} Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2009-08-18 20:38:41 UTC (rev 332) +++ trunk/OpenMPT/mptrack/View_ins.h 2009-08-18 23:06:08 UTC (rev 333) @@ -41,6 +41,7 @@ public: void UpdateScrollSize(); BOOL SetCurrentInstrument(UINT nIns, UINT m_nEnv=0); + INSTRUMENTENVELOPE *GetEnvelopePtr() const; UINT EnvGetTick(int nPoint) const; UINT EnvGetValue(int nPoint) const; UINT EnvGetLastPoint() const; @@ -49,25 +50,25 @@ UINT EnvGetLoopEnd() const; UINT EnvGetSustainStart() const; UINT EnvGetSustainEnd() const; - BOOL EnvGetLoop() const; - BOOL EnvGetSustain() const; - BOOL EnvGetCarry() const; - BOOL EnvGetVolEnv() const; - BOOL EnvGetPanEnv() const; - BOOL EnvGetPitchEnv() const; - BOOL EnvGetFilterEnv() const; - BOOL EnvSetValue(int nPoint, int nTick=-1, int nValue=-1); - BOOL EnvSetLoopStart(int nPoint); - BOOL EnvSetLoopEnd(int nPoint); - BOOL EnvSetSustainStart(int nPoint); - BOOL EnvSetSustainEnd(int nPoint); - BOOL EnvSetLoop(BOOL bLoop); - BOOL EnvSetSustain(BOOL bSustain); - BOOL EnvSetCarry(BOOL bCarry); - BOOL EnvSetVolEnv(BOOL bEnable); - BOOL EnvSetPanEnv(BOOL bEnable); - BOOL EnvSetPitchEnv(BOOL bEnable); - BOOL EnvSetFilterEnv(BOOL bEnable); + bool EnvGetLoop() const; + bool EnvGetSustain() const; + bool EnvGetCarry() const; + bool EnvGetVolEnv() const; + bool EnvGetPanEnv() const; + bool EnvGetPitchEnv() const; + bool EnvGetFilterEnv() const; + bool EnvSetValue(int nPoint, int nTick=-1, int nValue=-1); + bool EnvSetLoopStart(int nPoint); + bool EnvSetLoopEnd(int nPoint); + bool EnvSetSustainStart(int nPoint); + bool EnvSetSustainEnd(int nPoint); + bool EnvSetLoop(bool bLoop); + bool EnvSetSustain(bool bSustain); + bool EnvSetCarry(bool bCarry); + bool EnvSetVolEnv(bool bEnable); + bool EnvSetPanEnv(bool bEnable); + bool EnvSetPitchEnv(bool bEnable); + bool EnvSetFilterEnv(bool bEnable); int TickToScreen(int nTick) const; int PointToScreen(int nPoint) const; int ScreenToTick(int x) const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-08-19 15:20:54
|
Revision: 334 http://modplug.svn.sourceforge.net/modplug/?rev=334&view=rev Author: saga-games Date: 2009-08-19 15:20:48 +0000 (Wed, 19 Aug 2009) Log Message: ----------- [New] (Partly from last commit): Envelope points can now be added by shift-clicking somewhere in the envelope editor. Middle mouse button click removes the nearest point. [Fix] Mod Conversion: Used MAX_CHANNELS instead of MAX_BASECHANNELS (luckily, nothing could go wrong as there are more max. virtual channels than max. chanenls) [Fix] Pattern editor: Inserting a new pattern won't resize it to 32 rows anymore if the current pattern has less than 32 rows. [Mod] Note properties / Find&Replace: Show "Note Cut", "Note Fade", "Note Off" instead of "^^", "~~" and "==" for easier understanding. Maybe this should only happen in the note properties, though. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-08-18 23:06:08 UTC (rev 333) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-08-19 15:20:48 UTC (rev 334) @@ -850,10 +850,10 @@ if ((pat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[pat]) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT))) { rows = pSndFile->PatternSize[pat]; - if (rows < 32) rows = 32; + rows = CLAMP(rows, pSndFile->GetModSpecifications().patternRowsMin, pSndFile->GetModSpecifications().patternRowsMax); } PATTERNINDEX nNewPat = m_pModDoc->InsertPattern(nCurOrd + 1, rows); - if ((nNewPat >= 0) && (nNewPat < pSndFile->Patterns.Size())) + if ((nNewPat != PATTERNINDEX_INVALID) && (nNewPat < pSndFile->Patterns.Size())) { m_OrderList.SetCurSel(nCurOrd + 1); m_OrderList.InvalidateRect(NULL, FALSE); @@ -889,11 +889,10 @@ if (nCurPat < pSndFile->Patterns.Size() && pReplaceIndex[nCurPat] == PATTERNINDEX_INVALID) { rows = pSndFile->PatternSize[nCurPat]; - if (rows < pSndFile->GetModSpecifications().patternRowsMin) rows = pSndFile->GetModSpecifications().patternRowsMin; - if (rows > pSndFile->GetModSpecifications().patternRowsMax) rows = pSndFile->GetModSpecifications().patternRowsMax; + rows = CLAMP(rows, pSndFile->GetModSpecifications().patternRowsMin, pSndFile->GetModSpecifications().patternRowsMax); PATTERNINDEX nNewPat = m_pModDoc->InsertPattern(nInsertWhere + i, rows); - if ((nNewPat >= 0) && (nNewPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nCurPat] != nullptr)) + if ((nNewPat != PATTERNINDEX_INVALID) && (nNewPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nCurPat] != nullptr)) { MODCOMMAND *pSrc = pSndFile->Patterns[nCurPat]; MODCOMMAND *pDest = pSndFile->Patterns[nNewPat]; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-18 23:06:08 UTC (rev 333) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-19 15:20:48 UTC (rev 334) @@ -159,13 +159,13 @@ ///////////////////////////// // Converting pattern data - for (UINT nPat=0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) + for (UINT nPat = 0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) { MODCOMMAND *m = m_SndFile.Patterns[nPat]; // This is used for -> MOD/XM conversion - BYTE cEffectMemory[MAX_CHANNELS][MAX_EFFECTS]; - memset(&cEffectMemory, 0, sizeof(BYTE) * MAX_CHANNELS * MAX_EFFECTS); + BYTE cEffectMemory[MAX_BASECHANNELS][MAX_EFFECTS]; + memset(&cEffectMemory, 0, sizeof(BYTE) * MAX_BASECHANNELS * MAX_EFFECTS); UINT nChannel = m_SndFile.m_nChannels - 1; for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len; m++, len--) @@ -1613,7 +1613,7 @@ { const int i = m_SndFile.Patterns.Insert(nRows); if(i < 0) - return -1; + return PATTERNINDEX_INVALID; //Increasing orderlist size if given order is beyond current limit, //or if the last order already has a pattern. Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2009-08-18 23:06:08 UTC (rev 333) +++ trunk/OpenMPT/mptrack/Mptrack.h 2009-08-19 15:20:48 UTC (rev 334) @@ -405,7 +405,8 @@ extern const BYTE gEffectColors[MAX_EFFECTS]; extern const LPCSTR szNoteNames[12]; extern const LPCTSTR szDefaultNoteNames[NOTE_MAX]; -const LPCTSTR szSpecialNoteNames[NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1] = {TEXT("PCs"), TEXT("PC"), TEXT("~~"), TEXT("^^"), TEXT("==")}; +//const LPCTSTR szSpecialNoteNames[NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1] = {TEXT("PCs"), TEXT("PC"), TEXT("~~"), TEXT("^^"), TEXT("==")}; +const LPCTSTR szSpecialNoteNames[NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1] = {TEXT("PCs"), TEXT("PC"), TEXT("Note Fade"), TEXT("Note Cut"), TEXT("Note Off")}; const LPCTSTR szSpecialNoteShortDesc[NOTE_MAX_SPECIAL - NOTE_MIN_SPECIAL + 1] = {TEXT("Param Control (Smooth)"), TEXT("Param Control"), TEXT("Note Fade"), TEXT("Note Cut"), TEXT("Note Off")}; // Make sure that special note arrays include string for every note. Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2009-08-18 23:06:08 UTC (rev 333) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-08-19 15:20:48 UTC (rev 334) @@ -62,6 +62,7 @@ ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_RBUTTONDOWN() + ON_WM_MBUTTONDOWN() ON_WM_NCLBUTTONDOWN() ON_WM_NCLBUTTONUP() ON_WM_NCLBUTTONDBLCLK() @@ -1700,6 +1701,7 @@ } else { + // Shift-Click: Insert envelope point here if(CMainFrame::GetMainFrame()->GetInputHandler()->ShiftPressed()) { m_ptMenu = pt; @@ -1756,7 +1758,18 @@ } } +void CViewInstrument::OnMButtonDown(UINT, CPoint pt) +//-------------------------------------------------- +{ + // Middle mouse button: Remove envelope point + if(EnvGetLastPoint() <= 1) return; + m_nDragItem = ScreenToPoint(pt.x, pt.y) + 1; + if(m_nDragItem == 0) return; + m_ptMenu = pt; + OnEnvRemovePoint(); +} + void CViewInstrument::OnPrevInstrument() //-------------------------------------- { Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2009-08-18 23:06:08 UTC (rev 333) +++ trunk/OpenMPT/mptrack/View_ins.h 2009-08-19 15:20:48 UTC (rev 334) @@ -111,6 +111,7 @@ afx_msg void OnLButtonDown(UINT, CPoint); afx_msg void OnLButtonUp(UINT, CPoint); afx_msg void OnRButtonDown(UINT, CPoint); + afx_msg void OnMButtonDown(UINT, CPoint); afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point); afx_msg void OnNcLButtonDown(UINT, CPoint); afx_msg void OnNcLButtonUp(UINT, CPoint); Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-08-18 23:06:08 UTC (rev 333) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-08-19 15:20:48 UTC (rev 334) @@ -916,9 +916,10 @@ combo->AddString(s); } combo->SetCurSel(nrows - specs.patternRowsMin); - wsprintf(s, "Pattern #%d:\x0d\x0a %d rows (%dK)", + wsprintf(s, "Pattern #%d:\x0d\x0a %d row%s (%dK)", m_nPattern, pSndFile->PatternSize[m_nPattern], + (pSndFile->PatternSize[m_nPattern] == 1) ? "" : "s", (pSndFile->PatternSize[m_nPattern] * pSndFile->m_nChannels * sizeof(MODCOMMAND))/1024); SetDlgItemText(IDC_TEXT1, s); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-08-30 00:07:38
|
Revision: 348 http://modplug.svn.sourceforge.net/modplug/?rev=348&view=rev Author: saga-games Date: 2009-08-30 00:07:19 +0000 (Sun, 30 Aug 2009) Log Message: ----------- [Fix] Rearrange Samples: Also remap samples on instrument "keyboard" that were removed, so that f.e. instruments with VSTis won't have unwanted samples suddenly [Fix] Order list: After inserting a single order, the list is now no more in multi-order mode. [Imp] Order list: Enable multi-order mode also when using shift + cursor keys [Ref] Some internal refactoring Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/tagging.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-08-29 14:56:14 UTC (rev 347) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-08-30 00:07:19 UTC (rev 348) @@ -44,6 +44,9 @@ void InvalidateSelection() const; UINT GetCurrentPattern() const; ORD_SELECTION GetCurSel(bool bIgnoreSelection) const; + // make the current selection the secondary selection (used for keyboard orderlist navigation) + inline void SetCurSelTo2ndSel() + {if(m_bShift && m_nScrollPos2nd == ORDERINDEX_INVALID) m_nScrollPos2nd = m_nScrollPos; else if(!m_bShift && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID;}; bool SetCurSel(ORDERINDEX sel, bool bEdit = true, bool bShiftClick = false); BOOL ProcessKeyDown(UINT nChar); BOOL ProcessChar(UINT nChar); @@ -71,7 +74,7 @@ // Returns the number of sequence items visible in the list. BYTE GetLength(); - // Return true iff given order is in margins given that first shown order + // Return true if given order is in margins given that first shown order // is 'startOrder'. Begin part of the whole sequence // is not interpreted to be in margins regardless of the margin value. bool IsOrderInMargins(int order, int startOrder); Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-08-29 14:56:14 UTC (rev 347) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-08-30 00:07:19 UTC (rev 348) @@ -307,10 +307,10 @@ switch(nChar) { case VK_UP: - case VK_LEFT: SetCurSel(m_nScrollPos - 1); break; + case VK_LEFT: SetCurSelTo2ndSel(); SetCurSel(m_nScrollPos - 1); break; case VK_DOWN: - case VK_RIGHT: SetCurSel(m_nScrollPos + 1); break; - case VK_HOME: SetCurSel(0); break; + case VK_RIGHT: SetCurSelTo2ndSel(); SetCurSel(m_nScrollPos + 1); break; + case VK_HOME: SetCurSelTo2ndSel(); SetCurSel(0); break; case VK_END: if (m_pModDoc) { @@ -318,6 +318,7 @@ ORDERINDEX i = 0; const int nSeqLength = pSndFile->Order.size(); for (i=0; i+1 < nSeqLength; i++) if (pSndFile->Order[i+1] == pSndFile->Order.GetInvalidPatIndex()) break; + SetCurSelTo2ndSel(); SetCurSel(i); } break; @@ -928,7 +929,10 @@ pSndFile->Order[nInsertEnd + i + 1] = pSndFile->Order[nInsertEnd - nInsertCount + i]; } m_nScrollPos = min(nInsertEnd + 1, pSndFile->Order.GetCount() - 1); - m_nScrollPos2nd = min(m_nScrollPos + nInsertCount, pSndFile->Order.GetCount() - 1); + if(nInsertCount > 0) + m_nScrollPos2nd = min(m_nScrollPos + nInsertCount, pSndFile->Order.GetCount() - 1); + else + m_nScrollPos2nd = ORDERINDEX_INVALID; InvalidateRect(NULL, FALSE); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-29 14:56:14 UTC (rev 347) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-30 00:07:19 UTC (rev 348) @@ -1060,7 +1060,7 @@ nSampleMap[i] = i; // First, find out which sample slots are unused and create the new sample map - for(UINT i = 1 ; i <= m_SndFile.m_nSamples; i++) { + for(SAMPLEINDEX i = 1 ; i <= m_SndFile.m_nSamples; i++) { if(!m_SndFile.Samples[i].pSample) { // Move all following samples @@ -1077,21 +1077,21 @@ BEGIN_CRITICAL(); // Now, move everything around - for(UINT i = 1; i <= m_SndFile.m_nSamples; i++) + for(SAMPLEINDEX i = 1; i <= m_SndFile.m_nSamples; i++) { - if(nSampleMap[i] && nSampleMap[i] != i) + if(nSampleMap[i] != i) { // This gotta be moved m_SndFile.MoveSample(i, nSampleMap[i]); m_SndFile.Samples[i].pSample = nullptr; strcpy(m_SndFile.m_szNames[nSampleMap[i]], m_SndFile.m_szNames[i]); - m_SndFile.m_szNames[i][0] = '\0'; + memset(m_SndFile.m_szNames[i], 0, sizeof(m_SndFile.m_szNames[i])); // Also update instrument mapping (if module is in instrument mode) - for(UINT iInstr = 1; iInstr <= m_SndFile.m_nInstruments; iInstr++){ + for(INSTRUMENTINDEX iInstr = 1; iInstr <= m_SndFile.m_nInstruments; iInstr++){ if(m_SndFile.Instruments[iInstr]){ MODINSTRUMENT *p = m_SndFile.Instruments[iInstr]; - for(WORD iNote =0; iNote < 128; iNote++) + for(WORD iNote = 0; iNote < 128; iNote++) if(p->Keyboard[iNote] == i) p->Keyboard[iNote] = nSampleMap[i]; } } @@ -1101,12 +1101,12 @@ // Go through the patterns and remap samples (if module is in sample mode) if(!m_SndFile.m_nInstruments) { - for (UINT nPat=0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) + for (PATTERNINDEX nPat = 0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) { MODCOMMAND *m = m_SndFile.Patterns[nPat]; - for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len; m++, len--) + for(UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len; m++, len--) { - if(nSampleMap[m->instr]) m->instr = nSampleMap[m->instr]; + if(m->instr <= m_SndFile.m_nSamples) m->instr = nSampleMap[m->instr]; } } } @@ -1698,7 +1698,7 @@ } if ((!m_SndFile.m_nInstruments) && ((m_SndFile.m_nSamples > 1) || (m_SndFile.Samples[1].pSample))) { - if (pDup) return -1; + if (pDup) return INSTRUMENTINDEX_INVALID; UINT n = CMainFrame::GetMainFrame()->MessageBox("Convert existing samples to instruments first?", NULL, MB_YESNOCANCEL|MB_ICONQUESTION); if (n == IDYES) { @@ -1713,7 +1713,7 @@ if (!p) { ErrorBox(IDS_ERR_OUTOFMEMORY, CMainFrame::GetMainFrame()); - return -1; + return INSTRUMENTINDEX_INVALID; } InitializeInstrument(p, smp); m_SndFile.Instruments[smp] = p; Modified: trunk/OpenMPT/mptrack/tagging.cpp =================================================================== --- trunk/OpenMPT/mptrack/tagging.cpp 2009-08-29 14:56:14 UTC (rev 347) +++ trunk/OpenMPT/mptrack/tagging.cpp 2009-08-30 00:07:19 UTC (rev 348) @@ -1,5 +1,5 @@ /* - * Purpose: File tagging (ID3v2, RIFF + more iIn the future) + * Purpose: File tagging (ID3v2, RIFF + more in the future) * Authors: OpenMPT Devs */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-06 16:09:20
|
Revision: 354 http://modplug.svn.sourceforge.net/modplug/?rev=354&view=rev Author: saga-games Date: 2009-09-06 16:09:09 +0000 (Sun, 06 Sep 2009) Log Message: ----------- [Fix] Rearrange Samples: Sample names were copied to the mod title (again...) [Fix] Treeview: Playing sounds from a soundfont was broken Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-06 12:45:07 UTC (rev 353) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2009-09-06 16:09:09 UTC (rev 354) @@ -2008,6 +2008,7 @@ m_WaveFile.m_nChannels = 4; m_WaveFile.m_nInstruments = 1; m_WaveFile.m_nSamples = 1; + m_WaveFile.Order.resize(3); m_WaveFile.Order[0] = 0; m_WaveFile.Order[1] = 1; m_WaveFile.Order[2] = m_WaveFile.Order.GetInvalidPatIndex(); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-09-06 12:45:07 UTC (rev 353) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-09-06 16:09:09 UTC (rev 354) @@ -62,7 +62,7 @@ ON_COMMAND(ID_INSTRUMENTS_REMOVEALL,OnRemoveAllInstruments) // -> CODE#0020 // -> DESC="rearrange sample list" - ON_COMMAND(ID_REARRANGE_SAMPLES, RearrangeSampleList) + ON_COMMAND(ID_REARRANGE_SAMPLES, RearrangeSamples) // -! NEW_FEATURE#0020 ON_COMMAND(ID_ESTIMATESONGLENGTH, OnEstimateSongLength) ON_COMMAND(ID_APPROX_BPM, OnApproximateBPM) @@ -1641,7 +1641,7 @@ ::MessageBox(NULL,"Warning: the exported file will not contain any of MPT's file-format hacks.", "Compatibility export warning.",MB_ICONINFORMATION | MB_OK); break; default: - ::MessageBox(NULL,"Compatibility export is currently only available for MOD and IT modules.", "Can't do compatibility export.",MB_ICONINFORMATION | MB_OK); + ::MessageBox(NULL,"Compatibility export is currently only available for MOD, XM and IT modules.", "Can't do compatibility export.",MB_ICONINFORMATION | MB_OK); return; } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-09-06 12:45:07 UTC (rev 353) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-09-06 16:09:09 UTC (rev 354) @@ -194,7 +194,7 @@ BOOL RemoveUnusedPlugs(); UINT RemovePlugs(const bool (&keepMask)[MAX_MIXPLUGINS]); BOOL RemoveUnusedPatterns(BOOL bRemove=TRUE); - void RearrangeSampleList(); + void RearrangeSamples(); BOOL CompoCleanup(); PATTERNINDEX InsertPattern(ORDERINDEX nOrd = -1, ROWINDEX nRows = 64); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-06 12:45:07 UTC (rev 353) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-06 16:09:09 UTC (rev 354) @@ -1067,8 +1067,8 @@ -void CModDoc::RearrangeSampleList() -//--------------------------------- +void CModDoc::RearrangeSamples() +//------------------------------ { if(m_SndFile.m_nSamples < 2) return; @@ -1103,7 +1103,7 @@ // This gotta be moved m_SndFile.MoveSample(i, nSampleMap[i]); m_SndFile.Samples[i].pSample = nullptr; - strcpy(m_SndFile.m_szNames[nSampleMap[i]], m_SndFile.m_szNames[i]); + if(nSampleMap[i] > 0) strcpy(m_SndFile.m_szNames[nSampleMap[i]], m_SndFile.m_szNames[i]); memset(m_SndFile.m_szNames[i], 0, sizeof(m_SndFile.m_szNames[i])); // Also update instrument mapping (if module is in instrument mode) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-06 19:53:11
|
Revision: 355 http://modplug.svn.sourceforge.net/modplug/?rev=355&view=rev Author: saga-games Date: 2009-09-06 19:53:01 +0000 (Sun, 06 Sep 2009) Log Message: ----------- [Fix] Pattern editor: Find/Replace works now, also with high instrument numbers. Also, empty instrument numbers won't be affected by "ins+1" anymore [Imp] Pattern editor: Find/Replace has "Search in whole song" and "Replace all" enabled by default. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/dlg_misc.cpp Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2009-09-06 16:09:09 UTC (rev 354) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-09-06 19:53:01 UTC (rev 355) @@ -1974,7 +1974,6 @@ if ((pModDoc) && (node>0) && (node <= EnvGetLastPoint())) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; INSTRUMENTENVELOPE *envelope = GetEnvelopePtr(); if(envelope == nullptr) return; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-06 16:09:09 UTC (rev 354) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-06 19:53:01 UTC (rev 355) @@ -25,8 +25,8 @@ MODCOMMAND CViewPattern::m_cmdOld = {0,0,0,0,0,0}; MODCOMMAND CViewPattern::m_cmdFind = {0,0,0,0,0,0}; MODCOMMAND CViewPattern::m_cmdReplace = {0,0,0,0,0,0}; -DWORD CViewPattern::m_dwFindFlags = 0; -DWORD CViewPattern::m_dwReplaceFlags = 0; +DWORD CViewPattern::m_dwFindFlags = PATSEARCH_FULLSEARCH; +DWORD CViewPattern::m_dwReplaceFlags = PATSEARCH_REPLACEALL; UINT CViewPattern::m_nFindMinChn = 0; UINT CViewPattern::m_nFindMaxChn = 0; signed char cInstrRelChange = 0; @@ -1901,11 +1901,11 @@ if ((m_dwReplaceFlags & PATSEARCH_INSTR)) { // Instr-- - if (m_cInstrRelChange == -1) - if (m->instr > 1) m->instr--; + if (m_cInstrRelChange == -1 && m->instr > 1) + m->instr--; // Instr++ - else if (m_cInstrRelChange == 1) - if (m->instr < MAX_INSTRUMENTS - 1) m->instr++; + else if (m_cInstrRelChange == 1 && m->instr > 0 && m->instr < (MAX_INSTRUMENTS - 1)) + m->instr++; else m->instr = m_cmdReplace.instr; } if ((m_dwReplaceFlags & PATSEARCH_VOLCMD)) Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2009-09-06 16:09:09 UTC (rev 354) +++ trunk/OpenMPT/mptrack/View_pat.h 2009-09-06 19:53:01 UTC (rev 355) @@ -76,7 +76,7 @@ static MODCOMMAND m_cmdFind, m_cmdReplace, m_cmdOld; static DWORD m_dwFindFlags, m_dwReplaceFlags; static UINT m_nFindMinChn, m_nFindMaxChn; - signed char m_cInstrRelChange; // relative instrument change (quick'n'dirty fix) + signed char m_cInstrRelChange; // relative instrument change (quick'n'dirty fix, this should be implemented in a less cryptic way) protected: CFastBitmap m_Dib; Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-09-06 16:09:09 UTC (rev 354) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2009-09-06 19:53:01 UTC (rev 355) @@ -847,6 +847,8 @@ // Instrument if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO2)) != NULL) { + m_nInstr = 0; + cInstrRelChange = 0; switch(combo->GetItemData(combo->GetCurSel())) { case replaceInstrumentMinusOne: @@ -857,7 +859,6 @@ break; default: m_nInstr = combo->GetItemData(combo->GetCurSel()); - cInstrRelChange = 0; break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-09 23:14:33
|
Revision: 358 http://modplug.svn.sourceforge.net/modplug/?rev=358&view=rev Author: saga-games Date: 2009-09-09 23:14:18 +0000 (Wed, 09 Sep 2009) Log Message: ----------- [Imp] Mod Conversion: Trim instrument envelopes if they're too long for the new format. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-09-09 22:43:27 UTC (rev 357) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-09-09 23:14:18 UTC (rev 358) @@ -296,6 +296,10 @@ virtual void SetModifiedFlag(BOOL bModified=TRUE); //}}AFX_VIRTUAL + // for mod conversion + bool UpdateEnvelopes(INSTRUMENTENVELOPE *mptEnv); + + // Implementation public: virtual ~CModDoc(); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-09 22:43:27 UTC (rev 357) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-09 23:14:18 UTC (rev 358) @@ -654,7 +654,7 @@ // Convert MOD/XM to S3M/IT/MPT if (oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) { - for (UINT i=1; i<=m_SndFile.m_nSamples; i++) + for (SAMPLEINDEX i=1; i<=m_SndFile.m_nSamples; i++) { m_SndFile.Samples[i].nC5Speed = CSoundFile::TransposeToFrequency(m_SndFile.Samples[i].RelativeTone, m_SndFile.Samples[i].nFineTune); m_SndFile.Samples[i].RelativeTone = 0; @@ -666,13 +666,13 @@ // Convert S3M/IT/MPT to XM if (oldTypeIsS3M_IT_MPT && newTypeIsXM) { - for (UINT i=1; i<=m_SndFile.m_nSamples; i++) + for (SAMPLEINDEX i=1; i<=m_SndFile.m_nSamples; i++) { CSoundFile::FrequencyToTranspose(&m_SndFile.Samples[i]); if (!(m_SndFile.Samples[i].uFlags & CHN_PANNING)) m_SndFile.Samples[i].nPan = 128; } bool bBrokenNoteMap = false, bBrokenSustainLoop = false; - for (UINT j = 1; j <= m_SndFile.m_nInstruments; j++) + for (INSTRUMENTINDEX j = 1; j <= m_SndFile.m_nInstruments; j++) { MODINSTRUMENT *pIns = m_SndFile.Instruments[j]; if (pIns) @@ -747,6 +747,16 @@ m_SndFile.m_nDefaultTempo = CLAMP(m_SndFile.m_nDefaultTempo, specs.tempoMin, specs.tempoMax); m_SndFile.m_nDefaultSpeed = CLAMP(m_SndFile.m_nDefaultSpeed, specs.speedMin, specs.speedMax); + bool bTrimmedEnvelopes = false; + for(INSTRUMENTINDEX i = 1; i <= m_SndFile.m_nInstruments; i++) + { + bTrimmedEnvelopes |= UpdateEnvelopes(&m_SndFile.Instruments[i]->VolEnv); + bTrimmedEnvelopes |= UpdateEnvelopes(&m_SndFile.Instruments[i]->PanEnv); + bTrimmedEnvelopes |= UpdateEnvelopes(&m_SndFile.Instruments[i]->PitchEnv); + } + if(bTrimmedEnvelopes == true) + AddToLog("WARNING: Instrument envelopes have been shortened.\n"); + SetModified(); ClearUndo(); UpdateAllViews(NULL, HINT_MODTYPE | HINT_MODGENERAL); @@ -754,11 +764,32 @@ return TRUE; } +bool CModDoc::UpdateEnvelopes(INSTRUMENTENVELOPE *mptEnv) +//------------------------------------------------------- +{ + // shorten instrument envelope if necessary (for mod conversion) + const int iEnvMax = m_SndFile.GetModSpecifications().envelopePointsMax; + bool bResult = false; + #define TRIMENV(i) if(i > iEnvMax) {i = iEnvMax; bResult = true;} + TRIMENV(mptEnv->nNodes); + TRIMENV(mptEnv->nLoopStart); + TRIMENV(mptEnv->nLoopEnd); + TRIMENV(mptEnv->nSustainStart); + TRIMENV(mptEnv->nSustainEnd); + TRIMENV(mptEnv->nReleaseNode); + #undef TRIMENV + return bResult; +} + + + + + // Change the number of channels BOOL CModDoc::ChangeNumChannels(UINT nNewChannels, const bool showCancelInRemoveDlg) //------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-10 13:31:46
|
Revision: 359 http://modplug.svn.sourceforge.net/modplug/?rev=359&view=rev Author: saga-games Date: 2009-09-10 13:31:37 +0000 (Thu, 10 Sep 2009) Log Message: ----------- [Fix] Instrument editor: Can now also copy long MPTM envelopes [Ref] Make use of the new envelope struct in envelope c&p and scale env points code Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-09 23:14:18 UTC (rev 358) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-10 13:31:37 UTC (rev 359) @@ -2388,71 +2388,51 @@ { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); HANDLE hCpy; - CHAR s[1024]; + CHAR s[4096]; MODINSTRUMENT *pIns; DWORD dwMemSize; - UINT susBegin, susEnd, loopBegin, loopEnd, bSus, bLoop, bCarry, nPoints, releaseNode; - WORD *pPoints; - BYTE *pValues; + UINT bSus, bLoop, bCarry; if ((nIns < 1) || (nIns > m_SndFile.m_nInstruments) || (!m_SndFile.Instruments[nIns]) || (!pMainFrm)) return FALSE; BeginWaitCursor(); pIns = m_SndFile.Instruments[nIns]; + + INSTRUMENTENVELOPE *pEnv = nullptr; + switch(nEnv) { case ENV_PANNING: - pPoints = pIns->PanEnv.Ticks; - pValues = pIns->PanEnv.Values; - nPoints = pIns->PanEnv.nNodes; - bLoop = (pIns->dwFlags & ENV_PANLOOP) ? TRUE : FALSE; - bSus = (pIns->dwFlags & ENV_PANSUSTAIN) ? TRUE : FALSE; - bCarry = (pIns->dwFlags & ENV_PANCARRY) ? TRUE : FALSE; - susBegin = pIns->PanEnv.nSustainStart; - susEnd = pIns->PanEnv.nSustainEnd; - loopBegin = pIns->PanEnv.nLoopStart; - loopEnd = pIns->PanEnv.nLoopEnd; - releaseNode = pIns->PanEnv.nReleaseNode; + pEnv = &pIns->PanEnv; + bLoop = (pIns->dwFlags & ENV_PANLOOP) ? 1 : 0; + bSus = (pIns->dwFlags & ENV_PANSUSTAIN) ? 1 : 0; + bCarry = (pIns->dwFlags & ENV_PANCARRY) ? 1 : 0; break; case ENV_PITCH: - pPoints = pIns->PitchEnv.Ticks; - pValues = pIns->PitchEnv.Values; - nPoints = pIns->PitchEnv.nNodes; - bLoop = (pIns->dwFlags & ENV_PITCHLOOP) ? TRUE : FALSE; - bSus = (pIns->dwFlags & ENV_PITCHSUSTAIN) ? TRUE : FALSE; - bCarry = (pIns->dwFlags & ENV_PITCHCARRY) ? TRUE : FALSE; - susBegin = pIns->PitchEnv.nSustainStart; - susEnd = pIns->PitchEnv.nSustainEnd; - loopBegin = pIns->PitchEnv.nLoopStart; - loopEnd = pIns->PitchEnv.nLoopEnd; - releaseNode = pIns->PitchEnv.nReleaseNode; + pEnv = &pIns->PitchEnv; + bLoop = (pIns->dwFlags & ENV_PITCHLOOP) ? 1 : 0; + bSus = (pIns->dwFlags & ENV_PITCHSUSTAIN) ? 1 : 0; + bCarry = (pIns->dwFlags & ENV_PITCHCARRY) ? 1 : 0; break; default: - pPoints = pIns->VolEnv.Ticks; - pValues = pIns->VolEnv.Values; - nPoints = pIns->VolEnv.nNodes; - bLoop = (pIns->dwFlags & ENV_VOLLOOP) ? TRUE : FALSE; - bSus = (pIns->dwFlags & ENV_VOLSUSTAIN) ? TRUE : FALSE; - bCarry = (pIns->dwFlags & ENV_VOLCARRY) ? TRUE : FALSE; - susBegin = pIns->VolEnv.nSustainStart; - susEnd = pIns->VolEnv.nSustainEnd; - loopBegin = pIns->VolEnv.nLoopStart; - loopEnd = pIns->VolEnv.nLoopEnd; - releaseNode = pIns->VolEnv.nReleaseNode; + pEnv = &pIns->VolEnv; + bLoop = (pIns->dwFlags & ENV_VOLLOOP) ? 1 : 0; + bSus = (pIns->dwFlags & ENV_VOLSUSTAIN) ? 1 : 0; + bCarry = (pIns->dwFlags & ENV_VOLCARRY) ? 1 : 0; break; } strcpy(s, pszEnvHdr); - wsprintf(s+strlen(s), pszEnvFmt, nPoints, susBegin, susEnd, loopBegin, loopEnd, bSus, bLoop, bCarry); - for (UINT i=0; i<nPoints; i++) + wsprintf(s + strlen(s), pszEnvFmt, pEnv->nNodes, pEnv->nSustainStart, pEnv->nSustainEnd, pEnv->nLoopStart, pEnv->nLoopEnd, bSus, bLoop, bCarry); + for (UINT i = 0; i < pEnv->nNodes; i++) { if (strlen(s) >= sizeof(s)-32) break; - wsprintf(s+strlen(s), "%d,%d\x0D\x0A", pPoints[i], pValues[i]); + wsprintf(s+strlen(s), "%d,%d\x0D\x0A", pEnv->Ticks[i], pEnv->Values[i]); } //Writing release node if(strlen(s) < sizeof(s) - 32) - wsprintf(s+strlen(s), "%u\x0D\x0A", releaseNode); + wsprintf(s+strlen(s), "%u\x0D\x0A", pEnv->nReleaseNode); dwMemSize = strlen(s)+1; if ((pMainFrm->OpenClipboard()) && ((hCpy = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, dwMemSize))!=NULL)) @@ -2486,6 +2466,8 @@ if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL)) { MODINSTRUMENT *pIns = m_SndFile.Instruments[nIns]; + INSTRUMENTENVELOPE *pEnv = nullptr; + UINT susBegin=0, susEnd=0, loopBegin=0, loopEnd=0, bSus=0, bLoop=0, bCarry=0, nPoints=0, releaseNode = ENV_RELEASE_NODE_UNSET; DWORD dwMemSize = GlobalSize(hCpy), dwPos = strlen(pszEnvHdr); if ((dwMemSize > dwPos) && (!_strnicmp(p, pszEnvHdr, dwPos-2))) @@ -2508,60 +2490,45 @@ } while ((dwPos < dwMemSize) && ((p[dwPos] >= '0') && (p[dwPos] <= '9'))) dwPos++; } - if (nPoints > 31) nPoints = 31; + nPoints = min(nPoints, m_SndFile.GetModSpecifications().envelopePointsMax); if (susEnd >= nPoints) susEnd = 0; if (susBegin > susEnd) susBegin = susEnd; if (loopEnd >= nPoints) loopEnd = 0; if (loopBegin > loopEnd) loopBegin = loopEnd; - WORD *pPoints; - BYTE *pValues; + switch(nEnv) { case ENV_PANNING: - pPoints = pIns->PanEnv.Ticks; - pValues = pIns->PanEnv.Values; - pIns->PanEnv.nNodes = nPoints; + pEnv = &pIns->PanEnv; pIns->dwFlags &= ~(ENV_PANLOOP|ENV_PANSUSTAIN|ENV_PANCARRY); if (bLoop) pIns->dwFlags |= ENV_PANLOOP; if (bSus) pIns->dwFlags |= ENV_PANSUSTAIN; if (bCarry) pIns->dwFlags |= ENV_PANCARRY; - pIns->PanEnv.nSustainStart = susBegin; - pIns->PanEnv.nSustainEnd = susEnd; - pIns->PanEnv.nLoopStart = loopBegin; - pIns->PanEnv.nLoopEnd = loopEnd; - pIns->PanEnv.nReleaseNode = releaseNode; break; case ENV_PITCH: - pPoints = pIns->PitchEnv.Ticks; - pValues = pIns->PitchEnv.Values; - pIns->PitchEnv.nNodes = nPoints; + pEnv = &pIns->PitchEnv; pIns->dwFlags &= ~(ENV_PITCHLOOP|ENV_PITCHSUSTAIN|ENV_PITCHCARRY); if (bLoop) pIns->dwFlags |= ENV_PITCHLOOP; if (bSus) pIns->dwFlags |= ENV_PITCHSUSTAIN; if (bCarry) pIns->dwFlags |= ENV_PITCHCARRY; - pIns->PitchEnv.nSustainStart = susBegin; - pIns->PitchEnv.nSustainEnd = susEnd; - pIns->PitchEnv.nLoopStart = loopBegin; - pIns->PitchEnv.nLoopEnd = loopEnd; - pIns->PitchEnv.nReleaseNode = releaseNode; break; default: - pPoints = pIns->VolEnv.Ticks; - pValues = pIns->VolEnv.Values; - pIns->VolEnv.nNodes = nPoints; + pEnv = &pIns->VolEnv; pIns->dwFlags &= ~(ENV_VOLLOOP|ENV_VOLSUSTAIN|ENV_VOLCARRY); if (bLoop) pIns->dwFlags |= ENV_VOLLOOP; if (bSus) pIns->dwFlags |= ENV_VOLSUSTAIN; if (bCarry) pIns->dwFlags |= ENV_VOLCARRY; - pIns->VolEnv.nSustainStart = susBegin; - pIns->VolEnv.nSustainEnd = susEnd; - pIns->VolEnv.nLoopStart = loopBegin; - pIns->VolEnv.nLoopEnd = loopEnd; - pIns->VolEnv.nReleaseNode = releaseNode; break; } + pEnv->nNodes = nPoints; + pEnv->nSustainStart = susBegin; + pEnv->nSustainEnd = susEnd; + pEnv->nLoopStart = loopBegin; + pEnv->nLoopEnd = loopEnd; + pEnv->nReleaseNode = releaseNode; + int oldn = 0; for (UINT i=0; i<nPoints; i++) { @@ -2573,8 +2540,8 @@ if (dwPos >= dwMemSize) break; int n2 = atoi(p+dwPos); if ((n1 < oldn) || (n1 > 0x3FFF)) n1 = oldn+1; - pPoints[i] = (WORD)n1; - pValues[i] = (BYTE)n2; + pEnv->Ticks[i] = (WORD)n1; + pEnv->Values[i] = (BYTE)n2; oldn = n1; while ((dwPos < dwMemSize) && (p[dwPos] != 0x0D)) dwPos++; if (dwPos >= dwMemSize) break; @@ -2585,20 +2552,7 @@ { BYTE r = static_cast<BYTE>(atoi(p + dwPos)); if(r == 0 || r >= nPoints) r = ENV_RELEASE_NODE_UNSET; - switch(nEnv) - { - case ENV_PANNING: - pIns->PanEnv.nReleaseNode = r; - break; - - case ENV_PITCH: - pIns->PitchEnv.nReleaseNode = r; - break; - - default: - pIns->VolEnv.nReleaseNode = r; - break; - } + pEnv->nReleaseNode = r; } } GlobalUnlock(hCpy); Modified: trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp 2009-09-09 23:14:18 UTC (rev 358) +++ trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp 2009-09-10 13:31:37 UTC (rev 359) @@ -45,36 +45,20 @@ float factor = ConvertStrTo<float>(buffer); if(factor > 0) { - WORD (*array)[MAX_ENVPOINTS] = NULL; - UINT* arraySize = NULL; + INSTRUMENTENVELOPE *pEnv = nullptr; switch(m_Env) { - case ENV_VOLUME: - array = &m_pInstrument->VolEnv.Ticks; - arraySize = &m_pInstrument->VolEnv.nNodes; - break; - - case ENV_PANNING: - array = &m_pInstrument->PanEnv.Ticks; - arraySize = &m_pInstrument->PanEnv.nNodes; - break; - - case ENV_PITCH: - array = &m_pInstrument->PitchEnv.Ticks; - arraySize = &m_pInstrument->PitchEnv.nNodes; - break; + case ENV_PANNING: pEnv = &m_pInstrument->PanEnv; break; + case ENV_PITCH: pEnv = &m_pInstrument->PitchEnv; break; + default: pEnv = &m_pInstrument->VolEnv; break; } - - if(array && arraySize) + for(UINT i = 0; i< pEnv->nNodes; i++) { - for(UINT i = 0; i<*arraySize; i++) - { - (*array)[i] = static_cast<WORD>(factor * (*array)[i]); + pEnv->Ticks[i] = static_cast<WORD>(factor * pEnv->Ticks[i]); - //Checking that the order of points is preserved. - if(i > 0 && (*array)[i] <= (*array)[i-1]) - (*array)[i] = (*array)[i-1]+1; - } + //Checking that the order of points is preserved. + if(i > 0 && pEnv->Ticks[i] <= pEnv->Ticks[i - 1]) + pEnv->Ticks[i] = pEnv->Ticks[i - 1] + 1; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sag...@us...> - 2009-09-13 20:41:39
|
Revision: 363 http://modplug.svn.sourceforge.net/modplug/?rev=363&view=rev Author: saga-games Date: 2009-09-13 20:41:27 +0000 (Sun, 13 Sep 2009) Log Message: ----------- [New] Sequence Editor: Added context menu item "Render to wave", to render one ore more patterns to wave. [New] Sample Editor: Added setting "FinetuneStep" to INI section "Sample Editor" [Fix] Sample Editor: When using the spin control, frequency is not clamped to [2000, 96000] anymore. [Imp] Pattern Editor: Don't reset "replace all" flag after every search Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Ctrl_smp.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/mod2wave.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-09-13 20:41:27 UTC (rev 363) @@ -101,6 +101,7 @@ afx_msg void OnSwitchToView(); afx_msg void OnInsertOrder(); afx_msg void OnDeleteOrder(); + afx_msg void OnRenderOrder(); afx_msg void OnPatternProperties(); afx_msg void OnPlayerPlay(); afx_msg void OnPlayerPause(); Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-09-13 20:41:27 UTC (rev 363) @@ -43,6 +43,7 @@ ON_COMMAND(ID_CONTROLTAB, OnSwitchToView) ON_COMMAND(ID_ORDERLIST_INSERT, OnInsertOrder) ON_COMMAND(ID_ORDERLIST_DELETE, OnDeleteOrder) + ON_COMMAND(ID_ORDERLIST_RENDER, OnRenderOrder) ON_COMMAND(ID_PATTERN_PROPERTIES, OnPatternProperties) ON_COMMAND(ID_PLAYER_PLAY, OnPlayerPlay) ON_COMMAND(ID_PLAYER_PAUSE, OnPlayerPause) @@ -831,6 +832,9 @@ AppendMenu(hMenu, MF_STRING | greyed, ID_PATTERN_PROPERTIES, "&Properties..."); } } + AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); + AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_RENDER, "Render to &Wave"); + ClientToScreen(&pt); ::TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, m_hWnd, NULL); ::DestroyMenu(hMenu); @@ -939,7 +943,14 @@ } } +void COrderList::OnRenderOrder() +//------------------------------ +{ + ORD_SELECTION selection = GetCurSel(false); + m_pModDoc->OnFileWaveConvert(selection.nOrdLo, selection.nOrdHi); +} + void COrderList::OnDeleteOrder() //------------------------------ { Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-09-13 20:41:27 UTC (rev 363) @@ -402,6 +402,9 @@ } } SetCurrentSample((lParam > 0) ? lParam : m_nSample); + + m_nFinetuneStep = CMainFrame::GetPrivateProfileLong("Sample Editor", "FinetuneStep", 25, theApp.GetConfigFileName()); + // Initial Update // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] if (!m_bInitialized) UpdateView((m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_MODTYPE, NULL); @@ -3121,12 +3124,10 @@ { if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) { - LONG d = pSmp->nC5Speed; + UINT d = pSmp->nC5Speed; if (d < 1) d = 8363; - d += (pos * 25); - if (d > 96000) d = 96000; - if (d < 2000) d = 2000; - pSmp->nC5Speed = d; + d += (pos * m_nFinetuneStep); + pSmp->nC5Speed = CLAMP(d, 579, 139921); // B-8, C-1 int transp = CSoundFile::FrequencyToTranspose(pSmp->nC5Speed) >> 7; int basenote = 60 - transp; if (basenote < BASENOTE_MIN) basenote = BASENOTE_MIN; Modified: trunk/OpenMPT/mptrack/Ctrl_smp.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.h 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Ctrl_smp.h 2009-09-13 20:41:27 UTC (rev 363) @@ -23,6 +23,7 @@ uint32 m_nSequenceMs; uint32 m_nSeekWindowMs; uint32 m_nOverlapMs; + uint16 m_nFinetuneStep; // Increment finetune by x when using spin control. Default = 25 enum {nDefaultStretchChunkSize = 8192}; CComboBox m_ComboPitch, m_ComboQuality, m_ComboFFT; Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2009-09-13 20:41:27 UTC (rev 363) @@ -57,14 +57,24 @@ END_MESSAGE_MAP() -CWaveConvert::CWaveConvert(CWnd *parent):CDialog(IDD_WAVECONVERT, parent) -//----------------------------------------------------------------------- +CWaveConvert::CWaveConvert(CWnd *parent, ORDERINDEX nMinOrder, ORDERINDEX nMaxOrder): + CDialog(IDD_WAVECONVERT, parent) +//----------------------------------------------------------------------------------- { m_bGivePlugsIdleTime = false; m_bNormalize = FALSE; m_bHighQuality = FALSE; m_bSelectPlay = FALSE; - m_nMinOrder = m_nMaxOrder = 0; + if(nMinOrder != ORDERINDEX_INVALID && nMaxOrder != ORDERINDEX_INVALID) + { + // render selection + m_nMinOrder = nMinOrder; + m_nMaxOrder = nMaxOrder; + m_bSelectPlay = true; + } else + { + m_nMinOrder = m_nMaxOrder = 0; + } m_dwFileLimit = 0; m_dwSongLimit = 0; memset(&WaveFormat, 0, sizeof(WaveFormat)); @@ -110,6 +120,8 @@ SetDlgItemInt(IDC_EDIT3, m_nMinOrder); SetDlgItemInt(IDC_EDIT4, m_nMaxOrder); + + for (UINT i=0; i<NUMMIXRATE; i++) { UINT n = nMixingRates[i]; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-09-13 20:41:27 UTC (rev 363) @@ -1388,6 +1388,12 @@ void CModDoc::OnFileWaveConvert() //------------------------------- { + OnFileWaveConvert(0, 0); +} + +void CModDoc::OnFileWaveConvert(ORDERINDEX nMinOrder, ORDERINDEX nMaxOrder) +//------------------------------------------------------------------------- +{ TCHAR fname[_MAX_FNAME]=""; CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); @@ -1398,7 +1404,7 @@ "Wave Files (*.wav)|*.wav||", pMainFrm); dlg.m_ofn.lpstrInitialDir = CMainFrame::GetWorkingDirectory(DIR_EXPORT); - CWaveConvert wsdlg(pMainFrm); + CWaveConvert wsdlg(pMainFrm, nMinOrder, nMaxOrder); if (wsdlg.DoModal() != IDOK) return; if (dlg.DoModal() != IDOK) return; //rewbs: made filename dialog appear after wav settings dialog @@ -1409,9 +1415,7 @@ strcpy(s, dlg.GetPathName()); // Saving as wave file -// -> CODE#0024 -// -> DESC="wav export update" - UINT p = 0,n = 1; + UINT p = 0, n = 1; DWORD flags[MAX_BASECHANNELS]; CHAR channel[MAX_CHANNELNAME+10]; @@ -1434,38 +1438,12 @@ dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; dwcdlg.m_nMaxPatterns = (wsdlg.m_bSelectPlay) ? wsdlg.m_nMaxOrder - wsdlg.m_nMinOrder + 1 : 0; //if(wsdlg.m_bHighQuality) CSoundFile::SetResamplingMode(SRCMODE_POLYPHASE); -// -! NEW_FEATURE#0024 BOOL bplaying = FALSE; UINT pos = m_SndFile.GetCurrentPos(); bplaying = TRUE; pMainFrm->PauseMod(); -// rewbs.fix3239: moved position definition into loop below -/* m_SndFile.SetCurrentPos(0); - if (wsdlg.m_bSelectPlay) - { - m_SndFile.SetCurrentOrder(wsdlg.m_nMinOrder); - m_SndFile.m_nCurrentPattern = wsdlg.m_nMinOrder; - m_SndFile.GetLength(TRUE, FALSE); - m_SndFile.m_nMaxOrderPosition = wsdlg.m_nMaxOrder + 1; - } -*/ -//end rewbs.fix3239: moved position definition into loop below - // Saving file - -// -> CODE#0024 -// -> DESC="wav export update" -// CDoWaveConvert dwcdlg(&m_SndFile, s, &wsdlg.WaveFormat.Format, wsdlg.m_bNormalize, pMainFrm); -// dwcdlg.m_dwFileLimit = wsdlg.m_dwFileLimit; -// dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; -// dwcdlg.m_nMaxPatterns = (wsdlg.m_bSelectPlay) ? wsdlg.m_nMaxOrder - wsdlg.m_nMinOrder + 1 : 0; -// if (wsdlg.m_bHighQuality) -// { -// CSoundFile::SetResamplingMode(SRCMODE_POLYPHASE); -// } -// dwcdlg.DoModal(); - for(UINT i = 0 ; i < n ; i++){ // Channel mode @@ -1504,7 +1482,6 @@ if(wsdlg.m_bChannelMode){ for(UINT i = 0 ; i < n ; i++) m_SndFile.ChnSettings[i].dwFlags = flags[i]; } -// -! NEW_FEATURE#0024 m_SndFile.SetCurrentPos(pos); m_SndFile.GetLength(TRUE); Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/Moddoc.h 2009-09-13 20:41:27 UTC (rev 363) @@ -268,6 +268,8 @@ CSize GetOldPatternScrollbarsPos() const { return m_szOldPatternScrollbarsPos; }; void SetOldPatternScrollbarsPos( CSize s ){ m_szOldPatternScrollbarsPos = s; }; + void OnFileWaveConvert(ORDERINDEX nMinOrder, ORDERINDEX nMaxOrder); + // protected members protected: CSize m_szOldPatternScrollbarsPos; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-09-13 20:41:27 UTC (rev 363) @@ -1946,7 +1946,7 @@ m_bContinueSearch = TRUE; EndWaitCursor(); // Display search results - m_dwReplaceFlags &= ~PATSEARCH_REPLACEALL; + //m_dwReplaceFlags &= ~PATSEARCH_REPLACEALL; if (!nFound) { if (m_dwFindFlags & PATSEARCH_NOTE) Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/mod2wave.h 2009-09-13 20:41:27 UTC (rev 363) @@ -14,7 +14,7 @@ ULONGLONG m_dwFileLimit; DWORD m_dwSongLimit; BOOL m_bSelectPlay, m_bNormalize, m_bHighQuality, m_bGivePlugsIdleTime; - UINT m_nMinOrder, m_nMaxOrder; + ORDERINDEX m_nMinOrder, m_nMaxOrder; CComboBox m_CbnSampleRate, m_CbnSampleFormat; CEdit m_EditMinOrder, m_EditMaxOrder; @@ -24,7 +24,7 @@ // -! NEW_FEATURE#0024 public: - CWaveConvert(CWnd *parent); + CWaveConvert(CWnd *parent, ORDERINDEX nMinOrder = ORDERINDEX_INVALID, ORDERINDEX nMaxOrder = ORDERINDEX_INVALID); public: void UpdateDialog(); Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-09-13 13:44:24 UTC (rev 362) +++ trunk/OpenMPT/mptrack/resource.h 2009-09-13 20:41:27 UTC (rev 363) @@ -1116,6 +1116,7 @@ #define ID_OVERFLOWPASTE 59226 #define ID_NOTEMAP_COPY_NOTE 59227 #define ID_CLEANUP_REARRANGESAMPLES 59228 +#define ID_ORDERLIST_RENDER 59229 // Next default values for new objects // @@ -1123,7 +1124,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 521 -#define _APS_NEXT_COMMAND_VALUE 59229 +#define _APS_NEXT_COMMAND_VALUE 59230 #define _APS_NEXT_CONTROL_VALUE 2387 #define _APS_NEXT_SYMED_VALUE 901 #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |