|
From: <Rel...@us...> - 2006-12-28 17:09:57
|
Revision: 170
http://svn.sourceforge.net/modplug/?rev=170&view=rev
Author: Relabsoluness
Date: 2006-12-28 09:09:51 -0800 (Thu, 28 Dec 2006)
Log Message:
-----------
<Relabs> Added mptrack_generic.exe to the test branch.
. <Relabs> Fixed a few possibilities of creating buffer overruns related to tuning notename handling.
. <Relabs> Fixed channelmanager not updating channel states correctly when reordering channels.
Modified Paths:
--------------
branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/bin/mptrack_Generic.exe
branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -199,40 +199,28 @@
BeginWaitCursor();
BEGIN_CRITICAL();
- // Rearrange patterns content
- for(i = 0; i < m_pSndFile->Patterns.Size(); i++){
+ //Creating new order-vector for ReArrangeChannels.
+ vector<CHANNELINDEX> newChnOrder; newChnOrder.reserve(nChannels);
+ for(i = 0; i<nChannels; i++)
+ {
+ newChnOrder.push_back(newpat[i]);
+ }
+ if(m_pSndFile->ReArrangeChannels(newChnOrder) != nChannels)
+ {
+ MessageBox("Rearranging channels failed");
+ END_CRITICAL();
+ EndWaitCursor();
- // Allocate a new empty pattern to replace current pattern at i'th position in pattern array
- p = m_pSndFile->Patterns[i];
- if(p) newp = CSoundFile::AllocatePattern(m_pSndFile->PatternSize[i], nChannels);
+ ResetState(TRUE,TRUE,TRUE,TRUE,TRUE);
+ LeaveCriticalSection(&applying);
- if(p && !newp){
- END_CRITICAL();
- EndWaitCursor();
- LeaveCriticalSection(&applying);
- ::MessageBox(NULL, "Pattern Data is corrupted!!!", "ERROR: Not enough memory to rearrange channels!", MB_ICONERROR | MB_OK);
- return;
- }
-
- // Copy data from old pattern taking care of new channel reodering
- if(p != NULL){
- for(j = 0 ; j < m_pSndFile->PatternSize[i] ; j++){
- for(k = 0 ; k < nChannels ; k++)
- memcpy(&newp[j*nChannels + k],&p[j*m_pSndFile->m_nChannels + newpat[k]],sizeof(MODCOMMAND));
- }
- // Set new pattern in pattern array & free previous pattern
- m_pSndFile->Patterns[i] = newp;
- CSoundFile::FreePattern(p);
- }
+ return;
}
+
- // Copy channel settings
- for(i = 0 ; i < m_pSndFile->m_nChannels ; i++) settings[i] = m_pSndFile->ChnSettings[i];
-
// Redistribute channel setting & update manager internal store memory
for(i = 0 ; i < nChannels ; i++){
if(i != newpat[i]){
- m_pSndFile->ChnSettings[i] = settings[newpat[i]];
memory[0][i] = newMemory[0][newpat[i]];
memory[1][i] = newMemory[1][newpat[i]];
memory[2][i] = newMemory[2][newpat[i]];
@@ -240,23 +228,13 @@
memory[3][i] = i;
}
- // Also update record states (unfortunetely they are not part of channel settings)
- for(i = 0 ; i < nChannels ; i++) newMemory[1][i] = pModDoc->IsChannelRecord(i);
-
- pModDoc->ReinitRecordState();
- for(i = 0 ; i < nChannels ; i++){
- if(newMemory[1][newpat[i]] == 1) pModDoc->Record1Channel(i,TRUE);
- if(newMemory[1][newpat[i]] == 2) pModDoc->Record2Channel(i,TRUE);
- }
-
- // Update new number of channels
- m_pSndFile->m_nChannels = nChannels;
if(pActiveMod == pModDoc){
i = m_pSndFile->GetCurrentPos();
m_pSndFile->m_dwSongFlags &= ~SONG_STEP;
m_pSndFile->SetCurrentPos(0);
m_pSndFile->SetCurrentPos(i);
}
+
END_CRITICAL();
EndWaitCursor();
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -164,8 +164,9 @@
// Note
s[0] = 0;
-
- if ((nPos >= 0) && (nPos < 120)) wsprintf(s, "%s", pSndFile->GetNoteName(nPos+1, m_nInstrument).c_str());
+ string temp = pSndFile->GetNoteName(nPos+1, m_nInstrument);
+ temp.resize(4);
+ if ((nPos >= 0) && (nPos < 120)) wsprintf(s, "%s", temp.c_str());
rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont);
DrawButtonRect(hdc, &rect, s, FALSE, FALSE);
// Mapped Note
@@ -178,7 +179,12 @@
UINT n = penv->NoteMap[nPos];
if (n == 0xFF) strcpy(s, "==="); else
if (n == 0xFE) strcpy(s, "^^^"); else
- if (n <= 120) wsprintf(s, "%s", pSndFile->GetNoteName(n, m_nInstrument).c_str());
+ if (n <= 120)
+ {
+ string temp = pSndFile->GetNoteName(n, m_nInstrument);
+ temp.resize(4);
+ wsprintf(s, "%s", temp.c_str());
+ }
}
FillRect(hdc, &rect, (bHighLight) ? CMainFrame::brushHighLight : CMainFrame::brushWindow);
if ((nPos == (int)m_nNote) && (!m_bIns))
@@ -1351,8 +1357,8 @@
case IDC_CHECK_PITCHTEMPOLOCK:
if ((m_pSndFile) && (m_pSndFile->Headers[m_nInstrument]))
{
- const string str = string("Tempo range: ") + Stringify(m_pSndFile->GetTempoMin()) + string(" - ") + Stringify(m_pSndFile->GetTempoMax());
- ASSERT(str.size() < 256);
+ string str = string("Tempo range: ") + Stringify(m_pSndFile->GetTempoMin()) + string(" - ") + Stringify(m_pSndFile->GetTempoMax());
+ if(str.size() >= 250) str.resize(250);
wsprintf(pszText, str.c_str());
return TRUE;
}
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -1366,6 +1366,7 @@
}
}
}
+ return ENV_RELEASE_NODE_UNSET;
}
WORD CViewInstrument::EnvGetReleaseNodeValue()
@@ -1388,6 +1389,7 @@
}
}
}
+ return 0;
}
WORD CViewInstrument::EnvGetReleaseNodeTick()
@@ -1410,6 +1412,7 @@
}
}
}
+ return 0;
}
@@ -1456,7 +1459,6 @@
} else
if ((pnotify->dwType & dwType) && ((pnotify->dwType & 0xFFFF) == m_nInstrument))
{
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
BOOL bUpdate = FALSE;
for (UINT i=0; i<MAX_CHANNELS; i++)
{
@@ -2353,6 +2355,7 @@
if ((pModDoc) && (pMainFrm) && (note<128))
{
CHAR s[64];
+ const size_t sizeofS = sizeof(s) / sizeof(s[0]);
if (note >= 0xFE)
{
pModDoc->NoteOff(0, (note == 0xFE) ? TRUE : FALSE, m_nInstrument);
@@ -2379,7 +2382,14 @@
m_baPlayingNote[note] = true; //rewbs.instViewNNA
m_nPlayingChannel= pModDoc->PlayNote(note, m_nInstrument, 0, FALSE); //rewbs.instViewNNA
s[0] = 0;
- if ((note) && (note <= 120)) wsprintf(s, "%s", pModDoc->GetSoundFile()->GetNoteName(static_cast<CTuning::STEPTYPE>(note), m_nInstrument).c_str());
+ if ((note) && (note <= 120))
+ {
+ const string temp = pModDoc->GetSoundFile()->GetNoteName(static_cast<CTuning::STEPTYPE>(note), m_nInstrument);
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
+ }
pMainFrm->SetInfoText(s);
}
}
@@ -2602,7 +2612,7 @@
return CModScrollView::PreTranslateMessage(pMsg);
}
-LRESULT CViewInstrument::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam)
+LRESULT CViewInstrument::OnCustomKeyMsg(WPARAM wParam, LPARAM)
{
if (wParam == kcNull)
return NULL;
@@ -2610,7 +2620,7 @@
CModDoc *pModDoc = GetDocument();
if (!pModDoc) return NULL;
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ //CSoundFile *pSndFile = pModDoc->GetSoundFile();
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
switch(wParam)
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/bin/mptrack_Generic.exe
===================================================================
(Binary files differ)
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -1135,6 +1135,7 @@
//--------------------------------
{
char s[64];
+ const size_t sizeofS = sizeof(s) / sizeof(s[0]);
CComboBox *combo;
CSoundFile *pSndFile;
@@ -1147,7 +1148,12 @@
combo->SetItemData(combo->AddString("No note"), 0);
for (UINT i=1; i<=120; i++)
{
- wsprintf(s, "%s", pSndFile->GetNoteName(i, m_nInstr).c_str());
+ const string temp = pSndFile->GetNoteName(i, m_nInstr);
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
+
combo->SetItemData(combo->AddString(s), i);
}
if (pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT))
@@ -2577,13 +2583,18 @@
//-------------------------------------------------------------------
{
CHAR s[32] = "--";
+ const size_t sizeofS = sizeof(s)/sizeof(s[0]);
if ((lParam >= 0) && (lParam < 3*12) && (m_pSndFile))
{
UINT nSample = m_CbnSample.GetItemData(m_CbnSample.GetCurSel());
UINT nBaseOctave = m_SbOctave.GetPos() & 7;
- wsprintf(s, "%s", m_pSndFile->GetNoteName(lParam+1+12*nBaseOctave, m_nInstrument).c_str());
+ const string temp = m_pSndFile->GetNoteName(lParam+1+12*nBaseOctave, m_nInstrument).c_str();
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
INSTRUMENTHEADER *penv = m_pSndFile->Headers[m_nInstrument];
if ((wParam == KBDNOTIFY_LBUTTONDOWN) && (nSample > 0) && (nSample < MAX_SAMPLES) && (penv))
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -46,6 +46,7 @@
{
BOOL bFocus = (::GetFocus() == m_hWnd) ? TRUE : FALSE;
CHAR s[64];
+ const size_t sizeofS = sizeof(s) / sizeof(s[0]);
CRect rect;
CTuning::STEPTYPE nNotes = static_cast<CTuning::STEPTYPE>((rcClient.bottom + m_cyFont - 1) / m_cyFont);
@@ -59,7 +60,12 @@
BOOL bHighLight;
// Note
s[0] = 0;
- wsprintf(s, "%s", m_pTuning->GetNoteName(nPos - 61).c_str());
+ const string temp = m_pTuning->GetNoteName(nPos - 61).c_str();
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
+
rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont);
DrawButtonRect(hdc, &rect, s, FALSE, FALSE);
// Mapped Note
Modified: branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h 2006-12-28 17:09:51 UTC (rev 170)
@@ -368,7 +368,7 @@
const CTuningBase<>::SERIALIZATION_RETURN_TYPE CTuningBase<A, B, C>::SERIALIZATION_FAILURE = true;
template<class A, class B, class C>
-const string CTuningBase<A, B, C>::s_FileExtension = ".mptt";
+const string CTuningBase<A, B, C>::s_FileExtension = ".tun";
template<class A, class B, class C>
const CTuning::CEDITMASK CTuningBase<A, B, C>::EM_MAINRATIOS = 0x1; //1b
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <Rel...@us...> - 2006-12-21 15:02:49
|
Revision: 169
http://svn.sourceforge.net/modplug/?rev=169&view=rev
Author: Relabsoluness
Date: 2006-12-21 07:02:44 -0800 (Thu, 21 Dec 2006)
Log Message:
-----------
+ <Relabs> Multiple samples/instruments/mods can be loaded from the load dialogs.
+ <Relabs> Pending solo channel and pending unmute all channels.
+ <Relabs> 32 bit float sample import
. <Relabs> 24/32 bit PCM sample import.
(+ <Relabs> Option to try to play files in a IT-compatible manner; affects only a couple of things for the time being.)
? Miscellaneous changes in the code
Modified Paths:
--------------
branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.h
branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.h
branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/KeyConfigDlg.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h
branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h
branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.h
branches/OpenMPT_MPTm_Tuning/mptrack/Vstplug.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.h
branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc
branches/OpenMPT_MPTm_Tuning/mptrack/pattern.h
branches/OpenMPT_MPTm_Tuning/mptrack/resource.h
branches/OpenMPT_MPTm_Tuning/mptrack/serialization_utils.h
branches/OpenMPT_MPTm_Tuning/soundlib/Load_it.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/Sampleio.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/Snd_fx.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/Sndfile.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/Sndfile.h
branches/OpenMPT_MPTm_Tuning/soundlib/Sndmix.cpp
Added Paths:
-----------
branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.h
branches/OpenMPT_MPTm_Tuning/soundlib/modcommand.h
branches/OpenMPT_MPTm_Tuning/soundlib/wavConverter.h
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -181,7 +181,7 @@
EnterCriticalSection(&applying);
- MODCOMMAND *p,*newp;
+ MODCOMMAND *p = NULL,*newp = NULL;
MODCHANNELSETTINGS settings[MAX_BASECHANNELS];
UINT i,j,k,nChannels,newpat[MAX_BASECHANNELS],newMemory[4][MAX_BASECHANNELS];
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.h 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -12,6 +12,7 @@
public:
static CChannelManagerDlg * sharedInstance(BOOL autoCreate = TRUE);
+ static void DestroySharedInstance() {delete sharedInstance_; sharedInstance_ = NULL;}
void SetDocument(void * parent);
BOOL IsOwner(void * ctrl);
BOOL IsDisplayed(void);
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -2258,6 +2258,16 @@
commands[kcFileExportCompat].isHidden = false;
commands[kcFileExportCompat].isDummy = false;
+ commands[kcUnmuteAllChnOnPatTransition].UID = 1778;
+ commands[kcUnmuteAllChnOnPatTransition].isHidden = false;
+ commands[kcUnmuteAllChnOnPatTransition].isDummy = false;
+ commands[kcUnmuteAllChnOnPatTransition].Message = "Unmute all channels on pattern transition";
+
+ commands[kcSoloChnOnPatTransition].UID = 1779;
+ commands[kcSoloChnOnPatTransition].isHidden = false;
+ commands[kcSoloChnOnPatTransition].isDummy = false;
+ commands[kcSoloChnOnPatTransition].Message = "Solo channel on pattern transition";
+
#ifdef _DEBUG
for (int i=0; i<kcNumCommands; i++) {
if (commands[i].UID != 0) { // ignore unset UIDs
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.h 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/CommandSet.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -226,6 +226,8 @@
kcChannelSolo,
kcChannelUnmuteAll,
kcToggleChanMuteOnPatTransition,
+ kcUnmuteAllChnOnPatTransition,
+ kcSoloChnOnPatTransition,
kcCopyAndLoseSelection,
kcTransposeUp,
kcTransposeDown,
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -1334,7 +1334,7 @@
BOOL CCtrlInstruments::GetToolTipText(UINT uId, LPSTR pszText)
//------------------------------------------------------------
{
- //NOTE: pszText seems to point to char array of length 256.
+ //NOTE: pszText seems to point to char array of length 256 (Noverber 2006).
if ((pszText) && (uId))
{
switch(uId)
@@ -1472,7 +1472,7 @@
CFileDialog dlg(TRUE,
NULL,
NULL,
- OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST,
+ OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT,
"All Instruments|*.xi;*.pat;*.iti;*.wav;*.aif;*.aiff|"
"FastTracker II Instruments (*.xi)|*.xi|"
"GF1 Patches (*.pat)|*.pat|"
@@ -1483,8 +1483,36 @@
{
dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurInsDir;
}
+ const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size.
+ vector<char> filenameBuffer(bufferSize, 0);
+ dlg.GetOFN().lpstrFile = &filenameBuffer[0];
+ dlg.GetOFN().nMaxFile = bufferSize;
+
if (dlg.DoModal() != IDOK) return;
- if (!OpenInstrument(dlg.GetPathName())) ErrorBox(IDS_ERR_FILEOPEN, this);
+
+ POSITION pos = dlg.GetStartPosition();
+ size_t counter = 0;
+ while(pos != NULL)
+ {
+ //If loading multiple instruments, advancing to next instrument and creating
+ //new instrument if necessary.
+ if(counter > 0)
+ {
+ if(m_nInstrument >= MAX_INSTRUMENTS-1)
+ break;
+ else
+ m_nInstrument++;
+
+ if(m_nInstrument > m_pSndFile->GetNumInstruments())
+ OnInstrumentNew();
+ }
+
+ if(!OpenInstrument(dlg.GetNextPathName(pos)))
+ ErrorBox(IDS_ERR_FILEOPEN, this);
+
+ counter++;
+ }
+ filenameBuffer.clear();
if (m_pParent) m_pParent->InstrumentChanged(m_nInstrument);
SwitchToView();
}
@@ -2386,7 +2414,7 @@
return;
size_t sel = m_ComboTuning.GetCurSel();
- if(sel == 0) //Setting IT behavior.
+ if(sel == 0) //Setting IT behavior
{
BEGIN_CRITICAL();
pInstH->SetTuning(NULL);
@@ -2591,7 +2619,7 @@
while(m_ComboTuning.GetCount() > 0)
m_ComboTuning.DeleteString(0);
- m_ComboTuning.AddString("IT behavior"); //<-> Instrument pTuning pointer == NULL
+ m_ComboTuning.AddString("OMPT IT behavior"); //<-> Instrument pTuning pointer == NULL
for(size_t i = 0; i<CSoundFile::s_TuningsSharedStandard.GetNumTunings(); i++)
{
m_ComboTuning.AddString(CSoundFile::s_TuningsSharedStandard.GetTuning(i).GetName().c_str());
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_smp.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -893,7 +893,7 @@
CFileDialog dlg(TRUE,
NULL,
NULL,
- OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST,
+ OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT,
"All Samples|*.wav;*.pat;*.s3i;*.smp;*.snd;*.raw;*.xi;*.aif;*.aiff;*.its;*.8sv;*.8svx;*.svx;*.pcm|"
"Wave Files (*.wav)|*.wav|"
"XI Samples (*.xi)|*.xi|"
@@ -909,9 +909,38 @@
dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurSmpDir;
}
dlg.m_ofn.nFilterIndex = nLastIndex;
+ const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006).
+ vector<char> filenameBuffer(bufferSize, 0);
+ dlg.GetOFN().lpstrFile = &filenameBuffer[0];
+ dlg.GetOFN().nMaxFile = bufferSize;
+
if (dlg.DoModal() != IDOK) return;
+
nLastIndex = dlg.m_ofn.nFilterIndex;
- if (!OpenSample(dlg.GetPathName())) ErrorBox(IDS_ERR_FILEOPEN, this);
+
+ POSITION pos = dlg.GetStartPosition();
+ size_t counter = 0;
+ while(pos != NULL)
+ {
+ //If loading multiple samples, advancing to next sample and creating
+ //new one if necessary.
+ if(counter > 0)
+ {
+ if(m_nSample >= MAX_SAMPLES-1)
+ break;
+ else
+ m_nSample++;
+
+ if(m_nSample > m_pSndFile->GetNumSamples())
+ OnSampleNew();
+ }
+
+ if(!OpenSample(dlg.GetNextPathName(pos)))
+ ErrorBox(IDS_ERR_FILEOPEN, this);
+
+ counter++;
+ }
+ filenameBuffer.clear();
SwitchToView();
}
@@ -2790,6 +2819,7 @@
}
LRESULT CCtrlSamples::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam)
+//----------------------------------------------------------------
{
if (wParam == kcNull)
return NULL;
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/KeyConfigDlg.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/KeyConfigDlg.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/KeyConfigDlg.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -229,9 +229,9 @@
for (int c=kcClearRow; c<=kcInsertAllRows; c++)
newCat->commands.Add(c);
newCat->separators.Add(kcInsertAllRows); //--------------------------------------
- for (int c=kcChannelMute; c<=kcToggleChanMuteOnPatTransition; c++)
+ for (int c=kcChannelMute; c<=kcSoloChnOnPatTransition; c++)
newCat->commands.Add(c);
- newCat->separators.Add(kcToggleChanMuteOnPatTransition); //--------------------------------------
+ newCat->separators.Add(kcSoloChnOnPatTransition); //--------------------------------------
for (int c=kcTransposeUp; c<=kcTransposeOctDown; c++)
newCat->commands.Add(c);
newCat->separators.Add(kcTransposeOctDown); //--------------------------------------
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -647,6 +647,9 @@
delete m_pAutoSaver; //rewbs.autosaver
delete m_pPerfCounter;
+ CChannelManagerDlg::DestroySharedInstance();
+
+
//Saving statictunings here.
CSoundFile::SaveStaticTunings();
}
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Mainfrm.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -630,7 +630,8 @@
};
-const CHAR gszBuildDate[] = __TIMESTAMP__;
+//const CHAR gszBuildDate[] = __TIMESTAMP__;
+const string buildDateTime = string(__DATE__) + string(" ") + string(__TIME__);
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Mptrack.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -982,7 +982,7 @@
CFileDialog dlg(TRUE,
NULL,
NULL,
- OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_FORCESHOWHIDDEN,
+ OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_FORCESHOWHIDDEN | OFN_ALLOWMULTISELECT,
// -> CODE#0023
// -> DESC="IT project files (.itp)"
// "All Modules|*.mod;*.nst;*.wow;*.s3m;*.stm;*.669;*.mtm;*.xm;*.it;*.ult;*.mdz;*.s3z;*.xmz;*.itz;mod.*;*.far;*.mdl;*.okt;*.dmf;*.ptm;*.mdr;*.med;*.ams;*.dbm;*.dsm;*.mid;*.rmi;*.smf;*.bak;*.umx;*.amf;*.psm;*.mt2|"
@@ -1008,15 +1008,25 @@
{
dlg.m_ofn.lpstrInitialDir = CMainFrame::m_szCurModDir;
}
- if (dlg.DoModal() == IDOK)
+ const size_t bufferSize = 2048; //Note: This is possibly the maximum buffer size in MFC 7(this note was written November 2006).
+ vector<char> filenameBuffer(bufferSize, 0);
+ dlg.GetOFN().lpstrFile = &filenameBuffer[0];
+ dlg.GetOFN().nMaxFile = bufferSize;
+ if (dlg.DoModal() == IDOK)
{
- CHAR szDrive[_MAX_PATH], szDir[_MAX_PATH];
- _splitpath(dlg.GetPathName(), szDrive, szDir, NULL, NULL);
- strcpy(CMainFrame::m_szCurModDir, szDrive);
- strcat(CMainFrame::m_szCurModDir, szDir);
- CMainFrame::m_nFilterIndex = dlg.m_ofn.nFilterIndex;
- OpenDocumentFile(dlg.GetPathName());
+ POSITION pos = dlg.GetStartPosition();
+ while(pos != NULL)
+ {
+ CHAR szDrive[_MAX_PATH], szDir[_MAX_PATH];
+ CString pathName = dlg.GetNextPathName(pos);
+ _splitpath(pathName, szDrive, szDir, NULL, NULL);
+ strcpy(CMainFrame::m_szCurModDir, szDrive);
+ strcat(CMainFrame::m_szCurModDir, szDir);
+ CMainFrame::m_nFilterIndex = dlg.m_ofn.nFilterIndex;
+ OpenDocumentFile(pathName);
+ }
}
+ filenameBuffer.clear();
}
@@ -1370,7 +1380,7 @@
CDialog::OnInitDialog();
m_bmp.SubclassDlgItem(IDC_BITMAP1, this);
m_bmp.LoadBitmap(MAKEINTRESOURCE(IDB_MPTRACK));
- wsprintf(s, "Build Date: %s", gszBuildDate);
+ wsprintf(s, "Build Date: %s", buildDateTime.c_str());
SetDlgItemText(IDC_EDIT2, s);
SetDlgItemText(IDC_EDIT3, CMainFrame::GetFullVersionString());
Added: branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.cpp (rev 0)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -0,0 +1,31 @@
+#include "stdafx.h"
+#include "PlaybackEventer.h"
+#include "sndfile.h"
+
+CPlaybackEventer::~CPlaybackEventer()
+//---------------------------------
+{
+}
+
+void CPlaybackEventer::PatternTranstionChnSolo(const CHANNELINDEX chnIndex)
+//-------------------------------------------------------------------------
+{
+ if(chnIndex >= m_rSndFile.m_nChannels)
+ return;
+
+ for(CHANNELINDEX i = 0; i<m_rSndFile.m_nChannels; i++)
+ {
+ m_rSndFile.m_bChannelMuteTogglePending[i] = (m_rSndFile.ChnSettings[i].dwFlags & CHN_MUTE) ? false : true;
+ }
+ m_rSndFile.m_bChannelMuteTogglePending[chnIndex] = (m_rSndFile.ChnSettings[chnIndex].dwFlags & CHN_MUTE) ? true : false;
+}
+
+
+void CPlaybackEventer::PatternTransitionChnUnmuteAll()
+//----------------------------------------------------
+{
+ for(CHANNELINDEX i = 0; i<m_rSndFile.m_nChannels; i++)
+ {
+ m_rSndFile.m_bChannelMuteTogglePending[i] = (m_rSndFile.ChnSettings[i].dwFlags & CHN_MUTE) ? true : false;
+ }
+}
\ No newline at end of file
Added: branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.h (rev 0)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/PlaybackEventer.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -0,0 +1,25 @@
+#ifndef PLAYBACKEVENTER_H
+#define PLAYBACKEVENTER_H
+
+#include "pattern.h"
+
+class CSoundFile;
+
+//====================
+class CPlaybackEventer
+//====================
+{
+public:
+ CPlaybackEventer(CSoundFile& sndf) : m_rSndFile(sndf) {}
+ ~CPlaybackEventer();
+
+ //SetPatternEvent(const PATTERNINDEX pattern, const ROWINDEX row, const CHANNELINDEX column);
+
+ void PatternTranstionChnSolo(const CHANNELINDEX chnIndex);
+ void PatternTransitionChnUnmuteAll();
+
+private:
+ CSoundFile& m_rSndFile;
+};
+
+#endif
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -1,11 +1,7 @@
-// TuningDialog.cpp : implementation file
-//
-
#include "stdafx.h"
#include "mptrack.h"
#include "TuningDialog.h"
#include <algorithm>
-#include ".\tuningdialog.h"
#include "misc_util.h"
const string CTuningDialog::s_stringTypeGEN = "General";
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -2,9 +2,9 @@
#define TUNINGDIALOG_H
#include "tuningratiomapwnd.h"
+#include "tuningcollection.h"
#include <vector>
#include <string>
-#include "afxwin.h"
using std::vector;
using std::string;
@@ -111,6 +111,7 @@
//to those edit boxes(they are modified by non-user
//activies and in these cases the value should be applied
//to the tuning data.
+
};
#endif
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -68,6 +68,8 @@
ON_COMMAND(ID_PATTERN_MUTE, OnMuteFromClick) //rewbs.customKeys
ON_COMMAND(ID_PATTERN_SOLO, OnSoloFromClick) //rewbs.customKeys
ON_COMMAND(ID_PATTERN_TRANSITIONMUTE, OnTogglePendingMuteFromClick)
+ ON_COMMAND(ID_PATTERN_TRANSITIONSOLO, OnPendingSoloChnFromClick)
+ ON_COMMAND(ID_PATTERN_TRANSITION_UNMUTEALL, OnPendingUnmuteAllChnFromClick)
ON_COMMAND(ID_PATTERN_UNMUTEALL,OnUnmuteAll)
ON_COMMAND(ID_PATTERN_DELETEROW,OnDeleteRows)
ON_COMMAND(ID_PATTERN_DELETEALLROW,OnDeleteRowsEx)
@@ -1092,7 +1094,6 @@
{
CModDoc *pModDoc = GetDocument();
CSoundFile *pSndFile;
- CHAR s[256]; //rewbs.patPlugNames
HMENU hMenu;
// Too far left to get a ctx menu:
@@ -2813,6 +2814,7 @@
InvalidateRow();
}
+ return 0;
}
@@ -3144,6 +3146,8 @@
case kcChannelSolo: OnSoloChannel(true); return wParam;
case kcChannelUnmuteAll: OnUnmuteAll(); return wParam;
case kcToggleChanMuteOnPatTransition: TogglePendingMute((m_dwCursor&0xFFFF)>>3); return wParam;
+ case kcUnmuteAllChnOnPatTransition: OnPendingUnmuteAllChnFromClick(); return wParam;
+ case kcSoloChnOnPatTransition: PendingSoloChn(GetCurrentChannel()); return wParam;
case kcTransposeUp: OnTransposeUp(); return wParam;
case kcTransposeDown: OnTransposeDown(); return wParam;
case kcTransposeOctUp: OnTransposeOctUp(); return wParam;
@@ -3797,7 +3801,7 @@
UINT instr = p->instr;
instr = ((instr * 10) + val) % 1000;
- if (instr > MAX_INSTRUMENTS) instr = instr % 100;
+ if (instr >= MAX_INSTRUMENTS) instr = instr % 100;
if ( ((pSndFile->m_nInstruments==0) && (pSndFile->m_nSamples<100)) || // if we're using samples & have less than 100 samples
(pSndFile->m_nInstruments < 100)) { // or if we're using instruments and have less than 100 instruments
instr = instr % 100; // --> ensure the entered instrument value is less than 100.
@@ -4247,6 +4251,7 @@
void CViewPattern::OnSelectPlugin(UINT nID)
+//-----------------------------------------
{
CModDoc *pModDoc = GetDocument(); if (!pModDoc) return;
CSoundFile *pSndFile = pModDoc->GetSoundFile(); if (!pSndFile) return;
@@ -4342,15 +4347,18 @@
}
if (b) AppendMenu(hMenu, MF_STRING, ID_PATTERN_SOLO, "Solo Channel\t" + ih->GetKeyTextFromCommand(kcChannelSolo));
if (bAll) AppendMenu(hMenu, MF_STRING, ID_PATTERN_UNMUTEALL, "Unmute All\t" + ih->GetKeyTextFromCommand(kcChannelUnmuteAll));
-
+
AppendMenu(hMenu,
pSndFile->m_bChannelMuteTogglePending[nChn] ?
(MF_STRING|MF_CHECKED) : MF_STRING,
ID_PATTERN_TRANSITIONMUTE,
(pSndFile->ChnSettings[nChn].dwFlags & CHN_MUTE) ?
- "Unmute on Transition\t" + ih->GetKeyTextFromCommand(kcToggleChanMuteOnPatTransition) :
- "Mute on Transition\t" + ih->GetKeyTextFromCommand(kcToggleChanMuteOnPatTransition));
+ "On transition: Unmute\t" + ih->GetKeyTextFromCommand(kcToggleChanMuteOnPatTransition) :
+ "On transition: Mute\t" + ih->GetKeyTextFromCommand(kcToggleChanMuteOnPatTransition));
+ AppendMenu(hMenu, MF_STRING, ID_PATTERN_TRANSITION_UNMUTEALL, "On transition: Unmute all\t" + ih->GetKeyTextFromCommand(kcUnmuteAllChnOnPatTransition));
+ AppendMenu(hMenu, MF_STRING, ID_PATTERN_TRANSITIONSOLO, "On transition: Solo\t" + ih->GetKeyTextFromCommand(kcSoloChnOnPatTransition));
+
return true;
}
@@ -4587,10 +4595,9 @@
HMENU instrumentChangeMenu = ::CreatePopupMenu();
AppendMenu(hMenu, MF_POPUP|greyed, (UINT)instrumentChangeMenu, "Change Instrument\t" + ih->GetKeyTextFromCommand(kcPatternSetInstrument));
- CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
- CModDoc *pModDoc = GetDocument();
- CSoundFile* pSndFile;
- if(pModDoc == 0 || (pSndFile = pModDoc->GetSoundFile()) == 0) return true;
+ if(pSndFile == NULL)
+ return false;
+
if (pSndFile->m_nInstruments) {
for (UINT i=1; i<=pSndFile->m_nInstruments; i++) {
@@ -4652,7 +4659,7 @@
if (GetColTypeFromCursor(m_dwBeginSel) <= colType) {
chans.Add(startChan); //first selected chan includes this col type
}
- for (int chan=startChan+1; chan<endChan; chan++) {
+ for (UINT chan=startChan+1; chan<endChan; chan++) {
chans.Add(chan); //All chans between first & last must include this col type
}
if ((startChan != endChan) && colType <= GetColTypeFromCursor(m_dwEndSel)) {
@@ -4723,6 +4730,26 @@
TogglePendingMute((m_nMenuParam&0xFFFF)>>3);
}
+void CViewPattern::OnPendingSoloChnFromClick()
+//-----------------------------------------------
+{
+ PendingSoloChn(GetChanFromCursor(m_nMenuParam));
+}
+
+void CViewPattern::OnPendingUnmuteAllChnFromClick()
+//----------------------------------------------
+{
+ GetDocument()->GetSoundFile()->GetPlaybackEventer().PatternTransitionChnUnmuteAll();
+ InvalidateChannelsHeaders();
+}
+
+void CViewPattern::PendingSoloChn(const CHANNELINDEX nChn)
+//---------------------------------------------
+{
+ GetDocument()->GetSoundFile()->GetPlaybackEventer().PatternTranstionChnSolo(nChn);
+ InvalidateChannelsHeaders();
+}
+
void CViewPattern::TogglePendingMute(UINT nChn)
//---------------------------------------------
{
@@ -4745,15 +4772,11 @@
CPoint pt = GetPointFromPosition(m_dwCursor);
- //AppendMenu(hMenu, MF_STRING|MF_GRAYED, 0, "Record is disabled(editing blocked).");
- //AppendMenu(hMenu, MF_STRING|MF_GRAYED, 0, "--------------------");
AppendMenu(hMenu, MF_STRING, IDC_PATTERN_RECORD, "Editing(record) is disabled; click here to enable it.");
- //AppendMenu(hMenu, MF_STRING|MF_GRAYED, 0, "--------------------");
//To check: It seems to work the way it should, but still is it ok to use IDC_PATTERN_RECORD here since it is not
//'aimed' to be used here.
ClientToScreen(&pt);
- //::TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_NONOTIFY, pt.x, pt.y, 0, m_hWnd, NULL);
::TrackPopupMenu(hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, m_hWnd, NULL);
::DestroyMenu(hMenu);
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.h 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -239,6 +239,8 @@
afx_msg void OnMuteFromClick(); //rewbs.customKeys
afx_msg void OnSoloFromClick(); //rewbs.customKeys
afx_msg void OnTogglePendingMuteFromClick(); //rewbs.customKeys
+ afx_msg void OnPendingSoloChnFromClick();
+ afx_msg void OnPendingUnmuteAllChnFromClick();
afx_msg void OnSoloChannel(BOOL current); //rewbs.customKeys
afx_msg void OnMuteChannel(BOOL current); //rewbs.customKeys
afx_msg void OnUnmuteAll();
@@ -336,6 +338,8 @@
private:
void TogglePendingMute(UINT nChn);
+ void PendingSoloChn(const CHANNELINDEX nChn);
+ void PendingUnmuteAllChn();
public:
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Vstplug.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Vstplug.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Vstplug.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -1305,7 +1305,10 @@
if (result) *result = 0;
}
-#define MAX_FILEOPEN_BUFSIZE 32000
+#define MAX_FILEOPEN_BUFSIZE 2048
+//Note: Above value might be the maximum size the buffer can be;
+//it might be worthwhile to check the CFileDialog documentation
+//if wanting the increase that.
VOID CSelectPluginDlg::OnAddPlugin()
//----------------------------------
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp 2006-12-21 15:02:44 UTC (rev 169)
@@ -169,6 +169,7 @@
// -> CODE#0023
// -> DESC="IT project files (.itp)"
ON_COMMAND(IDC_CHECK6, OnCheck6)
+ ON_COMMAND(IDC_IT_STANDARD, OnITStandard)
ON_CBN_SELCHANGE(IDC_COMBO1,UpdateDialog)
// -! NEW_FEATURE#0023
//}}AFX_MSG_MAP
@@ -193,6 +194,7 @@
// -> DESC="IT project files (.itp)"
DDX_Control(pDX, IDC_CHECK6, m_CheckBox6);
// -! NEW_FEATURE#0023
+ DDX_Control(pDX, IDC_IT_STANDARD, m_CheckBoxITStandard);
//}}AFX_DATA_MAP
}
@@ -284,6 +286,7 @@
m_CheckBox3.SetCheck((m_pSndFile->m_dwSongFlags & SONG_ITOLDEFFECTS) ? MF_CHECKED : 0);
m_CheckBox4.SetCheck((m_pSndFile->m_dwSongFlags & SONG_ITCOMPATMODE) ? MF_CHECKED : 0);
m_CheckBox5.SetCheck((m_pSndFile->m_dwSongFlags & SONG_EXFILTERRANGE) ? MF_CHECKED : 0);
+ m_CheckBoxITStandard.SetCheck( (m_pSndFile->GetModSpecificFlag(IT_STANDARD) && m_pSndFile->GetType() == MOD_TYPE_IT) ? MF_CHECKED : MF_UNCHECKED);
// -> CODE#0023
// -> DESC="IT project files (.itp)"
@@ -300,6 +303,8 @@
// -> DESC="IT project files (.itp)"
m_CheckBox6.EnableWindow(m_TypeBox.GetCurSel() == 4 ? TRUE : FALSE);
// -! NEW_FEATURE#0023
+
+ m_CheckBoxITStandard.EnableWindow((m_pSndFile->GetType() == MOD_TYPE_IT) ? TRUE : FALSE);
m_TempoModeBox.EnableWindow((m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE);
GetDlgItem(IDC_ROWSPERBEAT)->EnableWindow((m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE);
@@ -370,6 +375,12 @@
}
// -! NEW_FEATURE#0023
+void CModTypeDlg::OnITStandard()
+//------------------------------
+{
+ m_pSndFile->SetModSpecificFlag(IT_STANDARD, m_CheckBoxITStandard.GetCheck());
+}
+
BOOL CModTypeDlg::VerifyData()
//---------------------------------
{
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.h 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.h 2006-12-21 15:02:44 UTC (rev 169)
@@ -20,6 +20,8 @@
CButton m_CheckBox6;
// -! NEW_FEATURE#0023
+ CButton m_CheckBoxITStandard;
+
public:
CModTypeDlg(CSoundFile *pSndFile, CWnd *parent):CDialog(IDD_MODDOC_MODTYPE, parent) { m_pSndFile = pSndFile; m_nType = m_nChannels = 0; }
BOOL VerifyData();
@@ -42,6 +44,7 @@
// -> DESC="IT project files (.itp)"
afx_msg void OnCheck6();
// -! NEW_FEATURE#0023
+ afx_msg void OnITStandard();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc 2006-10-02 21:41:06 UTC (rev 168)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc 2006-12-21 15:02:44 UTC (rev 169)
@@ -903,51 +903,54 @@
GROUPBOX "Sample Map",IDC_STATIC,461,27,62,141
END
-IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 243, 198
+IDD_MODDOC_MODTYPE DIALOGEX 0, 0, 247, 215
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Song Properties"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
- DEFPUSHBUTTON "OK",IDOK,189,8,50,14
- PUSHBUTTON "Cancel",IDCANCEL,189,26,50,14
- GROUPBOX "Type",IDC_STATIC,4,4,174,41
+ DEFPUSHBUTTON "OK",IDOK,193,8,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,193,26,50,14
+ GROUPBOX "Type",IDC_STATIC,4,4,174,45
COMBOBOX IDC_COMBO1,8,16,101,51,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX IDC_COMBO2,114,16,60,77,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
CONTROL "Linear Frequency Slides",IDC_CHECK1,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,7,106,93,10
+ BS_AUTOCHECKBOX | WS_TABSTOP,7,113,93,10
CONTROL "Fast Volume Slides",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,7,118,75,10
+ WS_TABSTOP,7,124,75,10
CONTROL "IT Old Effects",IDC_CHECK3,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,111,106,76,10
+ WS_TABSTOP,111,113,76,10
CONTROL "IT Compatible Gxx",IDC_CHECK4,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,111,118,76,10
+ WS_TABSTOP,111,124,76,10
CONTROL "Extended filter range",IDC_CHECK5,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,7,130,82,10
+ BS_AUTOCHECKBOX | WS_TABSTOP,7,137,82,10
CONTROL "Embed instrument parameters...
[truncated message content] |
|
From: <Rel...@us...> - 2007-02-03 21:24:47
|
Revision: 172
http://svn.sourceforge.net/modplug/?rev=172&view=rev
Author: Relabsoluness
Date: 2007-02-03 13:24:42 -0800 (Sat, 03 Feb 2007)
Log Message:
-----------
(Note: This doesn't include the patch from pelya; I wanted to get my modifications committed before merging it.)
+ <Relabs> Ability to 'scale' envelope points, i.e. to move envelope points by given factor; try right click in envelope views.
. <Relabs> Fixed 24-bit wav loading again :)
. <Relabs> Fixed an ITP-saving bug I had created when extending the pattern/order-limit(messes orderlist up).
. <Relabs> Fixed an ITP-loading bug concerning loading empty comments; could be noticed as trash characters in the comments when there shouldn't have been any.
. <Relabs> Bug fix related to handling of finesteps when creating tunings.
. <Relabs> Fixed the way modified flag appears when modifying tunings.
. <Relabs> Fixed bug that VSTi was making no sound when corresponding instrument had no associated sample
- Can cause some tracks using VSTi's to play differently.
/ <Relabs> Modified the way pattern data is saved/loaded with ITP in order to be able to hack the MODCOMMAND-class.
/ <Relabs> The tuning dialog now has a treeview instead of the comboboxes.
/ <Relabs> Local tunings are no longer saved to file everytime the program closes.
/ <Relabs> Changed the 'order message' at the bottom bar of the screen "Position x of y" to "Position x of y (x_in_hex of y_in_hex)".
/ <Relabs> To orderlist context menu, changed "Insert Pattern" and "Remove Pattern" to "Insert Order" and "Remove Order" because I find the former somewhat misleading.
- Sometimes loading multiple files from openfile dialog fails.
Modified Paths:
--------------
branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/OrderToPatternTable.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.h
branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.h
branches/OpenMPT_MPTm_Tuning/mptrack/View_pat.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Vstplug.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.h
branches/OpenMPT_MPTm_Tuning/mptrack/mptrack.rc
branches/OpenMPT_MPTm_Tuning/mptrack/pattern.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/pattern.h
branches/OpenMPT_MPTm_Tuning/mptrack/patternContainer.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/resource.h
branches/OpenMPT_MPTm_Tuning/soundlib/LOAD_DMF.CPP
branches/OpenMPT_MPTm_Tuning/soundlib/Load_it.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/Sndfile.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/Sndfile.h
branches/OpenMPT_MPTm_Tuning/soundlib/Sndmix.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/mod_specifications.h
branches/OpenMPT_MPTm_Tuning/soundlib/modcommand.h
branches/OpenMPT_MPTm_Tuning/soundlib/tuning.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/tuning.h
branches/OpenMPT_MPTm_Tuning/soundlib/tuningCollection.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h
branches/OpenMPT_MPTm_Tuning/soundlib/tuningcollection.h
branches/OpenMPT_MPTm_Tuning/soundlib/wavConverter.h
Added Paths:
-----------
branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.h
branches/OpenMPT_MPTm_Tuning/soundlib/midi.h
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -877,6 +877,7 @@
}
PostViewMessage(VIEWMSG_SETCURRENTINSTRUMENT, m_nInstrument);
UnlockControls();
+
return TRUE;
}
@@ -2466,6 +2467,15 @@
v.push_back(&m_pSndFile->m_TuningsTuneSpecific);
CTuningDialog td(this, v, pInstH->pTuning);
td.DoModal();
+ if(td.GetModifiedStatus(&m_pSndFile->s_TuningsSharedLocal))
+ {
+ if(MsgBox(IDS_APPLY_TUNING_MODIFICATIONS, this, "", MB_OKCANCEL) == IDOK)
+ m_pSndFile->SaveStaticTunings();
+ }
+ if(td.GetModifiedStatus(&m_pSndFile->m_TuningsTuneSpecific))
+ {
+ m_pModDoc->SetModified();
+ }
//Recreating tuning combobox so that possible
//new tuning(s) come visible.
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_seq.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -409,8 +409,16 @@
CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
s[0] = 0;
- wsprintf(s, (CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY) ? "Position %02Xh of %02Xh" : "Position %d of %d",
- m_nScrollPos, pSndFile->GetNumPatterns());
+ if(CMainFrame::m_dwPatternSetup & PATTERN_HEXDISPLAY)
+ {
+ wsprintf(s, "Position %02Xh of %02Xh", m_nScrollPos, pSndFile->GetNumPatterns());
+ }
+ else
+ {
+ wsprintf(s, "Position %d of %d (%02Xh of %02Xh)",
+ m_nScrollPos, pSndFile->GetNumPatterns(), m_nScrollPos, pSndFile->GetNumPatterns());
+ }
+
if (m_nScrollPos < pSndFile->Order.size())
{
UINT nPat = pSndFile->Order[m_nScrollPos];
@@ -661,8 +669,8 @@
if (hMenu)
{
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Pattern\tIns");
- AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Pattern\tDel");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Order\tIns");
+ AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Order\tDel");
AppendMenu(hMenu, MF_SEPARATOR, NULL, "");
AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_NEW, "Create &New Pattern");
AppendMenu(hMenu, MF_STRING|greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern");
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Draw_pat.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -273,11 +273,8 @@
srcy = pfnt->nAlphaNZ_Y + 13 * COLUMN_HEIGHT;
break;
case '#':
- srcx = pfnt->nNoteX + pfnt->nNoteWidth/2;
- srcy = pfnt->nNoteY + 2*COLUMN_HEIGHT;
- //TODO: '#' doesn't show properly in effect column.
- //srcx = pfnt->nAlphaAM_X;
- //srcy = pfnt->nAlphaAM_Y + 13 * COLUMN_HEIGHT;
+ srcx = pfnt->nAlphaAM_X;
+ srcy = pfnt->nAlphaAM_Y + 13 * COLUMN_HEIGHT;
break;
//rewbs.smoothVST
case '\\':
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/MainFrm.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -648,10 +648,6 @@
delete m_pPerfCounter;
CChannelManagerDlg::DestroySharedInstance();
-
-
- //Saving statictunings here.
- CSoundFile::SaveStaticTunings();
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Moddoc.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -872,7 +872,8 @@
if ((nPlugin) && (nPlugin <= MAX_MIXPLUGINS))
{
IMixPlugin *pPlugin = m_SndFile.m_MixPlugins[nPlugin-1].pMixPlugin;
- if (pPlugin) pPlugin->MidiCommand(penv->nMidiChannel, penv->nMidiProgram, penv->wMidiBank, note, pChn->nVolume, MAX_BASECHANNELS);
+ //if (pPlugin) pPlugin->MidiCommand(penv->nMidiChannel, penv->nMidiProgram, penv->wMidiBank, note, pChn->nVolume, MAX_BASECHANNELS);
+ if (pPlugin) pPlugin->MidiCommand(penv->nMidiChannel, penv->nMidiProgram, penv->wMidiBank, note, pChn->GetVSTVolume(), MAX_BASECHANNELS);
}
}
}
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/OrderToPatternTable.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/OrderToPatternTable.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/OrderToPatternTable.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -83,7 +83,6 @@
//---------------------------------------------------------------
{
if(size() < count) resize(count, 0xFF);
- ASSERT(count == size());
size_t i = 0;
Added: branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.cpp (rev 0)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -0,0 +1,94 @@
+// ScaleEnvPointsDlg.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "mptrack.h"
+#include "ScaleEnvPointsDlg.h"
+
+
+// CScaleEnvPointsDlg dialog
+
+IMPLEMENT_DYNAMIC(CScaleEnvPointsDlg, CDialog)
+CScaleEnvPointsDlg::CScaleEnvPointsDlg(CWnd* pParent, INSTRUMENTHEADER* pInst, BYTE env)
+ : CDialog(CScaleEnvPointsDlg::IDD, pParent),
+ m_pInstrument(pInst),
+ m_Env(env)
+//----------------------------------------------------------------------
+{
+}
+
+CScaleEnvPointsDlg::~CScaleEnvPointsDlg()
+//---------------------------------------
+{
+}
+
+void CScaleEnvPointsDlg::DoDataExchange(CDataExchange* pDX)
+//--------------------------------------------------------
+{
+ CDialog::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_EDIT_FACTOR, m_EditFactor);
+}
+
+
+BEGIN_MESSAGE_MAP(CScaleEnvPointsDlg, CDialog)
+
+END_MESSAGE_MAP()
+
+
+// CScaleEnvPointsDlg message handlers
+
+void CScaleEnvPointsDlg::OnOK()
+//------------------------------
+{
+ char buffer[10];
+ GetDlgItemText(IDC_EDIT_FACTOR, buffer, 9);
+ float factor = static_cast<float>(atof(buffer));
+ if(factor > 0)
+ {
+ WORD (*array)[MAX_ENVPOINTS] = NULL;
+ UINT* arraySize = NULL;
+ switch(m_Env)
+ {
+ case ENV_VOLUME:
+ array = &m_pInstrument->VolPoints;
+ arraySize = &m_pInstrument->nVolEnv;
+ break;
+
+ case ENV_PANNING:
+ array = &m_pInstrument->PanPoints;
+ arraySize = &m_pInstrument->nPanEnv;
+ break;
+
+ case ENV_PITCH:
+ array = &m_pInstrument->PitchPoints;
+ arraySize = &m_pInstrument->nPitchEnv;
+ break;
+ }
+
+ if(array && arraySize)
+ {
+ for(UINT i = 0; i<*arraySize; i++)
+ {
+ (*array)[i] *= factor;
+
+ //Checking that the order of points is preserved.
+ if(i > 0 && (*array)[i] <= (*array)[i-1])
+ (*array)[i] = (*array)[i-1]+1;
+ }
+ }
+ }
+
+ CDialog::OnOK();
+}
+
+BOOL CScaleEnvPointsDlg::OnInitDialog()
+//-------------------------------------
+{
+ CDialog::OnInitDialog();
+
+ SetDlgItemText(IDC_EDIT_FACTOR, "");
+ m_EditFactor.SetFocus();
+
+
+ return FALSE; // return TRUE unless you set the focus to a control
+}
Added: branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.h (rev 0)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/ScaleEnvPointsDlg.h 2007-02-03 21:24:42 UTC (rev 172)
@@ -0,0 +1,33 @@
+#pragma once
+#include "sndfile.h"
+#include "afxwin.h"
+
+// CScaleEnvPointsDlg dialog
+
+//=======================================
+class CScaleEnvPointsDlg : public CDialog
+//=======================================
+{
+ DECLARE_DYNAMIC(CScaleEnvPointsDlg)
+
+public:
+ CScaleEnvPointsDlg(CWnd* pParent, INSTRUMENTHEADER* pInst, BYTE env); // standard constructor
+ virtual ~CScaleEnvPointsDlg();
+
+// Dialog Data
+ enum { IDD = IDD_SCALE_ENV_POINTS };
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
+
+ DECLARE_MESSAGE_MAP()
+
+private:
+ INSTRUMENTHEADER* m_pInstrument;
+ BYTE m_Env; //To tell which envelope to process.
+ CEdit m_EditFactor;
+protected:
+ virtual void OnOK();
+public:
+ virtual BOOL OnInitDialog();
+};
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp 2007-01-29 21:50:16 UTC (rev 171)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/TuningDialog.cpp 2007-02-03 21:24:42 UTC (rev 172)
@@ -3,17 +3,20 @@
#include "TuningDialog.h"
#include <algorithm>
#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;
+
/*
TODOS:
--Clear tuning(when copying existing tuning, it might have
- e.g. unwanted note names which should able to be removed.
--Drag'n'drop tuningfiles
+-Clear tuning
-Tooltips.
+-Create own dialogs for Tuning collection part, and Tuning part.
*/
@@ -25,7 +28,11 @@
m_TuningCollections(rVec),
m_TempTunings("Sandbox"),
m_NoteEditApply(true),
- m_RatioEditApply(true)
+ m_RatioEditApply(true),
+ m_pActiveTuningCollection(NULL),
+ m_TreeItemTuningItemMap(s_notFoundItemTree, s_notFoundItemTuning),
+ m_TreeCtrlTuning(this),
+ m_DoErrorExit(false)
//----------------------------------------
{
m_pActiveTuning = pTun;
@@ -39,37 +46,129 @@
{
for(size_t i = 0; i<m_TuningCollections.size(); i++)
{
- vector<CTuningCollection*>::iterator iter = find(m_DeletableTuningCollections.begin(), m_DeletableTuningCollections.end(), m_TuningCollections[i]);
- if(iter != m_DeletableTuningCollections.end())
+ if(IsDeletable(m_TuningCollections[i]))
{
delete m_TuningCollections[i];
- m_DeletableTuningCollections.erase(iter);
+ m_TuningCollections[i] = NULL;
}
}
m_TuningCollections.clear();
m_DeletableTuningCollections.clear();
}
+HTREEITEM CTuningDialog::AddTreeItem(CTuningCollection* pTC, HTREEITEM parent, HTREEITEM insertAfter)
+//---------------------------------------------------------------------------------------------------
+{
+ const HTREEITEM temp = m_TreeCtrlTuning.InsertItem(pTC->GetName().c_str(), parent, insertAfter);
+ HTREEITEM temp2 = NULL;
+ m_TreeItemTuningItemMap.AddPair(temp, TUNINGTREEITEM(pTC));
+ for(size_t i = 0; i<pTC->GetNumTunings(); i++)
+ {
+ temp2 = AddTreeItem(&pTC->GetTuning(i), temp, temp2);
+ }
+ m_TreeCtrlTuning.EnsureVisible(temp);
+ return temp;
+}
+
+HTREEITEM CTuningDialog::AddTreeItem(CTuning* pT, HTREEITEM parent, HTREEITEM insertAfter)
+//-----------------------------------------------------------------------------------------
+{
+ const HTREEITEM temp = m_TreeCtrlTuning.InsertItem(pT->GetName().c_str(), parent, insertAfter);
+ m_TreeItemTuningItemMap.AddPair(temp, TUNINGTREEITEM(pT));
+ m_TreeCtrlTuning.EnsureVisible(temp);
+ return temp;
+}
+
+void CTuningDialog::DeleteTreeItem(CTuning* pT)
+//---------------------------------------------
+{
+ if(!pT)
+ return;
+
+ HTREEITEM temp = m_TreeItemTuningItemMap.GetMapping_21(TUNINGTREEITEM(pT));
+ if(temp)
+ {
+ HTREEITEM nextitem = m_TreeCtrlTuning.GetNextItem(temp, TVGN_NEXT);
+ if(!nextitem) nextitem = m_TreeCtrlTuning.GetNextItem(temp, TVGN_PREVIOUS);
+ m_pActiveTuning = m_TreeItemTuningItemMap.GetMapping_12(nextitem).GetT();
+ m_TreeCtrlTuning.DeleteItem(temp);
+ //Note: Item from map is deleted 'automatically' in
+ //OnTvnDeleteitemTreeTuning.
+
+ }
+}
+
+void CTuningDialog::DeleteTreeItem(CTuningCollection* pTC)
+//---------------------------------------------
+{
+ if(!pTC)
+ return;
+
+ m_pActiveTuning = NULL;
+ const HTREEITEM temp = m_TreeItemTuningItemMap.GetMapping_21(TUNINGTREEITEM(pTC));
+ if(temp)
+ {
+ TUNINGTREEITEM prevTTI = m_TreeItemTuningItemMap.GetMapping_12(m_TreeCtrlTuning.GetNextItem(temp, TVGN_PREVIOUS));
+ TUNINGTREEITEM nextTTI = m_TreeItemTuningItemMap.GetMapping_12(m_TreeCtrlTuning.GetNextItem(temp, TVGN_NEXT));
+
+ CTuningCollection* pTCprev = prevTTI.GetTC();
+ CTuningCollection* pTCnext = nextTTI.GetTC();
+ if(pTCnext == NULL)
+ pTCnext = GetpTuningCollection(nextTTI.GetT());
+ if(pTCprev == NULL)
+ pTCprev = GetpTuningCollection(prevTTI.GetT());
+
+ if(pTCnext != NULL && pTCnext != m_pActiveTuningCollection)
+ m_pActiveTuningCollection = pTCnext;
+ else
+ {
+ if(pTCprev != m_pActiveTuningCollection)
+ m_pActiveTuningCollection = pTCprev;
+ else
+ m_pActiveTuningCollection = NULL;
+ }
+
+ m_TreeCtrlTuning.DeleteItem(temp);
+ //Note: Item from map is deleted 'automatically' in
+ //OnTvnDeleteitemTreeTuning.
+ }
+ else
+ {
+ ASSERT(false);
+ m_DoErrorExit = true;
+ m_pActiveTuningCollection = NULL;
+ }
+}
+
BOOL CTuningDialog::OnInitDialog()
//--------------------------------
{
CDialog::OnInitDialog();
-
+
m_RatioMapWnd.Init(this, 0);
- //Adding tuning collection names to the combobox.
+ //-->Creating treeview
+ m_TreeItemTuningItemMap.ClearMapping();
for(size_t i = 0; i<m_TuningCollections.size(); i++)
{
- m_CombobTuningCollection.AddString(m_TuningCollections[i]->GetName().c_str());
+ AddTreeItem(m_TuningCollections[i], NULL, NULL);
}
+ //<-- Creating treeview
- //Adding tuning type names to corresponding combobox
+ 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_ButtonSet.EnableWindow(FALSE);
+ //#ifdef DEBUG
+ m_EditTuningCollectionVersion.ShowWindow(SW_SHOW);
+ m_EditTuningCollectionEditMask.ShowWindow(SW_SHOW);
+ //#endif
+
m_EditFineTuneSteps.SetLimitText(3);
UpdateView();
@@ -77,117 +176,155 @@
return TRUE;
}
-void CTuningDialog::UpdateView()
+
+void CTuningDialog::UpdateView(const int updateMask)
//------------------------------
{
-
- if(m_pActiveTuning == NULL && (m_TuningCollections.size() == 0 || m_TuningCollections[0]->GetNumTunings() == 0))
+ if(m_DoErrorExit)
{
- ASSERT(false);
+ DoErrorExit();
return;
}
- if(m_pActiveTuning == NULL)
- m_pActiveTuning = &m_TuningCollections[0]->GetTuning(0);
-
-
- //Finding out where given tuning belongs to.
- size_t curTCol = 0, curT = 0; //cur <-> Current, T <-> Tuning, Col <-> Collection.
- bool found = false;
- for(size_t i = 0; i<m_TuningCollections.size(); i++)
+ //-->Updating treeview
+ if(updateMask != UM_TUNINGDATA)
{
- CTuningCollection& rCurTCol = *m_TuningCollections.at(i);
- for(size_t j = 0; j<rCurTCol.GetNumTunings(); j++)
+ TUNINGTREEITEM tuningitem;
+ if(m_pActiveTuning)
+ tuningitem.Set(m_pActiveTuning);
+ else
{
- if(m_pActiveTuning == &rCurTCol.GetTuning(static_cast<unsigned short>(j)))
- {
- curTCol = i;
- curT = j;
- found = true;
- break;
- }
+ if(m_pActiveTuningCollection)
+ tuningitem.Set(m_pActiveTuningCollection);
}
+ HTREEITEM treeitem = m_TreeItemTuningItemMap.GetMapping_21(tuningitem);
+ if(treeitem)
+ {
+ m_TreeCtrlTuning.Select(treeitem, TVGN_CARET);
+ if(m_pActiveTuning)
+ m_TreeCtrlTuning.SetItemText(treeitem, m_pActiveTuning->GetName().c_str());
+ else
+ m_TreeCtrlTuning.SetItemText(treeitem, m_pActiveTuningCollection->GetName().c_str());
+ }
}
- ASSERT(found);
+ //<--Updating treeview
+
- m_CombobTuningCollection.SetCurSel(curTCol);
- OnCbnSelchangeComboTcol();
- m_CombobTuningCollection.Invalidate();
+ if(m_pActiveTuningCollection == NULL)
+ {
+ return;
+ }
- m_CombobTuningName.SetCurSel(curT);
- m_CombobTuningName.Invalidate();
+ //Updating tuning collection part-->
+ if(updateMask == 0 || updateMask & UM_TUNINGCOLLECTION)
+ {
+ m_EditTuningCollectionName.SetWindowText(m_pActiveTuningCollection->GetName().c_str());
+ m_EditTuningCollectionVersion.SetWindowText(m_pActiveTuningCollection->GetVersionString().c_str());
+ m_EditTuningCollectionEditMask.SetWindowText(m_pActiveTuningCollection->GetEditMaskString().c_str());
+ m_EditTuningCollectionItemNum.SetWindowText(Stringify(m_pActiveTuningCollection->GetNumTunings()).c_str());
+ m_EditTuningCollectionPath.SetWindowText(m_pActiveTuningCollection->GetSaveFilePath().c_str());
+ }
+ //<-- Updating tuning collection part
+ //Updating tuning part-->
+ if(m_pActiveTuning != NULL && (updateMask & UM_TUNINGDATA || updateMask == 0))
+ {
+ UpdateTuningType();
- UpdateTuningType();
+ m_EditName.SetWindowText(m_pActiveTuning->GetName().c_str());
+ m_EditName.Invalidate();
- m_EditName.SetWindowText(m_pActiveTuning->GetName().c_str());
- m_EditName.Invalidate();
+ //Finetunesteps-edit
+ m_EditFineTuneSteps.SetWindowText(Stringify(m_pActiveTuning->GetFineStepCount()).c_str());
+ m_EditFineTuneSteps.Invalidate();
- //Finetunesteps-edit
- m_EditFineTuneSteps.SetWindowText(Stringify(m_pActiveTuning->GetFineStepCount()).c_str());
- m_EditFineTuneSteps.Invalidate();
+ //Making sure that ratiomap window is showing and
+ //updating its content.
+ m_RatioMapWnd.ShowWindow(SW_SHOW);
+ m_RatioMapWnd.m_pTuning = m_pActiveTuning;
+ m_RatioMapWnd.Invalidate();
+ UpdateRatioMapEdits(m_RatioMapWnd.GetShownCentre());
- //.Making sure that ratiomap window is showing and
- //updating its content.
- m_RatioMapWnd.ShowWindow(SW_SHOW);
- m_RatioMapWnd.m_pTuning = m_pActiveTuning;
- m_RatioMapWnd.Invalidate();
- UpdateRatioMapEdits(m_RatioMapWnd.GetShownCentre());
-
- const CTuning::STEPTYPE period = m_pActiveTuning->GetPeriod();
- const CTuning::RATIOTYPE periodRatio = m_pActiveTuning->GetPeriodRatio();
- if(period > 0)
- {
- m_EditSteps.EnableWindow();
- m_EditSteps.SetWindowText(Stringify(period).c_str());
+ const CTuning::STEPTYPE period = m_pActiveTuning->GetPeriod();
+ const CTuning::RATIOTYPE periodRatio = m_pActiveTuning->GetPeriodRatio();
+ if(period > 0)
+ {
+ m_EditSteps.EnableWindow();
+ m_EditSteps.SetWindowText(Stringify(period).c_str());
- m_EditRatioPeriod.EnableWindow();
- m_EditRatioPeriod.SetWindowText(Stringify(periodRatio).c_str());
- }
- else //case: m_pActiveTuning is of type general.
- {
- m_EditSteps.EnableWindow(false);
- m_EditRatioPeriod.EnableWindow(false);
- }
+ m_EditRatioPeriod.EnableWindow();
+ m_EditRatioPeriod.SetWindowText(Stringify(periodRatio).c_str());
+ }
+ else //case: m_pActiveTuning is of type general.
+ {
+ m_EditSteps.EnableWindow(false);
+ m_EditRatioPeriod.EnableWindow(false);
+ }
- m_EditRatioPeriod.Invalidate();
- m_EditSteps.Invalidate();
+ m_EditRatioPeriod.Invalidate();
+ m_EditSteps.Invalidate();
- bool enableControls = true;
- if(m_pActiveTuning->GetEditMask() == CTuning::EM_CONST ||
+ bool enableControls = true;
+
+ if(m_pActiveTuning->GetEditMask() == CTuning::EM_CONST ||
m_pActiveTuning->GetEditMask() == CTuning::EM_CONST_STRICT)
- {
- CheckDlgButton(IDC_CHECK_READONLY, MF_CHECKED);
- if(m_pActiveTuning->GetEditMask() == CTuning::EM_CONST_STRICT)
- m_ButtonReadOnly.EnableWindow(FALSE);
+ {
+ CheckDlgButton(IDC_CHECK_READONLY, MF_CHECKED);
+ if(m_pActiveTuning->GetEditMask() == CTuning::EM_CONST_STRICT)
+ m_ButtonReadOnly.EnableWindow(FALSE);
+ else
+ m_ButtonReadOnly.EnableWindow(TRUE);
+
+ enableControls = false;
+ }
else
- m_ButtonReadOnly.EnableWindow(TRUE);
+ {
+ CheckDlgButton(IDC_CHECK_READONLY, MF_UNCHECKED);
+ m_ButtonReadOnly.EnableWindow();
+ }
- enableControls = false;
+ m_CombobTuningType.EnableWindow(enableControls);
+ m_EditTableSize.SetReadOnly(!enableControls);
+ m_EditBeginNote.SetReadOnly(!enableControls);
+ m_EditSteps.SetReadOnly(!enableControls);
+ m_EditRatioPeriod.SetReadOnly(!enableControls);
+ m_EditRatio.SetReadOnly(!enableControls);
+ m_EditNotename.SetReadOnly(!enableControls);
+ m_EditMiscActions.SetReadOnly(!enableControls);
+ m_EditFineTuneSteps.SetReadOnly(!enableControls);
+ m_EditName.SetReadOnly(!enableControls);
+
+ m_ButtonSet.EnableWindow(enableControls);
+
+ m_CombobTuningType.Invalidate();
+ m_EditSteps.Invalidate();
+ m_EditRatioPeriod.Invalidate();
}
- else
+ else
{
- CheckDlgButton(IDC_CHECK_READONLY, MF_UNCHECKED);
- m_ButtonReadOnly.EnableWindow();
- }
+ if(m_pActiveTuning == NULL) //No active tuning, clearing tuning part.
+ {
+ m_EditName.SetWindowText("");
+ m_EditTableSize.SetWindowText("");
+ m_EditBeginNote.SetWindowText("");
+ m_EditSteps.SetWindowText("");
+ m_EditRatioPeriod.SetWindowText("");
+ m_EditRatio.SetWindowText("");
+ m_EditNotename.SetWindowText("");
+ m_EditMiscActions.SetWindowText("");
+ m_EditFineTuneSteps.SetWindowText("");
+ m_EditName.SetWindowText("");
- m_CombobTuningType.EnableWindow(enableControls);
- m_EditTableSize.SetReadOnly(!enableControls);
- m_EditBeginNote.SetReadOnly(!enableControls);
- m_EditSteps.SetReadOnly(!enableControls);
- m_EditRatioPeriod.SetReadOnly(!enableControls);
- m_EditRatio.SetReadOnly(!enableControls);
- m_EditNotename.SetReadOnly(!enableControls);
- m_EditMiscActions.SetReadOnly(!enableControls);
- m_EditFineTuneSteps.SetReadOnly(!enableControls);
- m_EditName.SetReadOnly(!enableControls);
-
- m_ButtonSet.EnableWindow(enableControls);
-
- m_CombobTuningType.Invalidate();
- m_EditSteps.Invalidate();
- m_EditRatioPeriod.Invalidate();
+ m_CombobTuningType.SetCurSel(-1);
+ m_ButtonReadOnly.EnableWindow(FALSE);
+
+ m_RatioMapWnd.ShowWindow(SW_HIDE);
+ m_RatioMapWnd.m_pTuning = NULL;
+ m_RatioMapWnd.Invalidate();
+ }
+ }
+ //<--Updating tuning part
}
@@ -196,16 +333,11 @@
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATICRATIOMAP, m_RatioMapWnd);
- DDX_Control(pDX, IDC_COMBO_TCOL, m_CombobTuningCollection);
- DDX_Control(pDX, IDC_COMBO_T, m_CombobTuningName);
DDX_Control(pDX, IDC_COMBO_TTYPE, m_CombobTuningType);
DDX_Control(pDX, IDC_EDIT_TABLESIZE, m_EditTableSize);
DDX_Control(pDX, IDC_EDIT_BEGINNOTE, m_EditBeginNote);
DDX_Control(pDX, IDC_EDIT_STEPS, m_EditSteps);
DDX_Control(pDX, IDC_EDIT_RATIOPERIOD, m_EditRatioPeriod);
- DDX_Control(pDX, IDC_CHECK_NEWTUNING, m_CheckNewTuning);
- DDX_Control(pDX, IDC_ADD_TUNING, m_ButtonAddTuning);
- DDX_Control(pDX, IDC_REMOVE_TUNING, m_ButtonRemoveTuning);
DDX_Control(pDX, IDC_EDIT_RATIOVALUE, m_EditRatio);
DDX_Control(pDX, IDC_EDIT_NOTENAME, m_EditNotename);
DDX_Control(pDX, IDC_BUTTON_SETVALUES, m_ButtonSet);
@@ -215,19 +347,20 @@
DDX_Control(pDX, IDC_EDIT_FINETUNESTEPS, m_EditFineTuneSteps);
DDX_Control(pDX, IDC_CHECK_READONLY, m_ButtonReadOnly);
DDX_Control(pDX, IDC_EDIT_NAME, m_EditName);
+ DDX_Control(pDX, IDC_TREE_TUNING, m_TreeCtrlTuning);
+ DDX_Control(pDX, IDC_EDIT_TUNINGCOLLECTION_NAME, m_EditTuningCollectionName);
+ DDX_Control(pDX, IDC_EDIT_TUNINGC_VERSION, m_EditTuningCollectionVersion);
+ DDX_Control(pDX, IDC_EDIT_TUNINGC_EDITMASK, m_EditTuningCollectionEditMask);
+ DDX_Control(pDX, IDC_EDIT_TUNINGNUM, m_EditTuningCollectionItemNum);
+ DDX_Control(pDX, IDC_EDIT_TUNINGCOLLECTION_PATH, m_EditTuningCollectionPath);
}
+
BEGIN_MESSAGE_MAP(CTuningDialog, CDialog)
- ON_CBN_SELCHANGE(IDC_COMBO_TCOL, OnCbnSelchangeComboTcol)
- ON_CBN_SELCHANGE(IDC_COMBO_T, OnCbnSelchangeComboT)
- ON_BN_CLICKED(IDC_CHECK_NEWTUNING, OnBnClickedCheckNewtuning)
ON_CBN_SELCHANGE(IDC_COMBO_TTYPE, OnCbnSelchangeComboTtype)
ON_EN_CHANGE(IDC_EDIT_STEPS, OnEnChangeEditSteps)
ON_EN_CHANGE(IDC_EDIT_RATIOPERIOD, OnEnChangeEditRatioperiod)
- ON_BN_CLICKED(IDC_ADD_TUNING, OnBnClickedAddTuning)
- ON_BN_CLICKED(IDC_REMOVE_TUNING, OnBnClickedRemoveTuning)
- ON_CBN_EDITCHANGE(IDC_COMBO_T, OnCbnEditchangeComboT)
ON_EN_CHANGE(IDC_EDIT_NOTENAME, OnEnChangeEditNotename)
ON_BN_CLICKED(IDC_BUTTON_SETVALUES, OnBnClickedButtonSetvalues)
ON_EN_CHANGE(IDC_EDIT_RATIOVALUE, OnEnChangeEditRatiovalue)
@@ -241,72 +374,39 @@
ON_EN_KILLFOCUS(IDC_EDIT_RATIOPERIOD, OnEnKillfocusEditRatioperiod)
ON_EN_KILLFOCUS(IDC_EDIT_RATIOVALUE, OnEnKillfocusEditRatiovalue)
ON_EN_KILLFOCUS(IDC_EDIT_NOTENAME, OnEnKillfocusEditNotename)
+ ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_TUNING, OnTvnSelchangedTreeTuning)
+ ON_NOTIFY(TVN_DELETEITEM, IDC_TREE_TUNING, OnTvnDeleteitemTreeTuning)
+ ON_NOTIFY(NM_RCLICK, IDC_TREE_TUNING, OnNMRclickTreeTuning)
+ ON_NOTIFY(TVN_BEGINDRAG, IDC_TREE_TUNING, OnTvnBegindragTreeTuning)
+ ON_COMMAND(ID_REMOVETUNING, OnRemoveTuning)
+ ON_COMMAND(ID_ADDTUNING, OnAddTuning)
+ ON_COMMAND(ID_MOVETUNING, OnMoveTuning)
+ ON_COMMAND(ID_COPYTUNING, OnCopyTuning)
+ ON_COMMAND(ID_REMOVETUNINGCOLLECTION, OnRemoveTuningCollection)
+ ON_BN_CLICKED(IDC_BUTTON_TUNINGCOLLECTION_SAVE, OnBnClickedButtonTuningcollectionSave)
END_MESSAGE_MAP()
-// CTuningDialog message handlers
-
-void CTuningDialog::OnCbnSelchangeComboTcol()
-//-------------------------------------------
+void CTuningDialog::DoErrorExit()
+//-------------------------------
{
- const int curTCol = m_CombobTuningCollection.GetCurSel();
- if(curTCol < 0 || curTCol >= static_cast<int>(m_TuningCollections.size())) return;
-
- //Checking whether collection allows removing
- if(m_TuningCollections[curTCol]->CanEdit(CTuningCollection::EM_REMOVE))
- m_ButtonRemoveTuning.EnableWindow(true);
- else
- m_ButtonRemoveTuning.EnableWindow(false);
-
- //Clearing existing items from name-combobox...
- while(m_CombobTuningName.GetCount() > 0)
- m_CombobTuningName.DeleteString(0);
-
- //...adding names of tunings in the current tuning collection...
- CTuningCollection& rTCol = *m_TuningCollections.at(curTCol);
- for(size_t i = 0; i<rTCol.GetNumTunings(); i++)
- {
- m_CombobTuningName.AddString(rTCol.GetTuning(static_cast<unsigned short>(i)).GetName().c_str());
- }
-
- //Checking whether tuning collection allows adding
- //tunings...
- if(m_TuningCollections.at(curTCol)->CanEdit(CTuningCollection::EM_ADD))
- m_ButtonAddTuning.EnableWindow();
- else
- m_ButtonAddTuning.EnableWindow(false);
-
- if(m_TuningCollections.at(curTCol)->CanEdit(CTuningCollection::EM_REMOVE))
- m_ButtonRemoveTuning.EnableWind...
[truncated message content] |