|
From: <sag...@us...> - 2010-02-17 20:38:13
|
Revision: 499
http://modplug.svn.sourceforge.net/modplug/?rev=499&view=rev
Author: saga-games
Date: 2010-02-17 20:38:04 +0000 (Wed, 17 Feb 2010)
Log Message:
-----------
[New] Sample Editor: Shift+New = Clone sample slot
Modified Paths:
--------------
trunk/OpenMPT/mptrack/Ctrl_smp.cpp
Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp
===================================================================
--- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2010-02-17 14:49:47 UTC (rev 498)
+++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2010-02-17 20:38:04 UTC (rev 499)
@@ -883,11 +883,27 @@
void CCtrlSamples::OnSampleNew()
//------------------------------
{
- LONG smp = m_pModDoc->InsertSample(TRUE);
+ bool bDuplicate = CMainFrame::GetInputHandler()->ShiftPressed();
+
+ SAMPLEINDEX smp = m_pModDoc->InsertSample(true);
if (smp != SAMPLEINDEX_INVALID)
{
+ SAMPLEINDEX nOldSmp = m_nSample;
CSoundFile *pSndFile = m_pModDoc->GetSoundFile();
SetCurrentSample(smp);
+
+ if(bDuplicate && nOldSmp >= 1 && nOldSmp < MAX_SAMPLES)
+ {
+ m_pModDoc->GetSampleUndo()->PrepareUndo(smp, sundo_replace);
+ memcpy(&m_pSndFile->Samples[smp], &m_pSndFile->Samples[nOldSmp], sizeof(MODSAMPLE));
+ strcpy(m_pSndFile->m_szNames[smp], m_pSndFile->m_szNames[nOldSmp]);
+ // clone sample.
+ if((m_pSndFile->Samples[smp].pSample = CSoundFile::AllocateSample(m_pSndFile->Samples[nOldSmp].GetSampleSizeInBytes())) != nullptr)
+ {
+ memcpy(m_pSndFile->Samples[smp].pSample, m_pSndFile->Samples[nOldSmp].pSample, m_pSndFile->Samples[nOldSmp].GetSampleSizeInBytes());
+ }
+ }
+
// 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h]
m_pModDoc->UpdateAllViews(NULL, (smp << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA | HINT_SMPNAMES);
if ((pSndFile->m_nInstruments) && (!m_pModDoc->FindSampleParent(smp)))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|