You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(1) |
Feb
(2) |
Mar
(3) |
Apr
(2) |
May
(10) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(4) |
Aug
(6) |
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(4) |
2009 |
Jan
(9) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(6) |
Jun
(18) |
Jul
(33) |
Aug
(39) |
Sep
(33) |
Oct
(24) |
Nov
(23) |
Dec
(22) |
2010 |
Jan
(29) |
Feb
(32) |
Mar
(51) |
Apr
(17) |
May
(31) |
Jun
(21) |
Jul
(32) |
Aug
(28) |
Sep
(35) |
Oct
(27) |
Nov
(11) |
Dec
(13) |
2011 |
Jan
(14) |
Feb
(13) |
Mar
(27) |
Apr
(27) |
May
(28) |
Jun
(20) |
Jul
(43) |
Aug
(52) |
Sep
(66) |
Oct
(61) |
Nov
(11) |
Dec
(8) |
2012 |
Jan
(20) |
Feb
(30) |
Mar
(38) |
Apr
(21) |
May
(33) |
Jun
(21) |
Jul
(25) |
Aug
(9) |
Sep
(24) |
Oct
(42) |
Nov
(27) |
Dec
(41) |
2013 |
Jan
(20) |
Feb
(35) |
Mar
(156) |
Apr
(298) |
May
(258) |
Jun
(201) |
Jul
(105) |
Aug
(60) |
Sep
(193) |
Oct
(245) |
Nov
(280) |
Dec
(194) |
2014 |
Jan
(63) |
Feb
(202) |
Mar
(200) |
Apr
(23) |
May
(53) |
Jun
(105) |
Jul
(18) |
Aug
(26) |
Sep
(110) |
Oct
(187) |
Nov
(97) |
Dec
(74) |
2015 |
Jan
(45) |
Feb
(55) |
Mar
(116) |
Apr
(116) |
May
(193) |
Jun
(164) |
Jul
(50) |
Aug
(111) |
Sep
(98) |
Oct
(71) |
Nov
(103) |
Dec
(63) |
2016 |
Jan
(33) |
Feb
(101) |
Mar
(182) |
Apr
(139) |
May
(140) |
Jun
(103) |
Jul
(165) |
Aug
(286) |
Sep
(208) |
Oct
(127) |
Nov
(97) |
Dec
(54) |
2017 |
Jan
(64) |
Feb
(335) |
Mar
(202) |
Apr
(212) |
May
(139) |
Jun
(127) |
Jul
(294) |
Aug
(154) |
Sep
(170) |
Oct
(152) |
Nov
(156) |
Dec
(62) |
2018 |
Jan
(168) |
Feb
(237) |
Mar
(196) |
Apr
(174) |
May
(174) |
Jun
(161) |
Jul
(127) |
Aug
(88) |
Sep
(149) |
Oct
(66) |
Nov
(52) |
Dec
(135) |
2019 |
Jan
(146) |
Feb
(126) |
Mar
(104) |
Apr
(58) |
May
(60) |
Jun
(28) |
Jul
(197) |
Aug
(129) |
Sep
(141) |
Oct
(148) |
Nov
(63) |
Dec
(100) |
2020 |
Jan
(74) |
Feb
(37) |
Mar
(59) |
Apr
(154) |
May
(194) |
Jun
(133) |
Jul
(313) |
Aug
(197) |
Sep
(49) |
Oct
(162) |
Nov
(143) |
Dec
(57) |
2021 |
Jan
(120) |
Feb
(107) |
Mar
(314) |
Apr
(157) |
May
(524) |
Jun
(169) |
Jul
(72) |
Aug
(133) |
Sep
(135) |
Oct
(146) |
Nov
(198) |
Dec
(325) |
2022 |
Jan
(409) |
Feb
(249) |
Mar
(138) |
Apr
(95) |
May
(102) |
Jun
(221) |
Jul
(66) |
Aug
(120) |
Sep
(192) |
Oct
(131) |
Nov
(53) |
Dec
(171) |
2023 |
Jan
(357) |
Feb
(82) |
Mar
(168) |
Apr
(218) |
May
(196) |
Jun
(86) |
Jul
(115) |
Aug
(49) |
Sep
(190) |
Oct
(102) |
Nov
(45) |
Dec
(76) |
2024 |
Jan
(86) |
Feb
(50) |
Mar
(324) |
Apr
(209) |
May
(197) |
Jun
(232) |
Jul
(194) |
Aug
(247) |
Sep
(219) |
Oct
(266) |
Nov
(328) |
Dec
(304) |
2025 |
Jan
(191) |
Feb
(115) |
Mar
(137) |
Apr
(32) |
May
(126) |
Jun
(403) |
Jul
(56) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <rel...@us...> - 2008-06-07 12:17:55
|
Revision: 212 http://modplug.svn.sourceforge.net/modplug/?rev=212&view=rev Author: relabsoluness Date: 2008-06-07 05:17:24 -0700 (Sat, 07 Jun 2008) Log Message: ----------- ./ Increased pattern index hint size from 8 bits to 12 bits. Should fix pattern name update bug when using more than 255 pattern. (http://lpchip.com/modplug/viewtopic.php?t=2344) . Refactoring and fixes to UpdateView hint parameter handling. Affects at least some treeview related GUI updates. / Show note about pre-amp setting before changing it. / Changed pattern/order limit for MPTm from 65000 to 4000. ./ Minor tweaks and fixes here and there. Internal: / Refactoring: Added defines for maximum note value and note cut/off values. / Refactoring: Moved some CCtrlPatterns code from ChannelManagerDlg.cpp to ctrl_pat.cpp Modified Paths: -------------- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectVis.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpdlgs.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Stdafx.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_gen.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/pattern.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sampleio.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -1,14 +1,16 @@ #include "stdafx.h" -#include "mptrack.h" #include "mainfrm.h" -#include "childfrm.h" #include "moddoc.h" -#include "globals.h" -#include "dlg_misc.h" -#include "ctrl_pat.h" -#include "view_pat.h" +#include "view_gen.h" #include "ChannelManagerDlg.h" +//#include "mptrack.h" +//#include "childfrm.h" +//#include "globals.h" +//#include "dlg_misc.h" +//#include "ctrl_pat.h" +//#include "view_pat.h" + /////////////////////////////////////////////////////////// // CChannelManagerDlg @@ -1114,7 +1116,7 @@ pModDoc->MuteChannel(n,!pModDoc->IsChannelMuted(n)); } pModDoc->SetModified(); - pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | (n << 24)); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | ((n/CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); break; case 1: UINT r; @@ -1132,7 +1134,7 @@ if(button == CM_BT_LEFT) pModDoc->NoFxChannel(n,FALSE); else pModDoc->NoFxChannel(n,TRUE); pModDoc->SetModified(); - pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | (n << 24)); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS | ((n/CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); break; case 3: if(button == CM_BT_LEFT){ @@ -1174,36 +1176,7 @@ // -! NEW_FEATURE#0015 -BOOL CCtrlPatterns::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) -//-------------------------------------------------------------------- -{ - // TODO: Add your message handler code here and/or call default - if (nFlags==0) { - PostViewMessage(VIEWMSG_DOSCROLL, zDelta); - } - return CModControlDlg::OnMouseWheel(nFlags, zDelta, pt); -} - -BOOL CCtrlPatterns::OnToolTip(UINT /*id*/, NMHDR *pNMHDR, LRESULT* /*pResult*/) -//--------------------------------------------------------------------- -{ - TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; - UINT nID =pNMHDR->idFrom; - if (pTTT->uFlags & TTF_IDISHWND) - { - // idFrom is actually the HWND of the tool - nID = ::GetDlgCtrlID((HWND)nID); - if(nID) - { - pTTT->lpszText = MAKEINTRESOURCE(nID); - pTTT->hinst = AfxGetResourceHandle(); - return(TRUE); - } - } - - return FALSE; -} void CChannelManagerDlg::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -113,7 +113,7 @@ //------------------------------------------ { if (nNote == m_nNote) return TRUE; - if (nNote >= 120) return FALSE; + if (nNote >= NOTE_MAX) return FALSE; m_nNote = nNote; InvalidateRect(NULL, FALSE); return TRUE; @@ -166,7 +166,7 @@ string temp = pSndFile->GetNoteName(nPos+1, m_nInstrument); temp.resize(4); - if ((nPos >= 0) && (nPos < 120)) wsprintf(s, "%s", temp.c_str()); + if ((nPos >= 0) && (nPos < NOTE_MAX)) wsprintf(s, "%s", temp.c_str()); rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont); DrawButtonRect(hdc, &rect, s, FALSE, FALSE); // Mapped Note @@ -174,12 +174,12 @@ rect.left = rect.right; rect.right = m_cxFont*2-1; strcpy(s, "..."); - if ((penv) && (nPos >= 0) && (nPos < 120) && (penv->NoteMap[nPos])) + if ((penv) && (nPos >= 0) && (nPos < NOTE_MAX) && (penv->NoteMap[nPos])) { UINT n = penv->NoteMap[nPos]; - if (n == 0xFF) strcpy(s, "==="); else - if (n == 0xFE) strcpy(s, "^^^"); else - if (n <= 120) + if (n == NOTE_KEYOFF) strcpy(s, "==="); else + if (n == NOTE_NOTECUT) strcpy(s, "^^^"); else + if (n <= NOTE_MAX) { string temp = pSndFile->GetNoteName(n, m_nInstrument); temp.resize(4); @@ -200,7 +200,7 @@ rect.left = rcClient.left + m_cxFont*2+3; rect.right = rcClient.right; strcpy(s, " .."); - if ((penv) && (nPos >= 0) && (nPos < 120) && (penv->Keyboard[nPos])) + if ((penv) && (nPos >= 0) && (nPos < NOTE_MAX) && (penv->Keyboard[nPos])) { wsprintf(s, "%3d", penv->Keyboard[nPos]); } @@ -298,7 +298,7 @@ { BYTE smpused[(MAX_SAMPLES+7)/8]; memset(smpused, 0, sizeof(smpused)); - for (UINT i=1; i<120; i++) + for (UINT i=1; i<NOTE_MAX; i++) { UINT nsmp = penv->Keyboard[i]; if (nsmp < MAX_SAMPLES) smpused[nsmp>>3] |= 1 << (nsmp & 7); @@ -346,7 +346,7 @@ { BOOL bModified = FALSE; UINT n = penv->Keyboard[m_nNote]; - for (UINT i=0; i<120; i++) if (penv->Keyboard[i] != n) + for (UINT i=0; i<NOTE_MAX; i++) if (penv->Keyboard[i] != n) { penv->Keyboard[i] = n; bModified = TRUE; @@ -374,7 +374,7 @@ if (penv) { BOOL bModified = FALSE; - for (UINT i=0; i<120; i++) if (penv->NoteMap[i] != i+1) + for (UINT i=0; i<NOTE_MAX; i++) if (penv->NoteMap[i] != i+1) { penv->NoteMap[i] = i+1; bModified = TRUE; @@ -448,13 +448,13 @@ { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; - if ((penv) && (m_nNote < 120)) + if ((penv) && (m_nNote < NOTE_MAX)) { if (!m_bIns && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) { UINT n = penv->NoteMap[m_nNote]; BOOL bOk = FALSE; - if ((note > 0) && (note <= 120)) + if ((note > 0) && (note <= NOTE_MAX)) { n = note; bOk = TRUE; @@ -480,7 +480,7 @@ { CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; - if ((penv) && (m_nNote < 120)) { + if ((penv) && (m_nNote < NOTE_MAX)) { if ((m_bIns) && (((c >= '0') && (c <= '9')) || (c == ' '))) { //in sample # column @@ -568,7 +568,7 @@ if (m_nNote > 0) { m_nNote = 0; bRedraw = TRUE; } break; case VK_NEXT: - if (m_nNote+3 < 120) { m_nNote+=3; bRedraw = TRUE; } else + if (m_nNote+3 < NOTE_MAX) { m_nNote+=3; bRedraw = TRUE; } else if (m_nNote < 119) { m_nNote = 119; bRedraw = TRUE; } break; case VK_TAB: @@ -822,7 +822,7 @@ // Pitch/Pan Separation m_SpinPPS.SetRange(-32, +32); // Pitch/Pan Center - for (UINT n=0; n<=120; n++) + for (UINT n=0; n<=NOTE_MAX; n++) { wsprintf(s, "%s%d", szNoteNames[n % 12], n/12); m_ComboPPC.SetItemData(m_ComboPPC.AddString(s), n); @@ -863,7 +863,7 @@ { m_nInstrument = nIns; m_NoteMap.SetCurrentInstrument(m_pModDoc, m_nInstrument); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE, NULL); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE, NULL); } else { // Just in case @@ -939,7 +939,7 @@ SetCurrentInstrument((lParam > 0) ? lParam : m_nInstrument); // Initial Update - if (!m_bInitialized) UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_MODTYPE, NULL); + if (!m_bInitialized) UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_MODTYPE, NULL); CChildFrame *pFrame = (CChildFrame *)GetParentFrame(); if (pFrame) PostViewMessage(VIEWMSG_LOADSTATE, (LPARAM)pFrame->GetInstrumentViewState()); @@ -1027,7 +1027,7 @@ if (dwHintMask & HINT_MIXPLUGINS) OnMixPlugChanged(); UnlockControls(); if (!(dwHintMask & (HINT_INSTRUMENT|HINT_ENVELOPE|HINT_MODTYPE))) return; - if (((dwHintMask >> 24) != m_nInstrument) && (dwHintMask & (HINT_INSTRUMENT|HINT_ENVELOPE)) && (!(dwHintMask & HINT_MODTYPE))) return; + if (((dwHintMask >> HINT_SHIFT_INS) != m_nInstrument) && (dwHintMask & (HINT_INSTRUMENT|HINT_ENVELOPE)) && (!(dwHintMask & HINT_MODTYPE))) return; LockControls(); if (!m_bInitialized) dwHintMask |= HINT_MODTYPE; if (dwHintMask & HINT_MODTYPE) @@ -1185,6 +1185,9 @@ m_CbnPluginVolumeHandling.EnableWindow(FALSE); m_CbnPluginVelocityHandling.SetCurSel(-1); m_CbnPluginVolumeHandling.SetCurSel(-1); + if(m_nInstrument > m_pSndFile->GetNumInstruments()) + SetCurrentInstrument(m_pSndFile->GetNumInstruments()); + } m_NoteMap.InvalidateRect(NULL, FALSE); } @@ -1295,7 +1298,7 @@ if (m_pModDoc) { m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); } } else bOk = FALSE; } @@ -1328,7 +1331,7 @@ m_pSndFile->ReadInstrumentFromSong(m_nInstrument, pSndFile, nInstr); END_CRITICAL(); m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_ENVELOPE | HINT_INSNAMES | HINT_SMPNAMES); if (bFirst) m_pModDoc->UpdateAllViews(NULL, HINT_MODTYPE | HINT_INSNAMES | HINT_SMPNAMES); m_pModDoc->SetModified(); EndWaitCursor(); @@ -1465,13 +1468,13 @@ return; } BOOL bFirst = (pSndFile->m_nInstruments) ? FALSE : TRUE; - LONG smp = m_pModDoc->InsertInstrument(0); - if (smp > 0) + LONG ins = m_pModDoc->InsertInstrument(0); + if (ins > 0) { - SetCurrentInstrument(smp); - m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); + SetCurrentInstrument(ins); + m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); } - if (bFirst) m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); + if (bFirst) m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); if (m_pParent) m_pParent->InstrumentChanged(m_nInstrument); } SwitchToView(); @@ -1487,13 +1490,13 @@ if ((pSndFile->m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (pSndFile->m_nInstruments > 0)) { BOOL bFirst = (pSndFile->m_nInstruments) ? FALSE : TRUE; - LONG smp = m_pModDoc->InsertInstrument(0, m_nInstrument); - if (smp > 0) + LONG ins = m_pModDoc->InsertInstrument(0, m_nInstrument); + if (ins > 0) { - SetCurrentInstrument(smp); - m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); + SetCurrentInstrument(ins); + m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); } - if (bFirst) m_pModDoc->UpdateAllViews(NULL, (smp << 24) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); + if (bFirst) m_pModDoc->UpdateAllViews(NULL, (ins << HINT_SHIFT_INS) | HINT_MODTYPE | HINT_INSTRUMENT | HINT_INSNAMES); if (m_pParent) m_pParent->InstrumentChanged(m_nInstrument); } } @@ -1658,7 +1661,7 @@ // -! NEW_FEATURE#0023 memcpy(penv->name, s, 32); m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSNAMES, this); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSNAMES, this); } } } @@ -1993,7 +1996,7 @@ m_CbnPluginVolumeHandling.SetCurSel(penv->nPluginVolumeHandling); m_pModDoc->UpdateAllViews(NULL, HINT_MIXPLUGINS, this); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSNAMES, this); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSNAMES, this); if (penv->nMixPlug) //if we have not just set to no plugin { @@ -2007,7 +2010,7 @@ if (pPlug->pMixPlugin->isInstrument() && penv->nMidiChannel==0) { penv->nMidiChannel=1; m_pSndFile->instrumentModified[m_nInstrument-1] = TRUE; - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT, NULL); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT, NULL); } return; } @@ -2425,7 +2428,7 @@ if (dlg.DoModal() == IDOK) { m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << 24) | HINT_INSTRUMENT, this); + m_pModDoc->UpdateAllViews(NULL, (m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT, this); m_NoteMap.InvalidateRect(NULL, FALSE); } } @@ -2505,7 +2508,7 @@ pInstH->SetTuning(NULL); END_CRITICAL(); m_pModDoc->SetModified(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); return; } @@ -2533,7 +2536,7 @@ pInstH->SetTuning(&tc->GetTuning(sel)); END_CRITICAL(); m_pModDoc->SetModified(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); return; } @@ -2559,7 +2562,7 @@ //new tuning(s) come visible. BuildTuningComboBox(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); } @@ -2611,7 +2614,7 @@ penv->SetTuning(penv->s_DefaultTuning); END_CRITICAL(); m_pModDoc->SetModified(); - UpdateView((m_nInstrument << 24) | HINT_INSTRUMENT); + UpdateView((m_nInstrument << HINT_SHIFT_INS) | HINT_INSTRUMENT); } void CCtrlInstruments::OnEnChangeEditPitchtempolock() Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -189,7 +189,7 @@ //CHAR s[8]; CHAR s[10]; - for(int i = 0 ; i < 120 ; i++){ + for(int i = 0 ; i < NOTE_MAX ; i++){ wsprintf(s, "%s%d", szNoteNames[i % 12], i/12); int n = m_CbnSplitNote.AddString(s); m_CbnSplitNote.SetItemData(n, i); @@ -338,7 +338,7 @@ { UINT nPat; if (dwHintMask&HINT_PATNAMES) { - nPat=(dwHintMask>>24)&0xFF; + nPat = (dwHintMask >> HINT_SHIFT_PAT); } else { nPat = SendViewMessage(VIEWMSG_GETCURRENTPATTERN); } @@ -378,7 +378,7 @@ return m_OrderList.GetCurrentPattern(); case CTRLMSG_PATTERNCHANGED: - UpdateView((lParam << 24) | HINT_PATNAMES, NULL); + UpdateView((lParam << HINT_SHIFT_PAT) | HINT_PATNAMES, NULL); break; case CTRLMSG_PAT_PREVINSTRUMENT: @@ -1087,7 +1087,7 @@ { m_pSndFile->SetPatternName(nPat, s); if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, (nPat << 24) | HINT_PATNAMES, this); + m_pModDoc->UpdateAllViews(NULL, (nPat << HINT_SHIFT_PAT) | HINT_PATNAMES, this); } } } @@ -1220,4 +1220,37 @@ } -//end rewbs.instroVST \ No newline at end of file +//end rewbs.instroVST + + +BOOL CCtrlPatterns::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) +//-------------------------------------------------------------------- +{ + // TODO: Add your message handler code here and/or call default + + if (nFlags==0) { + PostViewMessage(VIEWMSG_DOSCROLL, zDelta); + } + return CModControlDlg::OnMouseWheel(nFlags, zDelta, pt); +} + +BOOL CCtrlPatterns::OnToolTip(UINT /*id*/, NMHDR *pNMHDR, LRESULT* /*pResult*/) +//--------------------------------------------------------------------- +{ + TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; + UINT nID =pNMHDR->idFrom; + if (pTTT->uFlags & TTF_IDISHWND) + { + // idFrom is actually the HWND of the tool + nID = ::GetDlgCtrlID((HWND)nID); + if(nID) + { + pTTT->lpszText = MAKEINTRESOURCE(nID); + pTTT->hinst = AfxGetResourceHandle(); + return(TRUE); + } + } + + return FALSE; +} + Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -329,7 +329,7 @@ { m_nSample = nSmp; // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - UpdateView((m_nSample << 20) | HINT_SAMPLEINFO, NULL); + UpdateView((m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO, NULL); } if (bUpdNum) { @@ -388,7 +388,7 @@ SetCurrentSample((lParam > 0) ? lParam : m_nSample); // 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 << 20) | HINT_SAMPLEINFO | HINT_MODTYPE, NULL); + if (!m_bInitialized) UpdateView((m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_MODTYPE, NULL); CChildFrame *pFrame = (CChildFrame *)GetParentFrame(); if ((pFrame) && (m_hWndView)) PostViewMessage(VIEWMSG_LOADSTATE, (LPARAM)pFrame->GetSampleViewState()); SwitchToView(); @@ -511,7 +511,8 @@ } if (!(dwHintMask & (HINT_SAMPLEINFO|HINT_MODTYPE))) return; // 05/01/05 : ericus replaced ">> 24" by ">> 20" : 4000 samples -> 12bits [see Moddoc.h] - if (((dwHintMask >> 20) != (m_nSample&0x0fff)) && (!(dwHintMask & HINT_MODTYPE))) return; + //if (((dwHintMask >> 20) != (m_nSample&0x0fff)) && (!(dwHintMask & HINT_MODTYPE))) return; + if (((dwHintMask >> HINT_SHIFT_SMP) != m_nSample) && (!(dwHintMask & HINT_MODTYPE))) return; LockControls(); if (!m_bInitialized) dwHintMask |= HINT_MODTYPE; // Updating Ranges @@ -773,7 +774,7 @@ pins->uFlags |= CHN_PANNING; } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); m_pModDoc->SetModified(); } return TRUE; @@ -802,7 +803,7 @@ } END_CRITICAL(); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO | HINT_SMPNAMES, NULL); m_pModDoc->SetModified(); EndWaitCursor(); return TRUE; @@ -870,14 +871,14 @@ CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); SetCurrentSample(smp); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (smp << 20) | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_SMPNAMES); + m_pModDoc->UpdateAllViews(NULL, (smp << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_SMPNAMES); if ((pSndFile->m_nInstruments) && (!m_pModDoc->FindSampleParent(smp))) { if (MessageBox("This sample is not used by any instrument. Do you want to create a new instrument using this sample ?", NULL, MB_YESNO|MB_ICONQUESTION) == IDYES) { UINT nins = m_pModDoc->InsertInstrument(smp); - m_pModDoc->UpdateAllViews(NULL, (nins << 24) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); + m_pModDoc->UpdateAllViews(NULL, (nins << HINT_SHIFT_INS) | HINT_INSTRUMENT | HINT_INSNAMES | HINT_ENVELOPE); m_pParent->InstrumentChanged(nins); } } @@ -1065,7 +1066,7 @@ { 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 << 20) | HINT_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); } } @@ -1132,7 +1133,7 @@ } 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 << 20) | HINT_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); EndWaitCursor(); SwitchToView(); @@ -1282,7 +1283,7 @@ SendViewMessage(VIEWMSG_LOADSTATE, (LPARAM)&viewstate); } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -1407,7 +1408,7 @@ SendViewMessage(VIEWMSG_LOADSTATE, (LPARAM)&viewstate); } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -1566,7 +1567,7 @@ } // Update sample view - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 m_pModDoc->SetModified(); } @@ -1643,7 +1644,7 @@ OnPitchShiftTimeStretchAccept(); // Update sample view - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA | HINT_SAMPLEINFO, NULL); // !!!! see CODE#0006, update#3 m_pModDoc->SetModified(); } @@ -2068,7 +2069,7 @@ } 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 << 20) | HINT_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -2125,7 +2126,7 @@ } 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 << 20) | HINT_SAMPLEDATA, NULL); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); m_pModDoc->SetModified(); } EndWaitCursor(); @@ -2173,7 +2174,7 @@ { memcpy(m_pSndFile->m_szNames[m_nSample], s, 32); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | (HINT_SMPNAMES|HINT_SAMPLEINFO), this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | (HINT_SMPNAMES|HINT_SAMPLEINFO), this); m_pModDoc->UpdateAllViews(NULL, HINT_INSNAMES, this); m_pModDoc->SetModified(); } @@ -2194,7 +2195,7 @@ { memcpy(m_pSndFile->Ins[m_nSample].name, s, 22); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEINFO, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO, this); if (m_pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); } } @@ -2430,7 +2431,7 @@ pins->nLoopStart = n; 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 << 20) | HINT_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2447,7 +2448,7 @@ pins->nLoopEnd = n; 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 << 20) | HINT_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2487,7 +2488,7 @@ { pins->nSustainStart = n; // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2504,7 +2505,7 @@ { pins->nSustainEnd = n; // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } } @@ -2783,7 +2784,7 @@ if ((nCode == SB_ENDSCROLL) || (nCode == SB_THUMBPOSITION)) SwitchToView(); if (bRedraw) { // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] - m_pModDoc->UpdateAllViews(NULL, (m_nSample << 20) | HINT_SAMPLEDATA, this); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); } UnlockControls(); Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -183,7 +183,10 @@ { InvalidateChannelsHeaders(); } - if (((dwHintMask & 0xFFFFFF) == HINT_PATTERNDATA) & (m_nPattern != (dwHintMask >> 24))) return; + //if (((dwHintMask & 0xFFFFFF) == HINT_PATTERNDATA) & (m_nPattern != (dwHintMask >> HINT_SHIFT_PAT))) return; + if ( (HintFlagPart(dwHintMask) == HINT_PATTERNDATA) && (m_nPattern != (dwHintMask >> HINT_SHIFT_PAT)) ) + return; + if (dwHintMask & (HINT_MODTYPE|HINT_PATTERNDATA)) { InvalidatePattern(FALSE); @@ -193,7 +196,7 @@ // -> CODE#0008 // -> DESC"#define to set pattern max size (number of rows) limit (now set to 1024 instead of 256)" // InvalidateRow(dwHintMask >> 24); - InvalidateRow(dwHintMask >> 22); + InvalidateRow(dwHintMask >> HINT_SHIFT_ROW); // -! BEHAVIOUR_CHANGE#0008 } @@ -313,11 +316,11 @@ { m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc); } else - if (note == 0xFE) + if (note == NOTE_NOTECUT) { m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc + 13*COLUMN_HEIGHT); } else - if (note >= 0xFF) + if (note >= NOTE_KEYOFF) { m_Dib.TextBlt(x, y, dx, COLUMN_HEIGHT, xsrc, ysrc + 14*COLUMN_HEIGHT); } else @@ -335,8 +338,11 @@ UINT o = (note-1) / 12; //Octave UINT n = (note-1) % 12; //Note m_Dib.TextBlt(x, y, pfnt->nNoteWidth, COLUMN_HEIGHT, xsrc, ysrc+(n+1)*COLUMN_HEIGHT); - m_Dib.TextBlt(x+pfnt->nNoteWidth, y, pfnt->nOctaveWidth, COLUMN_HEIGHT, - pfnt->nNumX, pfnt->nNumY+o*COLUMN_HEIGHT); + if(o <= 9) + m_Dib.TextBlt(x+pfnt->nNoteWidth, y, pfnt->nOctaveWidth, COLUMN_HEIGHT, + pfnt->nNumX, pfnt->nNumY+o*COLUMN_HEIGHT); + else + DrawLetter(x+pfnt->nNoteWidth, y, '?', pfnt->nOctaveWidth); } } } @@ -409,8 +415,8 @@ yofs = GetYScrollPos(); pSndFile = pModDoc->GetSoundFile(); nColumnWidth = m_szCell.cx; - nrows = pSndFile->PatternSize[m_nPattern]; - ncols = pSndFile->m_nChannels; + nrows = (pSndFile->Patterns[m_nPattern]) ? pSndFile->PatternSize[m_nPattern] : 0; + ncols = pSndFile->GetNumChannels(); xpaint = m_szHeader.cx; ypaint = rcClient.top; ncolhdr = xofs; @@ -783,7 +789,7 @@ { tx_col = row_col; bk_col = row_bkcol; - if ((CMainFrame::m_dwPatternSetup & PATTERN_EFFECTHILIGHT) && (m->note) && (m->note <= 120)) + if ((CMainFrame::m_dwPatternSetup & PATTERN_EFFECTHILIGHT) && (m->note) && (m->note <= NOTE_MAX)) { tx_col = MODCOLOR_NOTE; } @@ -1393,7 +1399,7 @@ INSTRUMENTHEADER *penv = pSndFile->Headers[m->instr]; memcpy(sztmp, penv->name, 32); sztmp[32] = 0; - if ((m->note) && (m->note <= 120)) + if ((m->note) && (m->note <= NOTE_MAX)) { UINT nsmp = penv->Keyboard[m->note-1]; if ((nsmp) && (nsmp <= pSndFile->m_nSamples)) Modified: trunk/OpenMPT/mptrack/EffectVis.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectVis.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/EffectVis.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -617,7 +617,7 @@ MakeChange(m_nDragItem, paramValue); m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << 24), NULL); + m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << HINT_SHIFT_PAT), NULL); } else if ((m_dwStatus & FXVSTATUS_LDRAGGING)) { @@ -652,7 +652,7 @@ m_nLastDrawnRow = row; m_pModDoc->SetModified(); - m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << 24), NULL); + m_pModDoc->UpdateAllViews(NULL, HINT_PATTERNDATA | (m_nPattern << HINT_SHIFT_PAT), NULL); } //update status bar Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -372,14 +372,13 @@ BOOL CModDoc::OnSaveDocument(LPCTSTR lpszPathName) //------------------------------------------------ { - static int greccount = 0; - CHAR fext[_MAX_EXT]=""; + TCHAR fext[_MAX_EXT]=""; UINT nType = m_SndFile.m_nType, dwPacking = 0; BOOL bOk = FALSE; m_SndFile.m_dwLastSavedWithVersion = CMainFrame::GetFullVersionNumeric(); if (!lpszPathName) return FALSE; - _splitpath(lpszPathName, NULL, NULL, NULL, fext); + _tsplitpath(lpszPathName, NULL, NULL, NULL, fext); if (!lstrcmpi(fext, ".mod")) nType = MOD_TYPE_MOD; else if (!lstrcmpi(fext, ".s3m")) nType = MOD_TYPE_S3M; else if (!lstrcmpi(fext, ".xm")) nType = MOD_TYPE_XM; else @@ -421,6 +420,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" BOOL CModDoc::SaveModified() +//-------------------------- { if((m_SndFile.m_nType & MOD_TYPE_IT) && m_SndFile.m_dwSongFlags & SONG_ITPROJECT && !(m_SndFile.m_dwSongFlags & SONG_ITPEMBEDIH)){ @@ -435,8 +435,8 @@ for(UINT i = 0 ; i < m_SndFile.m_nInstruments ; i++){ if(m_SndFile.m_szInstrumentPath[i][0] != '\0'){ int size = strlen(m_SndFile.m_szInstrumentPath[i]); - BOOL iti = stricmp(&m_SndFile.m_szInstrumentPath[i][size-3],"iti") == 0; - BOOL xi = stricmp(&m_SndFile.m_szInstrumentPath[i][size-2],"xi") == 0; + BOOL iti = _stricmp(&m_SndFile.m_szInstrumentPath[i][size-3],"iti") == 0; + BOOL xi = _stricmp(&m_SndFile.m_szInstrumentPath[i][size-2],"xi") == 0; if(iti || (!iti && !xi && m_SndFile.m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) m_SndFile.SaveITIInstrument(i+1, m_SndFile.m_szInstrumentPath[i]); @@ -1247,7 +1247,7 @@ penv = m_SndFile.Headers[nIns]; if (penv) { - for (UINT i=0; i<120; i++) + for (UINT i=0; i<NOTE_MAX; i++) { if (penv->Keyboard[i] == nSmp) return TRUE; } @@ -1265,7 +1265,7 @@ INSTRUMENTHEADER *penv = m_SndFile.Headers[i]; if (penv) { - for (UINT j=0; j<120; j++) + for (UINT j=0; j<NOTE_MAX; j++) { if (penv->Keyboard[j] == nSmp) return i; } @@ -1283,7 +1283,7 @@ penv = m_SndFile.Headers[nIns]; if (penv) { - for (UINT i=0; i<120; i++) + for (UINT i=0; i<NOTE_MAX; i++) { UINT n = penv->Keyboard[i]; if ((n) && (n <= m_SndFile.m_nSamples)) return n; Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Moddoc.h 2008-06-07 12:17:24 UTC (rev 212) @@ -10,11 +10,8 @@ #endif // _MSC_VER >= 1000 #include "sndfile.h" +#include "misc_util.h" -// C-5 -#define NOTE_MIDDLEC (5*12+1) -#define NOTE_KEYOFF 0xFF -#define NOTE_NOTECUT 0xFE //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -39,6 +36,19 @@ #define HINT_UNDO 0x10000 #define HINT_MIXPLUGINS 0x20000 #define HINT_SPEEDCHANGE 0x40000 //rewbs.envRowGrid +#define HINT_MAXHINTFLAG HINT_SPEEDCHANGE +//Bits 0-18 are reserved. +#define HINT_MASK_FLAGS (2*HINT_MAXHINTFLAG - 1) //When applied to hint parameter, should give the flag part. +#define HINT_MASK_ITEM (~HINT_MASK_FLAGS) //To nullify update hintbits from hint parameter. +#define HintFlagPart(x) ((x) & HINT_MASK_FLAGS) + +//If fails, hint flagbits|itembits does not enable all bits; +//might be worthwhile to check the reason. +STATIC_ASSERT( (HINT_MASK_ITEM | HINT_MASK_FLAGS) == -1 ); + +//If fails, hint param flag and item parts overlap; might be a problem. +STATIC_ASSERT( (HINT_MASK_ITEM & HINT_MASK_FLAGS) == 0 ); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // NOTE : be carefull when adding new flags !!! // ------------------------------------------------------------------------------------------------------------------------- @@ -50,6 +60,32 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Updateview hints can, in addition to the actual hints, contain +//addition data such as pattern or instrument index. The +//values below define the number of bits used for these. +#define HINT_BITS_PATTERN 12 +#define HINT_BITS_ROWS 10 +#define HINT_BITS_SAMPLE 12 +#define HINT_BITS_INST 8 +#define HINT_BITS_CHNTAB 8 + +//Defines bit shift values used for setting/retrieving the additional hint data to/from hint parameter. +#define HINT_SHIFT_PAT (32 - HINT_BITS_PATTERN) +#define HINT_SHIFT_ROW (32 - HINT_BITS_ROWS) +#define HINT_SHIFT_SMP (32 - HINT_BITS_SAMPLE) +#define HINT_SHIFT_INS (32 - HINT_BITS_INST) +#define HINT_SHIFT_CHNTAB (32 - HINT_BITS_CHNTAB) + +//Check that hint bit counts are not too large given the number of hint flags. +STATIC_ASSERT( ((-1 << HINT_SHIFT_PAT) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_PAT) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_ROW) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_ROW) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_SMP) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_SMP) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_INS) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_INS) ); +STATIC_ASSERT( ((-1 << HINT_SHIFT_CHNTAB) & HINT_MASK_ITEM) == (-1 << HINT_SHIFT_CHNTAB) ); + + + // Undo #define MAX_UNDO_LEVEL 100 Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -8,15 +8,18 @@ #include "dlg_misc.h" #include "dlsbank.h" -#pragma warning(disable:4244) +#pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif +#define str_mptm_conversion_warning GetStrI18N(_TEXT("Conversion from mptm to any other moduletype may makes certain features unavailable and is not guaranteed to work properly. Do the conversion anyway?")) + ////////////////////////////////////////////////////////////////////// // Module type conversion @@ -52,9 +55,36 @@ if(oldTypeIsMPT) { - if(::MessageBox(NULL, "Convertion from MPTm to any other modtype makes certain features unavailable and is not guaranteed to work properly; Do the convertion anyway?", - "Notice", MB_YESNO) != IDYES) + if(::MessageBox(NULL, str_mptm_conversion_warning, 0, MB_YESNO) != IDYES) return FALSE; + + /* + Incomplete list of MPTm-only features and extensions in the old formats: + + Features only available for MPTm: + -User definable tunings. + -Extended pattern range + -Extended sequence + + Extended features in IT/XM/S3M/MOD(not all listed below are available in all of those formats): + -plugs + -Extended ranges for + -sample count + -instrument count + -pattern count + -sequence size + -Row count + -channel count + -tempo limits + -Extended sample/instrument properties. + -MIDI mapping directives + -Versioninfo + -channel names + -pattern names + -Alternative tempomodes + -For more info, see e.g. SaveExtendedSongProperties(), SaveExtendedInstrumentProperties() + */ + } // Check if conversion to 64 rows is necessary @@ -270,7 +300,7 @@ INSTRUMENTHEADER *penv = m_SndFile.Headers[j]; if (penv) { - for (UINT k=0; k<120; k++) + for (UINT k=0; k<NOTE_MAX; k++) { if ((penv->NoteMap[k]) && (penv->NoteMap[k] != (BYTE)(k+1))) { @@ -665,7 +695,7 @@ UINT jmax = m_SndFile.PatternSize[ipat] * m_SndFile.m_nChannels; for (UINT j=0; j<jmax; j++, p++) { - if ((p->note) && (p->note <= 120)) + if ((p->note) && (p->note <= NOTE_MAX)) { if ((p->instr) && (p->instr < MAX_INSTRUMENTS)) { @@ -1460,8 +1490,8 @@ switch(note) { case 0: p[1] = p[2] = p[3] = '.'; break; - case 0xFF: p[1] = p[2] = p[3] = '='; break; - case 0xFE: p[1] = p[2] = p[3] = '^'; break; + case NOTE_KEYOFF: p[1] = p[2] = p[3] = '='; break; + case NOTE_NOTECUT: p[1] = p[2] = p[3] = '^'; break; default: p[1] = szNoteNames[(note-1) % 12][0]; p[2] = szNoteNames[(note-1) % 12][1]; @@ -1604,8 +1634,8 @@ (ITStyleMix && origModCmd.note==0 && origModCmd.instr==0 && origModCmd.volcmd==0)))) { m[col].note = 0; - if (s[0] == '=') m[col].note = 0xFF; else - if (s[0] == '^') m[col].note = 0xFE; else + if (s[0] == '=') m[col].note = NOTE_KEYOFF; else + if (s[0] == '^') m[col].note = NOTE_NOTECUT; else if (s[0] != '.') { for (UINT i=0; i<12; i++) @@ -1710,7 +1740,7 @@ if (bOk) { SetModified(); - UpdateAllViews(NULL, HINT_PATTERNDATA | (nPattern << 24), NULL); + UpdateAllViews(NULL, HINT_PATTERNDATA | (nPattern << HINT_SHIFT_PAT), NULL); } } CloseClipboard(); @@ -1831,7 +1861,7 @@ INSTRUMENTHEADER *penv = m_SndFile.Headers[nIns]; 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))) + if ((dwMemSize > dwPos) && (!_strnicmp(p, pszEnvHdr, dwPos-2))) { for (UINT h=0; h<8; h++) { @@ -1947,7 +1977,7 @@ GlobalUnlock(hCpy); CloseClipboard(); SetModified(); - UpdateAllViews(NULL, (nIns << 24) | HINT_ENVELOPE, NULL); + UpdateAllViews(NULL, (nIns << HINT_SHIFT_INS) | HINT_ENVELOPE, NULL); } EndWaitCursor(); return TRUE; Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -7,9 +7,12 @@ #include "moptions.h" #include "moddoc.h" #include "snddev.h" +#include ".\mpdlgs.h" -#pragma warning(disable:4244) +#define str_preampChangeNote GetStrI18N(_TEXT("Note: Pre-Amp setting affects sample volume only. Changing this setting may cause undesired effects on volume balance between sample based instruments and plugin instrument.")) +//#pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" + LPCSTR szCPUNames[8] = { "133MHz", @@ -165,11 +168,9 @@ } // Pre-Amplification { - int n = (CMainFrame::m_nPreAmp - 64) / 8; - if ((n < 0) || (n > 40)) n = 16; m_SliderPreAmp.SetTicFreq(5); m_SliderPreAmp.SetRange(0, 40); - m_SliderPreAmp.SetPos(40 - n); + SetPreAmpSliderPosition(); } // Sound Device { @@ -255,18 +256,36 @@ } +void COptionsSoundcard::SetPreAmpSliderPosition() +//----------------------------------------------- +{ + int n = (CMainFrame::m_nPreAmp - 64) / 8; + if ((n < 0) || (n > 40)) n = 16; + m_SliderPreAmp.SetPos(40 - n); +} + + void COptionsSoundcard::OnVScroll(UINT n, UINT pos, CScrollBar *p) //---------------------------------------------------------------- { CPropertyPage::OnVScroll(n, pos, p); // PreAmp { - int n = 40 - m_SliderPreAmp.GetPos(); - if ((n >= 0) && (n <= 40)) // approximately +/- 10dB + if(m_PreAmpNoteShowed == true) { - CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) pMainFrm->SetPreAmp(64 + (n * 8)); + int n = 40 - m_SliderPreAmp.GetPos(); + if ((n >= 0) && (n <= 40)) // approximately +/- 10dB + { + CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); + if (pMainFrm) pMainFrm->SetPreAmp(64 + (n * 8)); + } } + else + { + m_PreAmpNoteShowed = true; + MessageBox(str_preampChangeNote, _TEXT(""), MB_ICONINFORMATION); + SetPreAmpSliderPosition(); + } } } @@ -464,7 +483,7 @@ //rewbs.resamplerConf OnResamplerChanged(); char s[20] = ""; - ltoa(CMainFrame::glVolumeRampSamples,s, 10); + _ltoa(CMainFrame::glVolumeRampSamples,s, 10); m_CEditRamping.SetWindowText(s); //end rewbs.resamplerConf return TRUE; @@ -499,7 +518,7 @@ //rewbs.resamplerConf void COptionsPlayer::OnWFIRTypeChanged() { - CMainFrame::gbWFIRType = m_CbnWFIRType.GetCurSel(); + CMainFrame::gbWFIRType = static_cast<BYTE>(m_CbnWFIRType.GetCurSel()); OnSettingsChanged(); } @@ -1150,5 +1169,3 @@ return CPropertyPage::OnSetActive(); } - - Modified: trunk/OpenMPT/mptrack/Mpdlgs.h =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.h 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Mpdlgs.h 2008-06-07 12:17:24 UTC (rev 212) @@ -17,11 +17,16 @@ DWORD m_dwRate, m_dwSoundSetup, m_nBitsPerSample, m_nChannels; DWORD m_nBufferLength; DWORD m_nSoundDevice; + bool m_PreAmpNoteShowed; public: COptionsSoundcard(DWORD rate, DWORD q, DWORD bits, DWORD chns, DWORD bufsize, DWORD sd):CPropertyPage(IDD_OPTIONS_SOUNDCARD) - { m_dwRate = rate; m_dwSoundSetup = q; m_nBitsPerSample = bits; m_nChannels = chns; m_nBufferLength = bufsize; m_nSoundDevice = sd; } + { m_dwRate = rate; m_dwSoundSetup = q; m_nBitsPerSample = bits; m_nChannels = chns; + m_nBufferLength = bufsize; m_nSoundDevice = sd; m_PreAmpNoteShowed = false;} +private: + void SetPreAmpSliderPosition(); + protected: virtual BOOL OnInitDialog(); virtual void OnOK(); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -632,11 +632,13 @@ // Initialize OLE MFC support AfxOleInit(); // Standard initialization +/* #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif +*/ // Change the registry key under which our settings are stored. //SetRegistryKey(_T("Olivier Lapicque")); Modified: trunk/OpenMPT/mptrack/Stdafx.h =================================================================== --- trunk/OpenMPT/mptrack/Stdafx.h 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/Stdafx.h 2008-06-07 12:17:24 UTC (rev 212) @@ -78,6 +78,9 @@ #define VERSIONNUMBER(v1, v2, v3, v4) ((v1 << 24) + (v2 << 16) + (v3 << 8) + v4) +//To mark string that should be translated in case of multilingual version. +#define GetStrI18N(x) (x) + //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-05-10 13:27:55 UTC (rev 211) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-06-07 12:17:24 UTC (rev 212) @@ -283,7 +283,7 @@ void CViewGlobals::OnUpdate(CView* pView, LPARAM lHint, CObject*pHint) //-------------------------------------------------------------------- { - if (((lHint & 0xFFFF) == HINT_MODCHANNELS) && ((lHint >> 24) != m_nActiveTab)) return; + if ((HintFlagPart(lHint) == HINT_MODCHANNELS) && ((lHint >> HINT_SHIFT_CHNTAB) != m_nActiveTab)) return; if (pView != this) UpdateView(lHint, pHint); } @@ -329,7 +329,6 @@ } if (nOldSel >= (UINT)nTabCount) nOldSel = 0; - //Changing the order of these calls seemed to fix a GUI bug (http://lpchip.com/modplug/viewtopic.php?t=1324) m_TabCtrl.SetRedraw(TRUE); m_TabCtrl.SetCurSel(nOldSel); @@ -560,263 +559,90 @@ if (pResult) *pResult = 0; } - -void CViewGlobals::OnMute1() -//-------------------------- +void CViewGlobals::OnMute(const CHANNELINDEX chnMod4, const UINT itemID) +//--------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK1)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4; if (pModDoc) { + const BOOL b = (IsDlgButtonChecked(itemID)) ? TRUE : FALSE; + const UINT nChn = m_nActiveTab * 4 + chnMod4; pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } +void CViewGlobals::OnMute1() {OnMute(0, IDC_CHECK1);} +void CViewGlobals::OnMute2() {OnMute(1, IDC_CHECK3);} +void CViewGlobals::OnMute3() {OnMute(2, IDC_CHECK5);} +void CViewGlobals::OnMute4() {OnMute(3, IDC_CHECK7);} -void CViewGlobals::OnMute2() -//-------------------------- -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK3)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 1; - - if (pModDoc) - { - pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - -void CViewGlobals::OnMute3() -//-------------------------- +void CViewGlobals::OnSurround(const CHANNELINDEX chnMod4, const UINT itemID) +//-------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK5)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 2; if (pModDoc) { - pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnMute4() -//-------------------------- -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK7)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 3; - - if (pModDoc) - { - pModDoc->MuteChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnSurround1() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK2)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4; - - if (pModDoc) - { + const BOOL b = (IsDlgButtonChecked(itemID)) ? TRUE : FALSE; + const UINT nChn = m_nActiveTab * 4 + chnMod4; pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } +void CViewGlobals::OnSurround1() {OnSurround(0, IDC_CHECK2);} +void CViewGlobals::OnSurround2() {OnSurround(1, IDC_CHECK4);} +void CViewGlobals::OnSurround3() {OnSurround(2, IDC_CHECK6);} +void CViewGlobals::OnSurround4() {OnSurround(3, IDC_CHECK8);} -void CViewGlobals::OnSurround2() -//------------------------------ +void CViewGlobals::OnEditVol(const CHANNELINDEX chnMod4, const UINT itemID) +//------------------------------------------------------------ { CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK4)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 1; - - if (pModDoc) - { - pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnSurround3() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK6)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 2; - - if (pModDoc) - { - pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnSurround4() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - BOOL b = (IsDlgButtonChecked(IDC_CHECK8)) ? TRUE : FALSE; - UINT nChn = m_nActiveTab * 4 + 3; - - if (pModDoc) - { - pModDoc->SurroundChannel(nChn, b); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } -} - - -void CViewGlobals::OnEditVol1() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4; - int vol = GetDlgItemIntEx(IDC_EDIT1); + const UINT nChn = m_nActiveTab * 4 + chnMod4; + const int vol = GetDlgItemIntEx(itemID); if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) { if (pModDoc->SetChannelGlobalVolume(nChn, vol)) { - m_sbVolume[0].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + m_sbVolume[chnMod4].SetPos(vol); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } } +void CViewGlobals::OnEditVol1() {OnEditVol(0, IDC_EDIT1);} +void CViewGlobals::OnEditVol2() {OnEditVol(1, IDC_EDIT3);} +void CViewGlobals::OnEditVol3() {OnEditVol(2, IDC_EDIT5);} +void CViewGlobals::OnEditVol4() {OnEditVol(3, IDC_EDIT7);} -void CViewGlobals::OnEditVol2() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 1; - int vol = GetDlgItemIntEx(IDC_EDIT3); - if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) - { - if (pModDoc->SetChannelGlobalVolume(nChn, vol)) - { - m_sbVolume[1].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - -void CViewGlobals::OnEditVol3() -//----------------------------- +void CViewGlobals::OnEditPan(const CHANNELINDEX chnMod4, const UINT itemID) +//-------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 2; - int vol = GetDlgItemIntEx(IDC_EDIT5); - if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) - { - if (pModDoc->SetChannelGlobalVolume(nChn, vol)) - { - m_sbVolume[2].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditVol4() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 3; - int vol = GetDlgItemIntEx(IDC_EDIT7); - if ((pModDoc) && (vol >= 0) && (vol <= 64) && (!m_nLockCount)) - { - if (pModDoc->SetChannelGlobalVolume(nChn, vol)) - { - m_sbVolume[3].SetPos(vol); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditPan1() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4; - int pan = GetDlgItemIntEx(IDC_EDIT2); + const UINT nChn = m_nActiveTab * 4 + chnMod4; + const int pan = GetDlgItemIntEx(itemID); if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) { if (pModDoc->SetChannelDefaultPan(nChn, pan)) { - m_sbPan[0].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + m_sbPan[chnMod4].SetPos(pan/4); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } } -void CViewGlobals::OnEditPan2() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 1; - int pan = GetDlgItemIntEx(IDC_EDIT4); - if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) - { - if (pModDoc->SetChannelDefaultPan(nChn, pan)) - { - m_sbPan[1].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} +void CViewGlobals::OnEditPan1() {OnEditPan(0, IDC_EDIT2);} +void CViewGlobals::OnEditPan2() {OnEditPan(1, IDC_EDIT4);} +void CViewGlobals::OnEditPan3() {OnEditPan(2, IDC_EDIT6);} +void CViewGlobals::OnEditPan4() {OnEditPan(3, IDC_EDIT8);} -void CViewGlobals::OnEditPan3() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 2; - int pan = GetDlgItemIntEx(IDC_EDIT6); - if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) - { - if (pModDoc->SetChannelDefaultPan(nChn, pan)) - { - m_sbPan[2].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditPan4() -//----------------------------- -{ - CModDoc *pModDoc = GetDocument(); - UINT nChn = m_nActiveTab * 4 + 3; - int pan = GetDlgItemIntEx(IDC_EDIT8); - if ((pModDoc) && (pan >= 0) && (pan <= 256) && (!m_nLockCount)) - { - if (pModDoc->SetChannelDefaultPan(nChn, pan)) - { - m_sbPan[3].SetPos(pan/4); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - void CViewGlobals::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) //--------------------------------------------------------------------------- { @@ -880,7 +706,7 @@ } //end rewbs.dryRatio - if (bUpdate) pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + if (bUpdate) pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); UnlockControls(); if ((pScrollBar) && (pScrollBar->m_hWnd == m_sbValue.m_hWnd)) @@ -952,8 +778,8 @@ } -void CViewGlobals::OnEditName1() -//------------------------------ +void CViewGlobals::OnEditName(const CHANNELINDEX chnMod4, const UINT itemID) +//---------------------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); @@ -961,181 +787,53 @@ { CSoundFile *pSndFile = pModDoc->GetSoundFile(); CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4; + const UINT nChn = m_nActiveTab * 4 + chnMod4; memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT9, s, sizeof(s)); + GetDlgItemText(itemID, s, sizeof(s)); s[MAX_CHANNELNAME+1] = 0; if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) { memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; pModDoc->SetModified(); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); + pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << HINT_SHIFT_CHNTAB)); } } } +void CViewGlobals::OnEditName1() {OnEditName(0, IDC_EDIT9);} +void CViewGlobals::OnEditName2() {OnEditName(1, IDC_EDIT10);} +void CViewGlobals::OnEditName3() {OnEditName(2, IDC_EDIT11);} +void CViewGlobals::OnEditName4() {OnEditName(3, IDC_EDIT12);} -void CViewGlobals::OnEditName2() -//------------------------------ +void CViewGlobals::OnFxChanged(const CHANNELINDEX chnMod4) +//-------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (!m_nLockCount)) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4 + 1; - - memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT10, s, sizeof(s)); - s[MAX_CHANNELNAME+1] = 0; - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) - { - memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); - pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; - pModDoc->SetModified(); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditName3() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - - if ((pModDoc) && (!m_nLockCount)) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4 + 2; - - memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT11, s, sizeof(s)); - s[MAX_CHANNELNAME+1] = 0; - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) - { - memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); - pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; - pModDoc->SetModified(); - pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); - } - } -} - - -void CViewGlobals::OnEditName4() -//------------------------------ -{ - CModDoc *pModDoc = GetDocument(); - - if ((pModDoc) && (!m_nLockCount)) - { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); - CHAR s[MAX_CHANNELNAME+4]; - UINT nChn = m_nActiveTab * 4 + 3; - - memset(s, 0, sizeof(s)); - GetDlgItemText(IDC_EDIT12, s, sizeof(s)); - s[MAX_CHANNELNAME+1] = 0; - if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) - { - memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); - pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFi... [truncated message content] |
From: <rel...@us...> - 2008-05-10 13:28:05
|
Revision: 211 http://modplug.svn.sourceforge.net/modplug/?rev=211&view=rev Author: relabsoluness Date: 2008-05-10 06:27:55 -0700 (Sat, 10 May 2008) Log Message: ----------- . Fix to crash when loading samples in sample tab; occurs usually with big samples. . Fix to assigning wrong size to orderlist in COrderToPatternTable::OnModTypeChanged. Can(?) cause crashes or other problems at least when saving XM files. Bug was introduced in rev. 199, thus existing in builds .51 and .52. . Fixes to modspecifications Internal: / Some minor modifications e.g. to remove compiler warnings in VC2008. Modified Paths: -------------- trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/CreditStatic.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Load_umx.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/mptrack/AutoSaver.cpp =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/mptrack/AutoSaver.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -223,7 +223,7 @@ { // We do not call CModDoc::DoSave as this populates the Recent Files // list with backups... hence we have duplicated code.. :( - bool success=false; + BOOL success=false; CSoundFile* pSndFile = pModDoc->GetSoundFile(); if (pSndFile) { @@ -252,7 +252,7 @@ //Do nothing } } - return success; + return (success == TRUE); } void CAutoSaver::CleanUpBackups(CModDoc *pModDoc) @@ -354,7 +354,7 @@ m_pAutoSaver->SetFilenameTemplate(""); //TODO m_pAutoSaver->SetHistoryDepth(GetDlgItemInt(IDC_AUTOSAVE_HISTORY)); m_pAutoSaver->SetSaveInterval(GetDlgItemInt(IDC_AUTOSAVE_INTERVAL)); - m_pAutoSaver->SetUseOriginalPath(IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR)); + m_pAutoSaver->SetUseOriginalPath(IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR) == BST_CHECKED); GetDlgItemText(IDC_AUTOSAVE_PATH, tempPath); if (!tempPath.IsEmpty() && (tempPath.Right(1)!="\\")) tempPath.Append("\\"); @@ -385,7 +385,7 @@ void CAutoSaverGUI::OnBnClickedAutosaveEnable() { - bool enabled = IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE); + BOOL enabled = IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_AUTOSAVE_INTERVAL), enabled); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_AUTOSAVE_HISTORY), enabled); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_AUTOSAVE_USEORIGDIR), enabled); @@ -399,7 +399,7 @@ void CAutoSaverGUI::OnBnClickedAutosaveUseorigdir() { if (IsDlgButtonChecked(IDC_AUTOSAVE_ENABLE)) { - bool enabled = IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR); + BOOL enabled = IsDlgButtonChecked(IDC_AUTOSAVE_USEORIGDIR); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_AUTOSAVE_PATH), !enabled); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_AUTOSAVE_BROWSE), !enabled); OnSettingsChanged(); Modified: trunk/OpenMPT/mptrack/CreditStatic.cpp =================================================================== --- trunk/OpenMPT/mptrack/CreditStatic.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/mptrack/CreditStatic.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -113,13 +113,13 @@ ASSERT(credits); - if((str = strdup(credits)) == NULL) + if((str = _tcsdup(credits)) == NULL) return; m_ArrCredit.RemoveAll(); ptr1 = str; - while((ptr2 = strchr(ptr1,delimiter)) != NULL) { + while((ptr2 = _tcschr(ptr1,delimiter)) != NULL) { *ptr2 = '\0'; m_ArrCredit.AddTail(ptr1); ptr1 = ptr2+1; Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -53,9 +53,9 @@ { if (lpszPathName) { - CHAR s[_MAX_EXT]; - _splitpath(lpszPathName, NULL, NULL, NULL, s); - if (!stricmp(s, ".dll")) + TCHAR s[_MAX_EXT]; + _tsplitpath(lpszPathName, NULL, NULL, NULL, s); + if (!_tcsicmp(s, _TEXT(".dll"))) { CVstPluginManager *pPluginManager = theApp.GetPluginManager(); if (pPluginManager) @@ -696,7 +696,7 @@ if (m_pszProfileName) { free((void *)m_pszProfileName); } - m_pszProfileName = strdup(m_szConfigFileName); + m_pszProfileName = _tcsdup(m_szConfigFileName); LoadStdProfileSettings(10); // Load standard INI file options (including MRU) @@ -1483,8 +1483,8 @@ -97, -92, -86, -80, -74, -68, -62, -56, -49, -43, -37, -31, -25, -18, -12, -6 }; -#define Sinus(x) __SinusTable[x&0xFF] -#define Cosinus(x) __SinusTable[(x+0x40)&0xFF] +#define Sinus(x) __SinusTable[(x)&0xFF] +#define Cosinus(x) __SinusTable[((x)+0x40)&0xFF] #define PI 3.14159265358979323f BOOL CPaletteBitmap::Animate() Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.cpp =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -94,11 +94,11 @@ { const CModSpecifications specs = m_rSndFile.GetModSpecifications(); - //Resize orderlist if needed. Because old orderlist had 256 elements, not making it + //Resize orderlist if needed. Because old orderlist had MAX_ORDERS(256) elements, not making it //smaller than that even if the modtype doesn't support that many orders. if(specs.ordersMax < GetCount()) { - resize(max(MAX_PATTERNS, specs.ordersMax)); + resize(max(MAX_ORDERS, specs.ordersMax)); for(ORDERINDEX i = GetCount(); i>specs.ordersMax; --i) (*this)[i-1] = GetInvalidPatIndex(); } Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -595,7 +595,9 @@ int smplsize, oldsmin, oldsmax; int yrange = cy/2; signed char *psample = (signed char *)pSampleData; - int y0 = 0, xmax, posincr, posfrac, poshi; + //int y0 = 0, xmax, posincr, posfrac, poshi; + int32 y0 = 0, xmax, poshi; + uint64 posincr, posfrac; if (len <= 0) return; smplsize = (uFlags & CHN_16BIT) ? 2 : 1; @@ -612,21 +614,24 @@ { xmax = len>>(m_nZoom-1); if (xmax > cx) xmax = cx; - posincr = 1<<(m_nZoom-1+16); + posincr = (uint64(1) << (m_nZoom-1+16)); } else { xmax = cx; - posincr = _muldiv(len, 0x10000, cx); + //posincr = _muldiv(len, 0x10000, cx); + posincr = uint64(len) * uint64(0x10000) / uint64(cx); } ::MoveToEx(hdc, 0, ymed, NULL); posfrac = 0; poshi = 0; for (int x=0; x<xmax; x++) { - int smin, smax, scanlen; + //int smin, smax, scanlen; + int smin, smax; + int32 scanlen; posfrac += posincr; - scanlen = (posfrac+0xffff) >> 16; + scanlen = static_cast<int32>((posfrac+0xffff) >> 16); if (poshi >= len) poshi = len-1; if (poshi+scanlen > len) scanlen = len-poshi; if (scanlen < 1) scanlen = 1; @@ -692,7 +697,7 @@ ::LineTo(hdc, x, smin); oldsmin = smin; oldsmax = smax; - poshi += (posfrac>>16); + poshi += static_cast<int32>(posfrac>>16); posfrac &= 0xffff; } } @@ -2320,4 +2325,4 @@ } return NULL; -} \ No newline at end of file +} Modified: trunk/OpenMPT/soundlib/Load_mid.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mid.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/soundlib/Load_mid.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -763,7 +763,7 @@ CHAR s[32]; memcpy(s, ptrk->ptracks, k); s[k] = 0; - if ((!strnicmp(s, "Copyri", 6)) || (!s[0])) break; + if ((!_strnicmp(s, "Copyri", 6)) || (!s[0])) break; if (i == 0x03) { if (!m_szNames[0][0]) strcpy(m_szNames[0], s); Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -348,7 +348,7 @@ LPSTR p = (LPSTR)(lpStream+dwMemPos); UINT flags = 0; if (dwMemPos + 5 >= dwMemLength) break; - if (!strnicmp(p, "ADPCM", 5)) + if (!_strnicmp(p, "ADPCM", 5)) { flags = 3; p += 5; Modified: trunk/OpenMPT/soundlib/Load_stm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_stm.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/soundlib/Load_stm.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -67,8 +67,8 @@ if ((!lpStream) || (dwMemLength < sizeof(STMHEADER))) return FALSE; if ((phdr->filetype != 2) || (phdr->unused != 0x1A) - || ((strnicmp(phdr->trackername, "!SCREAM!", 8)) - && (strnicmp(phdr->trackername, "BMOD2STM", 8)))) return FALSE; + || ((_strnicmp(phdr->trackername, "!SCREAM!", 8)) + && (_strnicmp(phdr->trackername, "BMOD2STM", 8)))) return FALSE; memcpy(m_szNames[0], phdr->songname, 20); // Read STM header m_nType = MOD_TYPE_STM; Modified: trunk/OpenMPT/soundlib/Load_umx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_umx.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/soundlib/Load_umx.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -38,7 +38,7 @@ return ReadS3M(lpStream + dwRipOfs, dwMemLength - dwRipOfs); } // XM - if (!strnicmp((LPCSTR)(lpStream+uscan), "Extended Module", 15)) + if (!_strnicmp((LPCSTR)(lpStream+uscan), "Extended Module", 15)) { DWORD dwRipOfs = uscan; return ReadXM(lpStream + dwRipOfs, dwMemLength - dwRipOfs); Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2008-05-10 13:27:55 UTC (rev 211) @@ -680,6 +680,9 @@ header.norder++; if ((Order[i] >= header.patterns) && (Order[i] < MAX_PATTERNS)) header.patterns = Order[i]+1; }*/ + if(Order.GetCount() < MAX_ORDERS) + Order.resize(MAX_ORDERS, Order.GetInvalidPatIndex()); + for (i=MAX_ORDERS-1; i>=0; i--) { // walk backwards over orderlist if ((Order[i]!=0xFF) && (header.norder==0)) { header.norder=i+1; //find last used order Modified: trunk/OpenMPT/soundlib/mod_specifications.h =================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.h 2008-04-13 21:53:04 UTC (rev 210) +++ trunk/OpenMPT/soundlib/mod_specifications.h 2008-05-10 13:27:55 UTC (rev 211) @@ -4,6 +4,7 @@ //Simple struct to gather various modspecifications in one place. //Feel free to improve. struct CModSpecifications +//======================= { //NOTE: If changing order, update all initializations below. char fileExtension[5]; @@ -108,7 +109,7 @@ 256, //Max pattern rows 20, //Max mod name length 31, //SamplesMax - 256, //instrumentMax + 200, //instrumentMax mixLevels_original, //defaultMixLevels 0 //Max MIDI mapping directives }; @@ -118,16 +119,16 @@ { //TODO: Set correct values. "xm", //File extension - 64, //Pattern max. - 128, //Order max. + 240, //Pattern max. + 256, //Order max. 4, //Channel min - 64, //Channel max + 127, //Channel max 32, //Min tempo 512, //Max tempo 4, //Min pattern rows 1024, //Max pattern rows 20, //Max mod name length - 31, //SamplesMax + 4000, //SamplesMax 256, //instrumentMax mixLevels_117RC3, //defaultMixLevels 200 //Max MIDI mapping directives @@ -146,7 +147,7 @@ 64, //Min pattern rows 64, //Max pattern rows 27, //Max mod name length - 31, //SamplesMax + 99, //SamplesMax 0, //instrumentMax mixLevels_original, //defaultMixLevels 0 //Max MIDI mapping directives @@ -165,7 +166,7 @@ 64, //Min pattern rows 64, //Max pattern rows 27, //Max mod name length - 31, //SamplesMax + 99, //SamplesMax 0, //instrumentMax mixLevels_original, //defaultMixLevels 0 //Max MIDI mapping directives @@ -185,7 +186,7 @@ 256, //Max pattern rows 25, //Max mod name length 256, //SamplesMax - 256, //instrumentMax + 200, //instrumentMax mixLevels_original, //defaultMixLevels 0 //Max MIDI mapping directives }; @@ -212,6 +213,4 @@ - - #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-04-13 21:53:27
|
Revision: 210 http://modplug.svn.sourceforge.net/modplug/?rev=210&view=rev Author: relabsoluness Date: 2008-04-13 14:53:04 -0700 (Sun, 13 Apr 2008) Log Message: ----------- 1.17.02.52 . Shouldn't need winhttp anymore(at least now that updatecheck is disabled). Dependency caused problems in Win98. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/bin/mptrack.exe trunk/OpenMPT/mptrack/mptrack.vcproj Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-04-05 20:56:19 UTC (rev 209) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-04-13 21:53:04 UTC (rev 210) @@ -565,7 +565,6 @@ m_hBladeEnc = NULL; m_hLameEnc = NULL; m_hACMInst = NULL; - m_pRequestContext = NULL; m_hAlternateResourceHandle = NULL; m_szConfigFileName[0] = 0; for (UINT i=0; i<MAX_DLS_BANKS; i++) gpDLSBanks[i] = NULL; @@ -578,6 +577,10 @@ strcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_PROGRAM*32], "Cc p"); strcpy(&m_MidiCfg.szMidiSFXExt[0], "F0F000z"); for (int iz=0; iz<16; iz++) wsprintf(&m_MidiCfg.szMidiZXXExt[iz*32], "F0F001%02X", iz*8); + + #ifdef UPDATECHECKENABLED + m_pRequestContext = NULL; + #endif } ///////////////////////////////////////////////////////////////////////////// @@ -823,6 +826,8 @@ return TRUE; } + +#ifdef UPDATECHECKENABLED void __stdcall CTrackApp::InternetRequestCallback( HINTERNET /*hInternet*/, DWORD_PTR userData, DWORD dwInternetStatus, LPVOID /*lpvStatusInformation*/, DWORD /*dwStatusInformationLength*/) //----------------------------------------------------------------------------------------------------- @@ -999,9 +1004,9 @@ } } +#endif - int CTrackApp::ExitInstance() //--------------------------- { @@ -1054,8 +1059,10 @@ UninitializeACM(); // Cleanup the internet request, in case it is still active. + #ifdef UPDATECHECKENABLED CleanupInternetRequest(m_pRequestContext); delete m_pRequestContext; + #endif return CWinApp::ExitInstance(); } Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2008-04-05 20:56:19 UTC (rev 209) +++ trunk/OpenMPT/mptrack/Mptrack.h 2008-04-13 21:53:04 UTC (rev 210) @@ -15,9 +15,12 @@ #include "resource.h" // main symbols #include "sndfile.h" #include <windows.h> -#include <Specstrings.h> // In VC2003, '__in' was undefined in winhttp.h -#include <winhttp.h> +#ifdef UPDATECHECKENABLED + #include <Specstrings.h> // In VC2003, '__in' was undefined in winhttp.h + #include <winhttp.h> +#endif + class CModDoc; class CVstPluginManager; @@ -99,6 +102,7 @@ ///////////////////////////////////////////////////////////////////////////// // Internet connection context +#ifdef UPDATECHECKENABLED typedef struct REQUEST_CONTEXT { HINTERNET hSession; HINTERNET hConnection; @@ -106,6 +110,7 @@ LPSTR lpBuffer; // Buffer for storing read data LPSTR postData; } REQUEST_CONTEXT; +#endif ///////////////////////////////////////////////////////////////////////////// // CTrackApp: @@ -138,8 +143,11 @@ CHAR m_szConfigFileName[_MAX_PATH]; CHAR m_szPluginCacheFileName[_MAX_PATH]; CHAR m_szStringsFileName[_MAX_PATH]; + + #ifdef UPDATECHECKENABLED // Internet request context REQUEST_CONTEXT *m_pRequestContext; + #endif public: CTrackApp(); @@ -181,11 +189,14 @@ protected: VOID StartSplashScreen(); VOID StopSplashScreen(); - VOID UpdateCheck(); - static void __stdcall InternetRequestCallback( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, - LPVOID lpvStatusInformation, DWORD dwStatusInformationLength); - static void CleanupInternetRequest(REQUEST_CONTEXT *pRequestContext); + #ifdef UPDATECHECKENABLED + VOID UpdateCheck(); + static void __stdcall InternetRequestCallback( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, + LPVOID lpvStatusInformation, DWORD dwStatusInformationLength); + static void CleanupInternetRequest(REQUEST_CONTEXT *pRequestContext); + #endif + // Localized strings public: VOID ImportLocalizedStrings(); Modified: trunk/OpenMPT/mptrack/bin/mptrack.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2008-04-05 20:56:19 UTC (rev 209) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2008-04-13 21:53:04 UTC (rev 210) @@ -48,13 +48,13 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib winhttp.lib" + AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib" OutputFile=".\Debug/mptrack.exe" Version="5.0" LinkIncremental="2" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\xsoundlib\Debug" - DelayLoadDLLs="winhttp.dll" + DelayLoadDLLs="" GenerateDebugInformation="TRUE" AssemblyDebug="1" ProgramDatabaseFile=".\Debug/mptrack.pdb" @@ -124,7 +124,7 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib winhttp.lib" + AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib" OutputFile=".\Bin/mptrack.exe" Version="5.0" LinkIncremental="1" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-04-05 20:56:24
|
Revision: 209 http://modplug.svn.sourceforge.net/modplug/?rev=209&view=rev Author: relabsoluness Date: 2008-04-05 13:56:19 -0700 (Sat, 05 Apr 2008) Log Message: ----------- . Fix to faulty plug file existence check (http://lpchip.com/modplug/viewtopic.php?t=2255) . Sound card-options buffer length value validation. . In .51, muted channels were ignored completely in MIDI export. Now pattern effects are processed in muted channels. . IT style-playback fix Modified Paths: -------------- trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/misc_util.cpp trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-04-05 20:56:19 UTC (rev 209) @@ -329,8 +329,16 @@ CHAR s[32]; m_CbnBufferLength.GetWindowText(s, sizeof(s)); m_nBufferLength = atoi(s); - //if ((m_nBufferLength < 10) || (m_nBufferLength > 200)) m_nBufferLength = 100; - if ((m_nBufferLength < SNDDEV_MINBUFFERLEN) || (m_nBufferLength > SNDDEV_MAXBUFFERLEN)) m_nBufferLength = 100; + //Check given value. + if(m_nBufferLength < SNDDEV_MINBUFFERLEN) + m_nBufferLength = SNDDEV_MINBUFFERLEN; + else + { + if(m_nBufferLength > SNDDEV_MAXBUFFERLEN) + m_nBufferLength = SNDDEV_MAXBUFFERLEN; + } + wsprintf(s, "%d ms", m_nBufferLength); + m_CbnBufferLength.SetWindowText(s); } // Soft Panning if (m_dwSoundSetup & SOUNDSETUP_SOFTPANNING) Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-04-05 20:56:19 UTC (rev 209) @@ -1,6 +1,7 @@ #include "stdafx.h" #include <uuids.h> #include <dmoreg.h> +#include <shlwapi.h> #include <medparam.h> #include "mptrack.h" #include "mainfrm.h" @@ -162,7 +163,7 @@ PVSTPLUGINLIB CVstPluginManager::AddPlugin(LPCSTR pszDllPath, BOOL bCache, const bool checkFileExistence, CString* const errStr) //----------------------------------------------------------------------------------------------------------- { - if(checkFileExistence && !DoesFileExist(pszDllPath)) + if(checkFileExistence && (PathFileExists(pszDllPath) == FALSE)) { if(errStr) { Modified: trunk/OpenMPT/mptrack/misc_util.cpp =================================================================== --- trunk/OpenMPT/mptrack/misc_util.cpp 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/mptrack/misc_util.cpp 2008-04-05 20:56:19 UTC (rev 209) @@ -1,17 +1,3 @@ #include "stdafx.h" #include "misc_util.h" -bool DoesFileExist(const char* const filepath) -//-------------------------------------------- -{ - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; - - LPTSTR* p = 0; - _splitpath(filepath, drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, NULL, NULL); - return (SearchPath(path_buffer, fname, ext, 0, 0, p) != 0); -} Modified: trunk/OpenMPT/mptrack/misc_util.h =================================================================== --- trunk/OpenMPT/mptrack/misc_util.h 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/mptrack/misc_util.h 2008-04-05 20:56:19 UTC (rev 209) @@ -35,8 +35,5 @@ */ } -//Return true if file with given path is found. -bool DoesFileExist(const char* const filepath); - #endif Modified: trunk/OpenMPT/mptrack/mod2midi.cpp =================================================================== --- trunk/OpenMPT/mptrack/mod2midi.cpp 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/mptrack/mod2midi.cpp 2008-04-05 20:56:19 UTC (rev 209) @@ -432,72 +432,73 @@ } for (UINT nChn=0; nChn<chnCount; nChn++) { - //Skip muted channels. - if(m_pSndFile->ChnSettings[nChn].dwFlags & CHN_MUTE) continue; - PDYNMIDITRACK pTrk = &Tracks[nChn]; MODCOMMAND *m = m_pSndFile->Patterns[nPat].GetpModCommand(nRow, nChn); UINT delta_time = nClock - pTrk->nLastEventClock; UINT len = 0; - // Instrument change - if ((m->instr) && (m->instr != pTrk->nInstrument) && (m->instr < MAX_SAMPLES)) + //Process note data only in non-muted channels. + if((m_pSndFile->ChnSettings[nChn].dwFlags & CHN_MUTE) == 0) { - UINT nIns = m->instr; - UINT nMidiCh = m_InstrMap[nIns].nChannel; - UINT nProgram = m_InstrMap[nIns].nProgram; - if ((nMidiCh) && (nMidiCh <= 16)) nMidiCh--; - else nMidiCh = nChn&7; - pTrk->nMidiChannel = nMidiCh; - pTrk->nMidiProgram = nProgram; - pTrk->nInstrument = nIns; - if ((nMidiCh != 9) && (nProgram != nMidiChCurPrg[nMidiCh])) + // Instrument change + if ((m->instr) && (m->instr != pTrk->nInstrument) && (m->instr < MAX_SAMPLES)) { - tmp[len] = 0xC0|nMidiCh; - tmp[len+1] = nProgram; - tmp[len+2] = 0; - len += 3; - } - } - // Note change - if (m->note) - { - UINT note = m->note - 1; - for (UINT i=0; i<128; i++) - { - if (pTrk->NoteOn[i]) + UINT nIns = m->instr; + UINT nMidiCh = m_InstrMap[nIns].nChannel; + UINT nProgram = m_InstrMap[nIns].nProgram; + if ((nMidiCh) && (nMidiCh <= 16)) nMidiCh--; + else nMidiCh = nChn&7; + pTrk->nMidiChannel = nMidiCh; + pTrk->nMidiProgram = nProgram; + pTrk->nInstrument = nIns; + if ((nMidiCh != 9) && (nProgram != nMidiChCurPrg[nMidiCh])) { - tmp[len] = 0x90|(pTrk->NoteOn[i]-1); - tmp[len+1] = i; + tmp[len] = 0xC0|nMidiCh; + tmp[len+1] = nProgram; tmp[len+2] = 0; - tmp[len+3] = 0; - len += 4; - pTrk->NoteOn[i] = 0; + len += 3; } } - if (m->note <= 120) + // Note change + if (m->note) { - pTrk->NoteOn[note] = pTrk->nMidiChannel+1; - tmp[len] = 0x90|pTrk->nMidiChannel; - tmp[len+1] = (pTrk->nMidiChannel==9) ? pTrk->nMidiProgram : note; - UINT vol = 0x7f; - UINT nsmp = pTrk->nInstrument; - if (m_pSndFile->m_nInstruments) + UINT note = m->note - 1; + for (UINT i=0; i<128; i++) { - if ((nsmp < MAX_INSTRUMENTS) && (m_pSndFile->Headers[nsmp])) + if (pTrk->NoteOn[i]) { - INSTRUMENTHEADER *penv = m_pSndFile->Headers[nsmp]; - nsmp = penv->Keyboard[note]; - } else nsmp = 0; + tmp[len] = 0x90|(pTrk->NoteOn[i]-1); + tmp[len+1] = i; + tmp[len+2] = 0; + tmp[len+3] = 0; + len += 4; + pTrk->NoteOn[i] = 0; + } } - if ((nsmp) && (nsmp < MAX_SAMPLES)) vol = m_pSndFile->Ins[nsmp].nVolume; - if (m->volcmd == VOLCMD_VOLUME) vol = m->vol*4; - if (m->command == CMD_VOLUME) vol = m->param*4; - vol = LinearToDLSMidiVolume(vol<<8); - if (vol > 0x7f) vol = 0x7f; - tmp[len+2] = (BYTE)vol; - tmp[len+3] = 0; - len += 4; + if (m->note <= 120) + { + pTrk->NoteOn[note] = pTrk->nMidiChannel+1; + tmp[len] = 0x90|pTrk->nMidiChannel; + tmp[len+1] = (pTrk->nMidiChannel==9) ? pTrk->nMidiProgram : note; + UINT vol = 0x7f; + UINT nsmp = pTrk->nInstrument; + if (m_pSndFile->m_nInstruments) + { + if ((nsmp < MAX_INSTRUMENTS) && (m_pSndFile->Headers[nsmp])) + { + INSTRUMENTHEADER *penv = m_pSndFile->Headers[nsmp]; + nsmp = penv->Keyboard[note]; + } else nsmp = 0; + } + if ((nsmp) && (nsmp < MAX_SAMPLES)) vol = m_pSndFile->Ins[nsmp].nVolume; + if (m->volcmd == VOLCMD_VOLUME) vol = m->vol*4; + if (m->command == CMD_VOLUME) vol = m->param*4; + vol = LinearToDLSMidiVolume(vol<<8); + if (vol > 0x7f) vol = 0x7f; + tmp[len+2] = (BYTE)vol; + tmp[len+3] = 0; + len += 4; + } } } // Effects Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-04-05 20:56:19 UTC (rev 209) @@ -1946,7 +1946,7 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,2,51 + FILEVERSION 1,17,2,52 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -1964,7 +1964,7 @@ BEGIN VALUE "CompanyName", "Olivier Lapicque / OpenMPT team" VALUE "FileDescription", "OpenMPT / ModPlug Tracker" - VALUE "FileVersion", "1, 17, 2, 51" + VALUE "FileVersion", "1, 17, 2, 52" VALUE "InternalName", "Modplug Tracker" VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2007 GPL." VALUE "LegalTrademarks", "M.O.D.P.L.U.G" Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2008-03-29 16:08:03 UTC (rev 208) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2008-04-05 20:56:19 UTC (rev 209) @@ -615,12 +615,13 @@ pChn->dwFlags |= (CHN_NOTEFADE|CHN_FASTVOLRAMP); if ((!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || (m_nInstruments)) pChn->nVolume = 0; pChn->nFadeOutVol = 0; + } - //IT compatibility tentative fix: Clear channel note memory on note cut. - if(TypeIsIT_MPT() && GetModFlag(MSF_IT_COMPATIBLE_PLAY)) - { - pChn->nNote = pChn->nNewNote = 0; - } + //IT compatibility tentative fix: Clear channel note memory. + if(TypeIsIT_MPT() && GetModFlag(MSF_IT_COMPATIBLE_PLAY)) + { + pChn->nNote = 0; + pChn->nNewNote = 0; } return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-03-29 16:08:13
|
Revision: 208 http://modplug.svn.sourceforge.net/modplug/?rev=208&view=rev Author: relabsoluness Date: 2008-03-29 09:08:03 -0700 (Sat, 29 Mar 2008) Log Message: ----------- 1.17.02.51 . Fix to crash when loading plug with long(>32) param name. . Internal: Fix to "_WIN32_WINNT settings conflicts with _WIN32_IE setting"-error when compiling with VS2008 ? Minor internal changes to get rid of some compiler warnings Modified Paths: -------------- trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/Ctrl_com.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/OpenGLEditor.cpp trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp trunk/OpenMPT/mptrack/Stdafx.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/bin/mptrack.exe trunk/OpenMPT/mptrack/fxp.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/mptrack/view_graph.cpp Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -150,7 +150,6 @@ { if (m_bInitialActivation && m_ViewPatterns.nPattern==0) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); m_ViewPatterns.nPattern=pModDoc->GetSoundFile()->Order[0]; m_ViewPatterns.nOrder=0; //just in case (should already be 0) m_ViewPatterns.nRow=0; //just in case Modified: trunk/OpenMPT/mptrack/Ctrl_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_com.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Ctrl_com.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -208,7 +208,7 @@ } //rewbs.customKeys -LRESULT CCtrlComments::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam) +LRESULT CCtrlComments::OnCustomKeyMsg(WPARAM wParam, LPARAM /*lParam*/) { if (wParam == kcNull) return NULL; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -485,7 +485,7 @@ //Toggle loop state setLoop = !(m_pSndFile->m_dwSongFlags&SONG_PATTERNLOOP); } else { - setLoop = static_cast<bool>(lParam); + setLoop = (lParam != 0); } if (setLoop) { @@ -657,6 +657,7 @@ // -> CODE#0015 // -> DESC="channels management dlg" void CCtrlPatterns::OnChannelManager() +//------------------------------------ { if(CChannelManagerDlg::sharedInstance()){ if(CChannelManagerDlg::sharedInstance()->IsDisplayed()) @@ -758,24 +759,28 @@ } } void CCtrlPatterns::OnSplitNoteChanged() +//-------------------------------------- { m_nSplitNote = m_CbnSplitNote.GetCurSel(); SendViewMessage(VIEWMSG_SETSPLITNOTE, m_nSplitNote); SwitchToView(); } void CCtrlPatterns::OnOctaveModifierChanged() +//------------------------------------------- { m_nOctaveModifier = m_CbnOctaveModifier.GetCurSel(); SendViewMessage(VIEWMSG_SETOCTAVEMODIFIER, m_nOctaveModifier); SwitchToView(); } void CCtrlPatterns::OnOctaveLink() +//-------------------------------- { m_nOctaveLink = IsDlgButtonChecked(IDC_PATTERN_OCTAVELINK); SendViewMessage(VIEWMSG_SETOCTAVELINK, m_nOctaveLink); SwitchToView(); } void CCtrlPatterns::OnSplitVolumeChanged() +//---------------------------------------- { m_nSplitVolume = m_CbnSplitVolume.GetCurSel(); SendViewMessage(VIEWMSG_SETSPLITVOLUME, m_nSplitVolume); @@ -1167,10 +1172,12 @@ //rewbs.introVST void CCtrlPatterns::TogglePluginEditor() +//-------------------------------------- { TogglePluginEditor(false); } + void CCtrlPatterns::TogglePluginEditor(bool split) //---------------------------------------- { @@ -1195,6 +1202,7 @@ } bool CCtrlPatterns::HasValidPlug(UINT instr) +//------------------------------------------ { if ((instr) && (instr<MAX_INSTRUMENTS) && (m_pSndFile) && m_pSndFile->Headers[instr]) { Modified: trunk/OpenMPT/mptrack/OpenGLEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/OpenGLEditor.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/OpenGLEditor.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -68,12 +68,12 @@ SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Symbol in Client-Rechteck zentrieren - int cxIcon = GetSystemMetrics(SM_CXICON); - int cyIcon = GetSystemMetrics(SM_CYICON); + //int cxIcon = GetSystemMetrics(SM_CXICON); + //int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); - int x = (rect.Width() - cxIcon + 1) / 2; - int y = (rect.Height() - cyIcon + 1) / 2; + //int x = (rect.Width() - cxIcon + 1) / 2; + //int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen //dc.DrawIcon(x, y, m_hIcon); Modified: trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -44,7 +44,7 @@ CRect rect; GetDlgItem(IDC_RANDOM_PLACEHOLDER)->GetWindowRect(rect); int hOff = 8, vOff = 86; - int width = 100, height = 200; + //int width = 100, height = 200; m_RandomizerNote.Create(CPatternRandomizerGUINote::IDD, (CWnd*)this); m_RandomizerNote.MoveWindow(hOff, vOff, rect.Width(), rect.Height()); @@ -96,7 +96,7 @@ } -void CPatternRandomizerGUI::OnRandomiserTabChange(NMHDR *pNMHDR, LRESULT *pResult) +void CPatternRandomizerGUI::OnRandomiserTabChange(NMHDR* /*pNMHDR*/, LRESULT *pResult) //-------------------------------------------------------------------------------- { int nActiveTab = m_RandomizerTabs.GetCurSel(); Modified: trunk/OpenMPT/mptrack/Stdafx.h =================================================================== --- trunk/OpenMPT/mptrack/Stdafx.h 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Stdafx.h 2008-03-29 16:08:03 UTC (rev 208) @@ -11,8 +11,13 @@ #endif // _MSC_VER >= 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers -#define WINVER 0x0401 +#if _MSC_VER >= 1500 + #define _WIN32_WINNT 0x0500 +#else + #define WINVER 0x0401 +#endif + // windows excludes #define NOMCX // mmreg excludes Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -476,7 +476,7 @@ // -> CODE#0002 // -> DESC="VST plugins presets" - CHAR s2[32]; + CHAR s2[128]; //UINT k = 0, nProg = min(pVstPlugin->GetNumPrograms(), 256); //Limit number of progs to 256 because of insane plugs like synth1 UINT k = 0, nProg = pVstPlugin->GetNumPrograms(); m_CbnPreset.SetRedraw(FALSE); Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -1971,11 +1971,11 @@ pszName[0] = 0; if ((m_pEffect) && (m_pEffect->numParams > 0) && (nIndex < (UINT)m_pEffect->numParams)) { - CHAR s[32]; + CHAR s[64]; //Increased to 64 bytes since 32 bytes doesn't seem to suffice for all plugs. s[0] = 0; Dispatch(effGetParamName, nIndex, 0, s, 0); - s[31] = 0; - lstrcpyn(pszName, s, cbSize); + s[min(sizeof(s)-1, cbSize-1)] = 0; + lstrcpyn(pszName, s, min(cbSize, sizeof(s))); } } @@ -3100,6 +3100,7 @@ //end rewbs.VSTcompliance BOOL CVstPlugin::isInstrument() // ericus 18/02/2005 +//----------------------------- { if(m_pEffect) return ((m_pEffect->flags & effFlagsIsSynth) || (!m_pEffect->numInputs)); // rewbs.dryRatio return FALSE; @@ -4114,10 +4115,9 @@ { if(pMixPlugin) { - char s[32]; - //To check: Is the cast safe? + char s[64]; ((CVstPlugin*)(pMixPlugin))->GetParamName(index, s, sizeof(s)); - s[31] = 0; + s[sizeof(s)-1] = 0; return CString(s); } else Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Vstplug.h 2008-03-29 16:08:03 UTC (rev 208) @@ -75,7 +75,7 @@ float **m_pOutputs; int m_nEditorX, m_nEditorY; int m_MixBuffer[MIXBUFFERSIZE*2+2]; // Stereo interleaved - float m_FloatBuffer[MIXBUFFERSIZE*(2+32)+31]; // 2ch separated + up to 32 VSTi outputs... + float m_FloatBuffer[MIXBUFFERSIZE*(2+32)+34]; // 2ch separated + up to 32 VSTi outputs... VstMidiEvent m_ev_queue[VSTEVENT_QUEUE_LEN]; CModDoc* m_pModDoc; //rewbs.plugDocAware CSoundFile* m_pSndFile; //rewbs.plugDocAware Modified: trunk/OpenMPT/mptrack/bin/mptrack.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/fxp.cpp =================================================================== --- trunk/OpenMPT/mptrack/fxp.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/fxp.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -212,7 +212,7 @@ bool Cfxp::ReadLE(CFile &in, long &l) { - int size=sizeof(long); + UINT size=sizeof(long); if (in.Read(&l, size) < size) return false; @@ -223,7 +223,7 @@ bool Cfxp::ReadLE(CFile &in, float &f) { - int size=sizeof(float); + UINT size=sizeof(float); try { if (in.Read(&f, size) < size) @@ -245,7 +245,7 @@ bool Cfxp::ReadLE(CFile &in, char *c, UINT length) { - int size=sizeof(char)*length; + UINT size=sizeof(char)*length; return (in.Read(c, size) >= size); } Modified: trunk/OpenMPT/mptrack/view_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_com.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/view_com.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -570,9 +570,9 @@ LRESULT CViewComments::OnModViewMsg(WPARAM wParam, LPARAM lParam) //----------------------------------------------------------------- { - switch(wParam) - { - default: +// switch(wParam) +// { +// default: return CModScrollView::OnModViewMsg(wParam, lParam); - } +// } } \ No newline at end of file Modified: trunk/OpenMPT/mptrack/view_graph.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_graph.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/view_graph.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -56,7 +56,7 @@ } -void CViewGraph::OnUpdate(CView *pSender, LPARAM lHint, CObject *pHint) +void CViewGraph::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/) //--------------------------------------------------------------------- { } @@ -65,9 +65,9 @@ LRESULT CViewGraph::OnModViewMsg(WPARAM wParam, LPARAM lParam) //------------------------------------------------------------ { - switch(wParam) - { - default: +// switch(wParam) +// { +// default: return CModScrollView::OnModViewMsg(wParam, lParam); - } +// } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-03-25 20:15:44
|
Revision: 207 http://modplug.svn.sourceforge.net/modplug/?rev=207&view=rev Author: relabsoluness Date: 2008-03-25 13:15:39 -0700 (Tue, 25 Mar 2008) Log Message: ----------- . Fix to continuous scroll fixbug (bug introduced in rev. 202) . Fix to possible memory corruption problem on handling VST with more than 30 outputs. (Thanks to Markus for pointing this out) - VST with more than 32 outputs might still be handled poorly. ? Minor tweaks in project files. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/unlha/unlha.vcproj trunk/OpenMPT/unrar/UNRAR.vcproj trunk/OpenMPT/unzip/unzip.vcproj trunk/OpenMPT/xsoundlib/xsoundlib.vcproj Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2008-03-25 20:15:39 UTC (rev 207) @@ -273,7 +273,7 @@ if ((int)row < (int)0) row += pSndFile->PatternSize[m_nPattern]; row %= pSndFile->PatternSize[m_nPattern]; } - } else + } else //row >= 0 if (row >= pSndFile->PatternSize[m_nPattern]) { if (m_dwStatus & (PATSTATUS_KEYDRAGSEL|PATSTATUS_MOUSEDRAGSEL)) @@ -289,9 +289,10 @@ const PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; if ((nextPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nextPat])) { + const ROWINDEX newRow = row - pSndFile->PatternSize[m_nPattern]; SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nextOrder); if (SetCurrentPattern(nextPat)) - return SetCurrentRow(row - pSndFile->PatternSize[m_nPattern]); + return SetCurrentRow(newRow); } } row = pSndFile->PatternSize[m_nPattern]-1; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-25 20:15:39 UTC (rev 207) @@ -1579,6 +1579,16 @@ m_nInputs = m_pEffect->numInputs; m_nOutputs = m_pEffect->numOutputs; + + //32 is the maximum output count due to the size of m_FloatBuffer. + //TODO: How to handle properly plugs with numOutputs > 32? + if(m_nOutputs > 32) + { + m_nOutputs = 32; + CString str; + str.Format("Plugin has unsupported number(=%d) of outputs; plugin may malfunction.", m_pEffect->numOutputs); + MessageBox(NULL, str, "Warning", MB_ICONWARNING); + } //input pointer array size must be >=2 for now - the input buffer assignment might write to non allocated mem. otherwise m_pInputs = (m_nInputs >= 2) ? new (float *[m_nInputs]) : new (float*[2]); @@ -1590,7 +1600,7 @@ for (UINT iOut=0; iOut<m_nOutputs; iOut++) { - m_pTempBuffer[iOut]=(float *)((((DWORD)&m_FloatBuffer[MIXBUFFERSIZE*(2+iOut)])+7)&~7); //rewbs.dryRatio + m_pTempBuffer[iOut]=(float *)((((DWORD_PTR)&m_FloatBuffer[MIXBUFFERSIZE*(2+iOut)])+7)&~7); //rewbs.dryRatio } #ifdef VST_LOG Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/mptrack/Vstplug.h 2008-03-25 20:15:39 UTC (rev 207) @@ -75,7 +75,7 @@ float **m_pOutputs; int m_nEditorX, m_nEditorY; int m_MixBuffer[MIXBUFFERSIZE*2+2]; // Stereo interleaved - float m_FloatBuffer[MIXBUFFERSIZE*32+31]; // 2ch separated + up to 32 VSTi outputs... + float m_FloatBuffer[MIXBUFFERSIZE*(2+32)+31]; // 2ch separated + up to 32 VSTi outputs... VstMidiEvent m_ev_queue[VSTEVENT_QUEUE_LEN]; CModDoc* m_pModDoc; //rewbs.plugDocAware CSoundFile* m_pSndFile; //rewbs.plugDocAware Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2008-03-25 20:15:39 UTC (rev 207) @@ -27,8 +27,11 @@ AdditionalIncludeDirectories="..\unlha,..\unzip,..\unrar,..\soundlib,..\include,..\xsoundlib" PreprocessorDefinitions="_DEBUG,WIN32,_WINDOWS,ENABLE_EQ,MODPLUG_TRACKER,NO_PACKING,HAVE_DOT_NET,ENABLE_AMD,ENABLE_SSE,ENABLE_AMDNOW,ENABLE_MMX" StringPooling="TRUE" + BasicRuntimeChecks="3" RuntimeLibrary="1" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" + ForceConformanceInForLoopScope="TRUE" UsePrecompiledHeader="3" PrecompiledHeaderThrough="stdafx.h" PrecompiledHeaderFile=".\Debug/mptrack.pch" @@ -37,7 +40,7 @@ ProgramDataBaseFileName=".\Debug/" BrowseInformation="1" WarningLevel="4" - SuppressStartupBanner="TRUE" + SuppressStartupBanner="FALSE" DebugInformationFormat="4" CompileAs="0"/> <Tool @@ -92,11 +95,12 @@ IntermediateDirectory="$(ConfigurationName)" ConfigurationType="1" UseOfMFC="1" - ATLMinimizesCRunTimeLibraryUsage="FALSE"> + ATLMinimizesCRunTimeLibraryUsage="FALSE" + WholeProgramOptimization="TRUE"> <Tool Name="VCCLCompilerTool" - AdditionalOptions="/EHsc" - Optimization="3" + AdditionalOptions="/EHsc /O2" + Optimization="2" GlobalOptimizations="TRUE" InlineFunctionExpansion="2" OptimizeForWindowsApplication="TRUE" @@ -104,7 +108,7 @@ PreprocessorDefinitions="NDEBUG,WIN32,_WINDOWS,ENABLE_MMX,ENABLE_EQ,MODPLUG_TRACKER,NO_PACKING,HAVE_DOT_NET,ENABLE_AMD,ENABLE_SSE,ENABLE_AMDNOW" StringPooling="TRUE" RuntimeLibrary="0" - BufferSecurityCheck="FALSE" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="FALSE" UsePrecompiledHeader="3" PrecompiledHeaderThrough="stdafx.h" @@ -113,7 +117,7 @@ ObjectFile=".\Generic/" ProgramDataBaseFileName=".\Generic/" WarningLevel="3" - SuppressStartupBanner="TRUE" + SuppressStartupBanner="FALSE" CompileAs="0"/> <Tool Name="VCCustomBuildTool"/> @@ -137,8 +141,7 @@ TargetEnvironment="1" TypeLibraryName=".\Bin/mptrack.tlb"/> <Tool - Name="VCPostBuildEventTool" - CommandLine="perl $(TargetDir)/getVersionFromCode.pl > $(TargetDir)/version"/> + Name="VCPostBuildEventTool"/> <Tool Name="VCPreBuildEventTool"/> <Tool @@ -706,21 +709,6 @@ RelativePath="..\soundlib\Tables.cpp"> </File> <File - RelativePath="..\soundlib\tuning.cpp"> - </File> - <File - RelativePath="..\soundlib\tuningbase.cpp"> - </File> - <File - RelativePath="..\soundlib\tuningCollection.cpp"> - </File> - <File - RelativePath=".\TuningDialog.cpp"> - </File> - <File - RelativePath=".\tuningRatioMapWnd.cpp"> - </File> - <File RelativePath=".\view_com.cpp"> </File> <File @@ -848,6 +836,25 @@ RelativePath=".\view_graph.h"> </File> </Filter> + <Filter + Name="Tuning" + Filter=""> + <File + RelativePath="..\soundlib\tuning.cpp"> + </File> + <File + RelativePath="..\soundlib\tuningbase.cpp"> + </File> + <File + RelativePath="..\soundlib\tuningCollection.cpp"> + </File> + <File + RelativePath=".\TuningDialog.cpp"> + </File> + <File + RelativePath=".\tuningRatioMapWnd.cpp"> + </File> + </Filter> </Filter> <Filter Name="Resource Files" @@ -983,6 +990,9 @@ RelativePath=".\MainFrm.h"> </File> <File + RelativePath="..\soundlib\midi.h"> + </File> + <File RelativePath=".\MIDIMappingDialog.h"> </File> <File @@ -995,6 +1005,9 @@ RelativePath=".\mod2wave.h"> </File> <File + RelativePath="..\soundlib\mod_specifications.h"> + </File> + <File RelativePath="..\soundlib\modcommand.h"> </File> <File @@ -1022,6 +1035,9 @@ RelativePath=".\OpenGLEditor.h"> </File> <File + RelativePath=".\order.h"> + </File> + <File RelativePath=".\OrderToPatternTable.h"> </File> <File @@ -1034,6 +1050,9 @@ RelativePath=".\PatternGotoDialog.h"> </File> <File + RelativePath="..\soundlib\patternset.h"> + </File> + <File RelativePath=".\PerformanceCounter.h"> </File> <File @@ -1067,21 +1086,6 @@ RelativePath=".\StdAfx.h"> </File> <File - RelativePath="..\soundlib\tuning.h"> - </File> - <File - RelativePath="..\soundlib\tuningbase.h"> - </File> - <File - RelativePath="..\soundlib\tuningcollection.h"> - </File> - <File - RelativePath=".\TuningDialog.h"> - </File> - <File - RelativePath=".\tuningRatioMapWnd.h"> - </File> - <File RelativePath=".\typedefs.h"> </File> <File @@ -1109,8 +1113,30 @@ RelativePath=".\vstplug.h"> </File> <File + RelativePath="..\soundlib\wavConverter.h"> + </File> + <File RelativePath="..\soundlib\WindowedFIR.h"> </File> + <Filter + Name="tuning" + Filter=""> + <File + RelativePath="..\soundlib\tuning.h"> + </File> + <File + RelativePath="..\soundlib\tuningbase.h"> + </File> + <File + RelativePath="..\soundlib\tuningcollection.h"> + </File> + <File + RelativePath=".\TuningDialog.h"> + </File> + <File + RelativePath=".\tuningRatioMapWnd.h"> + </File> + </Filter> </Filter> <File RelativePath=".\mptrack.reg"> Modified: trunk/OpenMPT/unlha/unlha.vcproj =================================================================== --- trunk/OpenMPT/unlha/unlha.vcproj 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/unlha/unlha.vcproj 2008-03-25 20:15:39 UTC (rev 207) @@ -25,6 +25,7 @@ StringPooling="TRUE" BasicRuntimeChecks="3" RuntimeLibrary="1" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\Debug/unlha.pch" AssemblerListingLocation=".\Debug/" @@ -70,18 +71,20 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/O1" Optimization="1" InlineFunctionExpansion="1" PreprocessorDefinitions="WIN32;NDEBUG;_LIB" StringPooling="TRUE" RuntimeLibrary="0" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\Release/unlha.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" ProgramDataBaseFileName=".\Release/" WarningLevel="3" - SuppressStartupBanner="TRUE"/> + SuppressStartupBanner="FALSE"/> <Tool Name="VCCustomBuildTool"/> <Tool Modified: trunk/OpenMPT/unrar/UNRAR.vcproj =================================================================== --- trunk/OpenMPT/unrar/UNRAR.vcproj 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/unrar/UNRAR.vcproj 2008-03-25 20:15:39 UTC (rev 207) @@ -23,6 +23,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" StringPooling="TRUE" RuntimeLibrary="1" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\Debug/UNRAR.pch" AssemblerListingLocation=".\Debug/" @@ -66,18 +67,20 @@ ATLMinimizesCRunTimeLibraryUsage="FALSE"> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/O1" Optimization="1" InlineFunctionExpansion="1" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" StringPooling="TRUE" RuntimeLibrary="0" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\Release/UNRAR.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" ProgramDataBaseFileName=".\Release/" WarningLevel="3" - SuppressStartupBanner="TRUE"/> + SuppressStartupBanner="FALSE"/> <Tool Name="VCCustomBuildTool"/> <Tool Modified: trunk/OpenMPT/unzip/unzip.vcproj =================================================================== --- trunk/OpenMPT/unzip/unzip.vcproj 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/unzip/unzip.vcproj 2008-03-25 20:15:39 UTC (rev 207) @@ -23,6 +23,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" StringPooling="TRUE" RuntimeLibrary="1" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\Debug/unzip.pch" AssemblerListingLocation=".\Debug/" @@ -66,18 +67,20 @@ ATLMinimizesCRunTimeLibraryUsage="FALSE"> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/O1" Optimization="1" InlineFunctionExpansion="1" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" StringPooling="TRUE" RuntimeLibrary="0" + BufferSecurityCheck="TRUE" EnableFunctionLevelLinking="TRUE" PrecompiledHeaderFile=".\Release/unzip.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" ProgramDataBaseFileName=".\Release/" WarningLevel="3" - SuppressStartupBanner="TRUE"/> + SuppressStartupBanner="FALSE"/> <Tool Name="VCCustomBuildTool"/> <Tool Modified: trunk/OpenMPT/xsoundlib/xsoundlib.vcproj =================================================================== --- trunk/OpenMPT/xsoundlib/xsoundlib.vcproj 2008-03-19 20:38:12 UTC (rev 206) +++ trunk/OpenMPT/xsoundlib/xsoundlib.vcproj 2008-03-25 20:15:39 UTC (rev 207) @@ -23,6 +23,7 @@ MinimalRebuild="TRUE" BasicRuntimeChecks="3" RuntimeLibrary="5" + BufferSecurityCheck="TRUE" UsePrecompiledHeader="3" WarningLevel="3" Detect64BitPortabilityProblems="TRUE" @@ -59,10 +60,13 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" + AdditionalOptions="/O2" PreprocessorDefinitions="WIN32;NDEBUG;_LIB" RuntimeLibrary="4" + BufferSecurityCheck="TRUE" UsePrecompiledHeader="3" WarningLevel="3" + SuppressStartupBanner="FALSE" Detect64BitPortabilityProblems="TRUE" DebugInformationFormat="3"/> <Tool This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-03-19 20:38:20
|
Revision: 206 http://modplug.svn.sourceforge.net/modplug/?rev=206&view=rev Author: relabsoluness Date: 2008-03-19 13:38:12 -0700 (Wed, 19 Mar 2008) Log Message: ----------- Bug fixing. . Fix to possible crash when browsing modules in treeview(http://lpchip.com/modplug/viewtopic.php?t=2222). . Fix to severe memory leak in the same section as above. . Fix to mptm not showing in tree view file browser. ? Some internal modifications Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mainbar.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_smp.h trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -450,7 +450,7 @@ GetPrivateProfileLong("AutoSave", "Enabled", true, iniFile)?m_pAutoSaver->Enable():m_pAutoSaver->Disable(); m_pAutoSaver->SetSaveInterval(GetPrivateProfileLong("AutoSave", "IntervalMinutes", 10, iniFile)); m_pAutoSaver->SetHistoryDepth(GetPrivateProfileLong("AutoSave", "BackupHistory", 3, iniFile)); - m_pAutoSaver->SetUseOriginalPath(GetPrivateProfileLong("AutoSave", "UseOriginalPath", true, iniFile)); + m_pAutoSaver->SetUseOriginalPath(GetPrivateProfileLong("AutoSave", "UseOriginalPath", true, iniFile) != 0); m_pAutoSaver->SetPath(GetPrivateProfileCString("AutoSave", "Path", "", iniFile)); m_pAutoSaver->SetFilenameTemplate(GetPrivateProfileCString("AutoSave", "FileNameTemplate", "", iniFile)); } @@ -961,7 +961,7 @@ { CHAR valueBuffer[INIBUFFERSIZE]; wsprintf(valueBuffer, "%li", value); - return WritePrivateProfileString(section, key, valueBuffer, iniFile); + return (WritePrivateProfileString(section, key, valueBuffer, iniFile) != 0); } @@ -981,7 +981,7 @@ { CHAR valueBuffer[INIBUFFERSIZE]; wsprintf(valueBuffer, "%lu", value); - return WritePrivateProfileString(section, key, valueBuffer, iniFile); + return (WritePrivateProfileString(section, key, valueBuffer, iniFile) != 0); } DWORD CMainFrame::GetPrivateProfileDWord(const CString section, const CString key, const DWORD defaultValue, const CString iniFile) @@ -996,7 +996,7 @@ bool CMainFrame::WritePrivateProfileCString(const CString section, const CString key, const CString value, const CString iniFile) { - return WritePrivateProfileString(section, key, value, iniFile); + return (WritePrivateProfileString(section, key, value, iniFile) != 0); } CString CMainFrame::GetPrivateProfileCString(const CString section, const CString key, const CString defaultValue, const CString iniFile) Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -922,7 +922,7 @@ } -#if _MSC_VER >= 1400 +#if _MFC_VER > 0x0710 LRESULT CModTreeBar::OnNcHitTest(CPoint point) #else UINT CModTreeBar::OnNcHitTest(CPoint point) Modified: trunk/OpenMPT/mptrack/Mainbar.h =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.h 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/Mainbar.h 2008-03-19 20:38:12 UTC (rev 206) @@ -116,7 +116,7 @@ protected: //{{AFX_MSG(CModTreeBar) afx_msg void OnNcPaint(); -#if _MSC_VER >= 1400 +#if _MFC_VER > 0x0710 afx_msg LRESULT OnNcHitTest(CPoint point); #else afx_msg UINT OnNcHitTest(CPoint point); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -1700,7 +1700,7 @@ } -#if _MSC_VER >= 1400 +#if _MFC_VER > 0x0710 LRESULT CViewInstrument::OnNcHitTest(CPoint point) #else UINT CViewInstrument::OnNcHitTest(CPoint point) Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/View_ins.h 2008-03-19 20:38:12 UTC (rev 206) @@ -98,7 +98,7 @@ afx_msg BOOL OnEraseBkgnd(CDC *) { return TRUE; } afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); -#if _MSC_VER >= 1400 +#if _MFC_VER > 0x0710 afx_msg LRESULT OnNcHitTest(CPoint point); #else afx_msg UINT OnNcHitTest(CPoint point); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -1408,7 +1408,7 @@ } -#if _MSC_VER >= 1400 +#if _MFC_VER > 0x0710 LRESULT CViewSample::OnNcHitTest(CPoint point) #else UINT CViewSample::OnNcHitTest(CPoint point) Modified: trunk/OpenMPT/mptrack/View_smp.h =================================================================== --- trunk/OpenMPT/mptrack/View_smp.h 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/View_smp.h 2008-03-19 20:38:12 UTC (rev 206) @@ -59,7 +59,7 @@ afx_msg BOOL OnEraseBkgnd(CDC *) { return TRUE; } afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); -#if _MSC_VER >= 1400 +#if _MFC_VER > 0x0710 afx_msg LRESULT OnNcHitTest(CPoint point); #else afx_msg UINT OnNcHitTest(CPoint point); Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -247,7 +247,9 @@ LPBYTE lpStream = f.Lock(); if (lpStream) { - m_SongFile.Create(lpStream, CMainFrame::GetMainFrame()->GetActiveDoc(), dwLen); + //m_SongFile.Create(lpStream, CMainFrame::GetMainFrame()->GetActiveDoc(), dwLen); + m_SongFile.Destroy(); + m_SongFile.Create(lpStream, NULL, dwLen); f.Unlock(); } } @@ -1530,6 +1532,7 @@ || (!lstrcmpi(s, ".s3m")) || (!lstrcmpi(s, ".xm")) || (!lstrcmpi(s, ".it")) + || (!lstrcmpi(s, ".mptm")) // -> CODE#0023 // -> DESC="IT project files (.itp)" // || (!lstrcmpi(s, ".itp")) ericus 03/03/2005 : temporarily deactivated 03/03/2005 Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -39,13 +39,13 @@ } -BOOL CVstPluginManager::CreateMixPluginProc(PSNDMIXPLUGIN pMixPlugin, CModDoc *pModDoc) +BOOL CVstPluginManager::CreateMixPluginProc(PSNDMIXPLUGIN pMixPlugin, CSoundFile* pSndFile) //------------------------------------------------------------------------------------- { CVstPluginManager *that = theApp.GetPluginManager(); if (that) { - return that->CreateMixPlugin(pMixPlugin, pModDoc); + return that->CreateMixPlugin(pMixPlugin, pSndFile); } return FALSE; } @@ -408,7 +408,7 @@ } -BOOL CVstPluginManager::CreateMixPlugin(PSNDMIXPLUGIN pMixPlugin, CModDoc *pModDoc) +BOOL CVstPluginManager::CreateMixPlugin(PSNDMIXPLUGIN pMixPlugin, CSoundFile* pSndFile) //--------------------------------------------------------------------------------- { UINT nMatch=0; @@ -462,7 +462,7 @@ CVstPlugin *pVstPlug = new CVstPlugin(NULL, pFound, pMixPlugin, pEffect); if (pVstPlug) { - pVstPlug->Initialize(pModDoc); + pVstPlug->Initialize(pSndFile); bOk = TRUE; } END_CRITICAL(); @@ -547,7 +547,7 @@ } } CVstPlugin *pVstPlug = new CVstPlugin(hLibrary, pFound, pMixPlugin, pEffect); - if (pVstPlug) pVstPlug->Initialize(pModDoc); + if (pVstPlug) pVstPlug->Initialize(pSndFile); } } else { @@ -1145,7 +1145,7 @@ // Now, create the new plugin if (pManager) { - pManager->CreateMixPlugin(m_pPlugin, m_pModDoc); + pManager->CreateMixPlugin(m_pPlugin, (m_pModDoc) ? m_pModDoc->GetSoundFile() : 0); if (m_pPlugin->pMixPlugin) { CHAR s[128]; @@ -1518,7 +1518,7 @@ } -void CVstPlugin::Initialize(CModDoc *pModDoc) +void CVstPlugin::Initialize(CSoundFile* pSndFile) //------------------------------------------- { if (!m_pEvList) @@ -1541,8 +1541,8 @@ //Assuming 32bit address space... m_pEffect->resvd1=(long)this; //rewbs.plugDocAware - m_pModDoc = pModDoc; - m_pSndFile = pModDoc->GetSoundFile(); + m_pSndFile = pSndFile; + m_pModDoc = pSndFile->GetpModDoc(); m_nSlot = FindSlot(); //end rewbs.plugDocAware @@ -2079,7 +2079,7 @@ float gain = 0.1f * (float)( m_pMixStruct ? (m_pMixStruct->Info.dwInputRouting>>16) & 0xff : 10 ); if(gain < 0.1f) gain = 1.0f; - if (m_bIsInstrument) { + if (m_bIsInstrument && m_pSndFile) { gain /= m_pSndFile->m_pConfig->getVSTiAttenuation(); gain *= (m_pSndFile->m_nVSTiVolume / m_pSndFile->m_pConfig->getNormalVSTiVol()); } @@ -2543,7 +2543,7 @@ nParam=127; } - if(m_pSndFile->GetModFlag(MSF_MIDICC_BUGEMULATION)) + if(m_pSndFile && m_pSndFile->GetModFlag(MSF_MIDICC_BUGEMULATION)) MidiSend(nController<<16 | nParam<<8 | 0xB0|nMidiCh); else MidiSend(nParam<<16 | nController<<8 | 0xB0|nMidiCh); @@ -2710,13 +2710,15 @@ } bool CVstPlugin::isPlaying(UINT note, UINT midiChn, UINT trackerChn) +//------------------------------------------------------------------ { note--; PVSTINSTCH pMidiCh = &m_MidiCh[(midiChn-1) & 0x0f]; - return pMidiCh->uNoteOnMap[note][trackerChn]; + return (pMidiCh->uNoteOnMap[note][trackerChn] != 0); } bool CVstPlugin::MoveNote(UINT note, UINT midiChn, UINT sourceTrackerChn, UINT destTrackerChn) +//--------------------------------------------------------------------------------------------- { note--; PVSTINSTCH pMidiCh = &m_MidiCh[(midiChn-1) & 0x0f]; @@ -2820,7 +2822,7 @@ && (m_pEffect->uniqueID != 'Sytr')) //special case: imageline sytrus pretends to support chunks but gives us garbage. { PVOID p = NULL; - LONG nByteSize; + LONG nByteSize = 0; // Try to get whole bank if (m_pEffect->uniqueID != 1984054788) { //special case: VB ffx4 pretends to get a valid bank but gives us garbage. @@ -2839,7 +2841,7 @@ m_pMixStruct->nPluginDataSize = nByteSize+4; } else { - if (m_pMixStruct->pPluginData) delete[] m_pMixStruct->pPluginData; + delete[] m_pMixStruct->pPluginData; m_pMixStruct->nPluginDataSize = 0; m_pMixStruct->pPluginData = new char[nByteSize+4]; if (m_pMixStruct->pPluginData) @@ -3001,11 +3003,13 @@ //rewbs.defaultPlugGui CAbstractVstEditor* CVstPlugin::GetEditor() +//----------------------------------------- { return m_pEditor; } bool CVstPlugin::Bypass(bool bypass) +//----------------------------------- { if (bypass) { m_pMixStruct->Info.dwInputRouting |= MIXPLUG_INPUTF_BYPASS; @@ -3020,13 +3024,15 @@ return bypass; } bool CVstPlugin::Bypass() +//----------------------- { return Bypass(!IsBypassed()); } bool CVstPlugin::IsBypassed() +//--------------------------- { - return m_pMixStruct->Info.dwInputRouting & MIXPLUG_INPUTF_BYPASS; + return ((m_pMixStruct->Info.dwInputRouting & MIXPLUG_INPUTF_BYPASS) != 0); } //end rewbs.defaultPlugGui @@ -3035,6 +3041,7 @@ //rewbs.VSTcompliance BOOL CVstPlugin::GetSpeakerArrangement() +//-------------------------------------- { VstSpeakerArrangement **pSA = NULL; Dispatch(effGetSpeakerArrangement, 0,0,pSA,0); @@ -3044,7 +3051,9 @@ return true; } -void CVstPlugin::NotifySongPlaying(bool playing) { +void CVstPlugin::NotifySongPlaying(bool playing) +//---------------------------------------------- +{ m_bSongPlaying=playing; } @@ -3095,10 +3104,11 @@ bool CVstPlugin::KeysRequired() //----------------------------- { - return (CVstPlugin::Dispatch(effKeysRequired, 0, 0, NULL, 0)); + return (CVstPlugin::Dispatch(effKeysRequired, 0, 0, NULL, 0) != 0); } void CVstPlugin::GetOutputPlugList(CArray<CVstPlugin*,CVstPlugin*> &list) +//----------------------------------------------------------------------- { // At the moment we know there will only be 1 output. // Returning NULL ptr means plugin outputs directly to master. @@ -3107,7 +3117,7 @@ CVstPlugin *pOutputPlug = NULL; if (m_pMixStruct->Info.dwOutputRouting & 0x80) { UINT nOutput = m_pMixStruct->Info.dwOutputRouting & 0x7f; - if ((nOutput > m_nSlot) && (nOutput < MAX_MIXPLUGINS)) { + if (m_pSndFile && (nOutput > m_nSlot) && (nOutput < MAX_MIXPLUGINS)) { pOutputPlug = (CVstPlugin*) m_pSndFile->m_MixPlugins[nOutput].pMixPlugin; } } @@ -3117,7 +3127,10 @@ } void CVstPlugin::GetInputPlugList(CArray<CVstPlugin*,CVstPlugin*> &list) +//---------------------------------------------------------------------- { + if(m_pSndFile == 0) return; + CArray<CVstPlugin*, CVstPlugin*> candidatePlugOutputs; CVstPlugin* pCandidatePlug = NULL; list.RemoveAll(); @@ -3139,16 +3152,15 @@ return; } -void CVstPlugin::GetInputInstrumentList(CArray<UINT,UINT> &list) +void CVstPlugin::GetInputInstrumentList(CArray<UINT,UINT> &list) +//-------------------------------------------------------------- { list.RemoveAll(); + if(m_pSndFile == 0) return; - CModDoc* pModDoc = GetModDoc(); - CSoundFile* pSndFile = pModDoc->GetSoundFile(); - UINT nThisMixPlug = m_nSlot+1; //m_nSlot is position in mixplug array. for (int nIns=0; nIns<MAX_INSTRUMENTS; nIns++) { - if (pSndFile->Headers[nIns] && (pSndFile->Headers[nIns]->nMixPlug==nThisMixPlug)) { + if (m_pSndFile->Headers[nIns] && (m_pSndFile->Headers[nIns]->nMixPlug==nThisMixPlug)) { list.Add(nIns); } } @@ -3157,16 +3169,16 @@ } -void CVstPlugin::GetInputChannelList(CArray<UINT,UINT> &list) +void CVstPlugin::GetInputChannelList(CArray<UINT,UINT> &list) +//------------------------------------------------------------ { + if(m_pSndFile == 0) return; list.RemoveAll(); - CModDoc* pModDoc = GetModDoc(); - CSoundFile* pSndFile = pModDoc->GetSoundFile(); - UINT nThisMixPlug = m_nSlot+1; //m_nSlot is position in mixplug array. - for (int nChn=0; nChn<pSndFile->m_nChannels; nChn++) { - if (pSndFile->ChnSettings[nChn].nMixPlugin==nThisMixPlug) { + const CHANNELINDEX chnCount = m_pSndFile->GetNumChannels(); + for (CHANNELINDEX nChn=0; nChn<chnCount; nChn++) { + if (m_pSndFile->ChnSettings[nChn].nMixPlugin==nThisMixPlug) { list.Add(nChn); } } Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/mptrack/Vstplug.h 2008-03-19 20:38:12 UTC (rev 206) @@ -93,7 +93,7 @@ public: CVstPlugin(HINSTANCE hLibrary, PVSTPLUGINLIB pFactory, PSNDMIXPLUGIN pMixPlugin, AEffect *pEffect); virtual ~CVstPlugin(); - void Initialize(CModDoc* pModDoc); + void Initialize(CSoundFile* pSndFile); public: PVSTPLUGINLIB GetPluginFactory() const { return m_pFactory; } @@ -208,7 +208,7 @@ BOOL IsValidPlugin(const VSTPLUGINLIB *pLib); PVSTPLUGINLIB AddPlugin(LPCSTR pszDllPath, BOOL bCache=TRUE, const bool checkFileExistence = false, CString* const errStr = 0); BOOL RemovePlugin(PVSTPLUGINLIB); - BOOL CreateMixPlugin(PSNDMIXPLUGIN, CModDoc*); + BOOL CreateMixPlugin(PSNDMIXPLUGIN, CSoundFile*); VOID OnIdle(); static void ReportPlugException(LPCSTR format,...); @@ -218,7 +218,7 @@ protected: long VstCallback(AEffect *effect, long opcode, long index, long value, void *ptr, float opt); static long VSTCALLBACK MasterCallBack(AEffect *effect, long opcode, long index, long value, void *ptr, float opt); - static BOOL __cdecl CreateMixPluginProc(PSNDMIXPLUGIN, CModDoc*); + static BOOL __cdecl CreateMixPluginProc(PSNDMIXPLUGIN, CSoundFile*); VstTimeInfo timeInfo; //rewbs.VSTcompliance }; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -172,8 +172,9 @@ notFoundTunings.push_back(str); string erm = string("Tuning ") + str + string(" used by the module was not found."); MessageBox(0, erm.c_str(), 0, MB_ICONINFORMATION); - csf.m_pModDoc->SetModified(); //The tuning is changed so - //the modified flag is set. + if(csf.GetpModDoc()) //The tuning is changed so the modified flag is set. + csf.GetpModDoc()->SetModified(); + } csf.Headers[i]->pTuning = csf.Headers[i]->s_DefaultTuning; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -3427,8 +3427,10 @@ // Channel mutes for (UINT chan=0; chan<m_nChannels; chan++) { - if (m_bChannelMuteTogglePending[chan]) { - m_pModDoc->MuteChannel(chan, !m_pModDoc->IsChannelMuted(chan)); + if (m_bChannelMuteTogglePending[chan]) + { + if(m_pModDoc) + m_pModDoc->MuteChannel(chan, !m_pModDoc->IsChannelMuted(chan)); m_bChannelMuteTogglePending[chan]=false; } } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2008-03-19 20:38:12 UTC (rev 206) @@ -687,15 +687,15 @@ } if ((m_nRestartPos >= Order.size()) || (Order[m_nRestartPos] >= Patterns.Size())) m_nRestartPos = 0; - // Load plugins - if (gpMixPluginCreateProc) + // Load plugins only when m_pModDoc != 0. (can be == 0 for example when examining module samples in treeview. + if (gpMixPluginCreateProc && GetpModDoc()) { for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++) { if ((m_MixPlugins[iPlug].Info.dwPluginId1) || (m_MixPlugins[iPlug].Info.dwPluginId2)) { - gpMixPluginCreateProc(&m_MixPlugins[iPlug], pModDoc); + gpMixPluginCreateProc(&m_MixPlugins[iPlug], this); if (m_MixPlugins[iPlug].pMixPlugin) { m_MixPlugins[iPlug].pMixPlugin->RestoreAllParameters(m_MixPlugins[iPlug].defaultProgram); //rewbs.plugDefaultProgram: added param @@ -728,16 +728,13 @@ Patterns[i] = NULL; } m_nPatternNames = 0; - if (m_lpszPatternNames) - { - delete[] m_lpszPatternNames; - m_lpszPatternNames = NULL; - } - if (m_lpszSongComments) - { - delete[] m_lpszSongComments; - m_lpszSongComments = NULL; - } + + delete[] m_lpszPatternNames; + m_lpszPatternNames = NULL; + + delete[] m_lpszSongComments; + m_lpszSongComments = NULL; + for (i=1; i<MAX_SAMPLES; i++) { MODINSTRUMENT *pins = &Ins[i]; @@ -749,11 +746,8 @@ } for (i=0; i<MAX_INSTRUMENTS; i++) { - if (Headers[i]) - { - delete Headers[i]; - Headers[i] = NULL; - } + delete Headers[i]; + Headers[i] = NULL; } for (i=0; i<MAX_MIXPLUGINS; i++) { @@ -1365,8 +1359,11 @@ ResetChannelState(nch, CHNRESET_TOTAL); - m_pModDoc->Record1Channel(nch,FALSE); - m_pModDoc->Record2Channel(nch,FALSE); + if(m_pModDoc) + { + m_pModDoc->Record1Channel(nch,FALSE); + m_pModDoc->Record2Channel(nch,FALSE); + } m_bChannelMuteTogglePending[nch] = false; return false; @@ -1498,11 +1495,13 @@ { settings[i] = ChnSettings[i]; chns[i] = Chn[i]; - recordStates[i] = m_pModDoc->IsChannelRecord(i); + if(m_pModDoc) + recordStates[i] = m_pModDoc->IsChannelRecord(i); chnMutePendings[i] = m_bChannelMuteTogglePending[i]; } - m_pModDoc->ReinitRecordState(); + if(m_pModDoc) + m_pModDoc->ReinitRecordState(); for (UINT i=0; i<nRemainingChannels; i++) { @@ -1510,8 +1509,11 @@ { ChnSettings[i] = settings[newOrder[i]]; Chn[i] = chns[newOrder[i]]; - if(recordStates[newOrder[i]] == 1) m_pModDoc->Record1Channel(i,TRUE); - if(recordStates[newOrder[i]] == 2) m_pModDoc->Record2Channel(i,TRUE); + if(m_pModDoc) + { + if(recordStates[newOrder[i]] == 1) m_pModDoc->Record1Channel(i,TRUE); + if(recordStates[newOrder[i]] == 2) m_pModDoc->Record2Channel(i,TRUE); + } m_bChannelMuteTogglePending[i] = chnMutePendings[newOrder[i]]; } else Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2008-03-17 18:11:44 UTC (rev 205) +++ trunk/OpenMPT/soundlib/Sndfile.h 2008-03-19 20:38:12 UTC (rev 206) @@ -45,7 +45,7 @@ //#else // -> CODE#0006 // -> DESC="misc quantity changes" -#define MAX_CHANNELS 256 //200 +#define MAX_CHANNELS 256 //200 //Note: MAX_BASECHANNELS defines max pattern channels // -! BEHAVIOUR_CHANGE#0006 //#endif // -> CODE#0006 @@ -53,7 +53,7 @@ //#ifdef FASTSOUNDLIB //#define MAX_BASECHANNELS 64 //#else -#define MAX_BASECHANNELS 127 +#define MAX_BASECHANNELS 127 //Max pattern channels. //#endif // -! BEHAVIOUR_CHANGE#0006 #define MAX_ENVPOINTS 32 @@ -731,7 +731,7 @@ //class CSoundFile; class CModDoc; -typedef BOOL (__cdecl *PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN, CModDoc*); +typedef BOOL (__cdecl *PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN, CSoundFile*); struct SNDMIXSONGEQ { @@ -939,7 +939,7 @@ SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS]; // Mix plugins SNDMIXSONGEQ m_SongEQ; // Default song EQ preset CHAR CompressionTable[16]; - bool m_bChannelMuteTogglePending[MAX_CHANNELS]; + bool m_bChannelMuteTogglePending[MAX_BASECHANNELS]; CSoundFilePlayConfig* m_pConfig; DWORD m_dwCreatedWithVersion; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-03-17 18:11:52
|
Revision: 205 http://modplug.svn.sourceforge.net/modplug/?rev=205&view=rev Author: relabsoluness Date: 2008-03-17 11:11:44 -0700 (Mon, 17 Mar 2008) Log Message: ----------- . Internal: fixes to make things work on newer VC compilers. Modified Paths: -------------- trunk/OpenMPT/mptrack/TuningDialog.cpp trunk/OpenMPT/mptrack/tuningRatioMapWnd.h trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/midi.h trunk/OpenMPT/soundlib/tuning.cpp Modified: trunk/OpenMPT/mptrack/TuningDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.cpp 2008-03-15 12:38:52 UTC (rev 204) +++ trunk/OpenMPT/mptrack/TuningDialog.cpp 2008-03-17 18:11:44 UTC (rev 205) @@ -8,8 +8,8 @@ const CTuningDialog::TUNINGTREEITEM CTuningDialog::s_notFoundItemTuning = TUNINGTREEITEM(); const HTREEITEM CTuningDialog::s_notFoundItemTree = NULL; -using CTuning::UNOTEINDEXTYPE; -using CTuning::RATIOTYPE; +typedef CTuning::UNOTEINDEXTYPE UNOTEINDEXTYPE; +typedef CTuning::RATIOTYPE RATIOTYPE; #define TT_GENERAL CTuning::TT_GENERAL #define TT_GROUPGEOMETRIC CTuning::TT_GROUPGEOMETRIC #define TT_GEOMETRIC CTuning::TT_GEOMETRIC Modified: trunk/OpenMPT/mptrack/tuningRatioMapWnd.h =================================================================== --- trunk/OpenMPT/mptrack/tuningRatioMapWnd.h 2008-03-15 12:38:52 UTC (rev 204) +++ trunk/OpenMPT/mptrack/tuningRatioMapWnd.h 2008-03-17 18:11:44 UTC (rev 205) @@ -5,7 +5,7 @@ class CTuningDialog; -using CTuning::NOTEINDEXTYPE; +typedef CTuning::NOTEINDEXTYPE NOTEINDEXTYPE; //Copied from CNoteMapWnd. //=============================== Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2008-03-15 12:38:52 UTC (rev 204) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2008-03-17 18:11:44 UTC (rev 205) @@ -2948,7 +2948,7 @@ const CModSpecifications& CSoundFile::GetModSpecifications(const MODTYPE type) //---------------------------------------------------------------------------- { - CModSpecifications* p = 0; + const CModSpecifications* p = 0; SetModSpecsPointer(p, type); return *p; } Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2008-03-15 12:38:52 UTC (rev 204) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2008-03-17 18:11:44 UTC (rev 205) @@ -99,7 +99,7 @@ 0x92, 0x94, 0x96, 0x98, }; -using CTuning::RATIOTYPE; +typedef CTuning::RATIOTYPE RATIOTYPE; static const RATIOTYPE TwoToPowerXOver12Table[16] = { Modified: trunk/OpenMPT/soundlib/midi.h =================================================================== --- trunk/OpenMPT/soundlib/midi.h 2008-03-15 12:38:52 UTC (rev 204) +++ trunk/OpenMPT/soundlib/midi.h 2008-03-17 18:11:44 UTC (rev 205) @@ -92,6 +92,7 @@ class CSoundFile; inline bool operator<(const CMIDIMappingDirective& a, const CMIDIMappingDirective& b) {return a.GetController() < b.GetController();} inline bool operator<(const CMIDIMappingDirective& d, const BYTE& ctrlVal) {return d.GetController() < ctrlVal;} +inline bool operator<(const BYTE& ctrlVal, const CMIDIMappingDirective& d) {return ctrlVal < d.GetController();} //=============== class CMIDIMapper Modified: trunk/OpenMPT/soundlib/tuning.cpp =================================================================== --- trunk/OpenMPT/soundlib/tuning.cpp 2008-03-15 12:38:52 UTC (rev 204) +++ trunk/OpenMPT/soundlib/tuning.cpp 2008-03-17 18:11:44 UTC (rev 205) @@ -4,11 +4,11 @@ #include "../mptrack/serialization_utils.h" #include <string> -using CTuningRTI::RATIOTYPE; -using CTuningRTI::NOTEINDEXTYPE; -using CTuningRTI::UNOTEINDEXTYPE; -using CTuningRTI::STEPINDEXTYPE; -using CTuningRTI::USTEPINDEXTYPE; +typedef CTuningRTI::RATIOTYPE RATIOTYPE; +typedef CTuningRTI::NOTEINDEXTYPE NOTEINDEXTYPE; +typedef CTuningRTI::UNOTEINDEXTYPE UNOTEINDEXTYPE; +typedef CTuningRTI::STEPINDEXTYPE STEPINDEXTYPE; +typedef CTuningRTI::USTEPINDEXTYPE USTEPINDEXTYPE; const NOTEINDEXTYPE CTuningRTI::s_StepMinDefault(-64); const UNOTEINDEXTYPE CTuningRTI::s_RatioTableSizeDefault(128); @@ -77,7 +77,7 @@ BelowRatios = AboveRatios = DefaultBARFUNC; m_RatioTable.resize(vr.second-vr.first+1); - std::copy(v.begin(), v.end(), m_RatioTable.begin() + ratiostartpos - vr.first); + std::copy(v.begin(), v.end(), m_RatioTable.begin() + (ratiostartpos - vr.first)); for(NOTEINDEXTYPE i = ratiostartpos-1; i>=m_StepMin && ratiostartpos > NOTEINDEXTYPE_MIN; i--) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-03-15 12:38:58
|
Revision: 204 http://modplug.svn.sourceforge.net/modplug/?rev=204&view=rev Author: relabsoluness Date: 2008-03-15 05:38:52 -0700 (Sat, 15 Mar 2008) Log Message: ----------- Bug fixing . Fix to MIDI drum export (http://lpchip.com/modplug/viewtopic.php?t=2024) . Fix to possible crash on MIDI export if exporting module with more than 64 channels. / MIDI export won't anymore export muted channels(http://lpchip.com/modplug/viewtopic.php?t=2017) . When converting MOD->S3M/IT/MPTM, finetune setting was ignored (http://lpchip.com/modplug/viewtopic.php?t=1706) . Fix to messy view in general tab on certain cases(http://lpchip.com/modplug/viewtopic.php?t=1324) . IT compatibility: Fix to not resetting envelopes on new instrument (http://lpchip.com/modplug/viewtopic.php?t=1869) . IT compatibility: Fix to bidi loop resetting (http://lpchip.com/modplug/viewtopic.php?t=788) . IT compatibility: Fix to note trigger after note cut(http://lpchip.com/modplug/viewtopic.php?t=2080) Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2008-02-23 12:51:23 UTC (rev 203) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2008-03-15 12:38:52 UTC (rev 204) @@ -25,8 +25,10 @@ { CHAR s[256]; UINT b64 = 0; + + const MODTYPE oldtype = m_SndFile.GetType(); - if (nNewType == m_SndFile.GetType() && nNewType == MOD_TYPE_IT){ + if (nNewType == oldtype && nNewType == MOD_TYPE_IT){ // Even if m_nType doesn't change, we might need to change extension in itp<->it case. // This is because ITP is a HACK and doesn't genuinely change m_nType, // but uses flages instead. @@ -34,9 +36,21 @@ return TRUE; } - if(nNewType == m_SndFile.GetType()) return TRUE; + if(nNewType == oldtype) return TRUE; - if(m_SndFile.m_nType == MOD_TYPE_MPT) + 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); + + const bool newTypeIsMOD = (nNewType == MOD_TYPE_MOD), newTypeIsXM = (nNewType == MOD_TYPE_XM), + newTypeIsS3M = (nNewType == MOD_TYPE_S3M), newTypeIsIT = (nNewType == MOD_TYPE_IT), + newTypeIsMPT = (nNewType == MOD_TYPE_MPT), newTypeIsMOD_XM = (newTypeIsMOD || newTypeIsXM), + newTypeIsS3M_IT_MPT = (newTypeIsS3M || newTypeIsIT || newTypeIsMPT), + newTypeIsXM_IT_MPT = (newTypeIsXM || newTypeIsIT || newTypeIsMPT), + newTypeIsIT_MPT = (newTypeIsIT || newTypeIsMPT); + + if(oldTypeIsMPT) { if(::MessageBox(NULL, "Convertion from MPTm to any other modtype makes certain features unavailable and is not guaranteed to work properly; Do the convertion anyway?", "Notice", MB_YESNO) != IDYES) @@ -96,7 +110,7 @@ } //End if (((m_SndFile.m_nInstruments) || (b64)) && (nNewType & (MOD_TYPE_MOD|MOD_TYPE_S3M))) BeginWaitCursor(); // Adjust pattern data - if ((m_SndFile.m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM)) && (nNewType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT))) + if(oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) { for (UINT nPat=0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) { @@ -152,7 +166,7 @@ } } } else - if ((m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nNewType & (MOD_TYPE_MOD|MOD_TYPE_XM))) + if (oldTypeIsS3M_IT_MPT && newTypeIsMOD_XM) { for (UINT nPat=0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) { @@ -224,15 +238,15 @@ } } // Convert XM to MOD - if ((m_SndFile.m_nType == MOD_TYPE_XM) && (nNewType == MOD_TYPE_MOD)) + if (oldTypeIsXM && newTypeIsMOD) { } else // Convert MOD to XM - if ((m_SndFile.m_nType == MOD_TYPE_MOD) && (nNewType == MOD_TYPE_XM)) + if (oldTypeIsMOD && newTypeIsXM) { } else - // Convert XM to S3M/IT/MPT - if ((m_SndFile.m_nType == MOD_TYPE_XM) && (nNewType != MOD_TYPE_XM)) + // Convert MOD/XM to S3M/IT/MPT + if (oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) { for (UINT i=1; i<=m_SndFile.m_nSamples; i++) { @@ -240,10 +254,10 @@ m_SndFile.Ins[i].RelativeTone = 0; m_SndFile.Ins[i].nFineTune = 0; } - if (nNewType & (MOD_TYPE_IT|MOD_TYPE_MPT)) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; + if (oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; } else // Convert S3M/IT/MPT to XM - if ((m_SndFile.m_nType != MOD_TYPE_XM) && (nNewType == MOD_TYPE_XM)) + if (oldTypeIsS3M_IT_MPT && newTypeIsXM) { for (UINT i=1; i<=m_SndFile.m_nSamples; i++) { @@ -272,25 +286,25 @@ if (bBrokenNoteMap) AddToLog("WARNING: Note Mapping will be lost when saving as XM\n"); } // Too many samples ? - if ((nNewType == MOD_TYPE_MOD) && (m_SndFile.m_nSamples > 31)) + if (newTypeIsMOD && (m_SndFile.m_nSamples > 31)) { AddToLog("WARNING: Samples above 31 will be lost when saving this file as MOD!\n"); } BEGIN_CRITICAL(); m_SndFile.ChangeModTypeTo(nNewType); - if ((!(nNewType & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_XM))) && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) + if (!newTypeIsXM_IT_MPT && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) { AddToLog("WARNING: Linear Frequency Slides not supported by the new format.\n"); m_SndFile.m_dwSongFlags &= ~SONG_LINEARSLIDES; } - if (!(nNewType & (MOD_TYPE_IT|MOD_TYPE_MPT))) m_SndFile.m_dwSongFlags &= ~(SONG_ITOLDEFFECTS|SONG_ITCOMPATMODE); - if (nNewType != MOD_TYPE_S3M) m_SndFile.m_dwSongFlags &= ~SONG_FASTVOLSLIDES; + if (!newTypeIsIT_MPT) m_SndFile.m_dwSongFlags &= ~(SONG_ITOLDEFFECTS|SONG_ITCOMPATMODE); + if (!newTypeIsS3M) m_SndFile.m_dwSongFlags &= ~SONG_FASTVOLSLIDES; END_CRITICAL(); ChangeFileExtension(nNewType); //rewbs.cutomKeys: update effect key commands CInputHandler *ih = CMainFrame::GetMainFrame()->GetInputHandler(); - if (nNewType & (MOD_TYPE_MOD|MOD_TYPE_XM)) { + if (newTypeIsMOD_XM) { ih->SetXMEffects(); } else { ih->SetITEffects(); Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-02-23 12:51:23 UTC (rev 203) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-03-15 12:38:52 UTC (rev 204) @@ -177,6 +177,7 @@ GetDeviceScrollSizes(nMapMode, sizeTotal, sizePage, sizeLine); m_rcClient.SetRect(0, 0, sizeTotal.cx, sizeTotal.cy); RecalcLayout(); + // Initializing scroll ranges for (int ichn=0; ichn<4; ichn++) { @@ -241,6 +242,7 @@ // -> CODE#0015 // -> DESC="channels management dlg" void CViewGlobals::OnDraw(CDC* pDC) +//--------------------------------- { CView::OnDraw(pDC); @@ -326,8 +328,11 @@ m_TabCtrl.InsertItem(iItem, &tci); } if (nOldSel >= (UINT)nTabCount) nOldSel = 0; + + //Changing the order of these calls seemed to fix a GUI bug (http://lpchip.com/modplug/viewtopic.php?t=1324) + m_TabCtrl.SetRedraw(TRUE); m_TabCtrl.SetCurSel(nOldSel); - m_TabCtrl.SetRedraw(TRUE); + InvalidateRect(NULL, FALSE); } nTabIndex = m_TabCtrl.GetCurSel(); @@ -1274,6 +1279,7 @@ // -> CODE#0002 // -> DESC="VST plugins presets" void CViewGlobals::OnProgramChanged() +//----------------------------------- { int cursel = m_CbnPreset.GetCurSel(); CModDoc *pModDoc = GetDocument(); @@ -1296,6 +1302,7 @@ } void CViewGlobals::OnLoadParam() +//------------------------------ { CModDoc *pModDoc = GetDocument(); CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; @@ -1321,6 +1328,7 @@ } void CViewGlobals::OnSaveParam() +//------------------------------ { CModDoc *pModDoc = GetDocument(); CSoundFile *pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; @@ -1467,6 +1475,7 @@ // -> CODE#0028 // -> DESC="effect plugin mixing mode combo" void CViewGlobals::OnWetDryExpandChanged() +//---------------------------------------- { CModDoc *pModDoc = GetDocument(); PSNDMIXPLUGIN pPlugin; Modified: trunk/OpenMPT/mptrack/mod2midi.cpp =================================================================== --- trunk/OpenMPT/mptrack/mod2midi.cpp 2008-02-23 12:51:23 UTC (rev 203) +++ trunk/OpenMPT/mptrack/mod2midi.cpp 2008-03-15 12:38:52 UTC (rev 204) @@ -145,7 +145,7 @@ if ((penv->nMidiProgram > 20) && (penv->nMidiProgram < 120)) m_InstrMap[nIns].nProgram = penv->nMidiProgram; else - m_InstrMap[nIns].nProgram = penv->NoteMap[60] & 0x7f; + m_InstrMap[nIns].nProgram = (penv->NoteMap[60]-1) & 0x7f; } else { m_InstrMap[nIns].nProgram = penv->nMidiProgram & 0x7f; @@ -350,6 +350,10 @@ UINT nSpeed; CFile f; + const CHANNELINDEX chnCount = min(64, m_pSndFile->GetNumChannels()); + if(chnCount < m_pSndFile->GetNumChannels()) + MessageBox("Note: Only 64 channels will be exported."); + if (!f.Open(m_szFileName, CFile::modeCreate | CFile::modeWrite)) { return FALSE; @@ -366,10 +370,14 @@ mthd.id = 0x6468544d; // "MThd" mthd.len = BigEndian(sizeof(mthd)-8); mthd.wFmt = BigEndianW(1); - mthd.wTrks = BigEndianW(m_pSndFile->m_nChannels); // 1 track/channel + mthd.wTrks = chnCount; // 1 track/channel + mthd.wTrks = BigEndianW(mthd.wTrks); //Convert to big endian value. mthd.wDivision = BigEndianW(nPPQN); if (m_bRmi) f.Write(&rmid, sizeof(rmid)); f.Write(&mthd, sizeof(mthd)); + + + // Add Song Name on track 0 m_pSndFile->GetTitle(s); if (s[0]) @@ -388,7 +396,7 @@ Tracks[0].Write(m_pSndFile->m_lpszSongComments, strlen(m_pSndFile->m_lpszSongComments)); } // Add channel names - for (UINT iInit=0; iInit<m_pSndFile->m_nChannels; iInit++) + for (UINT iInit=0; iInit<chnCount; iInit++) { PDYNMIDITRACK pTrk = &Tracks[iInit]; lstrcpyn(s, m_pSndFile->ChnSettings[iInit].szName, MAX_CHANNELNAME); @@ -422,10 +430,13 @@ nRow = 0; continue; } - for (UINT nChn=0; nChn<m_pSndFile->m_nChannels; nChn++) + for (UINT nChn=0; nChn<chnCount; nChn++) { + //Skip muted channels. + if(m_pSndFile->ChnSettings[nChn].dwFlags & CHN_MUTE) continue; + PDYNMIDITRACK pTrk = &Tracks[nChn]; - MODCOMMAND *m = m_pSndFile->Patterns[nPat] + nRow*m_pSndFile->m_nChannels + nChn; + MODCOMMAND *m = m_pSndFile->Patterns[nPat].GetpModCommand(nRow, nChn); UINT delta_time = nClock - pTrk->nLastEventClock; UINT len = 0; @@ -523,7 +534,7 @@ } } // Write midi tracks - for (UINT iTrk=0; iTrk<m_pSndFile->m_nChannels; iTrk++) + for (UINT iTrk=0; iTrk<chnCount; iTrk++) { tmp[0] = 0x00; tmp[1] = 0xff; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2008-02-23 12:51:23 UTC (rev 203) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2008-03-15 12:38:52 UTC (rev 204) @@ -413,6 +413,8 @@ MODINSTRUMENT *psmp = &Ins[instr]; UINT note = pChn->nNewNote; + if(note == 0 && TypeIsIT_MPT() && GetModFlag(MSF_IT_COMPATIBLE_PLAY)) return; + if ((penv) && (note) && (note <= 128)) { if (penv->NoteMap[note-1] >= 0xFE) return; @@ -426,7 +428,8 @@ } const bool bNewTuning = (m_nType == MOD_TYPE_MPT && penv && penv->pTuning); - //Playback behavior change for MPT: Don't change sample if it is in the same instrument as previous sample. + //Playback behavior change for MPT: With portamento don't change sample if it is in + //the same instrument as previous sample. if(bPorta && bNewTuning && penv == pChn->pHeader) return; @@ -436,14 +439,17 @@ { bInstrumentChanged = TRUE; pChn->pHeader = penv; - } else - // Special XM hack - if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (penv) - && (pChn->pInstrument) && (psmp != pChn->pInstrument)) - { - // FT2 doesn't change the sample in this case, - // but still uses the sample info from the old one (bug?) - returnAfterVolumeAdjust = true; + } + else + { + // Special XM hack + if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (penv) + && (pChn->pInstrument) && (psmp != pChn->pInstrument)) + { + // FT2 doesn't change the sample in this case, + // but still uses the sample info from the old one (bug?) + returnAfterVolumeAdjust = true; + } } // Update Volume @@ -486,7 +492,9 @@ if (bResetEnv) { if ((!bPorta) || (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || (m_dwSongFlags & SONG_ITCOMPATMODE) - || (!pChn->nLength) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol))) + || (!pChn->nLength) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) + //IT compatibility tentative fix: Reset envelopes when instrument changes. + || (TypeIsIT_MPT() && GetModFlag(MSF_IT_COMPATIBLE_PLAY) && bInstrumentChanged)) { pChn->dwFlags |= CHN_FASTVOLRAMP; if ((m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && (!bInstrumentChanged) && (penv) && (!(pChn->dwFlags & (CHN_KEYOFF|CHN_NOTEFADE)))) @@ -520,7 +528,15 @@ } else { pChn->dwFlags &= ~(CHN_KEYOFF|CHN_NOTEFADE|CHN_VOLENV|CHN_PANENV|CHN_PITCHENV); - pChn->dwFlags = (pChn->dwFlags & 0xFFFFFF00) | (psmp->uFlags & 0xFF); + + //IT compatibility tentative fix: Don't anymore change bidi loop direction when + //no sample nor instrument is changed. + if(TypeIsIT_MPT() && GetModFlag(MSF_IT_COMPATIBLE_PLAY) && psmp == pChn->pInstrument && !bInstrumentChanged) + pChn->dwFlags = (pChn->dwFlags & (0xFFFFFF00 | CHN_PINGPONGFLAG)) | (psmp->uFlags & 0xFF); + else + pChn->dwFlags = (pChn->dwFlags & 0xFFFFFF00) | (psmp->uFlags & 0xFF); + + if (penv) { if (penv->dwFlags & ENV_VOLUME) pChn->dwFlags |= CHN_VOLENV; @@ -594,11 +610,17 @@ // Key Off KeyOff(nChn); // Note Cut - if (note == 0xFE) + if (note == NOTE_NOTECUT) { pChn->dwFlags |= (CHN_NOTEFADE|CHN_FASTVOLRAMP); if ((!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || (m_nInstruments)) pChn->nVolume = 0; pChn->nFadeOutVol = 0; + + //IT compatibility tentative fix: Clear channel note memory on note cut. + if(TypeIsIT_MPT() && GetModFlag(MSF_IT_COMPATIBLE_PLAY)) + { + pChn->nNote = pChn->nNewNote = 0; + } } return; } @@ -667,7 +689,10 @@ if (pChn->nTremoloType < 4) pChn->nTremoloPos = 0; } if (pChn->nPos >= pChn->nLength) pChn->nPos = pChn->nLoopStart; - } else bPorta = FALSE; + } + else + bPorta = FALSE; + if ((!bPorta) || (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) || ((m_dwSongFlags & SONG_ITCOMPATMODE) && (pChn->nRowInstr))) @@ -1113,13 +1138,11 @@ { if(instr < MAX_INSTRUMENTS && pChn->pHeader != Headers[instr]) note = pChn->nNote; - } else //Case: Only samples used { if(instr < MAX_SAMPLES && pChn->pSample != Ins[instr].pSample) note = pChn->nNote; - } } @@ -1188,7 +1211,7 @@ InstrumentChange(pChn, instr, bPorta, TRUE); pChn->nNewIns = 0; // Special IT case: portamento+note causes sample change -> ignore portamento - if ((m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) + if ((m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) && (psmp != pChn->pInstrument) && (note) && (note < 0x80)) { bPorta = FALSE; @@ -1406,34 +1429,6 @@ if (m_nTickCount) break; //rewbs.volOffset: moved sample offset code to own method SampleOffset(nChn, param, bPorta); - - -/* if (param) pChn->nOldOffset = param; else param = pChn->nOldOffset; - param <<= 8; - param |= (UINT)(pChn->nOldHiOffset) << 16; - if ((pChn->nRowNote) && (pChn->nRowNote < 0x80)) - { - if (bPorta) - pChn->nPos = param; - else - pChn->nPos += param; - if (pChn->nPos >= pChn->nLength) - { - if (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) - { - pChn->nPos = pChn->nLoopStart; - if ((m_dwSongFlags & SONG_ITOLDEFFECTS) && (pChn->nLength > 4)) - { - pChn->nPos = pChn->nLength - 2; - } - } - } - } else - if ((param < pChn->nLength) && (m_nType & (MOD_TYPE_MTM|MOD_TYPE_DMF))) - { - pChn->nPos = param; - } -*/ break; // Arpeggio Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2008-02-23 12:51:23 UTC (rev 203) +++ trunk/OpenMPT/soundlib/Sndfile.h 2008-03-15 12:38:52 UTC (rev 204) @@ -110,7 +110,7 @@ #define CHN_PINGPONGSUSTAIN 0x10 #define CHN_PANNING 0x20 #define CHN_STEREO 0x40 -#define CHN_PINGPONGFLAG 0x80 +#define CHN_PINGPONGFLAG 0x80 //When flag is on, bidiloop is processed backwards? // Bits 8-31: Channel Flags #define CHN_MUTE 0x100 #define CHN_KEYOFF 0x200 @@ -959,6 +959,7 @@ BOOL Create(LPCBYTE lpStream, CModDoc *pModDoc, DWORD dwMemLength=0); BOOL Destroy(); MODTYPE GetType() const { return m_nType; } + inline bool TypeIsIT_MPT() const {return (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) != 0;} CModDoc* GetpModDoc() {return m_pModDoc;} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-02-23 12:51:26
|
Revision: 203 http://modplug.svn.sourceforge.net/modplug/?rev=203&view=rev Author: relabsoluness Date: 2008-02-23 04:51:23 -0800 (Sat, 23 Feb 2008) Log Message: ----------- Last commit missed some files: a new try. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -628,25 +628,22 @@ BOOL CCtrlGeneral::GetToolTipText(UINT uId, LPSTR pszText) { //---------------------------------------------------------- + const char moreRecentMixModeNote[] = "Use a more recent mixmode to see dB offsets."; if ((pszText) && (uId)) { - if (!m_pSndFile->m_pConfig->getDisplayDBValues()) { - wsprintf(pszText, "Use a more recent mixmode to see dB offsets."); - return TRUE; - } - + const bool displayDBValues = m_pSndFile->m_pConfig->getDisplayDBValues(); switch(uId) { case IDC_SLIDER_SAMPLEPREAMP: - setAsDecibels(pszText, m_pSndFile->m_nSamplePreAmp, m_pSndFile->m_pConfig->getNormalSamplePreAmp()); + (displayDBValues) ? setAsDecibels(pszText, m_pSndFile->m_nSamplePreAmp, m_pSndFile->m_pConfig->getNormalSamplePreAmp()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; case IDC_SLIDER_VSTIVOL: - setAsDecibels(pszText, m_pSndFile->m_nVSTiVolume, m_pSndFile->m_pConfig->getNormalVSTiVol()); + (displayDBValues) ? setAsDecibels(pszText, m_pSndFile->m_nVSTiVolume, m_pSndFile->m_pConfig->getNormalVSTiVol()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; case IDC_SLIDER_GLOBALVOL: - setAsDecibels(pszText, m_pSndFile->m_nGlobalVolume, m_pSndFile->m_pConfig->getNormalGlobalVol()); + (displayDBValues) ? setAsDecibels(pszText, m_pSndFile->m_nGlobalVolume, m_pSndFile->m_pConfig->getNormalGlobalVol()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; } Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -840,7 +840,6 @@ BuildTuningComboBox(); CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); - OnBnClickedCheckPitchtempolock(); m_EditPitchTempoLock.SetLimitText(4); return FALSE; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -401,6 +401,9 @@ m_nBitsPerSample = GetPrivateProfileDWord("Sound Settings", "BitsPerSample", 16, iniFile); m_nChannels = GetPrivateProfileDWord("Sound Settings", "ChannelMode", 2, iniFile); m_nBufferLength = GetPrivateProfileDWord("Sound Settings", "BufferLength", 75, iniFile); + if(m_nBufferLength < SNDDEV_MINBUFFERLEN) m_nBufferLength = SNDDEV_MINBUFFERLEN; + if(m_nBufferLength > SNDDEV_MAXBUFFERLEN) m_nBufferLength = SNDDEV_MAXBUFFERLEN; + m_nPreAmp = GetPrivateProfileDWord("Sound Settings", "PreAmp", 128, iniFile); CSoundFile::m_nStereoSeparation = GetPrivateProfileLong("Sound Settings", "StereoSeparation", 128, iniFile); CSoundFile::m_nMaxMixChannels = GetPrivateProfileLong("Sound Settings", "MixChannels", MAX_CHANNELS, iniFile); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -1272,7 +1272,10 @@ // -> CODE#0020 // -> DESC="rearrange sample list" void CModDoc::RearrangeSampleList(void) +//------------------------------------- { + MessageBox(NULL, "Rearrange samplelist didn't work properly and has been disabled.", NULL, MB_ICONINFORMATION); + /* BEGIN_CRITICAL(); UINT i,j,k,n,l,c; @@ -1314,6 +1317,7 @@ SetModified(); UpdateAllViews(NULL, HINT_SMPNAMES); + */ } // -! NEW_FEATURE#0020 @@ -1557,7 +1561,8 @@ if ((c == 0x0D) && (len > 3)) { //if ((p[len-3] == 'I') || (p[len-4] == 'S')) bS3M = TRUE; - if ((p[len-3] == 'I') || (p[len-4] == 'S') || (p[len-4] == 'M')) bS3M = TRUE; + // IT? S3M? MPT? + if ((p[len-3] == 'I') || (p[len-4] == 'S') || (p[len-3] == 'P')) bS3M = TRUE; break; } } @@ -1715,7 +1720,7 @@ CHAR s[1024]; INSTRUMENTHEADER *penv; DWORD dwMemSize; - UINT susBegin, susEnd, loopBegin, loopEnd, bSus, bLoop, bCarry, nPoints; + UINT susBegin, susEnd, loopBegin, loopEnd, bSus, bLoop, bCarry, nPoints, releaseNode; WORD *pPoints; BYTE *pValues; @@ -1735,6 +1740,7 @@ susEnd = penv->nPanSustainEnd; loopBegin = penv->nPanLoopStart; loopEnd = penv->nPanLoopEnd; + releaseNode = penv->nPanEnvReleaseNode; break; case ENV_PITCH: @@ -1748,6 +1754,7 @@ susEnd = penv->nPitchSustainEnd; loopBegin = penv->nPitchLoopStart; loopEnd = penv->nPitchLoopEnd; + releaseNode = penv->nPitchEnvReleaseNode; break; default: @@ -1761,6 +1768,7 @@ susEnd = penv->nVolSustainEnd; loopBegin = penv->nVolLoopStart; loopEnd = penv->nVolLoopEnd; + releaseNode = penv->nVolEnvReleaseNode; break; } strcpy(s, pszEnvHdr); @@ -1770,6 +1778,11 @@ if (strlen(s) >= sizeof(s)-32) break; wsprintf(s+strlen(s), "%d,%d\x0D\x0A", pPoints[i], pValues[i]); } + + //Writing release node + if(strlen(s) < sizeof(s) - 32) + wsprintf(s+strlen(s), "%u\x0D\x0A", releaseNode); + dwMemSize = strlen(s)+1; if ((pMainFrm->OpenClipboard()) && ((hCpy = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, dwMemSize))!=NULL)) { @@ -1802,7 +1815,7 @@ if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL)) { INSTRUMENTHEADER *penv = m_SndFile.Headers[nIns]; - UINT susBegin=0, susEnd=0, loopBegin=0, loopEnd=0, bSus=0, bLoop=0, bCarry=0, nPoints=0; + 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))) { @@ -1845,6 +1858,7 @@ penv->nPanSustainEnd = susEnd; penv->nPanLoopStart = loopBegin; penv->nPanLoopEnd = loopEnd; + penv->nPanEnvReleaseNode = releaseNode; break; case ENV_PITCH: @@ -1859,6 +1873,7 @@ penv->nPitchSustainEnd = susEnd; penv->nPitchLoopStart = loopBegin; penv->nPitchLoopEnd = loopEnd; + penv->nPitchEnvReleaseNode = releaseNode; break; default: @@ -1873,6 +1888,7 @@ penv->nVolSustainEnd = susEnd; penv->nVolLoopStart = loopBegin; penv->nVolLoopEnd = loopEnd; + penv->nVolEnvReleaseNode = releaseNode; break; } int oldn = 0; @@ -1892,6 +1908,27 @@ while ((dwPos < dwMemSize) && (p[dwPos] != 0x0D)) dwPos++; if (dwPos >= dwMemSize) break; } + + //Read releasenode information. + if(dwPos < dwMemSize) + { + BYTE r = static_cast<BYTE>(atoi(p + dwPos)); + if(r == 0 || r >= nPoints) r = ENV_RELEASE_NODE_UNSET; + switch(nEnv) + { + case ENV_PANNING: + penv->nPanEnvReleaseNode = r; + break; + + case ENV_PITCH: + penv->nPitchEnvReleaseNode = r; + break; + + default: + penv->nVolEnvReleaseNode = r; + break; + } + } } GlobalUnlock(hCpy); CloseClipboard(); Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -610,7 +610,7 @@ {"Always center active row", "Turn on this option to have the active row always centered in the pattern editor (requires \"Always center active row\")."}, {"Use large font for comments", "With this option enabled, the song message editor will use a larger font."}, {"Display rows in hex", "With this option enabled, row numbers and sequence numbers will be displayed in hexadecimal."}, - {"Cursor wrap in pattern editor", "When this option is active, going past the end of a pattern will move the cursor to the beginning."}, + {"Cursor wrap in pattern editor", "When this option is active, going past the end of a pattern row or channel will move the cursor to the beginning. When \"Continuous scroll\"-option is enabled, row wrap is disabled."}, {"Create backup files (*.bak)", "When this option is active, saving a file will create a backup copy of the original."}, {"Drag and Drop Editing", "Enable moving a selection in the pattern editor (copying if pressing shift while dragging)\n"}, {"Flat Buttons", "Use flat buttons in toolbars"}, Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -329,7 +329,8 @@ CHAR s[32]; m_CbnBufferLength.GetWindowText(s, sizeof(s)); m_nBufferLength = atoi(s); - if ((m_nBufferLength < 10) || (m_nBufferLength > 200)) m_nBufferLength = 100; + //if ((m_nBufferLength < 10) || (m_nBufferLength > 200)) m_nBufferLength = 100; + if ((m_nBufferLength < SNDDEV_MINBUFFERLEN) || (m_nBufferLength > SNDDEV_MAXBUFFERLEN)) m_nBufferLength = 100; } // Soft Panning if (m_dwSoundSetup & SOUNDSETUP_SOFTPANNING) @@ -1054,6 +1055,9 @@ ON_COMMAND(IDC_CHECK2, OnSettingsChanged) ON_COMMAND(IDC_CHECK3, OnSettingsChanged) ON_COMMAND(IDC_CHECK4, OnSettingsChanged) + ON_COMMAND(IDC_MIDI_TO_PLUGIN, OnSettingsChanged) + ON_COMMAND(IDC_MIDIVOL_TO_NOTEVOL, OnSettingsChanged) + ON_COMMAND(IDC_MIDIPLAYCONTROL, OnSettingsChanged) END_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -2856,13 +2856,19 @@ m_pPluginManager = new CVstPluginManager; if (!m_pPluginManager) return FALSE; nPlugins = GetPrivateProfileInt("VST Plugins", "NumPlugins", 0, m_szConfigFileName); + CString nonFoundPlugs; for (LONG iPlug=0; iPlug<nPlugins; iPlug++) { s[0] = 0; wsprintf(tmp, "Plugin%d", iPlug); GetPrivateProfileString("VST Plugins", tmp, "", s, sizeof(s), m_szConfigFileName); - if (s[0]) m_pPluginManager->AddPlugin(s); + if (s[0]) m_pPluginManager->AddPlugin(s, TRUE, true, &nonFoundPlugs); } + if(nonFoundPlugs.GetLength() > 0) + { + nonFoundPlugs.Insert(0, "Problems were encountered with plugins:\n"); + MessageBox(NULL, nonFoundPlugs, "", MB_OK); + } return FALSE; } Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.cpp =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -108,6 +108,27 @@ } +ORDERINDEX COrderToPatternTable::GetNextOrderIgnoringSkips(const ORDERINDEX start) const +//------------------------------------------------------------------------------------- +{ + const ORDERINDEX count = GetCount(); + if(count == 0) return 0; + ORDERINDEX next = min(count-1, start+1); + while(next+1 < count && (*this)[next] == GetIgnoreIndex()) next++; + return next; +} + +ORDERINDEX COrderToPatternTable::GetPreviousOrderIgnoringSkips(const ORDERINDEX start) const +//------------------------------------------------------------------------------------- +{ + const ORDERINDEX count = GetCount(); + if(start == 0 || count == 0) return 0; + ORDERINDEX prev = min(start-1, count-1); + while(prev > 0 && (*this)[prev] == GetIgnoreIndex()) prev--; + return prev; +} + + PATTERNINDEX COrderToPatternTable::GetInvalidPatIndex(const MODTYPE type) {return type == MOD_TYPE_MPT ? 65535 : 0xFF;} PATTERNINDEX COrderToPatternTable::GetIgnoreIndex(const MODTYPE type) {return type == MOD_TYPE_MPT ? 65534 : 0xFE;} Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.h =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.h 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.h 2008-02-23 12:51:23 UTC (rev 203) @@ -8,6 +8,8 @@ class CSoundFile; class COrderToPatternTable; +#pragma warning(disable:4244) //conversion from 'type1' to 'type2', possible loss of data + class COrderSerialization : public srlztn::ABCSerializationStreamer //========================================================= { @@ -32,7 +34,7 @@ size_t WriteToByteArray(BYTE* dest, const UINT numOfBytes, const UINT destSize); - ORDERINDEX GetCount() const {return static_cast<ORDERINDEX>(size());} + ORDERINDEX GetCount() const {return size();} //Deprecated function used for MPTm's created in 1.17.02.46 - 1.17.02.48. DWORD Unserialize(const BYTE* const src, const DWORD memLength); @@ -48,13 +50,19 @@ PATTERNINDEX GetIgnoreIndex() const; //To correspond 0xFE static PATTERNINDEX GetIgnoreIndex(const MODTYPE type); + //Returns the previous/next order ignoring skip indeces(+++). + //If no previous/next order exists, return first/last order, and zero + //when orderlist is empty. + ORDERINDEX GetNextOrderIgnoringSkips(const ORDERINDEX start) const; + ORDERINDEX GetPreviousOrderIgnoringSkips(const ORDERINDEX start) const; + COrderSerialization* NewReadWriteObject() {return new COrderSerialization(*this);} private: const CSoundFile& m_rSndFile; }; +#pragma warning(default:4244) - #endif Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -257,11 +257,13 @@ UINT nCurOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); if ((nCurOrder > 0) && (nCurOrder < pSndFile->Order.size()) && (m_nPattern == pSndFile->Order[nCurOrder])) { - UINT nPrevPat = pSndFile->Order[nCurOrder-1]; + const ORDERINDEX prevOrd = pSndFile->Order.GetPreviousOrderIgnoringSkips(nCurOrder); + const PATTERNINDEX nPrevPat = pSndFile->Order[prevOrd]; if ((nPrevPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nPrevPat])) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nCurOrder-1); - if (SetCurrentPattern(nPrevPat)) return SetCurrentRow(pSndFile->PatternSize[nPrevPat]-1); + SendCtrlMessage(CTRLMSG_SETCURRENTORDER, prevOrd); + if (SetCurrentPattern(nPrevPat)) + return SetCurrentRow(pSndFile->PatternSize[nPrevPat] + (int)row); } } row = 0; @@ -283,11 +285,13 @@ UINT nCurOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); if ((nCurOrder+1 < pSndFile->Order.size()) && (m_nPattern == pSndFile->Order[nCurOrder])) { - UINT nNextPat = pSndFile->Order[nCurOrder+1]; - if ((nNextPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nNextPat])) + const ORDERINDEX nextOrder = pSndFile->Order.GetNextOrderIgnoringSkips(nCurOrder); + const PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; + if ((nextPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nextPat])) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nCurOrder+1); - if (SetCurrentPattern(nNextPat)) return SetCurrentRow(0); + SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nextOrder); + if (SetCurrentPattern(nextPat)) + return SetCurrentRow(row - pSndFile->PatternSize[m_nPattern]); } } row = pSndFile->PatternSize[m_nPattern]-1; @@ -3951,7 +3955,8 @@ // -- Work out where to put the new note MODCOMMAND* p = pSndFile->Patterns[m_nPattern].GetpModCommand(nRow, nChn); - MODCOMMAND oldcmd = *p; //take backup copy of the command we're about to overwrite + //take backup copy of the command we're about to overwrite + MODCOMMAND oldcmd = *p; // -- write note and instrument data isSplit = HandleSplit(p, note); @@ -4369,7 +4374,7 @@ if (m_nSplitInstrument) p->instr = m_nSplitInstrument; else - p->instr = GetCurrentInstrument(); + if(GetCurrentInstrument()) p->instr = GetCurrentInstrument(); if (m_bOctaveLink) note += 12*(m_nOctaveModifier-9); if (note>120 && note<254) note=120; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -158,9 +158,19 @@ // ID100000ID200000.Flags = Plugin Flags (for now, just isInstrument). -PVSTPLUGINLIB CVstPluginManager::AddPlugin(LPCSTR pszDllPath, BOOL bCache) -//------------------------------------------------------------------------ + +PVSTPLUGINLIB CVstPluginManager::AddPlugin(LPCSTR pszDllPath, BOOL bCache, const bool checkFileExistence, CString* const errStr) +//----------------------------------------------------------------------------------------------------------- { + if(checkFileExistence && !DoesFileExist(pszDllPath)) + { + if(errStr) + { + *errStr += "\nUnable to find "; + *errStr += pszDllPath; + } + } + PVSTPLUGINLIB pDup = m_pVstHead; while (pDup) { @@ -1569,16 +1579,19 @@ m_nInputs = m_pEffect->numInputs; m_nOutputs = m_pEffect->numOutputs; - m_pInputs = (float **)new char[m_nInputs*sizeof(float *)]; - m_pOutputs = (float **)new char[m_nOutputs*sizeof(float *)]; - m_pTempBuffer = (float **)new char[m_nOutputs*sizeof(float *)]; //rewbs.dryRatio + + //input pointer array size must be >=2 for now - the input buffer assignment might write to non allocated mem. otherwise + m_pInputs = (m_nInputs >= 2) ? new (float *[m_nInputs]) : new (float*[2]); + m_pInputs[0] = m_MixState.pOutBufferL; + m_pInputs[1] = m_MixState.pOutBufferR; + m_pOutputs = new (float *[m_nOutputs]); + m_pTempBuffer = new (float *[m_nOutputs]); //rewbs.dryRatio + for (UINT iOut=0; iOut<m_nOutputs; iOut++) { m_pTempBuffer[iOut]=(float *)((((DWORD)&m_FloatBuffer[MIXBUFFERSIZE*(2+iOut)])+7)&~7); //rewbs.dryRatio } - m_pInputs[0] = m_MixState.pOutBufferL; - m_pInputs[1] = m_MixState.pOutBufferR; #ifdef VST_LOG Log("%s: vst ver %d.0, flags=%04X, %d programs, %d parameters\n", @@ -1642,33 +1655,19 @@ FreeLibrary(m_hLibrary); m_hLibrary = NULL; } - if (m_pTempBuffer) //rewbs.dryRatio - { - delete[] m_pTempBuffer; - m_pTempBuffer = NULL; - } - //Deleting inputs causes crashes on some plugs, not deleting causes crashes in other cases. :) - //TODO: figure out what to do here.. :) - if (m_nInputs && m_pInputs) //if m_nInputs == 0, then m_pInputs will have been - { //initilised at 0 size, so we'll crash on delete. - //Even though the size is zero, - //new returns a non-NULL address and absence - //of delete can make debugger report - //of a memory leak of 0 bytes long. - delete[] m_pInputs; - m_pInputs = NULL; - } - if (m_pOutputs) - { - delete[] m_pOutputs; - m_pOutputs = NULL; - } - if (m_pEvList) - { - delete[] (char *)m_pEvList; - m_pEvList = NULL; - } + delete[] m_pTempBuffer; + m_pTempBuffer = NULL; + + delete[] m_pInputs; + m_pInputs = NULL; + + delete[] m_pOutputs; + m_pOutputs = NULL; + + delete[] (char *)m_pEvList; + m_pEvList = NULL; + CloseHandle(processCalled); } @@ -4103,3 +4102,4 @@ return CString(); } + Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Vstplug.h 2008-02-23 12:51:23 UTC (rev 203) @@ -206,7 +206,7 @@ public: PVSTPLUGINLIB GetFirstPlugin() const { return m_pVstHead; } BOOL IsValidPlugin(const VSTPLUGINLIB *pLib); - PVSTPLUGINLIB AddPlugin(LPCSTR pszDllPath, BOOL bCache=TRUE); + PVSTPLUGINLIB AddPlugin(LPCSTR pszDllPath, BOOL bCache=TRUE, const bool checkFileExistence = false, CString* const errStr = 0); BOOL RemovePlugin(PVSTPLUGINLIB); BOOL CreateMixPlugin(PSNDMIXPLUGIN, CModDoc*); VOID OnIdle(); Modified: trunk/OpenMPT/mptrack/misc_util.h =================================================================== --- trunk/OpenMPT/mptrack/misc_util.h 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/misc_util.h 2008-02-23 12:51:23 UTC (rev 203) @@ -35,5 +35,8 @@ */ } +//Return true if file with given path is found. +bool DoesFileExist(const char* const filepath); + #endif Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-02-23 12:51:23 UTC (rev 203) @@ -145,7 +145,6 @@ MENUITEM "Cleanup Pa&tterns", ID_CLEANUP_PATTERNS MENUITEM "Cleanup S&ong", ID_CLEANUP_SONG MENUITEM "Remove &All Instruments", ID_INSTRUMENTS_REMOVEALL - MENUITEM "Rearrange Samples", ID_REARRANGE_SAMPLES MENUITEM "Cleanup &Plugins", ID_CLEANUP_PLUGS END MENUITEM SEPARATOR @@ -491,7 +490,7 @@ CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,214,71, 11,14 - CONTROL "Send midi to active instrument plugin", + CONTROL "Pass MIDI to active instrument plugin (experimental)", IDC_MIDI_TO_PLUGIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 11,148,222,8 CONTROL "Combine midi volume to note velocity", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-02-23 12:46:46
|
Revision: 202 http://modplug.svn.sourceforge.net/modplug/?rev=202&view=rev Author: relabsoluness Date: 2008-02-23 04:46:41 -0800 (Sat, 23 Feb 2008) Log Message: ----------- Bug fixing... . Mixmode-tooltip in general tab was in some cases shown on unrelated controls (http://lpchip.com/modplug/viewtopic.php?t=2176) . Pitch/tempo lock was lost on first instrument when opening instrument tab for the first time. (http://lpchip.com/modplug/viewtopic.php?t=1823) . Verifying buffer length-setting read from INI-file to prevent the impression that it can be set < 10 (http://lpchip.com/modplug/viewtopic.php?t=992) . Pattern effectdata paste was broken for MOD (probably since .46) (http://lpchip.com/modplug/viewtopic.php?t=1938) . Apply button should now be activated when changing the state of the new checkboxes in MIDI setup. / When loading plug information at startup, checking whether the plug files exist. (http://lpchip.com/modplug/viewtopic.php?t=1367) . Continuous pattern navigation fixes(http://lpchip.com/modplug/viewtopic.php?t=1960, http://lpchip.com/modplug/viewtopic.php?t=1959) . Keyboard split related fix (http://lpchip.com/modplug/viewtopic.php?t=1887) . Releasenode information should now be included when copying instrument envelopes (http://lpchip.com/modplug/viewtopic.php?t=1780) . Potential memory corruption bug when loading VSTs (Thanks to Markus for the report and patch; the patch was applied with some modifications) - Removed buggy rearrange samples (http://lpchip.com/modplug/viewtopic.php?t=2148) Modified Paths: -------------- trunk/OpenMPT/mptrack/misc_util.cpp Modified: trunk/OpenMPT/mptrack/misc_util.cpp =================================================================== --- trunk/OpenMPT/mptrack/misc_util.cpp 2008-02-11 22:26:06 UTC (rev 201) +++ trunk/OpenMPT/mptrack/misc_util.cpp 2008-02-23 12:46:41 UTC (rev 202) @@ -1,2 +1,17 @@ #include "stdafx.h" #include "misc_util.h" + +bool DoesFileExist(const char* const filepath) +//-------------------------------------------- +{ + char path_buffer[_MAX_PATH]; + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char fname[_MAX_FNAME]; + char ext[_MAX_EXT]; + + LPTSTR* p = 0; + _splitpath(filepath, drive, dir, fname, ext); + _makepath(path_buffer, drive, dir, NULL, NULL); + return (SearchPath(path_buffer, fname, ext, 0, 0, p) != 0); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-02-11 22:26:13
|
Revision: 201 http://modplug.svn.sourceforge.net/modplug/?rev=201&view=rev Author: relabsoluness Date: 2008-02-11 14:26:06 -0800 (Mon, 11 Feb 2008) Log Message: ----------- . Fixed MIDI mapping not checking MIDI event, which could cause events like pitch bend to trigger some mapping item. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mpt_midi.cpp trunk/OpenMPT/soundlib/midi.h Modified: trunk/OpenMPT/mptrack/Mpt_midi.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpt_midi.cpp 2008-02-02 19:03:19 UTC (rev 200) +++ trunk/OpenMPT/mptrack/Mpt_midi.cpp 2008-02-11 22:26:06 UTC (rev 201) @@ -260,6 +260,12 @@ //---------------------------------------------------------------------------------------------------- { bool captured = false; + + if(GetFromMIDIMsg_Event(midimsg) != MIDIEVENT_CONTROLLERCHANGE) return captured; + //For now only controllers can be mapped so if event is not controller change, + //no mapping will be found and thus no search is done. + //NOTE: The event value is not checked in code below. + const BYTE controller = GetFromMIDIMsg_DataByte1(midimsg); const_iterator citer = std::lower_bound(Begin(), End(), controller); Modified: trunk/OpenMPT/soundlib/midi.h =================================================================== --- trunk/OpenMPT/soundlib/midi.h 2008-02-02 19:03:19 UTC (rev 200) +++ trunk/OpenMPT/soundlib/midi.h 2008-02-11 22:26:06 UTC (rev 201) @@ -11,10 +11,18 @@ void ApplyTransposeKeyboardSetting(CMainFrame& rMainFrm, DWORD& dwParam1); inline BYTE GetFromMIDIMsg_Channel(const DWORD MIDImsg) {return static_cast<BYTE>((MIDImsg & 0xF));} inline BYTE GetFromMIDIMsg_Event(const DWORD MIDImsg) {return static_cast<BYTE>(((MIDImsg >> 4) & 0xF));} -inline BYTE GetFromMIDIMsg_DataByte1(const DWORD MIDImsg) {return static_cast<BYTE>(((MIDImsg >> 8) & 0x7F));} -inline BYTE GetFromMIDIMsg_DataByte2(const DWORD MIDImsg) {return static_cast<BYTE>(((MIDImsg >> 16) & 0x7F));} +inline BYTE GetFromMIDIMsg_DataByte1(const DWORD MIDImsg) {return static_cast<BYTE>(((MIDImsg >> 8) & 0xFF));} +inline BYTE GetFromMIDIMsg_DataByte2(const DWORD MIDImsg) {return static_cast<BYTE>(((MIDImsg >> 16) & 0xFF));} +enum +{ + MIDIEVENT_NOTEOFF = 0x8, + MIDIEVENT_NOTEON = 0x9, + MIDIEVENT_CONTROLLERCHANGE = 0xB, + MIDIEVENT_PITCHBEND = 0xE, +}; + //========================= class CMIDIMappingDirective //========================= This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-02-02 19:03:45
|
Revision: 200 http://modplug.svn.sourceforge.net/modplug/?rev=200&view=rev Author: relabsoluness Date: 2008-02-02 11:03:19 -0800 (Sat, 02 Feb 2008) Log Message: ----------- . Extended song/instrument properties were not always loaded correctly for IT(http://lpchip.com/modplug/viewtopic.php?p=16335) . Channel pan controls in general view were disable for all types instead of just XM and MOD (bug introduced in rev. 199) Modified Paths: -------------- trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-01-29 21:00:25 UTC (rev 199) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-02-02 19:03:19 UTC (rev 200) @@ -390,11 +390,11 @@ ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK1+ichn*2), bEnable); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK2+ichn*2), bIT); ::EnableWindow(m_sbVolume[ichn].m_hWnd, bEnable); - ::EnableWindow(m_sbPan[ichn].m_hWnd, bEnable && !(pSndFile->GetType() & MOD_TYPE_XM|MOD_TYPE_MOD)); + ::EnableWindow(m_sbPan[ichn].m_hWnd, bEnable && !(pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_MOD))); ::EnableWindow(m_spinVolume[ichn], bEnable); - ::EnableWindow(m_spinPan[ichn], bEnable && !(pSndFile->GetType() & MOD_TYPE_XM|MOD_TYPE_MOD)); + ::EnableWindow(m_spinPan[ichn], bEnable && !(pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_MOD))); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT1+ichn*2), bEnable); - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT2+ichn*2), bEnable && !(pSndFile->GetType() & MOD_TYPE_XM|MOD_TYPE_MOD)); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT2+ichn*2), bEnable && !(pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_MOD))); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT9+ichn), ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)))); m_CbnEffects[ichn].EnableWindow(bEnable); } Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2008-01-29 21:00:25 UTC (rev 199) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2008-02-02 19:03:19 UTC (rev 200) @@ -958,6 +958,8 @@ } } + if(GetType() == MOD_TYPE_IT) mptStartPos = dwMemLength; + if (pifh->flags & 0x08) m_dwSongFlags |= SONG_LINEARSLIDES; if (pifh->flags & 0x10) m_dwSongFlags |= SONG_ITOLDEFFECTS; if (pifh->flags & 0x20) m_dwSongFlags |= SONG_ITCOMPATMODE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-01-29 21:00:47
|
Revision: 199 http://modplug.svn.sourceforge.net/modplug/?rev=199&view=rev Author: relabsoluness Date: 2008-01-29 13:00:25 -0800 (Tue, 29 Jan 2008) Log Message: ----------- Miscellaneous minor changes . Fix for faulty tabs when switching between modtypes with and without instrumenttab. (http://lpchip.com/modplug/viewtopic.php?t=1614) / Modified flag is not set when sliding tempo/global volume slider for MOD file / When setting instrument pan, checking whether instrument samples have set pan enabled and optionally disabling them. + Unmute all(on transition) shortcutkeys should now work in orderlist context / Disabled Set Pan in sample tab for XM + Half/double pattern rownumber buttons to pattern properties dialog. / Show prev/next pattern now shows pattern over +++ orderlist items. + Channel status in status bar now show channel volume info. / Disabled setting channel pan for MOD/XM in general view. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/Globals.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/pattern.h trunk/OpenMPT/mptrack/patternContainer.cpp trunk/OpenMPT/mptrack/patternContainer.h trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/typedefs.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -80,17 +80,19 @@ BOOL CCtrlGeneral::OnInitDialog() //------------------------------- { + const CModSpecifications specs = m_pSndFile->GetModSpecifications(); CModControlDlg::OnInitDialog(); // Song Title if(m_pSndFile) - m_EditTitle.SetLimitText(m_pSndFile->GetModSpecifications().modNameLengthMax); + m_EditTitle.SetLimitText(specs.modNameLengthMax); else m_EditTitle.SetLimitText(25); // -> CODE#0016 // -> DESC="default tempo update" // m_SpinTempo.SetRange(32, 255); // 255 bpm max - m_SpinTempo.SetRange(32, 512); + //m_SpinTempo.SetRange(32, 512); + m_SpinTempo.SetRange(specs.tempoMin, specs.tempoMax); m_SpinSpeed.SetRange(1, 64); // -! BEHAVIOUR_CHANGE#0016 m_SpinGlobalVol.SetRange(0, 128); @@ -98,7 +100,7 @@ m_SpinVSTiVol.SetRange(0, 2000); m_SpinRestartPos.SetRange(0, 255); - m_SliderTempo.SetRange(0, 480); + m_SliderTempo.SetRange(0, specs.tempoMax - specs.tempoMin); m_SliderGlobalVol.SetRange(0, MAX_SLIDER_GLOBAL_VOL); m_SliderVSTiVol.SetRange(0, MAX_SLIDER_VSTI_VOL); m_SliderSamplePreAmp.SetRange(0, MAX_SLIDER_SAMPLE_VOL); @@ -190,13 +192,17 @@ m_SliderGlobalVol.SetPos(MAX_SLIDER_GLOBAL_VOL-m_pSndFile->m_nDefaultGlobalVolume); m_SliderVSTiVol.SetPos(MAX_SLIDER_VSTI_VOL-m_pSndFile->m_nVSTiVolume); m_SliderSamplePreAmp.SetPos(MAX_SLIDER_SAMPLE_VOL-m_pSndFile->m_nSamplePreAmp); - m_SliderTempo.SetPos(480 - m_pSndFile->m_nDefaultTempo + 32); + m_SliderTempo.SetPos(m_pSndFile->GetModSpecifications().tempoMax - m_pSndFile->m_nDefaultTempo); } if (dwHint & HINT_MODTYPE) { + CModSpecifications specs = m_pSndFile->GetModSpecifications(); + m_SpinTempo.SetRange(specs.tempoMin, specs.tempoMax); + m_SliderTempo.SetRange(0, specs.tempoMax - specs.tempoMin); + BOOL b = TRUE; if (m_pSndFile->m_nType == MOD_TYPE_MOD) b = FALSE; m_EditTempo.EnableWindow(b); @@ -211,6 +217,8 @@ m_SpinSamplePA.EnableWindow(b); m_SliderSamplePreAmp.EnableWindow(b); m_SliderVSTiVol.EnableWindow(b); + //Note: Global volume slider is not disabled for MOD + //on purpose(can be used to control play volume) // MOD Type LPCSTR pszModType = "MOD (ProTracker)"; @@ -258,11 +266,15 @@ CSliderCtrl* pSlider = (CSliderCtrl*) pscroll; if (pSlider==&m_SliderTempo) { - int tempo = 480 - m_SliderTempo.GetPos() + 32; - if ((tempo >= 32) && (tempo <= 512) && (tempo != m_pSndFile->m_nDefaultTempo)) { + int min, max; + m_SpinTempo.GetRange(min, max); + int tempo = max - m_SliderTempo.GetPos(); + if ((tempo >= m_pSndFile->GetModSpecifications().tempoMin) && (tempo <= m_pSndFile->GetModSpecifications().tempoMax) && (tempo != m_pSndFile->m_nDefaultTempo)) { m_pSndFile->m_nDefaultTempo = tempo; m_pSndFile->m_nMusicTempo = tempo; - m_pModDoc->SetModified(); + if(m_pSndFile->GetType() != MOD_TYPE_MOD) + m_pModDoc->SetModified(); + m_pModDoc->UpdateAllViews(NULL, HINT_MODGENERAL, this); } } @@ -272,7 +284,9 @@ if ((gv >= 0) && (gv <= MAX_SLIDER_GLOBAL_VOL) && (gv != m_pSndFile->m_nDefaultGlobalVolume)) { m_pSndFile->m_nGlobalVolume = gv; m_pSndFile->m_nDefaultGlobalVolume = gv; - m_pModDoc->SetModified(); + if(m_pSndFile->GetType() != MOD_TYPE_MOD) + m_pModDoc->SetModified(); + m_pModDoc->UpdateAllViews(NULL, HINT_MODGENERAL, this); } } @@ -327,7 +341,8 @@ if (s[0]) { UINT n = atoi(s); - if ((n >= 32) && (n <= 512) && (n != m_pSndFile->m_nDefaultTempo)) + CModSpecifications specs = m_pSndFile->GetModSpecifications(); + if ((n >= specs.tempoMin) && (n <= specs.tempoMax) && (n != m_pSndFile->m_nDefaultTempo)) { m_bEditsLocked=true; m_EditTempo.SetModify(FALSE); Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -14,7 +14,7 @@ using std::string; using std::vector; -#pragma warning(disable:4244) +#pragma warning(disable:4244) //conversion from 'type1' to 'type2', possible loss of data const pair<string, WORD> CCtrlInstruments::s_TuningNotFound("Tuning was not found. Setting to default tuning", 7); @@ -1741,9 +1741,44 @@ INSTRUMENTHEADER *penv = m_pSndFile->Headers[m_nInstrument]; if ((!IsLocked()) && (penv)) { - BOOL b = m_CheckPanning.GetCheck(); + const BOOL b = m_CheckPanning.GetCheck(); + if (b) penv->dwFlags |= ENV_SETPANNING; else penv->dwFlags &= ~ENV_SETPANNING; + + if(b && m_pSndFile->GetType() & MOD_TYPE_IT|MOD_TYPE_MPT) + { + bool smpPanningInUse = false; + for(BYTE i = 0; i<ARRAYELEMCOUNT(penv->Keyboard); i++) + { + const SAMPLEINDEX smp = penv->Keyboard[i]; + if(smp <= m_pSndFile->GetNumSamples() && m_pSndFile->Ins[smp].uFlags & CHN_PANNING) + { + smpPanningInUse = true; + break; + } + } + if(smpPanningInUse) + { + if(MessageBox("Some of the samples used in the instrument have \"Set Pan\" enabled. " + "When instrument is played with such sample, sample pan setting overrides instrument pan. " + "Do you wish to disable panning from those samples so that instrument pan setting is effective " + "for the whole instrument?", + "", + MB_YESNO) == IDYES) + { + for(BYTE i = 0; i<ARRAYELEMCOUNT(penv->Keyboard); i++) + { + const SAMPLEINDEX smp = penv->Keyboard[i]; + if(smp <= m_pSndFile->GetNumSamples()) + m_pSndFile->Ins[smp].uFlags &= ~CHN_PANNING; + } + m_pModDoc->SetModified(); + m_pModDoc->UpdateAllViews(NULL, HINT_SAMPLEINFO | HINT_MODTYPE); + } + } + } + // -> CODE#0023 // -> DESC="IT project files (.itp)" m_pSndFile->instrumentModified[m_nInstrument-1] = TRUE; Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -316,7 +316,7 @@ } if (ord != pSndFile->Order[m_nScrollPos]) { - pSndFile->Order[m_nScrollPos] = static_cast<UINT>(ord); + pSndFile->Order[m_nScrollPos] = static_cast<PATTERNINDEX>(ord); m_pModDoc->SetModified(); m_pModDoc->UpdateAllViews(NULL, HINT_MODSEQUENCE, this); InvalidateSelection(); @@ -351,12 +351,17 @@ switch (kc) { - case kcSwitchToOrderList: OnSwitchToView(); return true; + case kcSwitchToOrderList: OnSwitchToView(); return true; case kcChangeLoopStatus: m_pParent->OnModCtrlMsg(CTRLMSG_PAT_LOOP, -1); return true; case kcToggleFollowSong: m_pParent->OnFollowSong(); return true; + + case kcChannelUnmuteAll: + case kcUnmuteAllChnOnPatTransition: + ::PostMessage(m_pParent->GetViewWnd(), WM_MOD_KEYCOMMAND, kc, 0); + return true; } } - //end rewbs.customKeys + //end rewbs.customKeys switch(pMsg->message) @@ -889,7 +894,7 @@ switch(pDropInfo->dwDropType) { case DRAGONDROP_PATTERN: - pSndFile->Order[posdest] = static_cast<UINT>(pDropInfo->dwDropItem); + pSndFile->Order[posdest] = static_cast<PATTERNINDEX>(pDropInfo->dwDropItem); break; case DRAGONDROP_ORDER: @@ -925,4 +930,4 @@ else m_nOrderlistMargins = maxMargins; } return m_nOrderlistMargins; -} +} \ No newline at end of file Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -570,8 +570,8 @@ m_EditGlobalVol.EnableWindow(b); m_SpinGlobalVol.EnableWindow(b); // Panning - b = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; - m_CheckPanning.EnableWindow(b); + b = (m_pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; + m_CheckPanning.EnableWindow(b && !(m_pSndFile->GetType() & MOD_TYPE_XM)); m_EditPanning.EnableWindow(b); m_SpinPanning.EnableWindow(b); } @@ -599,7 +599,7 @@ // Global Volume SetDlgItemInt(IDC_EDIT8, pins->nGlobalVol); // Panning - CheckDlgButton(IDC_CHECK1, (pins->uFlags & CHN_PANNING) ? MF_CHECKED : 0); + CheckDlgButton(IDC_CHECK1, (pins->uFlags & CHN_PANNING) ? MF_CHECKED : MF_UNCHECKED); //rewbs.fix36944 if (m_pSndFile->m_nType == MOD_TYPE_XM) { SetDlgItemInt(IDC_EDIT9, pins->nPan); //displayed panning with XM is 0-256, just like MPT's internal engine @@ -2236,7 +2236,7 @@ { if (IsLocked()) return; BOOL b = FALSE; - if (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) + if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) { b = IsDlgButtonChecked(IDC_CHECK1); } @@ -2245,14 +2245,14 @@ if (!(m_pSndFile->Ins[m_nSample].uFlags & CHN_PANNING)) { m_pSndFile->Ins[m_nSample].uFlags |= CHN_PANNING; - if (m_pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); + m_pModDoc->SetModified(); } } else { if (m_pSndFile->Ins[m_nSample].uFlags & CHN_PANNING) { m_pSndFile->Ins[m_nSample].uFlags &= ~CHN_PANNING; - if (m_pSndFile->m_nType == (MOD_TYPE_IT|MOD_TYPE_MPT)) m_pModDoc->SetModified(); + m_pModDoc->SetModified(); } } } @@ -2818,7 +2818,7 @@ return CModControlDlg::PreTranslateMessage(pMsg); } -LRESULT CCtrlSamples::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam) +LRESULT CCtrlSamples::OnCustomKeyMsg(WPARAM wParam, LPARAM /*lParam*/) //---------------------------------------------------------------- { if (wParam == kcNull) Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -99,12 +99,14 @@ // CViewPattern Drawing Implementation inline PCPATTERNFONT GetCurrentPatternFont() +//------------------------------------------ { return (CMainFrame::m_dwPatternSetup & PATTERN_SMALLFONT) ? &gSmallPatternFont : &gDefaultPatternFont; } static BYTE hilightcolor(int c0, int c1) +//-------------------------------------- { int cf0, cf1; @@ -510,14 +512,21 @@ UINT nPrevPat = m_nPattern; BOOL bPrevPatFound = FALSE; + // Display previous pattern if (CMainFrame::m_dwPatternSetup & PATTERN_SHOWPREVIOUS) { - UINT nCurOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); - - if ((nCurOrder > 0) && (nCurOrder < pSndFile->Order.size()) && (pSndFile->Order[nCurOrder] == m_nPattern)) + const ORDERINDEX startOrder = static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); + if(startOrder > 0) { - nPrevPat = pSndFile->Order[nCurOrder-1]; - bPrevPatFound = TRUE; + ORDERINDEX prevOrder = startOrder - 1; + //Skip +++ items + while(prevOrder > 0 && pSndFile->Order[prevOrder] == pSndFile->Order.GetIgnoreIndex()) --prevOrder; + + if(startOrder < pSndFile->Order.size() && pSndFile->Order[startOrder] == m_nPattern) + { + nPrevPat = pSndFile->Order[prevOrder]; + bPrevPatFound = TRUE; + } } } if ((bPrevPatFound) && (nPrevPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nPrevPat])) @@ -556,11 +565,16 @@ { UINT nNextPat = m_nPattern; BOOL bNextPatFound = FALSE; - UINT nCurOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); - - if ((nCurOrder+1 < pSndFile->Order.size()) && (pSndFile->Order[nCurOrder] == m_nPattern)) + const ORDERINDEX startOrder= static_cast<ORDERINDEX>(SendCtrlMessage(CTRLMSG_GETCURRENTORDER)); + ORDERINDEX nNextOrder = 1 + startOrder; + + //Ignore skip items(+++) from sequence. + const ORDERINDEX ordCount = pSndFile->Order.GetCount(); + while(nNextOrder < ordCount && pSndFile->Order[nNextOrder] == pSndFile->Order.GetIgnoreIndex()) nNextOrder++; + + if ((nNextOrder < ordCount) && (pSndFile->Order[startOrder] == m_nPattern)) { - nNextPat = pSndFile->Order[nCurOrder+1]; + nNextPat = pSndFile->Order[nNextOrder]; bNextPatFound = TRUE; } if ((bNextPatFound) && (nNextPat < pSndFile->Patterns.Size()) && (pSndFile->Patterns[nNextPat])) @@ -1423,6 +1437,7 @@ //rewbs.xinfo void CViewPattern::UpdateXInfoText() +//---------------------------------- { UINT nChn = GetCurrentChannel(); CString xtraInfo; @@ -1434,8 +1449,10 @@ CSoundFile *pSndFile = pModDoc->GetSoundFile(); if (!pSndFile) return; - xtraInfo.Format("Chan: %d; macro: %X; cutoff: %X; reso: %X; pan: %X", + //xtraInfo.Format("Chan: %d; macro: %X; cutoff: %X; reso: %X; pan: %X", + xtraInfo.Format("Chn:%d; Vol:%X; Mac:%X; Cut:%X; Res:%X; Pan:%X", nChn+1, + pSndFile->Chn[nChn].nGlobalVol, pSndFile->Chn[nChn].nActiveMacro, pSndFile->Chn[nChn].nCutOff, pSndFile->Chn[nChn].nResonance, Modified: trunk/OpenMPT/mptrack/Globals.cpp =================================================================== --- trunk/OpenMPT/mptrack/Globals.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Globals.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -289,9 +289,39 @@ { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModControlDlg *pDlg = NULL; - UINT nID; + if (nIndex == -1) nIndex = m_TabCtrl.GetCurSel(); + + const UINT nID = m_TabCtrl.GetItemData(nIndex); + if(nID == 0) return FALSE; + + switch(nID) + { + //rewbs.graph + case IDD_CONTROL_GRAPH: + nIndex = 5; + break; + //end rewbs.graph + case IDD_CONTROL_COMMENTS: + nIndex = 4; + break; + case IDD_CONTROL_GLOBALS: + nIndex = 0; + break; + case IDD_CONTROL_PATTERNS: + nIndex = 1; + break; + case IDD_CONTROL_SAMPLES: + nIndex = 2; + break; + case IDD_CONTROL_INSTRUMENTS: + nIndex = 3; + break; + default: + return FALSE; + } + if ((nIndex < 0) || (nIndex >= MAX_PAGES) || (!pMainFrm)) return FALSE; //rewbs.varWindowSize @@ -304,7 +334,6 @@ PostMessage(WM_MOD_CTRLMSG, CTRLMSG_ACTIVATEPAGE, lParam); return TRUE; } - if ((nID = m_TabCtrl.GetItemData(nIndex)) == 0) return FALSE; if ((m_nActiveDlg >= 0) && (m_nActiveDlg < MAX_PAGES)) { if (m_Pages[m_nActiveDlg]) @@ -314,11 +343,11 @@ } m_nActiveDlg = -1; } - if (m_Pages[nIndex]) + if (m_Pages[nIndex]) //Ctrl window already created? { m_nActiveDlg = nIndex; pDlg = m_Pages[nIndex]; - } else + } else //Ctrl window is not created yet - creating one. { switch(nID) { Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -192,18 +192,13 @@ static void ShowChangesDialog() //----------------------------- { + /* CString firstOpenMessage = "OpenMPT version " + CMainFrame::GetFullVersionString(); firstOpenMessage += ". This is a development build.\n\nChanges:\n\n" - "[New] Ability to control plug params with MIDI controllers.\n" - "[New] Ability to pass MIDI to plugin.\n" - "[Imp] Ability to take MIDI volume into account when playing notes.\n" - "[Fix/Imp] Plugin volume command fix. In addition now there are options how to interpret it.\n" - "[Imp] Keyshortcut for preset navigation jumps in VST editor.\n" - "[Mod] .bak files won't be shown in load dialog with 'All modules' filter.\n" - "[Fix/Mod] Instrument random variation fix/behavior change.\n\n" - "And various other fixes and changes."; + "TODO"; CMainFrame::GetMainFrame()->MessageBox(firstOpenMessage, "OpenMPT v." + CMainFrame::GetFullVersionString(), MB_ICONINFORMATION); + */ } Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.cpp =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -89,10 +89,34 @@ } -PATTERNINDEX COrderToPatternTable::GetInvalidPatIndex() const {return m_rSndFile.GetType() == MOD_TYPE_MPT ? 65535 : 0xFF;} -PATTERNINDEX COrderToPatternTable::GetIgnoreIndex() const {return m_rSndFile.GetType() == MOD_TYPE_MPT ? 65534 : 0xFE;} +void COrderToPatternTable::OnModTypeChanged(const MODTYPE oldtype) +//---------------------------------------------------------------- +{ + const CModSpecifications specs = m_rSndFile.GetModSpecifications(); + //Resize orderlist if needed. Because old orderlist had 256 elements, not making it + //smaller than that even if the modtype doesn't support that many orders. + if(specs.ordersMax < GetCount()) + { + resize(max(MAX_PATTERNS, specs.ordersMax)); + for(ORDERINDEX i = GetCount(); i>specs.ordersMax; --i) (*this)[i-1] = GetInvalidPatIndex(); + } + //Replace items used to denote end of song/skip order. + replace(begin(), end(), GetInvalidPatIndex(oldtype), GetInvalidPatIndex()); + replace(begin(), end(), GetIgnoreIndex(oldtype), GetIgnoreIndex()); +} + + +PATTERNINDEX COrderToPatternTable::GetInvalidPatIndex(const MODTYPE type) {return type == MOD_TYPE_MPT ? 65535 : 0xFF;} +PATTERNINDEX COrderToPatternTable::GetIgnoreIndex(const MODTYPE type) {return type == MOD_TYPE_MPT ? 65534 : 0xFE;} + +PATTERNINDEX COrderToPatternTable::GetInvalidPatIndex() const {return GetInvalidPatIndex(m_rSndFile.GetType());} +PATTERNINDEX COrderToPatternTable::GetIgnoreIndex() const {return GetIgnoreIndex(m_rSndFile.GetType());} + + + + //-------------------------------------------------- //-------------------------------------------------- //-------------------------------------------------- @@ -131,3 +155,5 @@ } } + + Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.h =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.h 2008-01-29 21:00:25 UTC (rev 199) @@ -32,14 +32,21 @@ size_t WriteToByteArray(BYTE* dest, const UINT numOfBytes, const UINT destSize); + ORDERINDEX GetCount() const {return static_cast<ORDERINDEX>(size());} + //Deprecated function used for MPTm's created in 1.17.02.46 - 1.17.02.48. DWORD Unserialize(const BYTE* const src, const DWORD memLength); //Returns true if the IT orderlist datafield is not sufficient to store orderlist information. bool NeedsExtraDatafield() const; + void OnModTypeChanged(const MODTYPE oldtype); + PATTERNINDEX GetInvalidPatIndex() const; //To correspond 0xFF + static PATTERNINDEX GetInvalidPatIndex(const MODTYPE type); + PATTERNINDEX GetIgnoreIndex() const; //To correspond 0xFE + static PATTERNINDEX GetIgnoreIndex(const MODTYPE type); COrderSerialization* NewReadWriteObject() {return new COrderSerialization(*this);} Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -318,7 +318,8 @@ m_TabCtrl.DeleteAllItems(); for (int iItem=0; iItem<nTabCount; iItem++) { - wsprintf(s, "%d - %d", iItem * 4 + 1, iItem * 4 + 4); + const int lastItem = min(iItem * 4 + 4, MAX_BASECHANNELS); + wsprintf(s, "%d - %d", iItem * 4 + 1, lastItem); tci.mask = TCIF_TEXT | TCIF_PARAM; tci.pszText = s; tci.lParam = iItem * 4; @@ -337,58 +338,65 @@ m_nActiveTab = nTabIndex; for (int ichn=0; ichn<4; ichn++) { - UINT nChn = nTabIndex*4+ichn; - BOOL bEnable = (nChn < pSndFile->m_nChannels) ? TRUE : FALSE; - // Text - s[0] = 0; - if (bEnable) wsprintf(s, "Channel %d", nChn+1); - SetDlgItemText(IDC_TEXT1+ichn, s); - // Mute - CheckDlgButton(IDC_CHECK1+ichn*2, (pSndFile->ChnSettings[nChn].dwFlags & CHN_MUTE) ? TRUE : FALSE); - // Surround - CheckDlgButton(IDC_CHECK2+ichn*2, (pSndFile->ChnSettings[nChn].dwFlags & CHN_SURROUND) ? TRUE : FALSE); - // Volume - int vol = pSndFile->ChnSettings[nChn].nVolume; - m_sbVolume[ichn].SetPos(vol); - SetDlgItemInt(IDC_EDIT1+ichn*2, vol); - // Pan - int pan = pSndFile->ChnSettings[nChn].nPan; - m_sbPan[ichn].SetPos(pan/4); - SetDlgItemInt(IDC_EDIT2+ichn*2, pan); - memcpy(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME); - s[MAX_CHANNELNAME-1] = 0; - SetDlgItemText(IDC_EDIT9+ichn, s); - // Channel effect - m_CbnEffects[ichn].SetRedraw(FALSE); - m_CbnEffects[ichn].ResetContent(); - m_CbnEffects[ichn].SetItemData(m_CbnEffects[ichn].AddString("No plugin"), 0); - int fxsel = 0; - for (UINT ifx=0; ifx<MAX_MIXPLUGINS; ifx++) + const UINT nChn = nTabIndex*4+ichn; + const BOOL bEnable = (nChn < pSndFile->GetNumChannels()) ? TRUE : FALSE; + if(nChn < MAX_BASECHANNELS) { - if ((pSndFile->m_MixPlugins[ifx].Info.dwPluginId1) - || (pSndFile->m_MixPlugins[ifx].Info.dwPluginId2) - || (pSndFile->m_MixPlugins[ifx].Info.szName[0] - || (pSndFile->ChnSettings[nChn].nMixPlugin == ifx+1))) + // Text + s[0] = 0; + if (bEnable) wsprintf(s, "Channel %d", nChn+1); + SetDlgItemText(IDC_TEXT1+ichn, s); + // Mute + CheckDlgButton(IDC_CHECK1+ichn*2, (pSndFile->ChnSettings[nChn].dwFlags & CHN_MUTE) ? TRUE : FALSE); + // Surround + CheckDlgButton(IDC_CHECK2+ichn*2, (pSndFile->ChnSettings[nChn].dwFlags & CHN_SURROUND) ? TRUE : FALSE); + // Volume + int vol = pSndFile->ChnSettings[nChn].nVolume; + m_sbVolume[ichn].SetPos(vol); + SetDlgItemInt(IDC_EDIT1+ichn*2, vol); + // Pan + int pan = pSndFile->ChnSettings[nChn].nPan; + m_sbPan[ichn].SetPos(pan/4); + SetDlgItemInt(IDC_EDIT2+ichn*2, pan); + memcpy(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME); + s[MAX_CHANNELNAME-1] = 0; + SetDlgItemText(IDC_EDIT9+ichn, s); + // Channel effect + m_CbnEffects[ichn].SetRedraw(FALSE); + m_CbnEffects[ichn].ResetContent(); + m_CbnEffects[ichn].SetItemData(m_CbnEffects[ichn].AddString("No plugin"), 0); + int fxsel = 0; + for (UINT ifx=0; ifx<MAX_MIXPLUGINS; ifx++) { - wsprintf(s, "FX%d: %s", ifx+1, pSndFile->m_MixPlugins[ifx].Info.szName); - int n = m_CbnEffects[ichn].AddString(s); - m_CbnEffects[ichn].SetItemData(n, ifx+1); - if (pSndFile->ChnSettings[nChn].nMixPlugin == ifx+1) fxsel = n; + if ((pSndFile->m_MixPlugins[ifx].Info.dwPluginId1) + || (pSndFile->m_MixPlugins[ifx].Info.dwPluginId2) + || (pSndFile->m_MixPlugins[ifx].Info.szName[0] + || (pSndFile->ChnSettings[nChn].nMixPlugin == ifx+1))) + { + wsprintf(s, "FX%d: %s", ifx+1, pSndFile->m_MixPlugins[ifx].Info.szName); + int n = m_CbnEffects[ichn].AddString(s); + m_CbnEffects[ichn].SetItemData(n, ifx+1); + if (pSndFile->ChnSettings[nChn].nMixPlugin == ifx+1) fxsel = n; + } } + m_CbnEffects[ichn].SetRedraw(TRUE); + m_CbnEffects[ichn].SetCurSel(fxsel); } - m_CbnEffects[ichn].SetRedraw(TRUE); - m_CbnEffects[ichn].SetCurSel(fxsel); + else + SetDlgItemText(IDC_TEXT1+ichn, ""); + // Enable/Disable controls for this channel BOOL bIT = ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK1+ichn*2), bEnable); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK2+ichn*2), bIT); ::EnableWindow(m_sbVolume[ichn].m_hWnd, bEnable); - ::EnableWindow(m_sbPan[ichn].m_hWnd, bEnable); + ::EnableWindow(m_sbPan[ichn].m_hWnd, bEnable && !(pSndFile->GetType() & MOD_TYPE_XM|MOD_TYPE_MOD)); ::EnableWindow(m_spinVolume[ichn], bEnable); - ::EnableWindow(m_spinPan[ichn], bEnable); + ::EnableWindow(m_spinPan[ichn], bEnable && !(pSndFile->GetType() & MOD_TYPE_XM|MOD_TYPE_MOD)); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT1+ichn*2), bEnable); - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT2+ichn*2), bEnable); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT2+ichn*2), bEnable && !(pSndFile->GetType() & MOD_TYPE_XM|MOD_TYPE_MOD)); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT9+ichn), ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)))); + m_CbnEffects[ichn].EnableWindow(bEnable); } UnlockControls(); } @@ -1622,7 +1630,7 @@ } // Update all other plugs' outputs - for (int nPlug=0; nPlug<src; nPlug++) { + for (PLUGINDEX nPlug=0; nPlug<src; nPlug++) { if (pSndFile->m_MixPlugins[nPlug].Info.dwOutputRouting & 0x80) { if ((pSndFile->m_MixPlugins[nPlug].Info.dwOutputRouting & 0x7f) == src) { pSndFile->m_MixPlugins[nPlug].Info.dwOutputRouting = ((BYTE)dest)|0x80; @@ -1630,14 +1638,14 @@ } } // Update channels - for (int nChn=0; nChn<pSndFile->m_nChannels; nChn++) { + for (CHANNELINDEX nChn=0; nChn<pSndFile->m_nChannels; nChn++) { if (pSndFile->ChnSettings[nChn].nMixPlugin == src+1) { pSndFile->ChnSettings[nChn].nMixPlugin = dest+1; } } // Update instruments - for (int nIns=1; nIns<=pSndFile->m_nInstruments; nIns++) { + for (INSTRUMENTINDEX nIns=1; nIns<=pSndFile->m_nInstruments; nIns++) { if (pSndFile->Headers[nIns] && (pSndFile->Headers[nIns]->nMixPlug == src+1)) { pSndFile->Headers[nIns]->nMixPlug = dest+1; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -2910,10 +2910,10 @@ const BYTE nByte1 = GetFromMIDIMsg_DataByte1(dwMidiData); const BYTE nByte2 = GetFromMIDIMsg_DataByte2(dwMidiData); - const BYTE nNote = nByte1 + 1; // +1 is for MPT, where middle C is 61 - int nVol = nByte2; // At this stage nVol is a non linear value in [0;127] + const BYTE nNote = nByte1 + 1; // +1 is for MPT, where middle C is 61 + int nVol = nByte2; // At this stage nVol is a non linear value in [0;127] // Need to convert to linear in [0;64] - see below - BYTE event = GetFromMIDIMsg_Event(dwMidiData); + BYTE event = GetFromMIDIMsg_Event(dwMidiData); if ((event == 0x9) && !nVol) event = 0x8; //Convert event to note-off if req'd @@ -3241,7 +3241,7 @@ case kcChannelMute: OnMuteChannel(true); return wParam; case kcChannelSolo: OnSoloChannel(true); return wParam; case kcChannelUnmuteAll: OnUnmuteAll(); return wParam; - case kcToggleChanMuteOnPatTransition: TogglePendingMute((m_dwCursor&0xFFFF)>>3); return wParam; + case kcToggleChanMuteOnPatTransition: TogglePendingMute(GetChanFromCursor(m_dwCursor)); return wParam; case kcUnmuteAllChnOnPatTransition: OnPendingUnmuteAllChnFromClick(); return wParam; case kcTimeAtRow: OnShowTimeAtRow(); return wParam; case kcSoloChnOnPatTransition: PendingSoloChn(GetCurrentChannel()); return wParam; @@ -3701,8 +3701,7 @@ return; CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODCOMMAND *p = pSndFile->Patterns[m_nPattern], *prowbase; - UINT nChn = (m_dwCursor & 0xFFFF) >> 3; + UINT nChn = GetChanFromCursor(m_dwCursor); PrepareUndo(m_dwBeginSel, m_dwEndSel); BYTE* activeNoteMap = isSplit ? splitActiveNoteChannel : activeNoteChannel; @@ -3725,11 +3724,7 @@ //Work out where to put the note off UINT nRow = usePlaybackPosition ? pSndFile->m_nRow : m_nRow; - prowbase = p + nRow * pSndFile->m_nChannels; - if (releaseChan < pSndFile->GetNumChannels()) - p=prowbase+releaseChan; - else - p=prowbase+nChn; + MODCOMMAND* p = pSndFile->Patterns[m_nPattern].GetpModCommand(nRow, (releaseChan < pSndFile->GetNumChannels()) ? releaseChan : nChn); //don't overwrite: if (p->note || p->instr || p->volcmd) { @@ -3802,8 +3797,7 @@ return; CSoundFile *pSndFile = pModDoc->GetSoundFile(); - MODCOMMAND *p = pSndFile->Patterns[m_nPattern], *prowbase; - UINT nChn = (m_dwCursor & 0xFFFF) >> 3; + UINT nChn = GetChanFromCursor(m_dwCursor); PrepareUndo(m_dwBeginSel, m_dwEndSel); BYTE* activeNoteMap = isSplit ? splitActiveNoteChannel : activeNoteChannel; @@ -3816,9 +3810,7 @@ if (!(CMainFrame::m_dwPatternSetup&PATTERN_KBDNOTEOFF )) return; - //Work out where to put the note off - prowbase = p + m_nRow * pSndFile->m_nChannels; - p=prowbase+nChn; + MODCOMMAND* p = pSndFile->Patterns[m_nPattern].GetpModCommand(m_nRow, nChn); //don't overwrite: if (p->note) @@ -3863,15 +3855,11 @@ { 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; + UINT nChn = GetChanFromCursor(m_dwCursor); PrepareUndo(m_dwBeginSel, m_dwEndSel); - // -- Work out where to put the new oct - prowbase = p + m_nRow * pSndFile->m_nChannels; - p = prowbase + nChn; - oldcmd = *p; + MODCOMMAND* p = pSndFile->Patterns[m_nPattern].GetpModCommand(m_nRow, nChn); + MODCOMMAND oldcmd = *p; // This is the command we are about to overwrite if (oldcmd.note) TempEnterNote(((oldcmd.note-1)%12)+val*12+1); } Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -844,6 +844,11 @@ ///////////////////////////////////////////////////////////////////////////////////////////// // CPatternPropertiesDlg +BEGIN_MESSAGE_MAP(CPatternPropertiesDlg, CDialog) + ON_COMMAND(IDC_BUTTON_HALF, OnHalfRowNumber) + ON_COMMAND(IDC_BUTTON_DOUBLE, OnDoubleRowNumber) +END_MESSAGE_MAP() + BOOL CPatternPropertiesDlg::OnInitDialog() //---------------------------------------- { @@ -871,13 +876,50 @@ wsprintf(s, "Pattern #%d:\x0d\x0a %d rows (%dK)", m_nPattern, pSndFile->PatternSize[m_nPattern], - (pSndFile->PatternSize[m_nPattern] * pSndFile->m_nChannels * 6)/1024); + (pSndFile->PatternSize[m_nPattern] * pSndFile->m_nChannels * sizeof(MODCOMMAND))/1024); SetDlgItemText(IDC_TEXT1, s); } return TRUE; } +void CPatternPropertiesDlg::OnHalfRowNumber() +//------------------------------------------- +{ + CComboBox *combo; + CString str; + combo = (CComboBox *)GetDlgItem(IDC_COMBO1); + if(combo->GetCount() < 1) return; + if(combo->GetCurSel() == CB_ERR) combo->SetCurSel(0); + + combo->GetLBText(combo->GetCurSel(), str); + int sel = atoi(str)/2; + combo->GetLBText(0, str); + const int row0 = atoi(str); + if(sel < row0) sel = row0; + combo->SetCurSel(sel - row0); +} + + +void CPatternPropertiesDlg::OnDoubleRowNumber() +//--------------------------------------------- +{ + CComboBox *combo; + CString str; + combo = (CComboBox *)GetDlgItem(IDC_COMBO1); + if(combo->GetCount() < 1) return; + if(combo->GetCurSel() == CB_ERR) combo->SetCurSel(0); + + combo->GetLBText(combo->GetCurSel(), str); + int sel = 2*atoi(str); + combo->GetLBText(0, str); + const int row0 = atoi(str); + combo->GetLBText(combo->GetCount()-1, str); + if(sel > atoi(str)) sel = atoi(str); + combo->SetCurSel(sel - row0); +} + + void CPatternPropertiesDlg::OnOK() //-------------------------------- { Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2008-01-29 21:00:25 UTC (rev 199) @@ -159,6 +159,9 @@ protected: virtual BOOL OnInitDialog(); virtual void OnOK(); + afx_msg void OnHalfRowNumber(); + afx_msg void OnDoubleRowNumber(); + DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-01-29 21:00:25 UTC (rev 199) @@ -1239,6 +1239,8 @@ LTEXT "Pattern Info",IDC_TEXT1,10,36,95,25 DEFPUSHBUTTON "OK",IDOK,115,4,50,14 PUSHBUTTON "Cancel",IDCANCEL,115,22,50,14 + PUSHBUTTON "/2",IDC_BUTTON_HALF,117,47,21,14 + PUSHBUTTON "x2",IDC_BUTTON_DOUBLE,144,47,21,14 END IDD_PATTERN_EDITCOMMAND DIALOGEX 0, 0, 214, 65 @@ -1945,7 +1947,7 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,2,50 + FILEVERSION 1,17,2,51 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -1963,7 +1965,7 @@ BEGIN VALUE "CompanyName", "Olivier Lapicque / OpenMPT team" VALUE "FileDescription", "OpenMPT / ModPlug Tracker" - VALUE "FileVersion", "1, 17, 2, 50" + VALUE "FileVersion", "1, 17, 2, 51" VALUE "InternalName", "Modplug Tracker" VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2007 GPL." VALUE "LegalTrademarks", "M.O.D.P.L.U.G" Modified: trunk/OpenMPT/mptrack/pattern.h =================================================================== --- trunk/OpenMPT/mptrack/pattern.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/pattern.h 2008-01-29 21:00:25 UTC (rev 199) @@ -31,8 +31,8 @@ //BEGIN: INTERFACE METHODS public: - MODCOMMAND* GetpModCommand(const UINT r, const UINT c) {return &m_ModCommands[r*GetNumChannels()+c];} - const MODCOMMAND* GetpModCommand(const UINT r, const UINT c) const {return &m_ModCommands[r*GetNumChannels()+c];} + MODCOMMAND* GetpModCommand(const ROWINDEX r, const CHANNELINDEX c) {return &m_ModCommands[r*GetNumChannels()+c];} + const MODCOMMAND* GetpModCommand(const ROWINDEX r, const CHANNELINDEX c) const {return &m_ModCommands[r*GetNumChannels()+c];} ROWINDEX GetNumRows() const {return m_Rows;} Modified: trunk/OpenMPT/mptrack/patternContainer.cpp =================================================================== --- trunk/OpenMPT/mptrack/patternContainer.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/patternContainer.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -6,10 +6,10 @@ int CPatternContainer::Insert(const ROWINDEX rows) //--------------------------------------------- { - size_t i = 0; + PATTERNINDEX i = 0; for(i = 0; i<m_Patterns.size(); i++) if(!m_Patterns[i]) break; - if(Insert(static_cast<WORD>(i), rows)) + if(Insert(i, rows)) return -1; else return i; @@ -20,7 +20,7 @@ //--------------------------------------------------------------- { const CModSpecifications& specs = m_rSndFile.GetModSpecifications(); - if(index > m_Patterns.size() || rows > specs.patternRowsMax) + if(index >= specs.patternsMax || index > m_Patterns.size() || rows > specs.patternRowsMax) return true; if(index < m_Patterns.size() && m_Patterns[index]) return true; @@ -75,3 +75,13 @@ m_Patterns.resize(newSize, MODPATTERN(*this)); } } + + +void CPatternContainer::OnModTypeChanged(const MODTYPE /*oldtype*/) +//---------------------------------------------------------- +{ + const CModSpecifications specs = m_rSndFile.GetModSpecifications(); + if(specs.patternsMax < Size()) ResizeArray(max(MAX_PATTERNS, specs.patternsMax)); + else if(Size() < MAX_PATTERNS) ResizeArray(MAX_PATTERNS); +} + Modified: trunk/OpenMPT/mptrack/patternContainer.h =================================================================== --- trunk/OpenMPT/mptrack/patternContainer.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/patternContainer.h 2008-01-29 21:00:25 UTC (rev 199) @@ -54,6 +54,8 @@ void ResizeArray(const PATTERNINDEX newSize); + void OnModTypeChanged(const MODTYPE oldtype); + //END: INTERFACE METHODS Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/resource.h 2008-01-29 21:00:25 UTC (rev 199) @@ -810,6 +810,8 @@ #define IDC_EDIT_FLAGS 2323 #define IDC_CHECKCAPTURE 2324 #define IDC_SPINMOVEMAPPING 2325 +#define IDC_BUTTON_HALF 2326 +#define IDC_BUTTON_DOUBLE 2327 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1032,7 +1034,7 @@ #define ID_Menu59207 59207 #define ID_ENVELOPE_SCALEPOINTS 59208 #define ID_NETLINK_OPENMPTWIKI 59210 -#define ID_VIEW_MIDIMAPPING 59211 +#define ID_VIEW_MIDIMAPPING 59211 // Next default values for new objects // @@ -1041,7 +1043,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 516 #define _APS_NEXT_COMMAND_VALUE 59212 -#define _APS_NEXT_CONTROL_VALUE 2326 +#define _APS_NEXT_CONTROL_VALUE 2328 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/mptrack/typedefs.h =================================================================== --- trunk/OpenMPT/mptrack/typedefs.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/mptrack/typedefs.h 2008-01-29 21:00:25 UTC (rev 199) @@ -39,6 +39,7 @@ typedef uint16 TEMPO; typedef uint16 SAMPLEINDEX; typedef uint16 INSTRUMENTINDEX; +typedef uint32 MODTYPE; const ORDERINDEX ORDERINDEX_MAX = (std::numeric_limits<ORDERINDEX>::max)(); const ROWINDEX ROWINDEX_MAX = (std::numeric_limits<ROWINDEX>::max)(); Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -1105,13 +1105,14 @@ { dwMemPos += LoadMixPlugins(lpStream+dwMemPos, dwMemLength-dwMemPos); } - // Checking for unused channels + //UINT npatterns = pifh->patnum; UINT npatterns = patpos.size(); if (npatterns > GetModSpecifications().patternsMax) npatterns = GetModSpecifications().patternsMax; + // Checking for unused channels for (UINT patchk=0; patchk<npatterns; patchk++) { memset(chnmask, 0, sizeof(chnmask)); @@ -1331,6 +1332,8 @@ LoadExtendedSongProperties(GetType(), ptr, lpStream, mptStartPos); } + Patterns.ResizeArray(max(MAX_PATTERNS, npatterns)); + // Reading Patterns for (UINT npat=0; npat<npatterns; npat++) { @@ -1338,8 +1341,10 @@ { if(Patterns.Insert(npat, 64)) { - MessageBox(NULL, "Error occured while loading file, error code 1101080209", "", MB_ICONERROR); - return FALSE; + CString s; + s.Format("Allocating patterns failed starting from pattern %u", npat); + MessageBox(NULL, s, "", MB_ICONERROR); + break; } continue; } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2008-01-29 21:00:25 UTC (rev 199) @@ -1534,11 +1534,11 @@ if(chnFrom == chnTo) return false; if(chnFrom >= m_nChannels || chnTo >= m_nChannels) { - CString str = "Error: Bad move indexes in CSoundFile::MoveChannel(...)"; - CMainFrame::GetMainFrame()->MessageBox(str , "MoveChannel(...)", MB_OK | MB_ICONINFORMATION); - return true; + CString str = "Error: Bad move indexes in CSoundFile::MoveChannel(...)"; + CMainFrame::GetMainFrame()->MessageBox(str , "MoveChannel(...)", MB_OK | MB_ICONINFORMATION); + return true; } - std::vector<CHANNELINDEX> newOrder; + vector<CHANNELINDEX> newOrder; //First creating new order identical to current order... for(CHANNELINDEX i = 0; i<GetNumChannels(); i++) { @@ -2913,27 +2913,16 @@ //--------------------------------------------------- { const MODTYPE oldtype = m_nType; - const PATTERNINDEX oldInvalidIndex = Order.GetInvalidPatIndex(); - const PATTERNINDEX oldIgnoreIndex = Order.GetIgnoreIndex(); m_nType = newType; SetModSpecsPointer(m_pModSpecs, m_nType); m_ModFlags = m_ModFlags & GetModFlagMask(oldtype, newType); - - const CModSpecifications& specs = GetModSpecifications(); - if(specs.ordersMax < Order.size()) - { - Order.resize(max(MAX_PATTERNS, specs.ordersMax)); - for(ORDERINDEX i = Order.size(); i>specs.ordersMax; --i) Order[i-1] = Order.GetInvalidPatIndex(); - } - replace(Order.begin(), Order.end(), oldInvalidIndex, Order.GetInvalidPatIndex()); - replace(Order.begin(), Order.end(), oldIgnoreIndex, Order.GetIgnoreIndex()); - if(specs.patternsMax < Patterns.Size()) Patterns.ResizeArray(specs.patternsMax); - else if(Patterns.Size() < MAX_PATTERNS) Patterns.ResizeArray(MAX_PATTERNS); - + Order.OnModTypeChanged(oldtype); + Patterns.OnModTypeChanged(oldtype); } + bool CSoundFile::SetTitle(const char* titleCandidate, size_t strSize) //------------------------------------------------------------------- { Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/soundlib/Sndfile.h 2008-01-29 21:00:25 UTC (rev 199) @@ -819,7 +819,6 @@ const BYTE MSF_OLDVOLSWING = 1; //IT/MPT const BYTE MSF_MIDICC_BUGEMULATION = 2; //IT/MPT/XM -typedef UINT MODTYPE; class CTuningCollection; @@ -965,7 +964,7 @@ //Return the number of channels in the pattern. In 1.17.02.45 //it returned the number of channels with volume != 0 - CHANNELINDEX GetNumChannels() const {return static_cast<CHANNELINDEX>(m_nChannels);} + CHANNELINDEX GetNumChannels() const {return static_cast<CHANNELINDEX>(m_nChannels);} BOOL SetMasterVolume(UINT vol, BOOL bAdjustAGC=FALSE); UINT GetMasterVolume() const { return m_nMasterVolume; } @@ -980,7 +979,7 @@ UINT GetMaxPosition() const; IMixPlugin* GetInstrumentPlugin(INSTRUMENTINDEX instr); - const CModSpecifications& GetModSpecifications() {return *m_pModSpecs;} + const CModSpecifications& GetModSpecifications() const {return *m_pModSpecs;} static const CModSpecifications& GetModSpecifications(const MODTYPE type); double GetCurrentBPM() const; @@ -1013,7 +1012,7 @@ void CheckCPUUsage(UINT nCPU); BOOL SetPatternName(UINT nPat, LPCSTR lpszName); BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const; - CHANNELINDEX ReArrangeChannels(const std::vector<CHANNELINDEX>& fromToArray); + CHANNELINDEX ReArrangeChannels(const vector<CHANNELINDEX>& fromToArray); bool MoveChannel(UINT chn_from, UINT chn_to); bool InitChannel(UINT nch); Modified: trunk/OpenMPT/soundlib/mod_specifications.h =================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.h 2008-01-26 20:02:01 UTC (rev 198) +++ trunk/OpenMPT/soundlib/mod_specifications.h 2008-01-29 21:00:25 UTC (rev 199) @@ -176,7 +176,7 @@ //TODO: Set correct values. "it", //File extension 240, //Pattern max. - 256, //Order max. + 200, //Order max. 4, //Channel min 64, //Channel max 32, //Min tempo This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-01-26 20:02:36
|
Revision: 198 http://modplug.svn.sourceforge.net/modplug/?rev=198&view=rev Author: relabsoluness Date: 2008-01-26 12:02:01 -0800 (Sat, 26 Jan 2008) Log Message: ----------- 1.17.02.50 . Few improvements in the volume command handling for plugs Modified Paths: -------------- trunk/OpenMPT/mptrack/bin/mptrack.exe trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/bin/mptrack.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2008-01-19 16:37:43 UTC (rev 197) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2008-01-26 20:02:01 UTC (rev 198) @@ -276,8 +276,8 @@ { p->ShowWindow(XMorITorMPT); if(ITorMPT) - p->SetWindowText("0: True to use various IT compatible playback changes\n" - "1: True for old instrument random variation behavior\n" + p->SetWindowText("0: Various playback changes for IT compatibility\n" + "1: Old instrument random variation behavior\n" "2: Plugin volume command bug emulation"); else if(XM) p->SetWindowText("0: Unused\n1: Unused\n2: Plugin volume command bug emulation"); } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-01-19 16:37:43 UTC (rev 197) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-01-26 20:02:01 UTC (rev 198) @@ -916,8 +916,8 @@ RTEXT "--",IDC_TEXT1,204,62,27,8 GROUPBOX "Pitch/Tempo Lock",IDC_STATIC,364,57,89,25 GROUPBOX "Sample Map",IDC_STATIC,461,27,62,141 - CTEXT "Note Velocity style",IDC_STATIC,374,101,77,10, - SS_CENTERIMAGE,WS_EX_STATICEDGE + CTEXT "Note Velocity",IDC_STATIC,374,101,77,10,SS_CENTERIMAGE, + WS_EX_STATICEDGE CTEXT "Volume command effect",IDC_STATIC,374,133,77,10, SS_CENTERIMAGE,WS_EX_STATICEDGE GROUPBOX "Tuning (experimental)",IDC_STATIC,364,28,92,28 Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2008-01-19 16:37:43 UTC (rev 197) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2008-01-26 20:02:01 UTC (rev 198) @@ -300,7 +300,7 @@ memset(Headers[iIns], 0, sizeof(INSTRUMENTHEADER)); Headers[iIns]->pTuning = m_defaultInstrument.pTuning; Headers[iIns]->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - Headers[iIns]->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_MIDI; + Headers[iIns]->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; memcpy(Headers[iIns]->name, pih->name, 22); if ((nsamples = pih->samples) > 0) Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2008-01-19 16:37:43 UTC (rev 197) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2008-01-26 20:02:01 UTC (rev 198) @@ -2736,7 +2736,7 @@ m_defaultInstrument.nVolEnvReleaseNode=ENV_RELEASE_NODE_UNSET; m_defaultInstrument.wPitchToTempoLock = 0; m_defaultInstrument.pTuning = m_defaultInstrument.s_DefaultTuning; - m_defaultInstrument.nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_VOLUME; + m_defaultInstrument.nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; m_defaultInstrument.nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_DRYWET; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-01-19 16:37:49
|
Revision: 197 http://modplug.svn.sourceforge.net/modplug/?rev=197&view=rev Author: relabsoluness Date: 2008-01-19 08:37:43 -0800 (Sat, 19 Jan 2008) Log Message: ----------- Projectfile update Modified Paths: -------------- trunk/OpenMPT/mptrack/mptrack.vcproj Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2008-01-14 21:38:20 UTC (rev 196) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2008-01-19 16:37:43 UTC (rev 197) @@ -499,9 +499,6 @@ RelativePath="..\soundlib\Load_mod.cpp"> </File> <File - RelativePath="..\soundlib\load_mptm.cpp"> - </File> - <File RelativePath="..\Soundlib\load_mt2.cpp"> </File> <File @@ -541,6 +538,9 @@ RelativePath=".\MainFrm.cpp"> </File> <File + RelativePath=".\MIDIMappingDialog.cpp"> + </File> + <File RelativePath=".\misc_util.cpp"> </File> <File @@ -574,9 +574,6 @@ RelativePath=".\mpt_midi.cpp"> </File> <File - RelativePath="..\soundlib\MPT_module.cpp"> - </File> - <File RelativePath=".\mptrack.cpp"> </File> <File @@ -986,6 +983,9 @@ RelativePath=".\MainFrm.h"> </File> <File + RelativePath=".\MIDIMappingDialog.h"> + </File> + <File RelativePath=".\misc_util.h"> </File> <File @@ -1010,9 +1010,6 @@ RelativePath=".\Mpdlgs.h"> </File> <File - RelativePath="..\soundlib\MPT_module.h"> - </File> - <File RelativePath=".\mptrack.h"> </File> <File This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Phanoo T. B. <the...@gm...> - 2008-01-18 00:22:13
|
hello I succeeded to compile OpenMPT, I've modified the mptrack.vcproj file to add and remove some links into ( relabsoluness has forgotten to modify it...). When I try to upload the new mptrack.vcproj, totoiseSVN ask me for a username and a password. How I can upload the file ? thanks sorry for my english, I'm french |
From: <rel...@us...> - 2008-01-14 21:39:42
|
Revision: 196 http://modplug.svn.sourceforge.net/modplug/?rev=196&view=rev Author: relabsoluness Date: 2008-01-14 13:38:20 -0800 (Mon, 14 Jan 2008) Log Message: ----------- / MIDICC bug related compatibility improvement for loading old IT/MPTm files. Modified Paths: -------------- trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2008-01-12 16:49:50 UTC (rev 195) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2008-01-14 21:38:20 UTC (rev 196) @@ -272,7 +272,7 @@ long returnVal=0; penv->pTuning = m_defaultInstrument.pTuning; penv->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - penv->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_MIDI; + penv->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; if (trkvers < 0x0200) { const ITOLDINSTRUMENT *pis = (const ITOLDINSTRUMENT *)p; @@ -446,6 +446,8 @@ penv->nPanSwing = pis->rp; penv->nPan = (pis->dfp & 0x7F) << 2; SetDefaultInstrumentValues(penv); + penv->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; + penv->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; if (penv->nPan > 256) penv->nPan = 128; if (pis->dfp < 0x80) penv->dwFlags |= ENV_SETPANNING; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Rel...@us...> - 2008-01-12 16:49:54
|
Revision: 195 http://modplug.svn.sourceforge.net/modplug/?rev=195&view=rev Author: Relabsoluness Date: 2008-01-12 08:49:50 -0800 (Sat, 12 Jan 2008) Log Message: ----------- + MIDI controller mapping to plug params. + Ability to take MIDI volume into account when playing notes. + Ability to pass MIDI to plug. + Ability to start/continue/stop play with certain MIDI messages (untested) + Ability to choose how volume commands behave for plugs. . Fixed sending wrong MIDI message in ::MidiCC. + Keyshortcuts for preset navigation jumps in VST editor. . Default VST editor preset field name validation in the menubar. + Added ability to edit various flags in song properties. . Fix for pattern duplicate for small patterns (http://lpchip.com/modplug/viewtopic.php?t=1747) . Fixed song properties-menu entry in mainframe(was grayed and didn't show keyshortcut) . Fixed crash with certain toolbar related ini-settings (http://lpchip.com/modplug/viewtopic.php?t=2033) . Further fixes to prevent unnotified overwriting of file. / .bak-files won't now be shown with "All modules" filter when loading modules. . Show row playtime didn't on certain cases work on first pattern row (http://lpchip.com/modplug/viewtopic.php?t=2044) . Fix to faulty play with certain instruments without notes in IT compatible playmode (http://lpchip.com/modplug/viewtopic.php?t=2080) . Pattern number box didn't open pattern properties when using MPTm. (http://lpchip.com/modplug/viewtopic.php?t=2073) . Fixed wrong MIDI CC names in macro editor. ./ Setting volume to 0(v00) in pattern didn't necessarily set volume to 0 when using volume random variation for instrument. All other random variation behaviors are changed as well; now the 'swing' is applied directly to channel values instead of using swing addition, and by default the swing effect is reset on new note. (http://lpchip.com/modplug/viewtopic.php?t=2074) / MPTm made with this version will be recognized as IT in earlier versions. / Merged MPTm loading/saving function to that of IT. / Various validity checks for read data in ITP loading. / Removed unused files from the include directory. Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_ins.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpt_midi.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/OrderToPatternTable.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.h trunk/OpenMPT/mptrack/Stdafx.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/pattern.cpp trunk/OpenMPT/mptrack/pattern.h trunk/OpenMPT/mptrack/patternContainer.cpp trunk/OpenMPT/mptrack/patternContainer.h trunk/OpenMPT/mptrack/res/img_list.bmp trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/typedefs.h trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_far.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Snd_flt.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/midi.h trunk/OpenMPT/soundlib/mod_specifications.h Added Paths: ----------- trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp trunk/OpenMPT/mptrack/MIDIMappingDialog.h Removed Paths: ------------- trunk/OpenMPT/include/3DL2.H trunk/OpenMPT/include/3DL2HELP.H trunk/OpenMPT/include/AudioEffect.cpp trunk/OpenMPT/include/AudioEffect.hpp trunk/OpenMPT/include/MachineInterface.h trunk/OpenMPT/include/audioeffectx.cpp trunk/OpenMPT/include/audioeffectx.h trunk/OpenMPT/soundlib/MPT_module.cpp trunk/OpenMPT/soundlib/MPT_module.h trunk/OpenMPT/soundlib/load_mptm.cpp Deleted: trunk/OpenMPT/include/3DL2.H =================================================================== --- trunk/OpenMPT/include/3DL2.H 2007-11-17 20:42:39 UTC (rev 194) +++ trunk/OpenMPT/include/3DL2.H 2008-01-12 16:49:50 UTC (rev 195) @@ -1,227 +0,0 @@ -// 3DL2.H -// - -#ifndef _3DL2_H_INCLUDED -#define _3DL2_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#pragma pack(push, 4) - -// I3DL2 listener property set {DA0F0520-300A-11D3-8A2B-0060970DB011} -DEFINE_GUID(DSPROPSETID_I3DL2_ListenerProperties, - 0xDA0F0520, - 0x300A, - 0x11D3, - 0x8A, 0x2B, 0x00, 0x60, 0x97, 0x0D, 0xB0, 0x11); - -typedef enum -{ -// sets all I3DL2 listener properties - DSPROPERTY_I3DL2LISTENER_ALL, -// room effect level at low frequencies - DSPROPERTY_I3DL2LISTENER_ROOM, -// room effect high-frequency level re. low frequency level - DSPROPERTY_I3DL2LISTENER_ROOMHF, -// like DS3D flRolloffFactor but for room effect - DSPROPERTY_I3DL2LISTENER_ROOMROLLOFFFACTOR, -// reverberation decay time at low-frequencies - DSPROPERTY_I3DL2LISTENER_DECAYTIME, -// high-frequency to low-frequency decay time ratio - DSPROPERTY_I3DL2LISTENER_DECAYHFRATIO, -// early reflections level relative to room effect - DSPROPERTY_I3DL2LISTENER_REFLECTIONS, -// delay time of first reflection - DSPROPERTY_I3DL2LISTENER_REFLECTIONSDELAY, -// late reverberation level relative to room effect - DSPROPERTY_I3DL2LISTENER_REVERB, -// late reverberation delay time relative to first reflection - DSPROPERTY_I3DL2LISTENER_REVERBDELAY, -// reverberation diffusion (echo density) - DSPROPERTY_I3DL2LISTENER_DIFFUSION, -// reverberation density (modal density) - DSPROPERTY_I3DL2LISTENER_DENSITY, -// reference high frequency - DSPROPERTY_I3DL2LISTENER_HFREFERENCE -} DSPROPERTY_I3DL2_LISTENERPROPERTY; - -// use this structure for DSPROPERTY_I3DL2LISTENER_ALL -// - all levels are hundredths of decibels (mB) -// - all times are in seconds (s) -typedef struct _I3DL2_LISTENERPROPERTIES -{ - LONG lRoom; // [-10000, 0] default: -10000 mB - LONG lRoomHF; // [-10000, 0] default: 0 mB - FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0 - FLOAT flDecayTime; // [0.1, 20.0] default: 1.0 s - FLOAT flDecayHFRatio; // [0.1, 2.0] default: 0.5 - LONG lReflections; // [-10000, 1000] default: -10000 mB - FLOAT flReflectionsDelay; // [0.0, 0.3] default: 0.02 s - LONG lReverb; // [-10000, 2000] default: -10000 mB - FLOAT flReverbDelay; // [0.0, 0.1] default: 0.04 s - FLOAT flDiffusion; // [0.0, 100.0] default: 100.0 % - FLOAT flDensity; // [0.0, 100.0] default: 100.0 % - FLOAT flHFReference; // [20.0, 20000.0] default: 5000.0 Hz -} I3DL2_LISTENERPROPERTIES, *LPI3DL2_LISTENERPROPERTIES; - -// property ranges and defaults: - -#define I3DL2LISTENER_MINROOM (-10000) -#define I3DL2LISTENER_MAXROOM 0 -#define I3DL2LISTENER_DEFAULTROOM (-10000) - -#define I3DL2LISTENER_MINROOMHF (-10000) -#define I3DL2LISTENER_MAXROOMHF 0 -#define I3DL2LISTENER_DEFAULTROOMHF 0 - -#define I3DL2LISTENER_MINROOMROLLOFFFACTOR 0.0f -#define I3DL2LISTENER_MAXROOMROLLOFFFACTOR 10.0f -#define I3DL2LISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define I3DL2LISTENER_MINDECAYTIME 0.1f -#define I3DL2LISTENER_MAXDECAYTIME 20.0f -#define I3DL2LISTENER_DEFAULTDECAYTIME 1.0f - -#define I3DL2LISTENER_MINDECAYHFRATIO 0.1f -#define I3DL2LISTENER_MAXDECAYHFRATIO 2.0f -#define I3DL2LISTENER_DEFAULTDECAYHFRATIO 0.5f - -#define I3DL2LISTENER_MINREFLECTIONS (-10000) -#define I3DL2LISTENER_MAXREFLECTIONS 1000 -#define I3DL2LISTENER_DEFAULTREFLECTIONS (-10000) - -#define I3DL2LISTENER_MINREFLECTIONSDELAY 0.0f -#define I3DL2LISTENER_MAXREFLECTIONSDELAY 0.3f -#define I3DL2LISTENER_DEFAULTREFLECTIONSDELAY 0.02f - -#define I3DL2LISTENER_MINREVERB (-10000) -#define I3DL2LISTENER_MAXREVERB 2000 -#define I3DL2LISTENER_DEFAULTREVERB (-10000) - -#define I3DL2LISTENER_MINREVERBDELAY 0.0f -#define I3DL2LISTENER_MAXREVERBDELAY 0.1f -#define I3DL2LISTENER_DEFAULTREVERBDELAY 0.04f - -#define I3DL2LISTENER_MINDIFFUSION 0.0f -#define I3DL2LISTENER_MAXDIFFUSION 100.0f -#define I3DL2LISTENER_DEFAULTDIFFUSION 100.0f - -#define I3DL2LISTENER_MINDENSITY 0.0f -#define I3DL2LISTENER_MAXDENSITY 100.0f -#define I3DL2LISTENER_DEFAULTDENSITY 100.0f - -#define I3DL2LISTENER_MINHFREFERENCE 20.0f -#define I3DL2LISTENER_MAXHFREFERENCE 20000.0f -#define I3DL2LISTENER_DEFAULTHFREFERENCE 5000.0f - -// I3DL2 buffer property set {DA0F0521-300A-11D3-8A2B-0060970DB011} -DEFINE_GUID(DSPROPSETID_I3DL2_BufferProperties, - 0xDA0F0521, - 0x300A, - 0x11D3, - 0x8A, 0x2B, 0x00, 0x60, 0x97, 0x0D, 0xB0, 0x11); - -typedef enum -{ -// sets all I3DL2 buffer properties - DSPROPERTY_I3DL2BUFFER_ALL, -// sets both obstruction properties - DSPROPERTY_I3DL2BUFFER_OBSTRUCTIONALL, -// sets both occlusion properties - DSPROPERTY_I3DL2BUFFER_OCCLUSIONALL, -// additional direct path level correction - DSPROPERTY_I3DL2BUFFER_DIRECT, -// additional direct path high-frequency re. low-frequency level correction - DSPROPERTY_I3DL2BUFFER_DIRECTHF, -// additional room effect level correction - DSPROPERTY_I3DL2BUFFER_ROOM, -// additional room effect high-frequency re. low-frequency level correction - DSPROPERTY_I3DL2BUFFER_ROOMHF, -// like DS3D flRolloffFactor but for room effect - DSPROPERTY_I3DL2BUFFER_ROOMROLLOFFFACTOR, -// main obstruction control (attenuation at high frequencies) - DSPROPERTY_I3DL2BUFFER_OBSTRUCTION, -// obstruction low-frequency re. high-frequency ratio - DSPROPERTY_I3DL2BUFFER_OBSTRUCTIONLFRATIO, -// main occlusion control (attenuation at high frequencies) - DSPROPERTY_I3DL2BUFFER_OCCLUSION, -// occlusion low-frequency re. high-frequency ratio - DSPROPERTY_I3DL2BUFFER_OCCLUSIONLFRATIO -} DSPROPERTY_I3DL2_BUFFERPROPERTY; - -// use this structure for DSPROPERTY_I3DL2BUFFER_OBSTRUCTIONALL -// - all levels are hundredths of decibels (mB) -typedef struct _I3DL2_OBSTRUCTIONPROPERTIES -{ - LONG lHFLevel; // [-10000, 0] default: 0 mB - FLOAT flLFRatio; // [0.0, 1.0] default: 0.0 -} I3DL2_OBSTRUCTIONPROPERTIES, *LPI3DL2_OBSTRUCTIONPROPERTIES; - -// use this structure for DSPROPERTY_I3DL2BUFFER_OCCLUSIONALL -// - all levels are hundredths of decibels (mB) -typedef struct _I3DL2_OCCLUSIONPROPERTIES -{ - LONG lHFLevel; // [-10000, 0] default: 0 mB - FLOAT flLFRatio; // [0.0, 1.0] default: 0.25 -} I3DL2_OCCLUSIONPROPERTIES, *LPI3DL2_OCCLUSIONPROPERTIES; - -// use this structure for DSPROPERTY_I3DL2BUFFER_ALL -// - all levels are hundredths of decibels (mB) -typedef struct _I3DL2_BUFFERPROPERTIES -{ - LONG lDirect; // [-10000, 1000] default: 0 mB - LONG lDirectHF; // [-10000, 0] default: 0 mB - LONG lRoom; // [-10000, 1000] default: 0 mB - LONG lRoomHF; // [-10000, 0] default: 0 mB - FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0 - I3DL2_OBSTRUCTIONPROPERTIES Obstruction; - I3DL2_OCCLUSIONPROPERTIES Occlusion; -} I3DL2_BUFFERPROPERTIES, *LPI3DL2_BUFFERPROPERTIES; - -// property ranges and defaults: - -#define I3DL2BUFFER_MINDIRECT (-10000) -#define I3DL2BUFFER_MAXDIRECT 1000 -#define I3DL2BUFFER_DEFAULTDIRECT 0 - -#define I3DL2BUFFER_MINDIRECTHF (-10000) -#define I3DL2BUFFER_MAXDIRECTHF 0 -#define I3DL2BUFFER_DEFAULTDIRECTHF 0 - -#define I3DL2BUFFER_MINROOM (-10000) -#define I3DL2BUFFER_MAXROOM 1000 -#define I3DL2BUFFER_DEFAULTROOM 0 - -#define I3DL2BUFFER_MINROOMHF (-10000) -#define I3DL2BUFFER_MAXROOMHF 0 -#define I3DL2BUFFER_DEFAULTROOMHF 0 - -#define I3DL2BUFFER_MINROOMROLLOFFFACTOR 0.0f -#define I3DL2BUFFER_MAXROOMROLLOFFFACTOR 10.f -#define I3DL2BUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define I3DL2BUFFER_MINOBSTRUCTION (-10000) -#define I3DL2BUFFER_MAXOBSTRUCTION 0 -#define I3DL2BUFFER_DEFAULTOBSTRUCTION 0 - -#define I3DL2BUFFER_MINOBSTRUCTIONLFRATIO 0.0f -#define I3DL2BUFFER_MAXOBSTRUCTIONLFRATIO 1.0f -#define I3DL2BUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f - -#define I3DL2BUFFER_MINOCCLUSION (-10000) -#define I3DL2BUFFER_MAXOCCLUSION 0 -#define I3DL2BUFFER_DEFAULTOCCLUSION 0 - -#define I3DL2BUFFER_MINOCCLUSIONLFRATIO 0.0f -#define I3DL2BUFFER_MAXOCCLUSIONLFRATIO 1.0f -#define I3DL2BUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f - -#pragma pack(pop) - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif Deleted: trunk/OpenMPT/include/3DL2HELP.H =================================================================== --- trunk/OpenMPT/include/3DL2HELP.H 2007-11-17 20:42:39 UTC (rev 194) +++ trunk/OpenMPT/include/3DL2HELP.H 2008-01-12 16:49:50 UTC (rev 195) @@ -1,102 +0,0 @@ -// 3DL2HELP.H -// - -#ifndef _3DL2HELP_H_INCLUDED -#define _3DL2HELP_H_INCLUDED - -// Example listener environment presets -// for use with DSPROPERTY_I3DL2LISTENER_ALL. -// Each array contains 12 values whose order and types are defined -// by structure I3DL2_LISTENERPROPERTIES (defined in 3DL2.H). - -#define I3DL2_ENVIRONMENT_PRESET_DEFAULT \ --10000, 0,0.0f, 1.00f,0.50f,-10000,0.020f,-10000,0.040f,100.0f,100.0f,5000.0f - -#define I3DL2_ENVIRONMENT_PRESET_GENERIC \ - -1000, -100,0.0f, 1.49f,0.83f, -2602,0.007f, 200,0.011f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL \ - -1000,-6000,0.0f, 0.17f,0.10f, -1204,0.001f, 207,0.002f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ROOM \ - -1000, -454,0.0f, 0.40f,0.83f, -1646,0.002f, 53,0.003f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_BATHROOM \ - -1000,-1200,0.0f, 1.49f,0.54f, -370,0.007f, 1030,0.011f,100.0f, 60.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM \ - -1000,-6000,0.0f, 0.50f,0.10f, -1376,0.003f, -1104,0.004f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_STONEROOM \ - -1000, -300,0.0f, 2.31f,0.64f, -711,0.012f, 83,0.017f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM \ - -1000, -476,0.0f, 4.32f,0.59f, -789,0.020f, -289,0.030f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL \ - -1000, -500,0.0f, 3.92f,0.70f, -1230,0.020f, -2,0.029f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CAVE \ - -1000, 0,0.0f, 2.91f,1.30f, -602,0.015f, -302,0.022f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ARENA \ - -1000, -698,0.0f, 7.24f,0.33f, -1166,0.020f, 16,0.030f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_HANGAR \ - -1000,-1000,0.0f,10.05f,0.23f, -602,0.020f, 198,0.030f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY \ - -1000,-4000,0.0f, 0.30f,0.10f, -1831,0.002f, -1630,0.030f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_HALLWAY \ - -1000, -300,0.0f, 1.49f,0.59f, -1219,0.007f, 441,0.011f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR \ - -1000, -237,0.0f, 2.70f,0.79f, -1214,0.013f, 395,0.020f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ALLEY \ - -1000, -270,0.0f, 1.49f,0.86f, -1204,0.007f, -4,0.011f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_FOREST \ - -1000,-3300,0.0f, 1.49f,0.54f, -2560,0.162f, -613,0.088f, 79.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CITY \ - -1000, -800,0.0f, 1.49f,0.67f, -2273,0.007f, -2217,0.011f, 50.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS \ - -1000,-2500,0.0f, 1.49f,0.21f, -2780,0.300f, -2014,0.100f, 27.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_QUARRY \ - -1000,-1000,0.0f, 1.49f,0.83f,-10000,0.061f, 500,0.025f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PLAIN \ - -1000,-2000,0.0f, 1.49f,0.50f, -2466,0.179f, -2514,0.100f, 21.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT \ - -1000, 0,0.0f, 1.65f,1.50f, -1363,0.008f, -1153,0.012f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE \ - -1000,-1000,0.0f, 2.81f,0.14f, 429,0.014f, 648,0.021f, 80.0f, 60.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_UNDERWATER \ - -1000,-4000,0.0f, 1.49f,0.10f, -449,0.007f, 1700,0.011f,100.0f,100.0f,5000.0f - -// Examples simulating General MIDI 2'musical' reverb presets -// -// Name (Decay time) Description -// -// Small Room (1.1s) A small size room with a length of 5m or so. -// Medium Room (1.3s) A medium size room with a length of 10m or so. -// Large Room (1.5s) A large size room suitable for live performances. -// Medium Hall (1.8s) A medium size concert hall. -// Large Hall (1.8s) A large size concert hall suitable for a full orchestra. -// Plate (1.3s) A plate reverb simulation. - -#define I3DL2_ENVIRONMENT_PRESET_SMALLROOM \ - -1000, -600,0.0f, 1.10f,0.83f, -400,0.005f, 500,0.010f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM \ - -1000, -600,0.0f, 1.30f,0.83f, -1000,0.010f, -200,0.020f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LARGEROOM \ - -1000, -600,0.0f, 1.50f,0.83f, -1600,0.020f, -1000,0.040f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL \ - -1000, -600,0.0f, 1.80f,0.70f, -1300,0.015f, -800,0.030f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LARGEHALL \ - -1000, -600,0.0f, 1.80f,0.70f, -2000,0.030f, -1400,0.060f,100.0f,100.0f,5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PLATE \ - -1000, -200,0.0f, 1.30f,0.90f, 0,0.002f, 0,0.010f,100.0f, 75.0f,5000.0f - -// Example material transmission presets -// for use with DSPROPERTY_I3DL2BUFFER_OCCLUSIONALL -// or DSPROPERTY_I3DL2BUFFER_OBSTRUCTIONALL. -// Each array contains 2 values whose order and types are defined -// by structure I3DL2_OCCLUSIONPROPERTIES -// or I3DL2_OBSTRUCTIONPROPERTIES (defined in 3DL2.H). - -#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f -#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f -#define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f -#define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f -#define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f -#define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f -#define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f -#define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f - -#endif Deleted: trunk/OpenMPT/include/AudioEffect.cpp =================================================================== --- trunk/OpenMPT/include/AudioEffect.cpp 2007-11-17 20:42:39 UTC (rev 194) +++ trunk/OpenMPT/include/AudioEffect.cpp 2008-01-12 16:49:50 UTC (rev 195) @@ -1,393 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// VST Plug-Ins SDK -// Version 1.0 -// \xA9 2003 Steinberg Media Technologies, All Rights Reserved -// -// you should not have to edit this file -// use override methods instead -//------------------------------------------------------------------------------------------------------- - -#include <stddef.h> -#include <string.h> -#include <stdio.h> -#include <math.h> - -#ifndef __AudioEffect__ -#include "AudioEffect.hpp" -#endif - -#ifndef __AEffEditor__ -#include "AEffEditor.hpp" -#endif - -//------------------------------------------------------------------------------------------------------- -long dispatchEffectClass (AEffect *e, long opCode, long index, long value, void *ptr, float opt) -{ - AudioEffect *ae = (AudioEffect*)(e->object); - - if (opCode == effClose) - { - ae->dispatcher (opCode, index, value, ptr, opt); - delete ae; - return 1; - } - - return ae->dispatcher (opCode, index, value, ptr, opt); -} - -//------------------------------------------------------------------------------------------------------- -float getParameterClass (AEffect *e, long index) -{ - AudioEffect *ae = (AudioEffect*)(e->object); - return ae->getParameter (index); -} - -//------------------------------------------------------------------------------------------------------- -void setParameterClass (AEffect *e, long index, float value) -{ - AudioEffect *ae = (AudioEffect*)(e->object); - ae->setParameter (index, value); -} - -//------------------------------------------------------------------------------------------------------- -void processClass (AEffect *e, float **inputs, float **outputs, long sampleFrames) -{ - AudioEffect *ae = (AudioEffect*)(e->object); - ae->process (inputs, outputs, sampleFrames); -} - -//------------------------------------------------------------------------------------------------------- -void processClassReplacing (AEffect *e, float **inputs, float **outputs, long sampleFrames) -{ - AudioEffect *ae = (AudioEffect*)(e->object); - ae->processReplacing (inputs, outputs, sampleFrames); -} - - -//------------------------------------------------------------------------------------------------------- -// AudioEffect Implementation -//------------------------------------------------------------------------------------------------------- - -//------------------------------------------------------------------------------------------------------- -AudioEffect::AudioEffect (audioMasterCallback audioMaster, long numPrograms, long numParams) -{ - this->audioMaster = audioMaster; - editor = 0; - this->numPrograms = numPrograms; - this->numParams = numParams; - curProgram = 0; - - memset(&cEffect, 0, sizeof (cEffect)); - cEffect.magic = kEffectMagic; - cEffect.dispatcher = dispatchEffectClass; - cEffect.process = processClass; - cEffect.setParameter = setParameterClass; - cEffect.getParameter = getParameterClass; - cEffect.numPrograms = numPrograms; - cEffect.numParams = numParams; - cEffect.numInputs = 1; - cEffect.numOutputs = 2; - cEffect.flags = 0; - cEffect.resvd1 = 0; - cEffect.resvd2 = 0; - cEffect.initialDelay = 0; - cEffect.realQualities = 0; - cEffect.offQualities = 0; - cEffect.ioRatio = 1.f; - cEffect.object = this; - cEffect.user = 0; - cEffect.uniqueID = CCONST ('N', 'o', 'E', 'f'); // you must set this! - cEffect.version = 1; - cEffect.processReplacing = processClassReplacing; - - sampleRate = 44100.f; - blockSize = 1024L; -} - -//------------------------------------------------------------------------------------------------------- -AudioEffect::~AudioEffect () -{ - if (editor) - delete editor; -} - -//------------------------------------------------------------------------------------------------------- -long AudioEffect::dispatcher (long opCode, long index, long value, void *ptr, float opt) -{ - long v = 0; - - switch (opCode) - { - case effOpen: open (); break; - case effClose: close (); break; - case effSetProgram: if (value < numPrograms) setProgram (value); break; - case effGetProgram: v = getProgram (); break; - case effSetProgramName: setProgramName ((char *)ptr); break; - case effGetProgramName: getProgramName ((char *)ptr); break; - case effGetParamLabel: getParameterLabel (index, (char *)ptr); break; - case effGetParamDisplay: getParameterDisplay (index, (char *)ptr); break; - case effGetParamName: getParameterName (index, (char *)ptr); break; - - case effSetSampleRate: setSampleRate (opt); break; - case effSetBlockSize: setBlockSize (value); break; - case effMainsChanged: if (!value) suspend (); else resume (); break; - case effGetVu: v = (long)(getVu () * 32767.); break; - - - // Editor - case effEditGetRect: if (editor) v = editor->getRect ((ERect **)ptr); break; - case effEditOpen: if (editor) v = editor->open (ptr); break; - case effEditClose: if (editor) editor->close (); break; - case effEditIdle: if (editor) editor->idle (); break; - - #if MAC - case effEditDraw: if (editor) editor->draw ((ERect *)ptr); break; - case effEditMouse: if (editor) v = editor->mouse (index, value); break; - case effEditKey: if (editor) v = editor->key (value); break; - case effEditTop: if (editor) editor->top (); break; - case effEditSleep: if (editor) editor->sleep (); break; - #endif - - case effIdentify: v = CCONST ('N', 'v', 'E', 'f'); break; - case effGetChunk: v = getChunk ((void**)ptr, index ? true : false); break; - case effSetChunk: v = setChunk (ptr, value, index ? true : false); break; - } - return v; -} - -//------------------------------------------------------------------------------------------------------- -long AudioEffect::getMasterVersion () -{ - long version = 1; - if (audioMaster) - { - version = audioMaster (&cEffect, audioMasterVersion, 0, 0, 0, 0); - if (!version) // old - version = 1; - } - return version; -} - -//------------------------------------------------------------------------------------------------------- -long AudioEffect::getCurrentUniqueId () -{ - long id = 0; - if (audioMaster) - id = audioMaster (&cEffect, audioMasterCurrentId, 0, 0, 0, 0); - return id; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::masterIdle () -{ - if (audioMaster) - audioMaster (&cEffect, audioMasterIdle, 0, 0, 0, 0); -} - -//------------------------------------------------------------------------------------------------------- -bool AudioEffect::isInputConnected (long input) -{ - long ret = 0; - if (audioMaster) - ret = audioMaster (&cEffect, audioMasterPinConnected, input, 0, 0, 0); - return ret ? false : true; // return value is 0 for true -} - -//------------------------------------------------------------------------------------------------------- -bool AudioEffect::isOutputConnected (long output) -{ - long ret = 0; - if (audioMaster) - ret = audioMaster (&cEffect, audioMasterPinConnected, output, 1, 0, 0); - return ret ? false : true; // return value is 0 for true -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::setParameterAutomated (long index, float value) -{ - setParameter (index, value); - if (audioMaster) - audioMaster (&cEffect, audioMasterAutomate, index, 0, 0, value); // value is in opt -} - -//------------------------------------------------------------------------------------------------------- -// Flags -//------------------------------------------------------------------------------------------------------- -void AudioEffect::hasVu (bool state) -{ - if (state) - cEffect.flags |= effFlagsHasVu; - else - cEffect.flags &= ~effFlagsHasVu; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::hasClip (bool state) -{ - if (state) - cEffect.flags |= effFlagsHasClip; - else - cEffect.flags &= ~effFlagsHasClip; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::canMono (bool state) -{ - if (state) - cEffect.flags |= effFlagsCanMono; - else - cEffect.flags &= ~effFlagsCanMono; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::canProcessReplacing (bool state) -{ - if (state) - cEffect.flags |= effFlagsCanReplacing; - else - cEffect.flags &= ~effFlagsCanReplacing; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::programsAreChunks (bool state) -{ - if (state) - cEffect.flags |= effFlagsProgramChunks; - else - cEffect.flags &= ~effFlagsProgramChunks; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::setRealtimeQualities (long qualities) -{ - cEffect.realQualities = qualities; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::setOfflineQualities (long qualities) -{ - cEffect.offQualities = qualities; -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::setInitialDelay (long delay) -{ - cEffect.initialDelay = delay; -} - -//------------------------------------------------------------------------------------------------------- -// Strings Conversion -//------------------------------------------------------------------------------------------------------- -void AudioEffect::dB2string (float value, char *text) -{ - if (value <= 0) - #if MAC - strcpy (text, "-\xB0"); - #else - strcpy (text, "-oo"); - #endif - else - float2string ((float)(20. * log10 (value)), text); -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::Hz2string (float samples, char *text) -{ - float sampleRate = getSampleRate (); - if (!samples) - float2string (0, text); - else - float2string (sampleRate / samples, text); -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::ms2string (float samples, char *text) -{ - float2string ((float)(samples * 1000. / getSampleRate ()), text); -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::float2string (float value, char *text) -{ - long c = 0, neg = 0; - char string[32]; - char *s; - double v, integ, i10, mantissa, m10, ten = 10.; - - v = (double)value; - if (v < 0) - { - neg = 1; - value = -value; - v = -v; - c++; - if (v > 9999999.) - { - strcpy (string, "Huge!"); - return; - } - } - else if( v > 99999999.) - { - strcpy (string, "Huge!"); - return; - } - - s = string + 31; - *s-- = 0; - *s-- = '.'; - c++; - - integ = floor (v); - i10 = fmod (integ, ten); - *s-- = (char)((long)i10 + '0'); - integ /= ten; - c++; - while (integ >= 1. && c < 8) - { - i10 = fmod (integ, ten); - *s-- = (char)((long)i10 + '0'); - integ /= ten; - c++; - } - if (neg) - *s-- = '-'; - strcpy (text, s + 1); - if (c >= 8) - return; - - s = string + 31; - *s-- = 0; - mantissa = fmod (v, 1.); - mantissa *= pow (ten, (double)(8 - c)); - while (c < 8) - { - if (mantissa <= 0) - *s-- = '0'; - else - { - m10 = fmod (mantissa, ten); - *s-- = (char)((long)m10 + '0'); - mantissa /= 10.; - } - c++; - } - strcat (text, s + 1); -} - -//------------------------------------------------------------------------------------------------------- -void AudioEffect::long2string (long value, char *text) -{ - char string[32]; - - if (value >= 100000000) - { - strcpy (text, "Huge!"); - return; - } - sprintf (string, "%7d", (int)value); - string[8] = 0; - strcpy (text, (char *)string); -} -//------------------------------------------------------------------------------------------------------- -//------------------------------------------------------------------------------------------------------- Deleted: trunk/OpenMPT/include/AudioEffect.hpp =================================================================== --- trunk/OpenMPT/include/AudioEffect.hpp 2007-11-17 20:42:39 UTC (rev 194) +++ trunk/OpenMPT/include/AudioEffect.hpp 2008-01-12 16:49:50 UTC (rev 195) @@ -1,131 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// VST Plug-Ins SDK -// Version 1.0 -// \xA9 2003, Steinberg Media Technologies, All Rights Reserved -//------------------------------------------------------------------------------------------------------- - -#ifndef __AudioEffect__ -#define __AudioEffect__ - -#ifndef __AEffect__ -#include "AEffect.h" // "c" interface -#endif - -class AEffEditor; -class AudioEffect; - -//------------------------------------------------------------------------------------------------------- -// Needs to be defined by the audio effect and is -// called to create the audio effect object instance. -AudioEffect* createEffectInstance (audioMasterCallback audioMaster); - -long dispatchEffectClass (AEffect *e, long opCode, long index, long value, void *ptr, float opt); -float getParameterClass (long index); -void setParameterClass (long index, float value); -void processClass (AEffect *e, float **inputs, float **outputs, long sampleFrames); -void processClassReplacing (AEffect *e, float **inputs, float **outputs, long sampleFrames); - -//------------------------------------------------------------------------------------------------------- -class AudioEffect -{ -friend class AEffEditor; -friend long dispatchEffectClass (AEffect *e, long opCode, long index, long value, void *ptr, float opt); -friend float getParameterClass (AEffect *e, long index); -friend void setParameterClass (AEffect *e, long index, float value); -friend void processClass (AEffect *e, float **inputs, float **outputs, long sampleFrames); -friend void processClassReplacing (AEffect *e, float **inputs, float **outputs, long sampleFrames); - -public: - AudioEffect (audioMasterCallback audioMaster, long numPrograms, long numParams); - virtual ~AudioEffect (); - - virtual void setParameter (long index, float value) { index = index; value = value; } - virtual float getParameter (long index) { index = index; return 0; } - virtual void setParameterAutomated (long index, float value); - - AEffect *getAeffect () { return &cEffect; } // Returns the AEffect Structure - - void setEditor (AEffEditor *editor) - { this->editor = editor; - if (editor) cEffect.flags |= effFlagsHasEditor; - else cEffect.flags &= ~effFlagsHasEditor; } // Should be called if you want to define your own editor - - //---Called from audio master (Host -> Plug)--------------- - virtual void process (float **inputs, float **outputs, long sampleFrames) = 0; - virtual void processReplacing (float **inputs, float **outputs, long sampleFrames) - { inputs = inputs; outputs = outputs; sampleFrames = sampleFrames; } - - virtual long dispatcher (long opCode, long index, long value, void *ptr, float opt); // Opcodes dispatcher - - virtual void open () {} // Called when Plugin is initialized - virtual void close () {} // Called when Plugin will be released - - //---Program---------------------------- - virtual long getProgram () { return curProgram; } - virtual void setProgram (long program) { curProgram = program; }// Don't forget to set curProgram - virtual void setProgramName (char *name) { *name = 0; } // All following refer to curProgram - virtual void getProgramName (char *name) { *name = 0; } - - virtual void getParameterLabel (long index, char *label) { index = index; *label = 0; } // example: "dB" - virtual void getParameterDisplay (long index, char *text) { index = index; *text = 0; } // example: "6.01" - virtual void getParameterName (long index, char *text) { index = index; *text = 0; } // example: "Volume" - - virtual float getVu () { return 0; } - - virtual long getChunk (void** data, bool isPreset = false) { return 0; } // Returns the Size in bytes of the chunk (Plugin allocates the data array) - virtual long setChunk (void* data, long byteSize, bool isPreset = false) { return 0; } - - virtual void setSampleRate (float sampleRate) { this->sampleRate = sampleRate; } - virtual void setBlockSize (long blockSize) { this->blockSize = blockSize; } - - virtual void suspend () {} // Called when Plugin is switched to Off - virtual void resume () {} // Called when Plugin is switched to On - - //---Setup--------------------------- - virtual void setUniqueID (long iD) { cEffect.uniqueID = iD; } // must call this! - virtual void setNumInputs (long inputs) { cEffect.numInputs = inputs; } - virtual void setNumOutputs (long outputs) { cEffect.numOutputs = outputs; } - - virtual void hasVu (bool state = true); - virtual void hasClip (bool state = true); - virtual void canMono (bool state = true); - virtual void canProcessReplacing (bool state = true); // Tells that the processReplacing () could be used - virtual void programsAreChunks (bool state = true); - virtual void setRealtimeQualities (long qualities); - virtual void setOfflineQualities (long qualities); - virtual void setInitialDelay (long delay); // Uses to report the Plugin's latency (Group Delay) - - //---Inquiry------------------------- - virtual float getSampleRate () { return sampleRate; } - virtual long getBlockSize () { return blockSize; } - - //---Host communication-------------- - virtual long getMasterVersion (); - virtual long getCurrentUniqueId (); - virtual void masterIdle (); - virtual bool isInputConnected (long input); - virtual bool isOutputConnected (long output); - - //---Tools--------------------------- - virtual void dB2string (float value, char *text); - virtual void Hz2string (float samples, char *text); - virtual void ms2string (float samples, char *text); - virtual void float2string (float value, char *string); - virtual void long2string (long value, char *text); - -protected: - //---Members------------------------- - float sampleRate; - AEffEditor *editor; - audioMasterCallback audioMaster; - long numPrograms; - long numParams; - long curProgram; - long blockSize; - AEffect cEffect; -}; - -#endif // __AudioEffect__ -//------------------------------------------------------------------------------------------------------- -//------------------------------------------------------------------------------------------------------- - Deleted: trunk/OpenMPT/include/MachineInterface.h =================================================================== --- trunk/OpenMPT/include/MachineInterface.h 2007-11-17 20:42:39 UTC (rev 194) +++ trunk/OpenMPT/include/MachineInterface.h 2008-01-12 16:49:50 UTC (rev 195) @@ -1,514 +0,0 @@ -// Copyright (C) 1997-2000 Oskari Tammelin (ot...@ik...) -// This header file may be used to write _freeware_ DLL "machines" for Buzz -// Using it for anything else is not allowed without a permission from the author - -#ifndef __MACHINE_INTERFACE_H -#define __MACHINE_INTERFACE_H - -#define MI_VERSION 15 - -typedef unsigned char byte; -typedef unsigned short word; -typedef unsigned long dword; - -double const PI = 3.14159265358979323846; - -#define MAX_BUFFER_LENGTH 256 // in number of samples - -// machine types -#define MT_MASTER 0 -#define MT_GENERATOR 1 -#define MT_EFFECT 2 - -// special parameter values -#define NOTE_NO 0 -#define NOTE_OFF 255 -#define NOTE_MIN 1 // C-0 -#define NOTE_MAX ((16 * 9) + 12) // B-9 -#define SWITCH_OFF 0 -#define SWITCH_ON 1 -#define SWITCH_NO 255 -#define WAVE_MIN 1 -#define WAVE_MAX 200 -#define WAVE_NO 0 - -// CMachineParameter flags -#define MPF_WAVE 1 -#define MPF_STATE 2 -#define MPF_TICK_ON_EDIT 4 - -// CMachineInfo flags -#define MIF_MONO_TO_STEREO (1<<0) -#define MIF_PLAYS_WAVES (1<<1) -#define MIF_USES_LIB_INTERFACE (1<<2) -#define MIF_USES_INSTRUMENTS (1<<3) -#define MIF_DOES_INPUT_MIXING (1<<4) -#define MIF_NO_OUTPUT (1<<5) // used for effect machines that don't actually use any outputs (WaveOutput, AuxSend etc.) -#define MIF_CONTROL_MACHINE (1<<6) // used to control other (non MIF_CONTROL_MACHINE) machines -#define MIF_INTERNAL_AUX (1<<7) // uses internal aux bus (jeskola mixer and jeskola mixer aux) - -// work modes -#define WM_NOIO 0 -#define WM_READ 1 -#define WM_WRITE 2 -#define WM_READWRITE 3 - -// state flags -#define SF_PLAYING 1 -#define SF_RECORDING 2 - - -enum BEventType -{ - DoubleClickMachine, // return true to ignore default handler (open parameter dialog), no parameters - gDeleteMachine // data = CMachine *, param = ThisMac - -}; - -class CMachineInterface; -typedef bool (CMachineInterface::*EVENT_HANDLER_PTR)(void *); - - -enum CMPType { pt_note, pt_switch, pt_byte, pt_word }; - -class CMachineParameter -{ -public: - - CMPType Type; // pt_byte - char const *Name; // Short name: "Cutoff" - char const *Description;// Longer description: "Cutoff Frequency (0-7f)" - int MinValue; // 0 - int MaxValue; // 127 - int NoValue; // 255 - int Flags; - int DefValue; // default value for params that have MPF_STATE flag set -}; - -class CMachineAttribute -{ -public: - char const *Name; - int MinValue; - int MaxValue; - int DefValue; -}; - -class CMasterInfo -{ -public: - int BeatsPerMin; // [16..500] - int TicksPerBeat; // [1..32] - int SamplesPerSec; // usually 44100, but machines should support any rate from 11050 to 96000 - int SamplesPerTick; // (int)((60 * SPS) / (BPM * TPB)) - int PosInTick; // [0..SamplesPerTick-1] - float TicksPerSec; // (float)SPS / (float)SPT - -}; - -// CWaveInfo flags -#define WF_LOOP 1 -#define WF_STEREO 8 -#define WF_BIDIR_LOOP 16 - -class CWaveInfo -{ -public: - int Flags; - float Volume; - -}; - -class CWaveLevel -{ -public: - int numSamples; - short *pSamples; - int RootNote; - int SamplesPerSec; - int LoopStart; - int LoopEnd; -}; - -// oscillator waveforms (used with GetOscillatorTable function) -#define OWF_SINE 0 -#define OWF_SAWTOOTH 1 -#define OWF_PULSE 2 // square -#define OWF_TRIANGLE 3 -#define OWF_NOISE 4 -#define OWF_303_SAWTOOTH 5 - -// each oscillator table contains one full cycle of a bandlimited waveform at 11 levels -// level 0 = 2048 samples -// level 1 = 1024 samples -// level 2 = 512 samples -// ... -// level 9 = 8 samples -// level 10 = 4 samples -// level 11 = 2 samples -// -// the waves are normalized to 16bit signed integers -// -// GetOscillatorTable retusns pointer to a table -// GetOscTblOffset returns offset in the table for a specified level - -inline int GetOscTblOffset(int const level) -{ - ASSERT(level >= 0 && level <= 10); - return (2048+1024+512+256+128+64+32+16+8+4) & ~((2048+1024+512+256+128+64+32+16+8+4) >> level); -} - -class CPattern; -class CSequence; -class CMachineInterfaceEx; -class CMachine; - -class CMachineDataOutput; -class CMachineInfo; - -class CMICallbacks -{ -public: - virtual CWaveInfo const *GetWave(int const i); - virtual CWaveLevel const *GetWaveLevel(int const i, int const level); - virtual void MessageBox(char const *txt); - virtual void Lock(); - virtual void Unlock(); - virtual int GetWritePos(); - virtual int GetPlayPos(); - virtual float *GetAuxBuffer(); - virtual void ClearAuxBuffer(); - virtual int GetFreeWave(); - virtual bool AllocateWave(int const i, int const size, char const *name); - virtual void ScheduleEvent(int const time, dword const data); - virtual void MidiOut(int const dev, dword const data); - virtual short const *GetOscillatorTable(int const waveform); - - // envelopes - virtual int GetEnvSize(int const wave, int const env); - virtual bool GetEnvPoint(int const wave, int const env, int const i, word &x, word &y, int &flags); - - virtual CWaveLevel const *GetNearestWaveLevel(int const i, int const note); - - // pattern editing - virtual void SetNumberOfTracks(int const n); - virtual CPattern *CreatePattern(char const *name, int const length); - virtual CPattern *GetPattern(int const index); - virtual char const *GetPatternName(CPattern *ppat); - virtual void RenamePattern(char const *oldname, char const *newname); - virtual void DeletePattern(CPattern *ppat); - virtual int GetPatternData(CPattern *ppat, int const row, int const group, int const track, int const field); - virtual void SetPatternData(CPattern *ppat, int const row, int const group, int const track, int const field, int const value); - - // sequence editing - virtual CSequence *CreateSequence(); - virtual void DeleteSequence(CSequence *pseq); - - - // special ppat values for GetSequenceData and SetSequenceData - // empty = NULL - // <break> = (CPattern *)1 - // <mute> = (CPattern *)2 - // <thru> = (CPattern *)3 - virtual CPattern *GetSequenceData(int const row); - virtual void SetSequenceData(int const row, CPattern *ppat); - - - // buzz v1.2 (MI_VERSION 15) additions start here - - virtual void SetMachineInterfaceEx(CMachineInterfaceEx *pex); - // group 1=global, 2=track - virtual void ControlChange__obsolete__(int group, int track, int param, int value); // set value of parameter - - // direct calls to audiodriver, used by WaveInput and WaveOutput - // shouldn't be used for anything else - virtual int ADGetnumChannels(bool input); - virtual void ADWrite(int channel, float *psamples, int numsamples); - virtual void ADRead(int channel, float *psamples, int numsamples); - - virtual CMachine *GetThisMachine(); // only call this in Init()! - virtual void ControlChange(CMachine *pmac, int group, int track, int param, int value); // set value of parameter (group & 16 == don't record) - - // returns pointer to the sequence if there is a pattern playing - virtual CSequence *GetPlayingSequence(CMachine *pmac); - - // gets ptr to raw pattern data for row of a track of a currently playing pattern (or something like that) - virtual void *GetPlayingRow(CSequence *pseq, int group, int track); - - virtual int GetStateFlags(); - - virtual void SetnumOutputChannels(CMachine *pmac, int n); // if n=1 Work(), n=2 WorkMonoToStereo() - - virtual void SetEventHandler(CMachine *pmac, BEventType et, EVENT_HANDLER_PTR p, void *param); - - virtual char const *GetWaveName(int const i); - - virtual void SetInternalWaveName(CMachine *pmac, int const i, char const *name); // i >= 1, NULL name to clear - - virtual void GetMachineNames(CMachineDataOutput *pout); // *pout will get one name per Write() - virtual CMachine *GetMachine(char const *name); - virtual CMachineInfo const *GetMachineInfo(CMachine *pmac); - virtual char const *GetMachineName(CMachine *pmac); - - virtual bool GetInput(int index, float *psamples, int numsamples, bool stereo, float *extrabuffer); -}; - - -class CLibInterface -{ -public: - virtual void GetInstrumentList(CMachineDataOutput *pout) {} - - // make some space to vtable so this interface can be extended later - virtual void Dummy1() {} - virtual void Dummy2() {} - virtual void Dummy3() {} - virtual void Dummy4() {} - virtual void Dummy5() {} - virtual void Dummy6() {} - virtual void Dummy7() {} - virtual void Dummy8() {} - virtual void Dummy9() {} - virtual void Dummy10() {} - virtual void Dummy11() {} - virtual void Dummy12() {} - virtual void Dummy13() {} - virtual void Dummy14() {} - virtual void Dummy15() {} - virtual void Dummy16() {} - virtual void Dummy17() {} - virtual void Dummy18() {} - virtual void Dummy19() {} - virtual void Dummy20() {} - virtual void Dummy21() {} - virtual void Dummy22() {} - virtual void Dummy23() {} - virtual void Dummy24() {} - virtual void Dummy25() {} - virtual void Dummy26() {} - virtual void Dummy27() {} - virtual void Dummy28() {} - virtual void Dummy29() {} - virtual void Dummy30() {} - virtual void Dummy31() {} - virtual void Dummy32() {} - - -}; - - -class CMachineInfo -{ -public: - int Type; // MT_GENERATOR or MT_EFFECT, - int Version; // MI_VERSION - // v1.2: high word = internal machine version - // higher version wins if two copies of machine found - int Flags; - int minTracks; // [0..256] must be >= 1 if numTrackParameters > 0 - int maxTracks; // [minTracks..256] - int numGlobalParameters; - int numTrackParameters; - CMachineParameter const **Parameters; - int numAttributes; - CMachineAttribute const **Attributes; - char const *Name; // "Jeskola Reverb" - char const *ShortName; // "Reverb" - char const *Author; // "Oskari Tammelin" - char const *Commands; // "Command1\nCommand2\nCommand3..." - CLibInterface *pLI; // ignored if MIF_USES_LIB_INTERFACE is not set -}; - -class CMachineDataInput -{ -public: - virtual void Read(void *pbuf, int const numbytes); - - void Read(int &d) { Read(&d, sizeof(int)); } - void Read(dword &d) { Read(&d, sizeof(dword)); } - void Read(short &d) { Read(&d, sizeof(short)); } - void Read(word &d) { Read(&d, sizeof(word)); } - void Read(char &d) { Read(&d, sizeof(char)); } - void Read(byte &d) { Read(&d, sizeof(byte)); } - void Read(float &d) { Read(&d, sizeof(float)); } - void Read(double &d) { Read(&d, sizeof(double)); } - void Read(bool &d) { Read(&d, sizeof(bool)); } - -}; - -class CMachineDataOutput -{ -public: - virtual void Write(void *pbuf, int const numbytes); - - void Write(int d) { Write(&d, sizeof(int)); } - void Write(dword d) { Write(&d, sizeof(dword)); } - void Write(short d) { Write(&d, sizeof(short)); } - void Write(word d) { Write(&d, sizeof(word)); } - void Write(char d) { Write(&d, sizeof(char)); } - void Write(byte d) { Write(&d, sizeof(byte)); } - void Write(float d) { Write(&d, sizeof(float)); } - void Write(double d) { Write(&d, sizeof(double)); } - void Write(bool d) { Write(&d, sizeof(bool)); } - void Write(char const *str) { Write((void *)str, strlen(str)+1); } - -}; - -// envelope info flags -#define EIF_SUSTAIN 1 -#define EIF_LOOP 2 - -class CEnvelopeInfo -{ -public: - char const *Name; - int Flags; -}; - -class CMachineInterface -{ -public: - virtual ~CMachineInterface() {} - virtual void Init(CMachineDataInput * const pi) {} - virtual void Tick() {} - virtual bool Work(float *psamples, int numsamples, int const mode) { return false; } - virtual bool WorkMonoToStereo(float *pin, float *pout, int numsamples, int const mode) { return false; } - virtual void Stop() {} - virtual void Save(CMachineDataOutput * const po) {} - virtual void AttributesChanged() {} - virtual void Command(int const i) {} - - virtual void SetNumTracks(int const n) {} - virtual void MuteTrack(int const i) {} - virtual bool IsTrackMuted(int const i) const { return false; } - - virtual void MidiNote(int const channel, int const value, int const velocity) {} - virtual void Event(dword const data) {} - - virtual char const *DescribeValue(int const param, int const value) { return NULL; } - - virtual CEnvelopeInfo const **GetEnvelopeInfos() { return NULL; } - - virtual bool PlayWave(int const wave, int const note, float const volume) { return false; } - virtual void StopWave() {} - virtual int GetWaveEnvPlayPos(int const env) { return -1; } - - -public: - // initialize these members in the constructor - void *GlobalVals; - void *TrackVals; - int *AttrVals; - - // these members are initialized by the - // engine right after it calls CreateMachine() - // don't touch them in the constructor - CMasterInfo *pMasterInfo; - CMICallbacks *pCB; - -}; - -// buzz v1.2 extended machine interface -class CMachineInterfaceEx -{ -public: - virtual char const *DescribeParam(int const param) { return NULL; } // use this to dynamically change name of parameter - virtual bool SetInstrument(char const *name) { return false; } - - virtual void GetSubMenu(int const i, CMachineDataOutput *pout) {} - - virtual void AddInput(char const *macname, bool stereo) {} // called when input is added to a machine - virtual void DeleteInput(char const *macename) {} - virtual void RenameInput(char const *macoldname, char const *macnewname) {} - - virtual void Input(float *psamples, int numsamples, float amp) {} // if MIX_DOES_INPUT_MIXING - - virtual void MidiControlChange(int const ctrl, int const channel, int const value) {} - - virtual void SetInputChannels(char const *macname, bool stereo) {} - - virtual bool HandleInput(int index, int amp, int pan) { return false; } - - // make some space to vtable so this interface can be extended later - virtual void Dummy1() {} - virtual void Dummy2() {} - virtual void Dummy3() {} - virtual void Dummy4() {} - virtual void Dummy5() {} - virtual void Dummy6() {} - virtual void Dummy7() {} - virtual void Dummy8() {} - virtual void Dummy9() {} - virtual void Dummy10() {} - virtual void Dummy11() {} - virtual void Dummy12() {} - virtual void Dummy13() {} - virtual void Dummy14() {} - virtual void Dummy15() {} - virtual void Dummy16() {} - virtual void Dummy17() {} - virtual void Dummy18() {} - virtual void Dummy19() {} - virtual void Dummy20() {} - virtual void Dummy21() {} - virtual void Dummy22() {} - virtual void Dummy23() {} - virtual void Dummy24() {} - virtual void Dummy25() {} - virtual void Dummy26() {} - virtual void Dummy27() {} - virtual void Dummy28() {} - virtual void Dummy29() {} - virtual void Dummy30() {} - virtual void Dummy31() {} - virtual void Dummy32() {} - -}; - -class CMILock -{ -public: - CMILock(CMICallbacks *p) { pCB = p; pCB->Lock(); } - ~CMILock() { pCB->Unlock(); } -private: - CMICallbacks *pCB; -}; - -#define MACHINE_LOCK CMILock __machinelock(pCB); - -#ifdef STATIC_BUILD - - typedef CMachineInfo const *(__cdecl *GET_INFO)(); - typedef CMachineInterface *(__cdecl *CREATE_MACHINE)(); - - extern void RegisterMachine(CMachineInfo const *pmi, GET_INFO gi, CREATE_MACHINE cm); - -#define DLL_EXPORTS(INIT_FUNC) \ - static CMachineInfo const * __cdecl GetInfo() { return &MacInfo; } \ - static CMachineInterface * __cdecl CreateMachine() { return new mi; } \ - void INIT_FUNC() { RegisterMachine(&MacInfo, GetInfo, CreateMachine); } \ - - -#define DLL_EXPORTS_NS(NS, INIT_FUNC) /* namespaced version */ \ - static CMachineInfo const * __cdecl GetInfo() { return &NS::MacInfo; } \ - static CMachineInterface * __cdecl CreateMachine() { return new NS::mi; } \ - void INIT_FUNC() { RegisterMachine(&NS::MacInfo, GetInfo, CreateMachine); } \ - - - -#else - - #define DLL_EXPORTS extern "C" { \ - __declspec(dllexport) CMachineInfo const * __cdecl GetInfo() \ - { \ - return &MacInfo; \ - } \ - __declspec(dllexport) CMachineInterface * __cdecl CreateMachine() \ - { \ - return new mi; \ - } \ - } - -#endif - -#endif \ No newline at end of file Deleted: trunk/OpenMPT/include/audioeffectx.cpp =================================================================== --- trunk/OpenMPT/include/audioeffectx.cpp 2007-11-17 20:42:39 UTC (rev 194) +++ trunk/OpenMPT/include/audioeffectx.cpp 2008-01-12 16:49:50 UTC (rev 195) @@ -1,793 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// VST Plug-Ins SDK -// Version 2.3 Extension -// \xA9 2003 Steinberg Media Technologies, All Rights Reserved -// -// you should not have to edit this file -// use override methods instead, as suggested in the class declaration (audioeffectx.h) -//------------------------------------------------------------------------------------------------------- - -#ifndef __audioeffectx__ -#include "audioeffectx.h" -#endif - -#ifndef __AEffEditor__ -#include "AEffEditor.hpp" -#endif - -//--------------------------------------------------------------------------------------------- -// 'canDo' strings. note other 'canDos' can be evaluated by calling the according -// function, for instance if getSampleRate returns 0, you -// will certainly want to assume that this selector is not supported. -//--------------------------------------------------------------------------------------------- - -const char* hostCanDos [] = -{ - "sendVstEvents", - "sendVstMidiEvent", - "sendVstTimeInfo", - "receiveVstEvents", - "receiveVstMidiEvent", - "receiveVstTimeInfo", - - "reportConnectionChanges", - "acceptIOChanges", - "sizeWindow", - - "asyncProcessing", - "offline", - "supplyIdle", - "supportShell", // 'shell' handling via uniqueID as suggested by Waves - "openFileSelector" -#if VST_2_2_EXTENSIONS - , - "editFile", - "closeFileSelector" -#endif // VST_2_2_EXTENSIONS -#if VST_2_3_EXTENSIONS - , - "startStopProcess" -#endif // VST_2_3_EXTENSIONS -}; - -const char* plugCanDos [] = -{ - "sendVstEvents", - "sendVstMidiEvent", - "sendVstTimeInfo", - "receiveVstEvents", - "receiveVstMidiEvent", - "receiveVstTimeInfo", - "offline", - "plugAsChannelInsert", - "plugAsSend", - "mixDryWet", - "noRealTime", - "multipass", - "metapass", - "1in1out", - "1in2out", - "2in1out", - "2in2out", - "2in4out", - "4in2out", - "4in4out", - "4in8out", // 4:2 matrix to surround bus - "8in4out", // surround bus to 4:2 matrix - "8in8out" -#if VST_2_1_EXTENSIONS - , - "midiProgramNames", - "conformsToWindowRules" // mac: doesn't mess with grafport. general: may want - // to call sizeWindow (). if you want to use sizeWindow (), - // you must return true (1) in canDo ("conformsToWindowRules") -#endif // VST_2_1_EXTENSIONS - -#if VST_2_3_EXTENSIONS - , - "bypass" -#endif // VST_2_3_EXTENSIONS -}; - -//------------------------------------------------------------------------------------------------------- -//------------------------------------------------------------------------------------------------------- -// AudioEffectX extends AudioEffect with the new features. so you should derive -// your plug from AudioEffectX -//------------------------------------------------------------------------------------------------------- -//------------------------------------------------------------------------------------------------------- - -//------------------------------------------------------------------------------------------------------- -// VstEvents + VstTimeInfo -//------------------------------------------------------------------------------------------------------- - -//------------------------------------------------------------------------------------------------------- -AudioEffectX::AudioEffectX (audioMasterCallback audioMaster, long numPrograms, long numParams) - : AudioEffect (audioMaster, numPrograms, numParams) -{ -} - -//------------------------------------------------------------------------------------------------------- -AudioEffectX::~AudioEffectX () -{ -} - -//------------------------------------------------------------------------------------------------------- -long AudioEffectX::dispatcher (long opCode, long index, long value, void *ptr, float opt) -{ - long v = 0; - switch(opCode) - { - // VstEvents - case effProcessEvents: - v = processEvents ((VstEvents*)ptr); - break; - - // parameters and programs - case effCanBeAutomated: - v = canParameterBeAutomated (index) ? 1 : 0; - break; - case effString2Parameter: - v = string2parameter (index, (char*)ptr) ? 1 : 0; - break; - - case effGetNumProgramCategories: - v = getNumCategories (); - break; - case effGetProgramNameIndexed: - v = getProgramNameIndexed (value, index, (char*)ptr) ? 1 : 0; - break; - case effCopyProgram: - v = copyProgram (index) ? 1 : 0; - break; - - // connections, configuration - case effConnectInput: - inputConnected (index, value ? true : false); - v = 1; - break; - case effConnectOutput: - outputConnected (index, value ? true : false); - v = 1; - break; - case effGetInputProperties: - v = getInputProperties (index, (VstPinProperties*)ptr) ? 1 : 0; - break; - case effGetOutputProperties: - v = getOutputProperties (index, (VstPinProperties*)ptr) ? 1 : 0; - break; - case effGetPlugCategory: - v = (long)getPlugCategory (); - break; - - // realtime - case effGetCurrentPosition: - v = reportCurrentPosition (); - break; - - case effGetDestinationBuffer: - v = (long)reportDestinationBuffer (); - break; - - // offline - case effOfflineNotify: - v = offlineNotify ((VstAudioFile*)ptr, value, index != 0); - break; - case effOfflinePrepare: - v = offlinePrepare ((Vs... [truncated message content] |
From: <Rel...@us...> - 2007-11-17 20:42:43
|
Revision: 194 http://modplug.svn.sourceforge.net/modplug/?rev=194&view=rev Author: Relabsoluness Date: 2007-11-17 12:42:39 -0800 (Sat, 17 Nov 2007) Log Message: ----------- 1.17.02.49 Modified Paths: -------------- trunk/OpenMPT/mptrack/bin/mptrack.exe trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/bin/mptrack.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2007-11-17 18:31:14 UTC (rev 193) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2007-11-17 20:42:39 UTC (rev 194) @@ -425,6 +425,22 @@ //Playback behavior change for MPT: Don't change sample if it is in the same instrument as previous sample. if(bPorta && bNewTuning && penv == pChn->pHeader) return; + + bool returnAfterVolumeAdjust = false; + // bInstrumentChanged is used for IT carry-on env option + if (penv != pChn->pHeader) + { + bInstrumentChanged = TRUE; + pChn->pHeader = penv; + } else + // Special XM hack + if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (penv) + && (pChn->pInstrument) && (psmp != pChn->pInstrument)) + { + // FT2 doesn't change the sample in this case, + // but still uses the sample info from the old one (bug?) + returnAfterVolumeAdjust = true; + } // Update Volume if (bUpdVol) @@ -437,23 +453,11 @@ if(penv && penv->nMixPlug) pChn->nVolume = pChn->GetVSTVolume(); } - } - // bInstrumentChanged is used for IT carry-on env option - if (penv != pChn->pHeader) - { - bInstrumentChanged = TRUE; - pChn->pHeader = penv; - } else - // Special XM hack - if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (penv) - && (pChn->pInstrument) && (psmp != pChn->pInstrument)) - { - // FT2 doesn't change the sample in this case, - // but still uses the sample info from the old one (bug?) - return; - } + if(returnAfterVolumeAdjust) return; + + // Instrument adjust pChn->nNewIns = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Rel...@us...> - 2007-11-17 18:31:18
|
Revision: 193 http://modplug.svn.sourceforge.net/modplug/?rev=193&view=rev Author: Relabsoluness Date: 2007-11-17 10:31:14 -0800 (Sat, 17 Nov 2007) Log Message: ----------- Project file update Modified Paths: -------------- trunk/OpenMPT/mptrack/mptrack.vcproj Property Changed: ---------------- trunk/OpenMPT/mptrack/ Property changes on: trunk/OpenMPT/mptrack ___________________________________________________________________ Name: svn:ignore - *.sln *.vcproj Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2007-11-17 17:59:58 UTC (rev 192) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2007-11-17 18:31:14 UTC (rev 193) @@ -499,6 +499,9 @@ RelativePath="..\soundlib\Load_mod.cpp"> </File> <File + RelativePath="..\soundlib\load_mptm.cpp"> + </File> + <File RelativePath="..\Soundlib\load_mt2.cpp"> </File> <File @@ -709,6 +712,9 @@ RelativePath="..\soundlib\tuning.cpp"> </File> <File + RelativePath="..\soundlib\tuningbase.cpp"> + </File> + <File RelativePath="..\soundlib\tuningCollection.cpp"> </File> <File @@ -1067,7 +1073,7 @@ RelativePath="..\soundlib\tuning.h"> </File> <File - RelativePath="..\soundlib\tuning_template.h"> + RelativePath="..\soundlib\tuningbase.h"> </File> <File RelativePath="..\soundlib\tuningcollection.h"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Rel...@us...> - 2007-11-17 18:00:04
|
Revision: 192 http://modplug.svn.sourceforge.net/modplug/?rev=192&view=rev Author: Relabsoluness Date: 2007-11-17 09:59:58 -0800 (Sat, 17 Nov 2007) Log Message: ----------- + Improved VST preset navigation in VST window. Known problem: doesn't update if preset is changed from VSTs own preset navigation. + Improvements in IT compatibility playmode. When loading ITs, if file doesn't seem modplug made, then automatically setting IT compatibility playmode. The playmode setting can be toggled in song properties dialog, and the autodetection with an ini setting. + 'key binding not understood'-messages can be disabled with an ini setting. . Fixed wrong file version in IT compatibility save. (http://lpchip.com/modplug/viewtopic.php?t=1723) . Fixed possible unnotified overwriting of file occurring for example when dealing with a new file. (http://lpchip.com/modplug/viewtopic.php?t=1813) . Fixed broken note preview for certain type of instruments in instrument tab. (http://lpchip.com/modplug/viewtopic.php?t=1996) . Fixed possible crash on channel mode wav export when a channel has a long name. (http://lpchip.com/modplug/viewtopic.php?t=2005) . Fixed pattern position indicator jump when clicking VST-box in channel header. (http://lpchip.com/modplug/viewtopic.php?t=2014) . CMainFrame::m_csExecutablePath renamed and should now contain the path of executable directory, not that of the working directory. / Tuning related changes/improvements Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/AbstractVstEditor.h trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_ins.h trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/OrderToPatternTable.cpp trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp trunk/OpenMPT/mptrack/TuningDialog.cpp trunk/OpenMPT/mptrack/TuningDialog.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/bin/tunings/standard/std_tunings.tc trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/pattern.cpp trunk/OpenMPT/mptrack/pattern.h trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/serialization_utils.cpp trunk/OpenMPT/mptrack/serialization_utils.h trunk/OpenMPT/mptrack/tuningRatioMapWnd.cpp trunk/OpenMPT/mptrack/tuningRatioMapWnd.h trunk/OpenMPT/mptrack/typedefs.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/mod_specifications.h trunk/OpenMPT/soundlib/modcommand.h trunk/OpenMPT/soundlib/tuning.cpp trunk/OpenMPT/soundlib/tuning.h trunk/OpenMPT/soundlib/tuningCollection.cpp trunk/OpenMPT/soundlib/tuningcollection.h trunk/OpenMPT/soundlib/wavConverter.h Added Paths: ----------- trunk/OpenMPT/soundlib/load_mptm.cpp trunk/OpenMPT/soundlib/tuningbase.cpp trunk/OpenMPT/soundlib/tuningbase.h Removed Paths: ------------- trunk/OpenMPT/mptrack/bin/tunings/local_tunings.tc trunk/OpenMPT/soundlib/tuning_template.h Property Changed: ---------------- trunk/OpenMPT/mptrack/ Property changes on: trunk/OpenMPT/mptrack ___________________________________________________________________ Name: svn:ignore + *.sln *.vcproj Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -21,6 +21,10 @@ ON_COMMAND(ID_PRESET_RANDOM, OnRandomizePreset) ON_COMMAND(ID_VSTMACRO_INFO, OnMacroInfo) ON_COMMAND(ID_VSTINPUT_INFO, OnInputInfo) + ON_COMMAND(ID_PREVIOUSVSTPRESET, OnSetPreviousVSTPreset) + ON_COMMAND(ID_NEXTVSTPRESET, OnSetNextVSTPreset) + ON_COMMAND(ID_VSTPRESETBACKWARDJUMP,OnVSTPresetBackwardJump) + ON_COMMAND(ID_VSTPRESETFORWARDJUMP, OnVSTPresetForwardJump) ON_COMMAND_RANGE(ID_PRESET_SET, ID_PRESET_SET+MAX_PLUGPRESETS, OnSetPreset) ON_MESSAGE(WM_MOD_KEYCOMMAND, OnCustomKeyMsg) //rewbs.customKeys ON_COMMAND_RANGE(ID_PLUGSELECT, ID_PLUGSELECT+MAX_MIXPLUGINS, OnToggleEditor) //rewbs.patPlugName @@ -36,7 +40,7 @@ m_pInputMenu = new CMenu(); m_pOutputMenu = new CMenu(); m_pMacroMenu = new CMenu(); - + m_pPresetMenu = new CMenu(); m_pPresetMenuGroup.SetSize(0); @@ -137,17 +141,50 @@ UpdateOutputMenu(); UpdateMacroMenu(); UpdateOptionsMenu(); + UpdatePresetField(); ::SetMenu(m_hWnd, m_pMenu->m_hMenu); } return; } +void CAbstractVstEditor::UpdatePresetField() +//------------------------------------------ +{ + if(m_pVstPlugin->GetNumPrograms() > 0 && m_pMenu->GetMenuItemCount() < 5) + { + m_pMenu->InsertMenu(4, MF_BYPOSITION, ID_VSTPRESETBACKWARDJUMP, (LPCTSTR)"<<"); + m_pMenu->InsertMenu(5, MF_BYPOSITION, ID_PREVIOUSVSTPRESET, (LPCTSTR)"<"); + m_pMenu->InsertMenu(6, MF_BYPOSITION, ID_NEXTVSTPRESET, (LPCTSTR)">"); + m_pMenu->InsertMenu(7, MF_BYPOSITION, ID_VSTPRESETFORWARDJUMP, (LPCTSTR)">>"); + m_pMenu->InsertMenu(8, MF_BYPOSITION|MF_DISABLED, 0, ""); + } + + long index = m_pVstPlugin->GetCurrentProgram(); + char name[256+6]; + memset(name, ' ', 6); + itoa(index, name, 10); + size_t i = 4; + if(index < 1000) i = 3; + if(index < 100) i = 2; + if(index < 10) i = 1; + name[i] = ':'; name[i+1] = ' '; + + m_pVstPlugin->GetProgramNameIndexed(index, -1, name+i+2); + + m_pMenu->ModifyMenu(8, MF_BYPOSITION, 0, name); + DrawMenuBar(); +} + + void CAbstractVstEditor::OnSetPreset(UINT nID) +//--------------------------------------------- { int nIndex=nID-ID_PRESET_SET; if (nIndex>=0) { m_pVstPlugin->SetCurrentProgram(nIndex); + UpdatePresetField(); + //SetupMenu(); } } @@ -254,8 +291,8 @@ switch(wParam) { - case kcVSTGUIPrevPreset: OnSetPreset(-1+ID_PRESET_SET+m_pVstPlugin->GetCurrentProgram()); return wParam; - case kcVSTGUINextPreset: OnSetPreset( 1+ID_PRESET_SET+m_pVstPlugin->GetCurrentProgram()); return wParam; + case kcVSTGUIPrevPreset: OnSetPreviousVSTPreset(); return wParam; + case kcVSTGUINextPreset: OnSetNextVSTPreset(); return wParam; case kcVSTGUIRandParams: OnRandomizePreset() ; return wParam; } if (wParam>=kcVSTGUIStartNotes && wParam<=kcVSTGUIEndNotes) @@ -301,6 +338,8 @@ char s[256]; char sname[256]; + + if (m_pPresetMenu->m_hMenu) // We rebuild menu from scratch { // So remove any exiting menus... if (curProg == m_nCurProg) //.. unless menu exists and is accurate, @@ -603,6 +642,30 @@ m_nInstrument = (nID-ID_SELECTINST); } +void CAbstractVstEditor::OnSetPreviousVSTPreset() +//-------------------------------------------- +{ + OnSetPreset(-1+ID_PRESET_SET+m_pVstPlugin->GetCurrentProgram()); +} + +void CAbstractVstEditor::OnSetNextVSTPreset() +//---------------------------------------- +{ + OnSetPreset(1+ID_PRESET_SET+m_pVstPlugin->GetCurrentProgram()); +} + +void CAbstractVstEditor::OnVSTPresetBackwardJump() +//------------------------------------------------ +{ + OnSetPreset(max(ID_PRESET_SET+m_pVstPlugin->GetCurrentProgram()-10, ID_PRESET_SET)); +} + +void CAbstractVstEditor::OnVSTPresetForwardJump() +//---------------------------------------------------- +{ + OnSetPreset(min(10+ID_PRESET_SET+m_pVstPlugin->GetCurrentProgram(), ID_PRESET_SET+m_pVstPlugin->GetNumPrograms()-1)); +} + void CAbstractVstEditor::PrepareToLearnMacro(UINT nID) { m_nLearnMacro = (nID-ID_LEARN_MACRO_FROM_PLUGGUI); Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.h =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.h 2007-11-17 17:59:58 UTC (rev 192) @@ -20,6 +20,8 @@ void SetLearnMacro(int inMacro); int GetLearnMacro(); + void UpdatePresetField(); + afx_msg void OnLoadPreset(); afx_msg void OnSavePreset(); afx_msg void OnRandomizePreset(); @@ -29,6 +31,10 @@ afx_msg void OnBypassPlug(); afx_msg void OnRecordAutomation(); afx_msg void OnPassKeypressesToPlug(); + afx_msg void OnSetPreviousVSTPreset(); + afx_msg void OnSetNextVSTPreset(); + afx_msg void OnVSTPresetBackwardJump(); + afx_msg void OnVSTPresetForwardJump(); afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM); //rewbs.customKeys //Overridden methods: Modified: trunk/OpenMPT/mptrack/AutoSaver.cpp =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/AutoSaver.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -185,7 +185,7 @@ if (pModDoc->m_bHasValidPath) { // Check that the file has a user-chosen path name = pModDoc->GetPathName(); } else { // if it doesnt, put it in executable dir - name = CMainFrame::m_csExecutablePath + "\\" + pModDoc->GetTitle(); + name = CMainFrame::m_csExecutableDirectoryPath + pModDoc->GetTitle(); } } else { @@ -263,7 +263,7 @@ CString fullPath = pModDoc->GetPathName(); path = fullPath.Left(fullPath.GetLength()-pModDoc->GetTitle().GetLength()); //remove file name if necessary } else { - path = CMainFrame::m_csExecutablePath + "\\"; + path = CMainFrame::m_csExecutableDirectoryPath; } } else { path = m_csPath; Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -171,7 +171,8 @@ if(!m_pSndFile || !pModDoc) return; - // Stop player + + // Stop player (is this necessary?) CModDoc *pActiveMod = NULL; HWND followSong = pMainFrm->GetFollowSong(pModDoc); if(pMainFrm->IsPlaying()){ @@ -181,9 +182,7 @@ EnterCriticalSection(&applying); - MODCOMMAND *p = NULL,*newp = NULL; - MODCHANNELSETTINGS settings[MAX_BASECHANNELS]; - UINT i,j,k,nChannels,newpat[MAX_BASECHANNELS],newMemory[4][MAX_BASECHANNELS]; + UINT i,nChannels,newpat[MAX_BASECHANNELS],newMemory[4][MAX_BASECHANNELS]; // Count new number of channels , copy pattern pointers & manager internal store memory nChannels = 0; @@ -514,7 +513,7 @@ InvalidateRect(NULL,FALSE); } -void CChannelManagerDlg::OnTabSelchange(NMHDR* header, LRESULT* pResult) +void CChannelManagerDlg::OnTabSelchange(NMHDR* /*header*/, LRESULT* /*pResult*/) { if(!show) return; @@ -557,7 +556,7 @@ InvalidateRect(NULL, FALSE); } -void DrawChannelButton(HDC hdc, LPRECT lpRect, LPCSTR lpszText, BOOL bActivate, BOOL bEnable, DWORD dwFlags, HBRUSH markBrush) +void DrawChannelButton(HDC hdc, LPRECT lpRect, LPCSTR lpszText, BOOL bActivate, BOOL bEnable, DWORD dwFlags, HBRUSH /*markBrush*/) { RECT rect; rect = (*lpRect); @@ -609,27 +608,27 @@ CRect wnd,btn; GetWindowRect(&wnd); - if(button = GetDlgItem(IDC_BUTTON1)){ + if((button = GetDlgItem(IDC_BUTTON1)) != 0){ button->GetWindowRect(&btn); button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-6,0,0,SWP_NOSIZE | SWP_NOZORDER); } - if(button = GetDlgItem(IDC_BUTTON2)){ + if((button = GetDlgItem(IDC_BUTTON2)) != 0){ button->GetWindowRect(&btn); button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-6,0,0,SWP_NOSIZE | SWP_NOZORDER); } - if(button = GetDlgItem(IDC_BUTTON3)){ + if((button = GetDlgItem(IDC_BUTTON3)) != 0){ button->GetWindowRect(&btn); button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-6,0,0,SWP_NOSIZE | SWP_NOZORDER); } - if(button = GetDlgItem(IDC_BUTTON4)){ + if((button = GetDlgItem(IDC_BUTTON4)) != 0){ button->GetWindowRect(&btn); button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-6,0,0,SWP_NOSIZE | SWP_NOZORDER); } - if(button = GetDlgItem(IDC_BUTTON5)){ + if((button = GetDlgItem(IDC_BUTTON5)) != 0){ button->GetWindowRect(&btn); button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-6,0,0,SWP_NOSIZE | SWP_NOZORDER); } - if(button = GetDlgItem(IDC_BUTTON6)){ + if((button = GetDlgItem(IDC_BUTTON6)) != 0){ button->GetWindowRect(&btn); button->SetWindowPos(NULL,btn.left-wnd.left-3,wnd.Height()-btn.Height()*2-6,0,0,SWP_NOSIZE | SWP_NOZORDER); } @@ -856,9 +855,9 @@ CSoundFile * m_pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; if(pModDoc && m_pSndFile){ - UINT nChannels = m_pSndFile->m_nChannels; + //UINT nChannels = m_pSndFile->m_nChannels; UINT nColns = CM_NB_COLS; - UINT nLines = nChannels / nColns + (nChannels % nColns ? 1 : 0); + //UINT nLines = nChannels / nColns + (nChannels % nColns ? 1 : 0); int x = point.x - client.left; int y = point.y - client.top; @@ -905,7 +904,7 @@ if(order) nChannelsOld = 0; } -LRESULT CChannelManagerDlg::OnMouseLeave(WPARAM wparam, LPARAM lparam) +LRESULT CChannelManagerDlg::OnMouseLeave(WPARAM /*wparam*/, LPARAM /*lparam*/) { if(!m_hWnd || show == FALSE) return 0; @@ -917,7 +916,7 @@ return 0; } -LRESULT CChannelManagerDlg::OnMouseHover(WPARAM wparam, LPARAM lparam) +LRESULT CChannelManagerDlg::OnMouseHover(WPARAM /*wparam*/, LPARAM /*lparam*/) { if(!m_hWnd || show == FALSE) return 0; @@ -954,7 +953,7 @@ LeaveCriticalSection(&applying); } -void CChannelManagerDlg::OnLButtonUp(UINT nFlags,CPoint point) +void CChannelManagerDlg::OnLButtonUp(UINT /*nFlags*/,CPoint point) { if(!m_hWnd || show == FALSE) return; @@ -1034,7 +1033,7 @@ LeaveCriticalSection(&applying); } -void CChannelManagerDlg::OnRButtonUp(UINT nFlags,CPoint point) +void CChannelManagerDlg::OnRButtonUp(UINT /*nFlags*/,CPoint /*point*/) { if(!m_hWnd || show == FALSE) return; @@ -1186,7 +1185,7 @@ return CModControlDlg::OnMouseWheel(nFlags, zDelta, pt); } -BOOL CCtrlPatterns::OnToolTip(UINT id, NMHDR *pNMHDR, LRESULT *pResult) +BOOL CCtrlPatterns::OnToolTip(UINT /*id*/, NMHDR *pNMHDR, LRESULT* /*pResult*/) //--------------------------------------------------------------------- { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -5,6 +5,8 @@ #include <stdio.h> #include <stdlib.h> +bool CCommandSet::s_bShowErrorOnUnknownKeybinding = true; + CCommandSet::CCommandSet(void) { // Which keybinding rules to enforce? @@ -23,7 +25,6 @@ enforceRule[krPropagateSampleManipulation] = true; // enforceRule[krCheckContextHierarchy] = true; - commands.SetSize(kcNumCommands); SetupCommands(); SetupContextHierarchy(); @@ -3120,11 +3121,11 @@ CString err; if (errorCount<10) { err.Format("Line %d in key binding file %s was not understood.", l, fileName); - ::MessageBox(NULL, err, "", MB_ICONEXCLAMATION|MB_OK); + if(s_bShowErrorOnUnknownKeybinding) ::MessageBox(NULL, err, "", MB_ICONEXCLAMATION|MB_OK); Log(err); } else if (errorCount==10) { err.Format("Too many errors detected, not reporting any more."); - ::MessageBox(NULL, err, "", MB_ICONEXCLAMATION|MB_OK); + if(s_bShowErrorOnUnknownKeybinding) ::MessageBox(NULL, err, "", MB_ICONEXCLAMATION|MB_OK); Log(err); } } Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/CommandSet.h 2007-11-17 17:59:58 UTC (rev 192) @@ -1053,8 +1053,10 @@ //CArray<CArray<bool,bool>, CArray<bool,bool> > m_isParentContext; bool m_isParentContext[kCtxMaxInputContexts][kCtxMaxInputContexts]; bool enforceRule[kNumRules]; + +public: + static bool s_bShowErrorOnUnknownKeybinding; -public: CCommandSet(void); ~CCommandSet(void); Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -2435,18 +2435,18 @@ sel -= 1; CTuningCollection* tc = 0; - if(sel < CSoundFile::s_TuningsSharedStandard.GetNumTunings()) - tc = &CSoundFile::s_TuningsSharedStandard; + if(sel < CSoundFile::GetStandardTunings().GetNumTunings()) + tc = &CSoundFile::GetStandardTunings(); else { - sel -= CSoundFile::s_TuningsSharedStandard.GetNumTunings(); - if(sel < CSoundFile::s_TuningsSharedLocal.GetNumTunings()) - tc = &CSoundFile::s_TuningsSharedLocal; + sel -= CSoundFile::GetStandardTunings().GetNumTunings(); + if(sel < CSoundFile::GetLocalTunings().GetNumTunings()) + tc = &CSoundFile::GetLocalTunings(); else { - sel -= CSoundFile::s_TuningsSharedLocal.GetNumTunings(); - if(sel < m_pSndFile->m_TuningsTuneSpecific.GetNumTunings()) - tc = &m_pSndFile->m_TuningsTuneSpecific; + sel -= CSoundFile::GetLocalTunings().GetNumTunings(); + if(sel < m_pSndFile->GetTuneSpecificTunings().GetNumTunings()) + tc = &m_pSndFile->GetTuneSpecificTunings(); } } @@ -2463,17 +2463,17 @@ //Case: Chosen tuning editor to be displayed. //Creating vector for the CTuningDialog. vector<CTuningCollection*> v; - v.push_back(&m_pSndFile->s_TuningsSharedStandard); - v.push_back(&m_pSndFile->s_TuningsSharedLocal); - v.push_back(&m_pSndFile->m_TuningsTuneSpecific); + v.push_back(&m_pSndFile->GetStandardTunings()); + v.push_back(&m_pSndFile->GetLocalTunings()); + v.push_back(&m_pSndFile->GetTuneSpecificTunings()); CTuningDialog td(this, v, pInstH->pTuning); td.DoModal(); - if(td.GetModifiedStatus(&m_pSndFile->s_TuningsSharedLocal)) + if(td.GetModifiedStatus(&m_pSndFile->GetLocalTunings())) { if(MsgBox(IDS_APPLY_TUNING_MODIFICATIONS, this, "", MB_OKCANCEL) == IDOK) m_pSndFile->SaveStaticTunings(); } - if(td.GetModifiedStatus(&m_pSndFile->m_TuningsTuneSpecific)) + if(td.GetModifiedStatus(&m_pSndFile->GetTuneSpecificTunings())) { m_pModDoc->SetModified(); } @@ -2500,29 +2500,29 @@ return; } - for(size_t i = 0; i < CSoundFile::s_TuningsSharedStandard.GetNumTunings(); i++) + for(size_t i = 0; i < CSoundFile::GetStandardTunings().GetNumTunings(); i++) { - if(penv->pTuning == &CSoundFile::s_TuningsSharedStandard.GetTuning(i)) + if(penv->pTuning == &CSoundFile::GetStandardTunings().GetTuning(i)) { m_ComboTuning.SetCurSel(i+1); return; } } - for(size_t i = 0; i < CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i++) + for(size_t i = 0; i < CSoundFile::GetLocalTunings().GetNumTunings(); i++) { - if(penv->pTuning == &CSoundFile::s_TuningsSharedLocal.GetTuning(i)) + if(penv->pTuning == &CSoundFile::GetLocalTunings().GetTuning(i)) { - m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunings()+1); + m_ComboTuning.SetCurSel(i+CSoundFile::GetStandardTunings().GetNumTunings()+1); return; } } - for(size_t i = 0; i < m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); i++) + for(size_t i = 0; i < m_pSndFile->GetTuneSpecificTunings().GetNumTunings(); i++) { - if(penv->pTuning == &m_pSndFile->m_TuningsTuneSpecific.GetTuning(i)) + if(penv->pTuning == &m_pSndFile->GetTuneSpecificTunings().GetTuning(i)) { - m_ComboTuning.SetCurSel(i+CSoundFile::s_TuningsSharedStandard.GetNumTunings() + CSoundFile::s_TuningsSharedLocal.GetNumTunings()+1); + m_ComboTuning.SetCurSel(i+CSoundFile::GetStandardTunings().GetNumTunings() + CSoundFile::GetLocalTunings().GetNumTunings()+1); return; } } @@ -2637,17 +2637,17 @@ m_ComboTuning.DeleteString(0); m_ComboTuning.AddString("OMPT IT behavior"); //<-> Instrument pTuning pointer == NULL - for(size_t i = 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings(); i++) + for(size_t i = 0; i<CSoundFile::GetStandardTunings().GetNumTunings(); i++) { - m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).GetName().c_str()); + m_ComboTuning.AddString(CSoundFile::GetStandardTunings().GetTuning(i).GetName().c_str()); } - for(size_t i = 0; i<CSoundFile::s_TuningsSharedLocal.GetNumTunings(); i++) + for(size_t i = 0; i<CSoundFile::GetLocalTunings().GetNumTunings(); i++) { - m_ComboTuning.AddString(CSoundFile::s_TuningsSharedLocal.GetTuning(i).GetName().c_str()); + m_ComboTuning.AddString(CSoundFile::GetLocalTunings().GetTuning(i).GetName().c_str()); } - for(size_t i = 0; i<m_pSndFile->m_TuningsTuneSpecific.GetNumTunings(); i++) + for(size_t i = 0; i<m_pSndFile->GetTuneSpecificTunings().GetNumTunings(); i++) { - m_ComboTuning.AddString(m_pSndFile->m_TuningsTuneSpecific.GetTuning(i).GetName().c_str()); + m_ComboTuning.AddString(m_pSndFile->GetTuneSpecificTunings().GetTuning(i).GetName().c_str()); } m_ComboTuning.AddString("Control tunings..."); m_ComboTuning.SetCurSel(0); Modified: trunk/OpenMPT/mptrack/Ctrl_ins.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Ctrl_ins.h 2007-11-17 17:59:58 UTC (rev 192) @@ -5,7 +5,9 @@ class CNoteMapWnd; class CCtrlInstruments; +using std::pair; + //=============================== class CNoteMapWnd: public CStatic //=============================== Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -7,7 +7,7 @@ #include "view_pat.h" #include "EffectVis.h" //rewbs.fxvis #include "ChannelManagerDlg.h" -#include "../soundlib/tuning_template.h" +#include "../soundlib/tuningbase.h" #include <string> using std::string; @@ -322,7 +322,7 @@ { if(pTuning) { - string noteStr = pTuning->GetNoteName(static_cast<CTuning::STEPTYPE>(note-NOTE_MIDDLEC)); + string noteStr = pTuning->GetNoteName(note-NOTE_MIDDLEC); noteStr.resize(3, ' '); DrawLetter(x, y, noteStr[0]); DrawLetter(x + pfnt->nNoteWidth/2, y, noteStr[1]); Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -19,6 +19,7 @@ //Init CommandSet and Load defaults activeCommandSet = new CCommandSet(); + CCommandSet::s_bShowErrorOnUnknownKeybinding = (CMainFrame::GetMainFrame()->GetPrivateProfileLong("Misc", "ShowErrorOnUnknownKeybinding", 1, theApp.GetConfigFileName()) != 0); CString workingDir; char wd[255]; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -260,7 +260,7 @@ CAutoSaver *CMainFrame::m_pAutoSaver = NULL; //rewbs.autosave CPerformanceCounter *CMainFrame::m_pPerfCounter = NULL; -CString CMainFrame::m_csExecutablePath = ""; +CString CMainFrame::m_csExecutableDirectoryPath = ""; static UINT indicators[] = { @@ -278,16 +278,17 @@ CMainFrame::CMainFrame() //---------------------- { - char wd[255]; - _getdcwd(_getdrive(), wd, 255); - m_csExecutablePath = wd; //Assume working dir is executable path at this stage. + { + char path[_MAX_PATH]; + char exedrive[_MAX_DRIVE]; + char exedir[_MAX_DIR]; + GetModuleFileName(NULL, path, MAX_PATH); + _splitpath(path, exedrive, exedir, NULL, NULL); + memset(path, 0, sizeof(path)); + _makepath(path, exedrive, exedir, NULL, NULL); + m_csExecutableDirectoryPath = path; //path should end with \ + } - //Relabs.note: m_csExecutablePath doesn't give right path - //at least for debug builds. - #ifdef DEBUG - m_csExecutablePath += "\\bin"; - #endif - m_bModTreeHasFocus = false; //rewbs.customKeys m_pNoteMapHasFocus = NULL; //rewbs.customKeys m_bOptionsLocked = false; //rewbs.customKeys @@ -614,7 +615,6 @@ title += CString(" ") + GetFullVersionString(); SetTitle(title); OnUpdateFrameTitle(false); - // Load Chords theApp.LoadChords(Chords); @@ -664,6 +664,7 @@ delete m_pPerfCounter; CChannelManagerDlg::DestroySharedInstance(); + CSoundFile::DeleteStaticdata(); } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) @@ -1903,7 +1904,7 @@ if (m_pSndFile) { //m_pSndFile->LoopPattern(-1); - //Relabs.note: Commented above line - why loop should be disabled when pausing? + //Commented above line - why loop should be disabled when pausing? m_pSndFile->m_dwSongFlags &= ~SONG_PAUSED; if (m_pSndFile == &m_WaveFile) { @@ -2939,3 +2940,4 @@ } } } + Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2007-11-17 17:59:58 UTC (rev 192) @@ -168,7 +168,7 @@ #define NUM_VUMETER_PENS 32 -// Pattern Setup +// Pattern Setup (contains also non-pattern related settings) #define PATTERN_PLAYNEWNOTE 0x01 #define PATTERN_LARGECOMMENTS 0x02 #define PATTERN_STDHIGHLIGHT 0x04 @@ -207,6 +207,7 @@ #define PATTERN_SYNCMUTE 0x1000000 #define PATTERN_AUTODELAY 0x2000000 + // Keyboard Setup enum { KEYBOARD_CUSTOM=0, @@ -356,7 +357,7 @@ CString m_csRegExt; CString m_csRegSettings; CString m_csRegWindow; - static CString m_csExecutablePath; + static CString m_csExecutableDirectoryPath; //To contain path of executable directory // Globals static UINT m_nLastOptionsPage, m_nFilterIndex; static BOOL gbMdiMaximize; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -107,6 +107,7 @@ // -> DESC="channels management dlg" ReinitRecordState(); // -! NEW_FEATURE#0015 + m_ShowSavedialog = false; } @@ -342,10 +343,10 @@ case MOD_TYPE_DSM: case MOD_TYPE_AMF: case MOD_TYPE_PSM: - m_SndFile.m_nType = MOD_TYPE_S3M; + m_SndFile.ChangeModTypeTo(MOD_TYPE_S3M); break; default: - m_SndFile.m_nType = MOD_TYPE_IT; + m_SndFile.ChangeModTypeTo(MOD_TYPE_IT); } // -> CODE#0015 @@ -523,8 +524,9 @@ ErrorBox(IDS_ERR_SAVESONG, CMainFrame::GetMainFrame()); return FALSE; } - if ((!lpszPathName) || (!lpszPathName[0])) + if ((!lpszPathName) || (!lpszPathName[0]) || m_ShowSavedialog) { + m_ShowSavedialog = false; _splitpath(m_strPathName, drive, path, fname, NULL); if (!fname[0]) strcpy(fname, m_strTitle); strcpy(s, drive); @@ -1351,7 +1353,7 @@ // -> DESC="wav export update" UINT p = 0,n = 1; DWORD flags[MAX_BASECHANNELS]; - CHAR channel[MAX_CHANNELNAME+2]; + CHAR channel[MAX_CHANNELNAME+10]; // Channel mode : save song in multiple wav files (one for each enabled channels) if(wsdlg.m_bChannelMode){ @@ -1423,8 +1425,6 @@ if(!wsdlg.m_bChannelMode || !(flags[i] & CHN_MUTE)){ // rewbs.fix3239 m_SndFile.SetCurrentPos(0); - //Relabs.note: Since I removed pattern loop disabling from certain - //methods, making sure that pattern loop is off. m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; if (wsdlg.m_bSelectPlay) { m_SndFile.SetCurrentOrder(wsdlg.m_nMinOrder); @@ -1628,7 +1628,6 @@ } END_CRITICAL(); //m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED); - //Relabs.note: Added SONG_PATTERNLOOP. m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED|SONG_PATTERNLOOP); pMainFrm->PlayMod(this, m_hWndFollow, m_dwNotifyType); } @@ -1705,7 +1704,6 @@ pMainFrm->PauseMod(); //m_SndFile.m_dwSongFlags &= ~SONG_STEP; - //Relabs.hack: Added SONG_PATTERNLOOP m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PATTERNLOOP); m_SndFile.SetCurrentPos(0); pMainFrm->ResetElapsedTime(); @@ -3013,29 +3011,37 @@ void CModDoc::ChangeFileExtension(UINT nNewType) //---------------------------------------------- { - CHAR path[_MAX_PATH], drive[_MAX_PATH], fname[_MAX_FNAME]; - _splitpath(GetPathName(), drive, path, fname, NULL); + //Not making path if path is empty(case only(?) for new file) + if(GetPathName().GetLength() > 0) + { + CHAR path[_MAX_PATH], drive[_MAX_PATH], fname[_MAX_FNAME]; + _splitpath(GetPathName(), drive, path, fname, NULL); - CString newPath = drive; - newPath += path; + CString newPath = drive; + newPath += path; - //Catch case where we don't have a filename yet. - if (fname[0] == 0) { - newPath += GetTitle(); - } else { - newPath += fname; + //Catch case where we don't have a filename yet. + if (fname[0] == 0) { + newPath += GetTitle(); + } else { + newPath += fname; + } + + switch(nNewType) + { + case MOD_TYPE_XM: newPath += ".xm"; break; + case MOD_TYPE_IT: m_SndFile.m_dwSongFlags & SONG_ITPROJECT ? newPath+=".itp" : newPath+=".it"; break; + case MOD_TYPE_MPT: newPath += ".mptm"; break; + case MOD_TYPE_S3M: newPath += ".s3m"; break; + case MOD_TYPE_MOD: newPath += ".mod"; break; + default: ASSERT(false); + } + SetPathName(newPath, FALSE); + if(GetSoundFile() && GetSoundFile()->GetType() != nNewType) m_ShowSavedialog = true; + //Forcing savedialog to appear after extension change - otherwise + //unnotified file overwriting may occur. } - switch(nNewType) - { - case MOD_TYPE_XM: newPath += ".xm"; break; - case MOD_TYPE_IT: m_SndFile.m_dwSongFlags & SONG_ITPROJECT ? newPath+=".itp" : newPath+=".it"; break; - case MOD_TYPE_MPT: newPath += ".mptm"; break; - case MOD_TYPE_S3M: newPath += ".s3m"; break; - case MOD_TYPE_MOD: newPath += ".mod"; break; - default: ASSERT(false); - } - SetPathName(newPath, FALSE); UpdateAllViews(NULL, HINT_MODTYPE); } @@ -3090,7 +3096,6 @@ CString message; message.Format("Param %d can already be controlled with macro %X", paramToUse, checkMacro); CMainFrame::GetMainFrame()->MessageBox(message, "Macro exists for this param",MB_ICONINFORMATION | MB_OK); - //Relabs.expl: Modified to prevent notification box go 'under' ompt to block key messages. return; } } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Moddoc.h 2007-11-17 17:59:58 UTC (rev 192) @@ -89,6 +89,8 @@ DWORD m_dwNotifyType; PATTERNUNDOBUFFER PatternUndo[MAX_UNDO_LEVEL]; + bool m_ShowSavedialog; + // -> CODE#0015 // -> DESC="channels management dlg" BYTE MultiRecordMask[(MAX_CHANNELS+7)/8]; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -1389,10 +1389,6 @@ BOOL CModDoc::ExpandPattern(UINT nPattern) //---------------------------------------- { - - MODCOMMAND *newPattern, *oldPattern; - UINT nRows, nChns; - // -> CODE#0008 // -> DESC="#define to set pattern size" Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -189,7 +189,28 @@ //0,/*rewbs.smoothVST*/ ,0/*rewbs.velocity*/, }; +static void ShowChangesDialog() +//----------------------------- +{ + CString firstOpenMessage = "OpenMPT version " + CMainFrame::GetFullVersionString(); + firstOpenMessage += ". This is a development build primarily aimed for testing.\n\nChanges:\n\n" + "[New] Windows keys can be used as modifiers in the keyboard configuration(disables Windows start menu pop-up if used in the active keyboard configuration).\n" + "[New] Name filter in plugin selection dialog.\n" + "[Imp] Improved preset navigation in VST window.\n" + "[Imp] Improvements in IT compatible play.\n" + "[Imp] Improvements in user defined tuning modes.\n" + "[Fix] Fixed possible unnotified file overwriting when saving unsaved file.\n" + "[Fix] Fixed wrong version number in IT files saved with compatibility save.\n" + "[Fix] Fixed broken note preview for certain type of instruments in instrument tab.\n" + "[Fix] Fixed possible crash when exporting wav in channel mode with long channel name.\n" + "[Fix] Fixed channel position jump when clicking VST box in channel header.\n" + "[Fix] Fixed possible searching of wrong parameter in pattern search.\n" + "[Misc] Update check disabled and miscellaneous other changes."; + CMainFrame::GetMainFrame()->MessageBox(firstOpenMessage, "OpenMPT v." + CMainFrame::GetFullVersionString(), MB_ICONINFORMATION); +} + + ///////////////////////////////////////////////////////////////////////////// // MPTRACK Command Line options @@ -424,6 +445,7 @@ } void CTrackApp::LoadRegistryDLS() +//------------------------------- { CHAR szFileNameX[_MAX_PATH]; HKEY keyX; @@ -649,6 +671,7 @@ m_szConfigFileName[0] = 0; m_szStringsFileName[0] = 0; + if (GetModuleFileName(NULL, m_szConfigFileName, sizeof(m_szConfigFileName))) { CHAR szDrive[_MAX_DRIVE]="", szDir[_MAX_PATH]=""; @@ -786,6 +809,7 @@ m_dwTimeStarted = timeGetTime(); m_bInitialized = TRUE; + /* if (CMainFrame::gnCheckForUpdates) { try { UpdateCheck(); @@ -795,10 +819,12 @@ // we will end up here if the dll cannot be foung (e.g. on win98). } } + */ - // Open settings if this is the previous execution was with an earlier version. + // Open settings if the previous execution was with an earlier version. if (!cmdInfo.m_bNoSettingsOnNewVersion && CMainFrame::gcsPreviousVersion < CMainFrame::GetFullVersionString()) { StopSplashScreen(); + ShowChangesDialog(); m_pMainWnd->PostMessage(WM_COMMAND, ID_VIEW_OPTIONS); } @@ -1576,12 +1602,12 @@ m_bmp.LoadBitmap(MAKEINTRESOURCE(IDB_MPTRACK)); wsprintf(s, "Build Date: %s", gszBuildDate); SetDlgItemText(IDC_EDIT2, s); - SetDlgItemText(IDC_EDIT3, CString("Open Modplug Tracker, version ") + CMainFrame::GetFullVersionString()); + SetDlgItemText(IDC_EDIT3, CString("Open Modplug Tracker, version ") + CMainFrame::GetFullVersionString() + " (development build)"); m_heContact.SetWindowText( "Contact / Discussion:\r\n\ http://modplug.sourceforge.net/forum\r\n\ -\r\n\Updates:\r\n\ +\r\nUpdates:\r\n\ http://modplug.sourceforge.net/builds/#dev"); char *pArrCredit = { @@ -1591,7 +1617,7 @@ "|" "Contributors:|" "Robin Fernandes: ro...@so... (2004-2007)|" - "Ahti Leppan: rel...@us... (2005-2007)|" + "Ahti Lepp\xE4nen: aa...@dn... (2005-2007)|" "Sergiy Pylypenko: x.p...@gm... (2007)|" "Eric Chavanon: co...@er... (2004-2005)|" "Trevor Nunes: mo...@pl... (2004)|" @@ -1635,6 +1661,7 @@ //-------------------------- { if (gpAboutDlg) return; + ShowChangesDialog(); gpAboutDlg = new CAboutDlg(); gpAboutDlg->Create(IDD_ABOUTBOX, m_pMainWnd); } @@ -2960,6 +2987,7 @@ //rewbs.crashHandler LRESULT CTrackApp::ProcessWndProcException(CException* e, const MSG* pMsg) +//----------------------------------------------------------------------- { // TODO: Add your specialized code here and/or call the base class Log("Unhandled Exception\n"); Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/Mptrack.h 2007-11-17 17:59:58 UTC (rev 192) @@ -15,6 +15,7 @@ #include "resource.h" // main symbols #include "sndfile.h" #include <windows.h> +#include <Specstrings.h> // In VC2003, '__in' was undefined in winhttp.h #include <winhttp.h> class CModDoc; Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.cpp =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -9,7 +9,7 @@ { if(memLength < sizeof(s_Version) + sizeof(size_t)) return 0; WORD version = 0; - size_t s = 0; + uint32 s = 0; DWORD memPos = 0; memcpy(&version, src, sizeof(version)); memPos += sizeof(version); @@ -55,7 +55,7 @@ //Version fwrite(&s_Version, sizeof(s_Version), 1, f); - const size_t s = size(); + const uint32 s = size(); //Size fwrite(&s, sizeof(s), 1, f); //Values Modified: trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -42,7 +42,7 @@ { char buffer[10]; GetDlgItemText(IDC_EDIT_FACTOR, buffer, 9); - float factor = static_cast<float>(atof(buffer)); + float factor = ConvertStrTo<float>(buffer); if(factor > 0) { WORD (*array)[MAX_ENVPOINTS] = NULL; @@ -69,7 +69,7 @@ { for(UINT i = 0; i<*arraySize; i++) { - (*array)[i] *= factor; + (*array)[i] = static_cast<WORD>(factor * (*array)[i]); //Checking that the order of points is preserved. if(i > 0 && (*array)[i] <= (*array)[i-1]) Modified: trunk/OpenMPT/mptrack/TuningDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/TuningDialog.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -5,13 +5,23 @@ #include "misc_util.h" #include ".\tuningdialog.h" -const string CTuningDialog::s_stringTypeGEN = "General"; -const string CTuningDialog::s_stringTypeRP = "Ratio periodic"; -const string CTuningDialog::s_stringTypeTET = "TET"; - const CTuningDialog::TUNINGTREEITEM CTuningDialog::s_notFoundItemTuning = TUNINGTREEITEM(); const HTREEITEM CTuningDialog::s_notFoundItemTree = NULL; +using CTuning::UNOTEINDEXTYPE; +using CTuning::RATIOTYPE; +#define TT_GENERAL CTuning::TT_GENERAL +#define TT_GROUPGEOMETRIC CTuning::TT_GROUPGEOMETRIC +#define TT_GEOMETRIC CTuning::TT_GEOMETRIC +#define EM_CONST CTuning::EM_CONST +#define EM_CONST_STRICT CTuning::EM_CONST_STRICT +#define TUNINGTYPE CTuning::TUNINGTYPE +#define NOTEINDEXTYPE CTuning::NOTEINDEXTYPE +#define EM_ALLOWALL CTuning::EM_ALLOWALL + +using namespace std; + + /* TODOS: -Clear tuning @@ -144,9 +154,11 @@ //-------------------------------- { CDialog::OnInitDialog(); - + m_RatioMapWnd.Init(this, 0); + SetDlgItemText(IDC_TUNINGTYPE_DESC, ""); + //-->Creating treeview m_TreeItemTuningItemMap.ClearMapping(); for(size_t i = 0; i<m_TuningCollections.size(); i++) @@ -158,9 +170,9 @@ m_pActiveTuningCollection = GetpTuningCollection(m_pActiveTuning); //Adding tuning type names to corresponding combobox. - m_CombobTuningType.AddString(s_stringTypeGEN.c_str()); - m_CombobTuningType.AddString(s_stringTypeRP.c_str()); - m_CombobTuningType.AddString(s_stringTypeTET.c_str()); + m_CombobTuningType.AddString(CTuning::s_TuningTypeStrGeneral); + m_CombobTuningType.AddString(CTuning::s_TuningTypeStrGroupGeometric); + m_CombobTuningType.AddString(CTuning::s_TuningTypeStrGeometric); m_ButtonSet.EnableWindow(FALSE); @@ -169,8 +181,11 @@ m_EditTuningCollectionEditMask.ShowWindow(SW_SHOW); //#endif + m_EditSteps.SetLimitText(2); m_EditFineTuneSteps.SetLimitText(3); + if(m_pActiveTuning) m_RatioMapWnd.m_nNote = m_RatioMapWnd.m_nNoteCentre + m_pActiveTuning->GetValidityRange().first + (m_pActiveTuning->GetValidityRange().second - m_pActiveTuning->GetValidityRange().first)/2 + 1; + UpdateView(); return TRUE; @@ -245,15 +260,16 @@ m_RatioMapWnd.Invalidate(); UpdateRatioMapEdits(m_RatioMapWnd.GetShownCentre()); - const CTuning::STEPTYPE period = m_pActiveTuning->GetPeriod(); - const CTuning::RATIOTYPE periodRatio = m_pActiveTuning->GetPeriodRatio(); + + const UNOTEINDEXTYPE period = m_pActiveTuning->GetGroupSize(); + const RATIOTYPE GroupRatio = m_pActiveTuning->GetGroupRatio(); if(period > 0) { m_EditSteps.EnableWindow(); m_EditSteps.SetWindowText(Stringify(period).c_str()); m_EditRatioPeriod.EnableWindow(); - m_EditRatioPeriod.SetWindowText(Stringify(periodRatio).c_str()); + m_EditRatioPeriod.SetWindowText(Stringify(GroupRatio).c_str()); } else //case: m_pActiveTuning is of type general. { @@ -266,11 +282,11 @@ bool enableControls = true; - if(m_pActiveTuning->GetEditMask() == CTuning::EM_CONST || - m_pActiveTuning->GetEditMask() == CTuning::EM_CONST_STRICT) + if(m_pActiveTuning->GetEditMask() == EM_CONST || + m_pActiveTuning->GetEditMask() == EM_CONST_STRICT) { CheckDlgButton(IDC_CHECK_READONLY, MF_CHECKED); - if(m_pActiveTuning->GetEditMask() == CTuning::EM_CONST_STRICT) + if(m_pActiveTuning->GetEditMask() == EM_CONST_STRICT) m_ButtonReadOnly.EnableWindow(FALSE); else m_ButtonReadOnly.EnableWindow(TRUE); @@ -315,6 +331,8 @@ m_EditFineTuneSteps.SetWindowText(""); m_EditName.SetWindowText(""); + SetDlgItemText(IDC_TUNINGTYPE_DESC, ""); + m_CombobTuningType.SetCurSel(-1); m_ButtonReadOnly.EnableWindow(FALSE); @@ -407,81 +425,78 @@ { if(m_CombobTuningType.GetCount() < 3) m_DoErrorExit = true; - if(m_pActiveTuning->GetTuningType() == CTuning::TT_TET) + if(m_pActiveTuning->GetTuningType() == TT_GEOMETRIC) m_CombobTuningType.SetCurSel(2); else - if(m_pActiveTuning->GetTuningType() == CTuning::TT_RATIOPERIODIC) + if(m_pActiveTuning->GetTuningType() == TT_GROUPGEOMETRIC) m_CombobTuningType.SetCurSel(1); else m_CombobTuningType.SetCurSel(0); } + UpdateTuningDescription(); } -CTuning::CTUNINGTYPE CTuningDialog::GetTuningTypeFromStr(const string& str) const +TUNINGTYPE CTuningDialog::GetTuningTypeFromStr(const string& str) const //-------------------------------------------------------------------------------- { - if(str == s_stringTypeTET) - return CTuning::TT_TET; - if(str == s_stringTypeRP) - return CTuning::TT_RATIOPERIODIC; - return CTuning::TT_GENERAL; + return CTuning::GetTuningType(str.c_str()); } void CTuningDialog::OnCbnSelchangeComboTtype() //-------------------------------------------- { - if(m_pActiveTuning == NULL) - return; - - - const CTuning::CTUNINGTYPE oldType = m_pActiveTuning->GetTuningType(); - const size_t BS = 20; - char buffer[BS]; - m_CombobTuningType.GetWindowText(buffer, BS); - const string strNewType = buffer; - CTuning::CTUNINGTYPE newType = GetTuningTypeFromStr(strNewType); - if(!m_pActiveTuning->DoesTypeInclude(newType)) + if(m_pActiveTuning != NULL) { - if(MessageBox("This will change the ratio values; continue?", 0, MB_YESNO) == IDYES) + const TUNINGTYPE oldType = m_pActiveTuning->GetTuningType(); + const size_t BS = 20; + char buffer[BS]; + m_CombobTuningType.GetWindowText(buffer, BS); + const string strNewType = buffer; + TUNINGTYPE newType = GetTuningTypeFromStr(strNewType); + if(!m_pActiveTuning->IsOfType(newType)) { - m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; + if(MessageBox("This action may change the ratio values; continue?", 0, MB_YESNO) == IDYES) + { + m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; - const size_t BS = 20; - char buffer[BS]; - m_EditSteps.GetWindowText(buffer, BS); - CTuning::STEPTYPE steps = static_cast<CTuning::STEPTYPE>(atoi(buffer)); + const size_t BS = 20; + char buffer[BS]; + m_EditSteps.GetWindowText(buffer, BS); + NOTEINDEXTYPE steps = ConvertStrTo<NOTEINDEXTYPE>(buffer); - m_EditRatioPeriod.GetWindowText(buffer, BS); - CTuning::RATIOTYPE pr = static_cast<CTuning::RATIOTYPE>(atof(buffer)); + m_EditRatioPeriod.GetWindowText(buffer, BS); + RATIOTYPE pr = ConvertStrTo<RATIOTYPE>(buffer); - if(steps <= 0) - steps = 1; - if(pr <= 0) - pr = 1; + if(steps <= 0) + steps = 1; + if(pr <= 0) + pr = 1; - if(newType == CTuning::TT_RATIOPERIODIC) - m_pActiveTuning->CreateRatioPeriodic(steps, pr); - else - if(newType == CTuning::TT_TET) - m_pActiveTuning->CreateTET(steps, pr); - - UpdateView(UM_TUNINGDATA); - } - else //Not wanting to discard current values. - { - //Restoring tuning type combobox. - if(oldType == CTuning::TT_TET) - m_CombobTuningType.SetCurSel(2); - else + if(newType == TT_GROUPGEOMETRIC) + m_pActiveTuning->CreateGroupGeometric(steps, pr, 0); + else + if(newType == TT_GEOMETRIC) + m_pActiveTuning->CreateGeometric(steps, pr); + + UpdateView(UM_TUNINGDATA); + } + else //Not wanting to discard current values. { - if(oldType == CTuning::TT_RATIOPERIODIC) - m_CombobTuningType.SetCurSel(1); - else - m_CombobTuningType.SetCurSel(0); + //Restoring tuning type combobox. + if(oldType == TT_GEOMETRIC) + m_CombobTuningType.SetCurSel(2); + else + { + if(oldType == TT_GROUPGEOMETRIC) + m_CombobTuningType.SetCurSel(1); + else + m_CombobTuningType.SetCurSel(0); + } } } } + UpdateTuningDescription(); } @@ -509,7 +524,7 @@ if(!m_pActiveTuning) return; - const CTuning::STEPTYPE currentNote = m_RatioMapWnd.GetShownCentre(); + const NOTEINDEXTYPE currentNote = m_RatioMapWnd.GetShownCentre(); const size_t BS = 5; char buffer[BS]; m_EditNotename.GetWindowText(buffer, BS); @@ -541,7 +556,7 @@ if(!m_pActiveTuning) return; - const CTuning::STEPTYPE currentNote = m_RatioMapWnd.GetShownCentre(); + const NOTEINDEXTYPE currentNote = m_RatioMapWnd.GetShownCentre(); const size_t BS = 12; char buffer[BS]; @@ -549,7 +564,7 @@ string str = buffer; if(str.length() > 0) { - m_pActiveTuning->SetRatio(currentNote, static_cast<CTuning::RATIOTYPE>(atof(buffer))); + m_pActiveTuning->SetRatio(currentNote, ConvertStrTo<RATIOTYPE>(buffer)); m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; UpdateTuningType(); m_RatioMapWnd.Invalidate(); @@ -568,21 +583,21 @@ const size_t BS = 20; char buffer[BS]; m_EditMiscActions.GetWindowText(buffer, BS); - m_pActiveTuning->Multiply(static_cast<CTuning::RATIOTYPE>(atof(buffer))); + m_pActiveTuning->Multiply(ConvertStrTo<RATIOTYPE>(buffer)); m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; m_EditMiscActions.SetWindowText(""); m_RatioMapWnd.Invalidate(); } } -void CTuningDialog::UpdateRatioMapEdits(const CTuning::STEPTYPE& note) +void CTuningDialog::UpdateRatioMapEdits(const NOTEINDEXTYPE& note) //----------------------------------------------------------- { if(m_pActiveTuning == NULL) return; m_RatioEditApply = false; - m_EditRatio.SetWindowText(Stringify(m_pActiveTuning->GetFrequencyRatio(note)).c_str()); + m_EditRatio.SetWindowText(Stringify(m_pActiveTuning->GetRatio(note)).c_str()); m_NoteEditApply = false; m_EditNotename.SetWindowText(m_pActiveTuning->GetNoteName(note).c_str()); @@ -625,12 +640,12 @@ if(ext == CTuning::s_FileExtension) { if(pT != NULL) - failure = pT->SerializeBinary(fout); + failure = pT->Serialize(fout); } else //Case: Saving tuning collection. if(ext == CTuningCollection::s_FileExtension) if(pTC != NULL) - failure = pTC->SerializeBinary(fout); + failure = pTC->Serialize(fout); fout.close(); EndWaitCursor(); @@ -663,13 +678,12 @@ if(ext == CTuning::s_FileExtension) { ifstream fin(dlg.GetPathName(), ios::binary); - CTuning* pT = new CTuningRTI; - failure = pT->UnSerializeBinary(fin); + CTuning* pT = CTuningRTI::UnserializeOLD(fin); + if(pT == 0) {fin.clear(); fin.seekg(0); pT = CTuning::Unserialize(fin);} fin.close(); - if(failure) - delete pT; - else + if(pT) { + failure = false; m_TempTunings.AddTuning(pT); m_pActiveTuning = pT; @@ -686,7 +700,7 @@ //directly replace some collection. CTuningCollection* pNewTCol = new CTuningCollection; pNewTCol->SetSavefilePath(static_cast<LPCTSTR>(dlg.GetPathName())); - failure = pNewTCol->UnSerializeBinary(); + failure = pNewTCol->Unserialize(); if(failure) { delete pNewTCol; pNewTCol = 0; @@ -702,10 +716,8 @@ } } - - if(failure) - ErrorBox(IDS_ERR_FILEOPEN, this); + ErrorBox(IDS_OPERATION_FAIL, this); } void CTuningDialog::OnEnChangeEditFinetunesteps() @@ -722,7 +734,7 @@ const BYTE BS = 5; char buffer[BS]; m_EditFineTuneSteps.GetWindowText(buffer, BS); - m_EditFineTuneSteps.SetWindowText(Stringify(m_pActiveTuning->SetFineStepCount(static_cast<CTuning::FINESTEPTYPE>(atoi(buffer)))).c_str()); + m_EditFineTuneSteps.SetWindowText(Stringify(m_pActiveTuning->SetFineStepCount(ConvertStrTo<CTuning::USTEPINDEXTYPE>(buffer))).c_str()); m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; m_EditFineTuneSteps.Invalidate(); } @@ -737,14 +749,14 @@ if(IsDlgButtonChecked(IDC_CHECK_READONLY)) { - if(m_pActiveTuning->SetEditMask(CTuning::EM_CONST)) + if(m_pActiveTuning->SetEditMask(EM_CONST)) CheckDlgButton(IDC_CHECK_READONLY, MF_UNCHECKED); else UpdateView(UM_TUNINGDATA); } else { - if(m_pActiveTuning->SetEditMask(CTuning::EM_ALLOWALL)) + if(m_pActiveTuning->SetEditMask(EM_ALLOWALL)) CheckDlgButton(IDC_CHECK_READONLY, MF_CHECKED); else UpdateView(UM_TUNINGDATA); @@ -777,7 +789,7 @@ const size_t BS = 20; char buffer[BS]; m_EditSteps.GetWindowText(buffer, BS); - m_pActiveTuning->ChangePeriod(static_cast<CTuning::STEPTYPE>(atoi(buffer))); + m_pActiveTuning->ChangeGroupsize(ConvertStrTo<UNOTEINDEXTYPE>(buffer)); m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; UpdateView(UM_TUNINGDATA); } @@ -792,7 +804,7 @@ const size_t BS = 20; char buffer[BS]; m_EditRatioPeriod.GetWindowText(buffer, BS); - m_pActiveTuning->ChangePeriodRatio(static_cast<CTuning::RATIOTYPE>(atof(buffer))); + m_pActiveTuning->ChangeGroupRatio(ConvertStrTo<RATIOTYPE>(buffer)); m_ModifiedTCs[GetpTuningCollection(m_pActiveTuning)] = true; UpdateView(UM_TUNINGDATA); } @@ -847,7 +859,7 @@ CTuningCollection& rCurTCol = *m_TuningCollections.at(i); for(size_t j = 0; j<rCurTCol.GetNumTunings(); j++) { - if(pT == &rCurTCol.GetTuning(static_cast<unsigned short>(j))) + if(pT == &rCurTCol.GetTuning(j)) { return &rCurTCol; } @@ -863,7 +875,7 @@ //This methods gets called when selected item in the treeview //changes. - //TODO: This gets called before killfocus messages of edits, this + //TODO: This gets called before killfocus messages of edits, which // can be a problem. LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); @@ -903,7 +915,6 @@ //---------------------------------------------------------------------------- { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); - // TODO: Add your control notification handler code here *pResult = 0; if(pNMTreeView->itemOld.mask & TVIF_HANDLE && pNMTreeView->itemOld.hItem) { @@ -1243,7 +1254,7 @@ if(!m_pActiveTuningCollection) return; - if(m_pActiveTuningCollection->SerializeBinary()) + if(m_pActiveTuningCollection->Serialize()) { MsgBox(IDS_OPERATION_FAIL, this, NULL, MB_ICONINFORMATION); } @@ -1254,7 +1265,33 @@ } } +void CTuningDialog::UpdateTuningDescription() +//------------------------------------------- +{ + switch(m_CombobTuningType.GetCurSel()) + { + case 0: + SetDlgItemText(IDC_TUNINGTYPE_DESC, CTuning::GetTuningTypeDescription(TT_GENERAL)); + break; + case 1: + SetDlgItemText(IDC_TUNINGTYPE_DESC, CTuning::GetTuningTypeDescription(TT_GROUPGEOMETRIC)); + break; + + case 2: + SetDlgItemText(IDC_TUNINGTYPE_DESC, CTuning::GetTuningTypeDescription(TT_GEOMETRIC)); + break; + + default: + if(m_pActiveTuning) + SetDlgItemText(IDC_TUNINGTYPE_DESC, m_pActiveTuning->GetTuningTypeDescription()); + else + SetDlgItemText(IDC_TUNINGTYPE_DESC, "Unknown type"); + break; + } +} + + //////////////////////////////////////////////////////// //*************** //CTuningTreeCtrl Modified: trunk/OpenMPT/mptrack/TuningDialog.h =================================================================== --- trunk/OpenMPT/mptrack/TuningDialog.h 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/TuningDialog.h 2007-11-17 17:59:58 UTC (rev 192) @@ -42,7 +42,7 @@ void RemoveValue_1(const T1& a) { - vector<T1>::iterator iter = find(m_T1.begin(), m_T1.end(), a); + typename vector<T1>::iterator iter = find(m_T1.begin(), m_T1.end(), a); if(iter != m_T1.end()) { m_T2.erase(m_T2.begin() + (iter-m_T1.begin())); @@ -52,7 +52,7 @@ void RemoveValue_2(const T2& b) { - vector<T2>::iterator iter = find(m_T2.begin(), m_T2.end(), b); + typename vector<T2>::iterator iter = find(m_T2.begin(), m_T2.end(), b); if(iter != m_T2.end()) { m_T1.erase(m_T1.begin() + (iter-m_T2.begin())); @@ -62,7 +62,7 @@ T2 GetMapping_12(const T1& a) const { - vector<T1>::const_iterator iter = find(m_T1.begin(), m_T1.end(), a); + typename vector<T1>::const_iterator iter = find(m_T1.begin(), m_T1.end(), a); if(iter != m_T1.end()) { return m_T2[iter-m_T1.begin()]; @@ -73,7 +73,7 @@ T1 GetMapping_21(const T2& b) const { - vector<T2>::const_iterator iter = find(m_T2.begin(), m_T2.end(), b); + typename vector<T2>::const_iterator iter = find(m_T2.begin(), m_T2.end(), b); if(iter != m_T2.end()) { return m_T1[iter-m_T2.begin()]; @@ -102,8 +102,7 @@ CTuningDialog& m_rParentDialog; public: CTuningTreeCtrl(CTuningDialog* parent) : m_rParentDialog(*parent) {} - //Note: Parent address may be given in initialiser list so - //do not use it. + //Note: Parent address may be given in its initializer list. void SetDragging(bool state = true) {m_Dragging = state;} bool IsDragging() {return m_Dragging;} @@ -198,7 +197,7 @@ BOOL OnInitDialog(); void AddTuningCollection(CTuningCollection* pTC) {if(pTC) m_TuningCollections.push_back(pTC);} - void UpdateRatioMapEdits(const CTuning::STEPTYPE&); + void UpdateRatioMapEdits(const CTuning::NOTEINDEXTYPE&); bool GetModifiedStatus(const CTuningCollection* const pTc) const; @@ -209,8 +208,10 @@ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support private: - CTuning::CTUNINGTYPE GetTuningTypeFromStr(const string& str) const; + CTuning::TUNINGTYPE GetTuningTypeFromStr(const string& str) const; + void UpdateTuningDescription(); + void UpdateView(const int UpdateMask = 0); void UpdateTuningType(); @@ -222,16 +223,17 @@ void OnEndDrag(HTREEITEM dragDestItem); - CTuningCollection* GetpTuningCollection(const CTuning* const) const; //Returns pointer to the tuning collection where tuning given as argument //belongs to. - - CTuningCollection* GetpTuningCollection(HTREEITEM ti) const; + CTuningCollection* GetpTuningCollection(const CTuning* const) const; + //Returns the address of corresponding tuningcollection; if it points //to tuning-entry, returning the owning tuningcollection - - bool IsDeletable(const CTuningCollection* const pTC) const; + CTuningCollection* GetpTuningCollection(HTREEITEM ti) const; + //Checks whether tuning collection can be deleted. + bool IsDeletable(const CTuningCollection* const pTC) const; + private: CTuningRatioMapWnd m_RatioMapWnd; @@ -273,10 +275,6 @@ CTuningTreeCtrl m_TreeCtrlTuning; private: - static const string s_stringTypeGEN; - static const string s_stringTypeRP; - static const string s_stringTypeTET; - typedef CTuningTreeItem TUNINGTREEITEM; typedef CBijectiveMap<HTREEITEM, TUNINGTREEITEM> TREETUNING_MAP; TREETUNING_MAP m_TreeItemTuningItemMap; @@ -299,13 +297,14 @@ TT_TUNING }; + + //To indicate whether to apply changes made to + //those edit boxes(they are modified by certain activities + //in case which the modifications should not be applied to + //tuning data. bool m_NoteEditApply; bool m_RatioEditApply; - //To indicate whether to apply changes made to - //to those edit boxes(they are modified by non-user - //activies and in these cases the value should be applied - //to the tuning data. - + enum { UM_TUNINGDATA = 1, //UM <-> Update Mask @@ -317,9 +316,9 @@ bool AddTuning(CTuningCollection*, CTuning* pT = NULL); - bool m_DoErrorExit; //Flag to prevent multiple exit error-messages. - + bool m_DoErrorExit; + void DoErrorExit(); Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -965,6 +965,7 @@ if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) { memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); + pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; pModDoc->SetModified(); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); } @@ -989,6 +990,7 @@ if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) { memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); + pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; pModDoc->SetModified(); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); } @@ -1013,6 +1015,7 @@ if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) { memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); + pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; pModDoc->SetModified(); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); } @@ -1037,6 +1040,7 @@ if ((pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) && (nChn < pSndFile->m_nChannels) && (strncmp(s, pSndFile->ChnSettings[nChn].szName, MAX_CHANNELNAME))) { memcpy(pSndFile->ChnSettings[nChn].szName, s, MAX_CHANNELNAME); + pSndFile->ChnSettings[nChn].szName[ARRAYELEMCOUNT(pSndFile->ChnSettings[nChn].szName)-1] = 0; pModDoc->SetModified(); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | (m_nActiveTab << 24)); } Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2007-07-11 20:36:02 UTC (rev 191) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2007-11-17 17:59:58 UTC (rev 192) @@ -2361,7 +2361,7 @@ { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (pMainFrm) && (note<128)) + if ((pModDoc) && (pMainFrm) && (note > 0) && (note<128)) { CHAR s[64]; const size_t sizeofS = sizeof(s) / sizeof(s[0]); @@ -2387,13 +2387,13 @@ } */ INSTRUMENTHEADER *penv = pModDoc->GetSoundFile()->Headers[m_nInstrument]; - if ((!penv) || (!penv->Keyboard[note])) return; + if ((!penv) || (!penv->Keyboard[note-1] && !penv->nMixPlug)) return; m_baPlayingNote[note] = true; //rewbs.instViewNNA m_nPlayingChannel= pModDoc->PlayNote(note, m_nInstrument, 0, FALSE); //rewbs.instViewNNA s[0] = 0; if ((note) && (note <= 120)) { - const string temp = pModDoc->GetSoundFile()->GetNoteName(static_cast<CTuning::STEPTYPE>(note), m_nInstrument); + const string temp = pModDoc->GetSoundFile()->GetNoteName(note, m_nInstrument); ... [truncated message content] |
From: <re...@us...> - 2007-07-11 20:36:37
|
Revision: 191 http://svn.sourceforge.net/modplug/?rev=191&view=rev Author: rewbs Date: 2007-07-11 13:36:02 -0700 (Wed, 11 Jul 2007) Log Message: ----------- . <rewbs> Fix pattern search, which could search for the wrong param. Also enable typing of desired param value rather than only selecting from listbox. (http://lpchip.com/modplug/viewtopic.php?t=1799) . <rewbs> Delay-load winhttp.dll and don't die if it can't be found, e.g. on win98. (http://lpchip.com/modplug/viewtopic.php?t=1778) . <rewbs> Fix a couple of pixels on D# in the pattern editor small font bitmap. (http://lpchip.com/modplug/viewtopic.php?t=1781) Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/res/view_pat.bmp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -2236,7 +2236,17 @@ return gFXInfo[ndx].dwEffect; } +UINT CModDoc::GetEffectMaskFromIndex(UINT ndx) +//------------------------------------------------------- +{ + if (ndx >= MAX_FXINFO) { + return 0; + } + return gFXInfo[ndx].dwParamValue; + +} + BOOL CModDoc::GetEffectInfo(UINT ndx, LPSTR s, BOOL bXX, DWORD *prangeMin, DWORD *prangeMax) //------------------------------------------------------------------------------------------ { Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Moddoc.h 2007-07-11 20:36:02 UTC (rev 191) @@ -125,6 +125,7 @@ BOOL GetEffectInfo(UINT ndx, LPSTR s, BOOL bXX=FALSE, DWORD *prangeMin=NULL, DWORD *prangeMax=NULL); LONG GetIndexFromEffect(UINT command, UINT param); UINT GetEffectFromIndex(UINT ndx, int &refParam); + UINT GetEffectMaskFromIndex(UINT ndx); BOOL GetEffectNameEx(LPSTR pszName, UINT ndx, UINT param); BOOL IsExtendedEffect(UINT ndx) const; UINT MapValueToPos(UINT ndx, UINT param); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -787,7 +787,13 @@ m_bInitialized = TRUE; if (CMainFrame::gnCheckForUpdates) { - UpdateCheck(); + try { + UpdateCheck(); + } catch (...) { + // Could not do update check. Don't compain - do nothing. + // Assuming winhttp.dll is set as delay-load in the project settings, + // we will end up here if the dll cannot be foung (e.g. on win98). + } } // Open settings if this is the previous execution was with an earlier version. Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -2189,7 +2189,7 @@ CString processMethod = (m_pEffect->flags & effFlagsCanReplacing) ? "processReplacing" : "process"; CVstPluginManager::ReportPlugException("The plugin %s threw an exception in %s. It has automatically been set to \"Bypass\".", m_pMixStruct->Info.szName, processMethod); ClearVSTEvents(); - SetEvent(processCalled); +// SetEvent(processCalled); } //mix outputs of multi-output VSTs: Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -753,17 +753,21 @@ m_nVol = combo->GetItemData(combo->GetCurSel()); } // Effect - m_nParam = 0; - if (((combo = (CComboBox *)GetDlgItem(IDC_COMBO5)) != NULL) && (m_pModDoc)) - { - int n = -1; - m_nCommand = m_pModDoc->GetEffectFromIndex(combo->GetItemData(combo->GetCurSel()), n); - if (n >= 0) m_nParam = n; + int effectIndex = -1; + if (((combo = (CComboBox *)GetDlgItem(IDC_COMBO5)) != NULL) && (m_pModDoc)) { + int n = -1; // unused parameter adjustment + effectIndex = combo->GetItemData(combo->GetCurSel()); + m_nCommand = m_pModDoc->GetEffectFromIndex(effectIndex, n); } // Param - if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO6)) != NULL) - { - m_nParam |= combo->GetItemData(combo->GetCurSel()); + m_nParam = 0; + if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO6)) != NULL) { + m_nParam = combo->GetItemData(combo->GetCurSel()); + + // Apply parameter value mask if required (e.g. SDx has mask D0). + if (effectIndex > -1) { + m_nParam |= m_pModDoc->GetEffectMaskFromIndex(effectIndex); + } } // Min/Max channels if (!m_bReplace) Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2007-07-11 20:36:02 UTC (rev 191) @@ -257,6 +257,7 @@ }; + //======================================= class CEditCommand: public CPropertySheet //======================================= Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/mptrack.rc 2007-07-11 20:36:02 UTC (rev 191) @@ -1133,10 +1133,10 @@ CONTROL "",IDC_TABCTRL1,"SysTabControl32",0x0,0,0,412,14 END -IDD_EDIT_FIND DIALOG 0, 0, 182, 145 +IDD_EDIT_FIND DIALOGEX 0, 0, 182, 145 STYLE DS_SETFONT | WS_CHILD | WS_CAPTION CAPTION "Find" -FONT 8, "MS Sans Serif" +FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN GROUPBOX "Search for:",IDC_STATIC,4,4,174,107 CONTROL "Note",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, @@ -1161,8 +1161,8 @@ WS_VSCROLL | WS_TABSTOP CONTROL "Effect Data",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,78,52,10 - COMBOBOX IDC_COMBO6,117,92,48,68,CBS_DROPDOWNLIST | WS_VSCROLL | - WS_TABSTOP + COMBOBOX IDC_COMBO6,117,92,48,68,CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP CONTROL "Find in current pattern",IDC_RADIO1,"Button", BS_AUTORADIOBUTTON,6,117,88,10 CONTROL "Find in the whole song",IDC_RADIO2,"Button", @@ -1264,7 +1264,6 @@ CAPTION "Effect" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - LTEXT "Value:",IDC_TEXT1,103,3,115,8 COMBOBOX IDC_COMBO1,0,15,102,83,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH | @@ -1276,6 +1275,7 @@ CONTROL "",IDC_SLIDER2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,134,0,43,12 LTEXT "Effect Type:",IDC_STATIC,54,1,19,8,NOT WS_VISIBLE + LTEXT "Value:",IDC_TEXT1,103,3,23,8 END IDD_SAMPLE_AMPLIFY DIALOGEX 0, 0, 175, 66 Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2007-07-11 20:36:02 UTC (rev 191) @@ -51,6 +51,7 @@ LinkIncremental="2" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\xsoundlib\Debug" + DelayLoadDLLs="winhttp.dll" GenerateDebugInformation="TRUE" AssemblyDebug="1" ProgramDatabaseFile=".\Debug/mptrack.pdb" @@ -95,7 +96,9 @@ <Tool Name="VCCLCompilerTool" AdditionalOptions="/EHsc" - InlineFunctionExpansion="1" + Optimization="3" + GlobalOptimizations="TRUE" + InlineFunctionExpansion="2" OptimizeForWindowsApplication="TRUE" AdditionalIncludeDirectories="..\unlha,..\unzip,..\unrar,..\soundlib,..\include,..\xsoundlib" PreprocessorDefinitions="NDEBUG,WIN32,_WINDOWS,ENABLE_MMX,ENABLE_EQ,MODPLUG_TRACKER,NO_PACKING,HAVE_DOT_NET,ENABLE_AMD,ENABLE_SSE,ENABLE_AMDNOW" @@ -868,9 +871,6 @@ RelativePath=".\res\moddoc.ico"> </File> <File - RelativePath=".\res\modplthingmorecontrast.bmp"> - </File> - <File RelativePath=".\res\MPTRACK.bmp"> </File> <File @@ -895,9 +895,6 @@ RelativePath=".\Res\smptoolb.bmp"> </File> <File - RelativePath=".\Res\splash.bmp"> - </File> - <File RelativePath=".\res\splashno.bmp"> </File> <File @@ -992,6 +989,9 @@ RelativePath=".\mod2wave.h"> </File> <File + RelativePath="..\soundlib\modcommand.h"> + </File> + <File RelativePath=".\moddoc.h"> </File> <File Modified: trunk/OpenMPT/mptrack/res/view_pat.bmp =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2007-06-17 18:42:13
|
Revision: 190 http://svn.sourceforge.net/modplug/?rev=190&view=rev Author: rewbs Date: 2007-06-17 11:42:09 -0700 (Sun, 17 Jun 2007) Log Message: ----------- + <rewbs> Add name filter to plugin selection dialog. Useful when you have hundreds of plugins. Modified Paths: -------------- trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2007-06-17 18:42:09 UTC (rev 190) @@ -985,10 +985,11 @@ // BEGIN_MESSAGE_MAP(CSelectPluginDlg, CDialog) - ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelChanged) - ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnSelDblClk) - ON_COMMAND(IDC_BUTTON1, OnAddPlugin) - ON_COMMAND(IDC_BUTTON2, OnRemovePlugin) + ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelChanged) + ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnSelDblClk) + ON_COMMAND(IDC_BUTTON1, OnAddPlugin) + ON_COMMAND(IDC_BUTTON2, OnRemovePlugin) + ON_EN_CHANGE(IDC_NAMEFILTER, OnNameFilterChanged) ON_WM_SIZE() ON_WM_GETMINMAXINFO() END_MESSAGE_MAP() @@ -996,7 +997,9 @@ void CSelectPluginDlg::DoDataExchange(CDataExchange* pDX) //------------------------------------------------------- { + CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_treePlugins); + DDX_Text(pDX, IDC_NAMEFILTER, m_sNameFilter); } @@ -1199,6 +1202,14 @@ CDialog::OnCancel(); } +void CSelectPluginDlg::OnNameFilterChanged() +//------------------------------------- +{ + GetDlgItem(IDC_NAMEFILTER)->GetWindowText(m_sNameFilter); + m_sNameFilter = m_sNameFilter.MakeLower(); + UpdatePluginsList(); +} + VOID CSelectPluginDlg::UpdatePluginsList(DWORD forceSelect/*=0*/) //--------------------------------------------------------------- { @@ -1231,18 +1242,31 @@ PVSTPLUGINLIB p = pManager->GetFirstPlugin(); while (p) { - if (p->dwPluginId1 == kDmoMagic) - { + if (p->dwPluginId1 == kDmoMagic) { tvis.hParent = hDmo; - } else - { + } else { tvis.hParent = (p->bIsInstrument) ? hSynth : hVst; } + + // Apply name filter + if (m_sNameFilter != "") { + CString displayName = p->szLibraryName; + if (displayName.MakeLower().Find(m_sNameFilter) == -1) { + p = p->pNext; + continue; + } + } + tvis.hInsertAfter = TVI_SORT; tvis.item.pszText = p->szLibraryName; tvis.item.lParam = (LPARAM)p; HTREEITEM h = m_treePlugins.InsertItem(&tvis); + //If filter is active, expand nodes. + if (m_sNameFilter != "") { + m_treePlugins.EnsureVisible(h); + } + //Which plugin should be selected? if (m_pPlugin) { @@ -1279,8 +1303,7 @@ } } m_treePlugins.SetRedraw(TRUE); - if (cursel) - { + if (cursel) { m_treePlugins.SelectItem(cursel); m_treePlugins.SetItemState(cursel, TVIS_BOLD, TVIS_BOLD); m_treePlugins.EnsureVisible(cursel); @@ -1400,11 +1423,13 @@ void CSelectPluginDlg::OnSize(UINT nType, int cx, int cy) +//------------------------------------------------------- { CDialog::OnSize(nType, cx, cy); if (m_treePlugins) { - m_treePlugins.MoveWindow(11,11, cx-105, cy-40, FALSE); + m_treePlugins.MoveWindow(11, 33, cx-105, cy-63, FALSE); + ::MoveWindow(GetDlgItem(IDC_NAMEFILTER)->m_hWnd, 50, 11, cx-145, 21, FALSE); ::MoveWindow(GetDlgItem(IDC_TEXT1)->m_hWnd, 11,cy-25, cx-22, 25, FALSE); ::MoveWindow(GetDlgItem(IDOK)->m_hWnd, cx-85, 11, 75, 23, FALSE); ::MoveWindow(GetDlgItem(IDCANCEL)->m_hWnd, cx-85, 39, 75, 23, FALSE); Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/Vstplug.h 2007-06-17 18:42:09 UTC (rev 190) @@ -232,6 +232,7 @@ PSNDMIXPLUGIN m_pPlugin; CModDoc *m_pModDoc; CTreeCtrl m_treePlugins; + CString m_sNameFilter; public: CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent); //rewbs.plugDocAware @@ -244,6 +245,7 @@ virtual VOID OnCancel(); afx_msg void OnAddPlugin(); afx_msg void OnRemovePlugin(); + afx_msg void OnNameFilterChanged(); afx_msg void OnSelChanged(NMHDR *pNotifyStruct, LRESULT * result); afx_msg void OnSelDblClk(NMHDR *pNotifyStruct, LRESULT * result); DECLARE_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/mptrack.rc 2007-06-17 18:42:09 UTC (rev 190) @@ -1621,14 +1621,16 @@ CAPTION "Mix Plugins" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN + EDITTEXT IDC_NAMEFILTER,28,7,127,14,ES_AUTOHSCROLL + CONTROL "Tree1",IDC_TREE1,"SysTreeView32",TVS_DISABLEDRAGDROP | + TVS_SHOWSELALWAYS | WS_TABSTOP,7,21,148,126, + WS_EX_CLIENTEDGE DEFPUSHBUTTON "Add to Song",IDOK,161,7,50,14 + PUSHBUTTON "New plugin...",IDC_BUTTON1,161,46,50,14,BS_MULTILINE + PUSHBUTTON "Remove",IDC_BUTTON2,161,63,50,14 PUSHBUTTON "Cancel",IDCANCEL,161,132,50,14 LTEXT "",IDC_TEXT1,7,151,204,8 - PUSHBUTTON "New plugin...",IDC_BUTTON1,161,46,50,14,BS_MULTILINE - PUSHBUTTON "Remove",IDC_BUTTON2,161,63,50,14 - CONTROL "Tree1",IDC_TREE1,"SysTreeView32",TVS_DISABLEDRAGDROP | - TVS_SHOWSELALWAYS | WS_TABSTOP,7,7,148,140, - WS_EX_CLIENTEDGE + LTEXT "Filter:",IDC_STATIC,8,9,18,8 END IDD_PLUGINEDITOR DIALOGEX 0, 0, 187, 95 Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/resource.h 2007-06-17 18:42:09 UTC (rev 190) @@ -789,6 +789,7 @@ #define IDC_TEXT_RPB 2301 #define IDC_SPIN_RPB 2302 #define IDC_EDIT_RPB 2303 +#define IDC_NAMEFILTER 2304 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1015,7 +1016,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 515 #define _APS_NEXT_COMMAND_VALUE 59211 -#define _APS_NEXT_CONTROL_VALUE 2304 +#define _APS_NEXT_CONTROL_VALUE 2305 #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: <re...@us...> - 2007-06-17 16:24:19
|
Revision: 189 http://svn.sourceforge.net/modplug/?rev=189&view=rev Author: rewbs Date: 2007-06-17 09:24:14 -0700 (Sun, 17 Jun 2007) Log Message: ----------- Applying Pelya's patch with minor formatting and variable/method name changes. Thanks Pelya! + <Pelya> Allow Window key as a modifier in the keyboard configuration. Disables start menu pop-up when pressing the Win key if and only if it used in the active keyboard configuration. + <Pelya> Disables NumLock/CapsLock/ScrollLock lamps on keyboard if and only if they are used in the active keyboard configuration. The lamps will blink anyway - can't help it until we start using DirectInput. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/InputHandler.h trunk/OpenMPT/packageTemplate/Installation.txt Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2007-05-27 17:47:34 UTC (rev 188) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2007-06-17 16:24:14 UTC (rev 189) @@ -2814,7 +2814,8 @@ for (int k=0; k<commands[curCmd].kcList.GetSize(); k++) { curKc = commands[curCmd].kcList[k]; - if ((!curKc.mod) || (curKc.code!=VK_SHIFT && curKc.code!=VK_CONTROL && curKc.code!=VK_MENU && curKc.code!=0)) + if ((!curKc.mod) || (curKc.code!=VK_SHIFT && curKc.code!=VK_CONTROL && curKc.code!=VK_MENU && curKc.code!=0 && + curKc.code!=VK_LWIN && curKc.code!=VK_RWIN )) // Feature: use Windows keys as modifier keys { report+="Error! " + GetCommandText((CommandID)curCmd) + " must be a modifier (shift/ctrl/alt), but is currently " + GetKeyText(inKc.mod, inKc.code) + "\r\n"; //replace with dummy @@ -2880,6 +2881,7 @@ case VK_SHIFT: return HOTKEYF_SHIFT; case VK_MENU: return HOTKEYF_ALT; case VK_CONTROL: return HOTKEYF_CONTROL; + case VK_LWIN: case VK_RWIN: return HOTKEYF_EXT; // Feature: use Windows keys as modifier keys default: /*DEBUG: ASSERT(false);*/ return 0; //can only get modifier for modifier key } @@ -2897,9 +2899,6 @@ //Clear map memset(km, -1, sizeof(kcNull)*KeyMapSize); -// km.RemoveAll(); -// km.InitHashTable(700423); - //Copy commandlist content into map: for (UINT cmd=0; cmd<kcNumCommands; cmd++) @@ -3216,6 +3215,7 @@ if (mod & HOTKEYF_SHIFT) text.Append("Shift+"); if (mod & HOTKEYF_CONTROL) text.Append("Ctrl+"); if (mod & HOTKEYF_ALT) text.Append("Alt+"); + if (mod & HOTKEYF_EXT) text.Append("Win+"); // Feature: use Windows keys as modifier keys return text; } @@ -3436,4 +3436,4 @@ return conflict; } -//end rewbs.customKeys \ No newline at end of file +//end rewbs.customKeys Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2007-05-27 17:47:34 UTC (rev 188) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2007-06-17 16:24:14 UTC (rev 189) @@ -35,6 +35,8 @@ //Get Keymap activeCommandSet->GenKeyMap(keyMap); + SetupSpecialKeyInterception(); // Feature: use Windows keys as modifier keys, intercept special keys + m_nSkipGeneratedKeypresses = 0; m_bDistinguishControls = false; m_bDistinguishShifts = false; @@ -54,38 +56,37 @@ //-------------------------------------------------------------- - - CommandID CInputHandler::GeneralKeyEvent(InputTargetContext context, int code, WPARAM wParam , LPARAM lParam) - { CommandID executeCommand = kcNull; KeyEventType keyEventType; - if (code == HC_ACTION) - { + if (code == HC_ACTION) { //Get the KeyEventType (key up, key down, key repeat) DWORD scancode = lParam >> 16; - if ((scancode & 0xC000) == 0xC000) keyEventType = kKeyEventUp; - else if ((scancode & 0xC000) == 0x0000) keyEventType = kKeyEventDown; - else keyEventType = kKeyEventRepeat; + if ((scancode & 0xC000) == 0xC000) { + keyEventType = kKeyEventUp; + } else if ((scancode & 0xC000) == 0x0000) { + keyEventType = kKeyEventDown; + } else { + keyEventType = kKeyEventRepeat; + } - //Catch modifier change (ctrl, alt, shift) - Only check on keyDown or keyUp. - if (keyEventType == kKeyEventUp || keyEventType == kKeyEventDown) - { + // Catch modifier change (ctrl, alt, shift) - Only check on keyDown or keyUp. + // NB: we want to catch modifiers even when the input handler is locked + if (keyEventType == kKeyEventUp || keyEventType == kKeyEventDown) { scancode =(lParam >> 16) & 0x1FF; CatchModifierChange(wParam, keyEventType, scancode); } - if (keyEventType == kKeyEventUp) - keyEventType=kKeyEventUp; - - if (!Bypass()) // If bypassing, we want to catch modifiers but not execute commands + if (!InterceptSpecialKeys( wParam, lParam ) && !Bypass()) { + // only execute command when the input handler is not locked + // and the input is not a consequence of special key interception. executeCommand = keyMap[context][modifierMask][wParam][keyEventType]; + } } - if (m_pMainFrm && executeCommand != kcNull) - { + if (m_pMainFrm && executeCommand != kcNull) { m_pMainFrm->PostMessage(WM_MOD_KEYCOMMAND, executeCommand, wParam); } @@ -111,7 +112,65 @@ return executeCommand; } +// Feature: use Windows keys as modifier keys, intercept special keys +bool CInputHandler::InterceptSpecialKeys( UINT nChar , UINT nFlags ) +{ + KeyEventType keyEventType = GetKeyEventType( HIWORD(nFlags) ); + enum { VK_NonExistentKey = VK_F24+1 }; + + if( nChar == VK_NonExistentKey ) { + return true; + } else if( m_bInterceptWindowsKeys && ( nChar == VK_LWIN || nChar == VK_RWIN ) ) { + if( keyEventType == kKeyEventDown ) { + INPUT inp[2]; + inp[0].type = inp[1].type = INPUT_KEYBOARD; + inp[0].ki.time = inp[1].ki.time = 0; + inp[0].ki.dwExtraInfo = inp[0].ki.dwExtraInfo = 0; + inp[0].ki.wVk = inp[1].ki.wVk = VK_NonExistentKey; + inp[0].ki.wScan = inp[1].ki.wScan = 0; + inp[0].ki.dwFlags = 0; + inp[1].ki.dwFlags = KEYEVENTF_KEYUP; + SendInput( 2, inp, sizeof(INPUT) ); + } + } + + if( ( nChar == VK_NUMLOCK && m_bInterceptNumLock ) || + ( nChar == VK_CAPITAL && m_bInterceptCapsLock ) || + ( nChar == VK_SCROLL && m_bInterceptScrollLock ) ) { + if( m_nSkipGeneratedKeypresses > 0 ) { + m_nSkipGeneratedKeypresses -- ; + return true; + } else if( keyEventType == kKeyEventDown ) { + m_nSkipGeneratedKeypresses = 2; + INPUT inp[2]; + inp[0].type = inp[1].type = INPUT_KEYBOARD; + inp[0].ki.time = inp[1].ki.time = 0; + inp[0].ki.dwExtraInfo = inp[0].ki.dwExtraInfo = 0; + inp[0].ki.wVk = inp[1].ki.wVk = nChar; + inp[0].ki.wScan = inp[1].ki.wScan = 0; + inp[0].ki.dwFlags = KEYEVENTF_KEYUP; + inp[1].ki.dwFlags = 0; + SendInput( 2, inp, sizeof(INPUT) ); + } + } + return false; +}; +void CInputHandler::SetupSpecialKeyInterception() +{ + m_bInterceptWindowsKeys = m_bInterceptNumLock = m_bInterceptCapsLock = m_bInterceptScrollLock = false; + for( int context=0; context<sizeof(keyMap)/sizeof(keyMap[0]); context++ ) + for( int mod=0; mod<sizeof(keyMap[0])/sizeof(keyMap[0][0]); mod++ ) + for( int key=0; key<sizeof(keyMap[0][0])/sizeof(keyMap[0][0][0]); key++ ) + for( int kevent=0; kevent<sizeof(keyMap[0][0][0])/sizeof(keyMap[0][0][0][0]); kevent++ ) { + if( keyMap[context][mod][key][kevent] == kcNull ) continue; + if( mod == HOTKEYF_EXT ) m_bInterceptWindowsKeys = true; + if( key == VK_NUMLOCK ) m_bInterceptNumLock = true; + if( key == VK_CAPITAL ) m_bInterceptCapsLock = true; + if( key == VK_SCROLL ) m_bInterceptScrollLock = true; + }; +}; + //-------------------------------------------------------------- //Deal with Modifier keypresses. Private surouting used above. bool CInputHandler::CatchModifierChange(WPARAM wParam, KeyEventType keyEventType, int scancode) @@ -156,6 +215,9 @@ */ tempModifierMask |= HOTKEYF_ALT; break; // } + case VK_LWIN: case VK_RWIN: // Feature: use Windows keys as modifier keys + tempModifierMask |= HOTKEYF_EXT; + break; } if (tempModifierMask) //This keypress just changed the modifier mask @@ -236,9 +298,9 @@ if (mask & HOTKEYF_CONTROL) Log("Ctrl On"); else Log("Ctrl --"); if (mask & HOTKEYF_SHIFT) Log("\tShft On"); else Log("\tShft --"); if (mask & HOTKEYF_ALT) Log("\tAlt On\n"); else Log("\tAlt --\n"); + if (mask & HOTKEYF_EXT) Log("\tWin On\n"); else Log("\tWin --\n"); // Feature: use Windows keys as modifier keys } - KeyEventType CInputHandler::GetKeyEventType(UINT nFlags) { if (nFlags & TRANSITIONBIT) //Key released @@ -439,6 +501,7 @@ { activeCommandSet->Copy(newSet); activeCommandSet->GenKeyMap(keyMap); + SetupSpecialKeyInterception(); // Feature: use Windows keys as modifier keys, intercept special keys UpdateMainMenu(); } @@ -488,4 +551,4 @@ return true; return false; -} \ No newline at end of file +} Modified: trunk/OpenMPT/mptrack/InputHandler.h =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.h 2007-05-27 17:47:34 UTC (rev 188) +++ trunk/OpenMPT/mptrack/InputHandler.h 2007-06-17 16:24:14 UTC (rev 189) @@ -66,6 +66,10 @@ bool m_bNoAltMenu; bool m_bDistinguishControls, m_bDistinguishShifts, m_bDistinguishAlts; bool CatchModifierChange(WPARAM wParam, KeyEventType keyEventType, int scancode); + bool m_bInterceptWindowsKeys, m_bInterceptNumLock, m_bInterceptCapsLock, m_bInterceptScrollLock; + int m_nSkipGeneratedKeypresses; + bool InterceptSpecialKeys( UINT nChar , UINT nFlags ); + void SetupSpecialKeyInterception(); public: CCommandSet *activeCommandSet; @@ -88,3 +92,4 @@ bool SetITEffects(void); }; + Modified: trunk/OpenMPT/packageTemplate/Installation.txt =================================================================== --- trunk/OpenMPT/packageTemplate/Installation.txt 2007-05-27 17:47:34 UTC (rev 188) +++ trunk/OpenMPT/packageTemplate/Installation.txt 2007-06-17 16:24:14 UTC (rev 189) @@ -1,5 +1,6 @@ OpenMPT development build - Installation notes ---------------------------------------------- -. If you have an existing installation of OpenMPT and wish to re-use its settings, copy your mptrack.ini to this directory. -. If not, you're done: just launch mptrack.exe. +. If you have an existing installation of OpenMPT and wish to re-use its settings, + copy your mptrack.ini and plugin.cache to the directory into which you extract the archive. +. If not, you're done: just extract the archive and launch mptrack.exe. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |