fix order edit buttons when follow pattern is off
This commit is contained in:
parent
56d4950fad
commit
8d13ec078c
|
@ -3544,14 +3544,14 @@ void DivEngine::delSample(int index) {
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivEngine::addOrder(bool duplicate, bool where) {
|
void DivEngine::addOrder(int pos, bool duplicate, bool where) {
|
||||||
unsigned char order[DIV_MAX_CHANS];
|
unsigned char order[DIV_MAX_CHANS];
|
||||||
if (curSubSong->ordersLen>=(DIV_MAX_PATTERNS-1)) return;
|
if (curSubSong->ordersLen>=(DIV_MAX_PATTERNS-1)) return;
|
||||||
memset(order,0,DIV_MAX_CHANS);
|
memset(order,0,DIV_MAX_CHANS);
|
||||||
BUSY_BEGIN_SOFT;
|
BUSY_BEGIN_SOFT;
|
||||||
if (duplicate) {
|
if (duplicate) {
|
||||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||||
order[i]=curOrders->ord[i][curOrder];
|
order[i]=curOrders->ord[i][pos];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bool used[DIV_MAX_PATTERNS];
|
bool used[DIV_MAX_PATTERNS];
|
||||||
|
@ -3579,14 +3579,14 @@ void DivEngine::addOrder(bool duplicate, bool where) {
|
||||||
} else { // after current order
|
} else { // after current order
|
||||||
saveLock.lock();
|
saveLock.lock();
|
||||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||||
for (int j=curSubSong->ordersLen; j>curOrder; j--) {
|
for (int j=curSubSong->ordersLen; j>pos; j--) {
|
||||||
curOrders->ord[i][j]=curOrders->ord[i][j-1];
|
curOrders->ord[i][j]=curOrders->ord[i][j-1];
|
||||||
}
|
}
|
||||||
curOrders->ord[i][curOrder+1]=order[i];
|
curOrders->ord[i][pos+1]=order[i];
|
||||||
}
|
}
|
||||||
curSubSong->ordersLen++;
|
curSubSong->ordersLen++;
|
||||||
saveLock.unlock();
|
saveLock.unlock();
|
||||||
curOrder++;
|
if (pos<=curOrder) curOrder++;
|
||||||
if (playing && !freelance) {
|
if (playing && !freelance) {
|
||||||
playSub(false);
|
playSub(false);
|
||||||
}
|
}
|
||||||
|
@ -3594,7 +3594,7 @@ void DivEngine::addOrder(bool duplicate, bool where) {
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivEngine::deepCloneOrder(bool where) {
|
void DivEngine::deepCloneOrder(int pos, bool where) {
|
||||||
unsigned char order[DIV_MAX_CHANS];
|
unsigned char order[DIV_MAX_CHANS];
|
||||||
if (curSubSong->ordersLen>=(DIV_MAX_PATTERNS-1)) return;
|
if (curSubSong->ordersLen>=(DIV_MAX_PATTERNS-1)) return;
|
||||||
warnings="";
|
warnings="";
|
||||||
|
@ -3602,7 +3602,7 @@ void DivEngine::deepCloneOrder(bool where) {
|
||||||
for (int i=0; i<chans; i++) {
|
for (int i=0; i<chans; i++) {
|
||||||
bool didNotFind=true;
|
bool didNotFind=true;
|
||||||
logD("channel %d",i);
|
logD("channel %d",i);
|
||||||
order[i]=curOrders->ord[i][curOrder];
|
order[i]=curOrders->ord[i][pos];
|
||||||
// find free slot
|
// find free slot
|
||||||
for (int j=0; j<DIV_MAX_PATTERNS; j++) {
|
for (int j=0; j<DIV_MAX_PATTERNS; j++) {
|
||||||
logD("finding free slot in %d...",j);
|
logD("finding free slot in %d...",j);
|
||||||
|
@ -3631,14 +3631,14 @@ void DivEngine::deepCloneOrder(bool where) {
|
||||||
} else { // after current order
|
} else { // after current order
|
||||||
saveLock.lock();
|
saveLock.lock();
|
||||||
for (int i=0; i<chans; i++) {
|
for (int i=0; i<chans; i++) {
|
||||||
for (int j=curSubSong->ordersLen; j>curOrder; j--) {
|
for (int j=curSubSong->ordersLen; j>pos; j--) {
|
||||||
curOrders->ord[i][j]=curOrders->ord[i][j-1];
|
curOrders->ord[i][j]=curOrders->ord[i][j-1];
|
||||||
}
|
}
|
||||||
curOrders->ord[i][curOrder+1]=order[i];
|
curOrders->ord[i][pos+1]=order[i];
|
||||||
}
|
}
|
||||||
curSubSong->ordersLen++;
|
curSubSong->ordersLen++;
|
||||||
saveLock.unlock();
|
saveLock.unlock();
|
||||||
curOrder++;
|
if (pos<=curOrder) curOrder++;
|
||||||
if (playing && !freelance) {
|
if (playing && !freelance) {
|
||||||
playSub(false);
|
playSub(false);
|
||||||
}
|
}
|
||||||
|
@ -3646,17 +3646,18 @@ void DivEngine::deepCloneOrder(bool where) {
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivEngine::deleteOrder() {
|
void DivEngine::deleteOrder(int pos) {
|
||||||
if (curSubSong->ordersLen<=1) return;
|
if (curSubSong->ordersLen<=1) return;
|
||||||
BUSY_BEGIN_SOFT;
|
BUSY_BEGIN_SOFT;
|
||||||
saveLock.lock();
|
saveLock.lock();
|
||||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||||
for (int j=curOrder; j<curSubSong->ordersLen; j++) {
|
for (int j=pos; j<curSubSong->ordersLen; j++) {
|
||||||
curOrders->ord[i][j]=curOrders->ord[i][j+1];
|
curOrders->ord[i][j]=curOrders->ord[i][j+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
curSubSong->ordersLen--;
|
curSubSong->ordersLen--;
|
||||||
saveLock.unlock();
|
saveLock.unlock();
|
||||||
|
if (curOrder>pos) curOrder--;
|
||||||
if (curOrder>=curSubSong->ordersLen) curOrder=curSubSong->ordersLen-1;
|
if (curOrder>=curSubSong->ordersLen) curOrder=curSubSong->ordersLen-1;
|
||||||
if (playing && !freelance) {
|
if (playing && !freelance) {
|
||||||
playSub(false);
|
playSub(false);
|
||||||
|
@ -3664,40 +3665,46 @@ void DivEngine::deleteOrder() {
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivEngine::moveOrderUp() {
|
void DivEngine::moveOrderUp(int& pos) {
|
||||||
BUSY_BEGIN_SOFT;
|
BUSY_BEGIN_SOFT;
|
||||||
if (curOrder<1) {
|
if (pos<1) {
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
saveLock.lock();
|
saveLock.lock();
|
||||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||||
curOrders->ord[i][curOrder]^=curOrders->ord[i][curOrder-1];
|
curOrders->ord[i][pos]^=curOrders->ord[i][pos-1];
|
||||||
curOrders->ord[i][curOrder-1]^=curOrders->ord[i][curOrder];
|
curOrders->ord[i][pos-1]^=curOrders->ord[i][pos];
|
||||||
curOrders->ord[i][curOrder]^=curOrders->ord[i][curOrder-1];
|
curOrders->ord[i][pos]^=curOrders->ord[i][pos-1];
|
||||||
}
|
}
|
||||||
saveLock.unlock();
|
saveLock.unlock();
|
||||||
|
if (curOrder==pos) {
|
||||||
curOrder--;
|
curOrder--;
|
||||||
|
}
|
||||||
|
pos--;
|
||||||
if (playing && !freelance) {
|
if (playing && !freelance) {
|
||||||
playSub(false);
|
playSub(false);
|
||||||
}
|
}
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivEngine::moveOrderDown() {
|
void DivEngine::moveOrderDown(int& pos) {
|
||||||
BUSY_BEGIN_SOFT;
|
BUSY_BEGIN_SOFT;
|
||||||
if (curOrder>=curSubSong->ordersLen-1) {
|
if (pos>=curSubSong->ordersLen-1) {
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
saveLock.lock();
|
saveLock.lock();
|
||||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||||
curOrders->ord[i][curOrder]^=curOrders->ord[i][curOrder+1];
|
curOrders->ord[i][pos]^=curOrders->ord[i][pos+1];
|
||||||
curOrders->ord[i][curOrder+1]^=curOrders->ord[i][curOrder];
|
curOrders->ord[i][pos+1]^=curOrders->ord[i][pos];
|
||||||
curOrders->ord[i][curOrder]^=curOrders->ord[i][curOrder+1];
|
curOrders->ord[i][pos]^=curOrders->ord[i][pos+1];
|
||||||
}
|
}
|
||||||
saveLock.unlock();
|
saveLock.unlock();
|
||||||
|
if (curOrder==pos) {
|
||||||
curOrder++;
|
curOrder++;
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
if (playing && !freelance) {
|
if (playing && !freelance) {
|
||||||
playSub(false);
|
playSub(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -810,19 +810,19 @@ class DivEngine {
|
||||||
void delSample(int index);
|
void delSample(int index);
|
||||||
|
|
||||||
// add order
|
// add order
|
||||||
void addOrder(bool duplicate, bool where);
|
void addOrder(int pos, bool duplicate, bool where);
|
||||||
|
|
||||||
// deep clone orders
|
// deep clone orders
|
||||||
void deepCloneOrder(bool where);
|
void deepCloneOrder(int pos, bool where);
|
||||||
|
|
||||||
// delete order
|
// delete order
|
||||||
void deleteOrder();
|
void deleteOrder(int pos);
|
||||||
|
|
||||||
// move order up
|
// move order up
|
||||||
void moveOrderUp();
|
void moveOrderUp(int& pos);
|
||||||
|
|
||||||
// move order down
|
// move order down
|
||||||
void moveOrderDown();
|
void moveOrderDown(int& pos);
|
||||||
|
|
||||||
// move thing up
|
// move thing up
|
||||||
bool moveInsUp(int which);
|
bool moveInsUp(int which);
|
||||||
|
|
|
@ -1471,17 +1471,17 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_ADD:
|
case GUI_ACTION_ORDERS_ADD:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->addOrder(false,false);
|
e->addOrder(curOrder,false,false);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_DUPLICATE:
|
case GUI_ACTION_ORDERS_DUPLICATE:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->addOrder(true,false);
|
e->addOrder(curOrder,true,false);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_DEEP_CLONE:
|
case GUI_ACTION_ORDERS_DEEP_CLONE:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->deepCloneOrder(false);
|
e->deepCloneOrder(curOrder,false);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
if (!e->getWarnings().empty()) {
|
if (!e->getWarnings().empty()) {
|
||||||
showWarning(e->getWarnings(),GUI_WARN_GENERIC);
|
showWarning(e->getWarnings(),GUI_WARN_GENERIC);
|
||||||
|
@ -1489,12 +1489,12 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_DUPLICATE_END:
|
case GUI_ACTION_ORDERS_DUPLICATE_END:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->addOrder(true,true);
|
e->addOrder(curOrder,true,true);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_DEEP_CLONE_END:
|
case GUI_ACTION_ORDERS_DEEP_CLONE_END:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->deepCloneOrder(true);
|
e->deepCloneOrder(curOrder,true);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
if (!e->getWarnings().empty()) {
|
if (!e->getWarnings().empty()) {
|
||||||
showWarning(e->getWarnings(),GUI_WARN_GENERIC);
|
showWarning(e->getWarnings(),GUI_WARN_GENERIC);
|
||||||
|
@ -1502,7 +1502,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_REMOVE:
|
case GUI_ACTION_ORDERS_REMOVE:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->deleteOrder();
|
e->deleteOrder(curOrder);
|
||||||
if (curOrder>=e->curSubSong->ordersLen) {
|
if (curOrder>=e->curSubSong->ordersLen) {
|
||||||
curOrder=e->curSubSong->ordersLen-1;
|
curOrder=e->curSubSong->ordersLen-1;
|
||||||
oldOrder=curOrder;
|
oldOrder=curOrder;
|
||||||
|
@ -1513,12 +1513,12 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_MOVE_UP:
|
case GUI_ACTION_ORDERS_MOVE_UP:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->moveOrderUp();
|
e->moveOrderUp(curOrder);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_MOVE_DOWN:
|
case GUI_ACTION_ORDERS_MOVE_DOWN:
|
||||||
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
prepareUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
e->moveOrderDown();
|
e->moveOrderDown(curOrder);
|
||||||
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
makeUndo(GUI_UNDO_CHANGE_ORDER);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_ORDERS_REPLAY:
|
case GUI_ACTION_ORDERS_REPLAY:
|
||||||
|
|
Loading…
Reference in a new issue