diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 5a7ec1db2..348e8bff6 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1572,6 +1572,20 @@ void DivEngine::changeSong(size_t songIndex) { prevRow=0; } +void DivEngine::moveAsset(std::vector& dir, int before, int after) { + if (before<0 || after<0) return; + for (DivAssetDir& i: dir) { + for (size_t j=0; j& dir, int entry) { if (entry<0) return; for (DivAssetDir& i: dir) { @@ -4006,6 +4020,7 @@ bool DivEngine::moveInsUp(int which) { saveLock.lock(); song.ins[which]=song.ins[which-1]; song.ins[which-1]=prev; + moveAsset(song.insDir,which,which-1); exchangeIns(which,which-1); saveLock.unlock(); BUSY_END; @@ -4019,6 +4034,7 @@ bool DivEngine::moveWaveUp(int which) { saveLock.lock(); song.wave[which]=song.wave[which-1]; song.wave[which-1]=prev; + moveAsset(song.waveDir,which,which-1); saveLock.unlock(); BUSY_END; return true; @@ -4034,6 +4050,7 @@ bool DivEngine::moveSampleUp(int which) { saveLock.lock(); song.sample[which]=song.sample[which-1]; song.sample[which-1]=prev; + moveAsset(song.sampleDir,which,which-1); saveLock.unlock(); renderSamples(); BUSY_END; @@ -4048,6 +4065,7 @@ bool DivEngine::moveInsDown(int which) { song.ins[which]=song.ins[which+1]; song.ins[which+1]=prev; exchangeIns(which,which+1); + moveAsset(song.insDir,which,which+1); saveLock.unlock(); BUSY_END; return true; @@ -4060,6 +4078,7 @@ bool DivEngine::moveWaveDown(int which) { saveLock.lock(); song.wave[which]=song.wave[which+1]; song.wave[which+1]=prev; + moveAsset(song.waveDir,which,which+1); saveLock.unlock(); BUSY_END; return true; @@ -4075,6 +4094,7 @@ bool DivEngine::moveSampleDown(int which) { saveLock.lock(); song.sample[which]=song.sample[which+1]; song.sample[which+1]=prev; + moveAsset(song.sampleDir,which,which+1); saveLock.unlock(); renderSamples(); BUSY_END; diff --git a/src/engine/engine.h b/src/engine/engine.h index 07fd53507..711e3591e 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -517,6 +517,9 @@ class DivEngine { // change song (UNSAFE) void changeSong(size_t songIndex); + // move an asset + void moveAsset(std::vector& dir, int before, int after); + // remove an asset void removeAsset(std::vector& dir, int entry); diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index dacaa14cc..a30095108 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -4928,9 +4928,6 @@ DivDataErrors DivEngine::readAssetDirData(SafeReader& reader, std::vector