GUI: add paste with instrument
like paste mix but changes the instrument
This commit is contained in:
parent
e22d7484cb
commit
ad097e0526
3
TODO.md
3
TODO.md
|
@ -1,6 +1,5 @@
|
|||
# to-do for 0.6pre1.5
|
||||
|
||||
- stereo separation control for AY
|
||||
- "paste with instrument"
|
||||
- auto-detect system
|
||||
- KVS
|
||||
- bug fixes
|
||||
|
|
|
@ -405,7 +405,7 @@ void FurnaceGUI::doCopy(bool cut) {
|
|||
}
|
||||
}
|
||||
|
||||
void FurnaceGUI::doPaste(PasteMode mode) {
|
||||
void FurnaceGUI::doPaste(PasteMode mode, int arg) {
|
||||
finishSelection();
|
||||
prepareUndo(GUI_UNDO_PATTERN_PASTE);
|
||||
char* clipText=SDL_GetClipboardText();
|
||||
|
@ -481,14 +481,16 @@ void FurnaceGUI::doPaste(PasteMode mode) {
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_MIX_FG) && strcmp(note,"...")==0) {
|
||||
if ((mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_MIX_FG ||
|
||||
mode==GUI_PASTE_MODE_INS_BG || mode==GUI_PASTE_MODE_INS_FG) && strcmp(note,"...")==0) {
|
||||
// do nothing.
|
||||
} else {
|
||||
if (mode!=GUI_PASTE_MODE_MIX_BG || (pat->data[j][0]==0 && pat->data[j][1]==0)) {
|
||||
if (!(mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_INS_BG) || (pat->data[j][0]==0 && pat->data[j][1]==0)) {
|
||||
if (!decodeNote(note,pat->data[j][0],pat->data[j][1])) {
|
||||
invalidData=true;
|
||||
break;
|
||||
}
|
||||
if (mode==GUI_PASTE_MODE_INS_BG || mode==GUI_PASTE_MODE_INS_FG) pat->data[j][2]=arg;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -505,7 +507,7 @@ void FurnaceGUI::doPaste(PasteMode mode) {
|
|||
note[2]=0;
|
||||
|
||||
if (iFine==1) {
|
||||
if (!opMaskPaste.ins) {
|
||||
if (!opMaskPaste.ins || mode==GUI_PASTE_MODE_INS_BG || mode==GUI_PASTE_MODE_INS_FG) {
|
||||
iFine++;
|
||||
continue;
|
||||
}
|
||||
|
@ -527,7 +529,8 @@ void FurnaceGUI::doPaste(PasteMode mode) {
|
|||
}
|
||||
|
||||
if (strcmp(note,"..")==0) {
|
||||
if (!(mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_MIX_FG)) {
|
||||
if (!(mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_MIX_FG ||
|
||||
mode==GUI_PASTE_MODE_INS_BG || mode==GUI_PASTE_MODE_INS_FG)) {
|
||||
pat->data[j][iFine+1]=-1;
|
||||
}
|
||||
} else {
|
||||
|
@ -536,7 +539,7 @@ void FurnaceGUI::doPaste(PasteMode mode) {
|
|||
invalidData=true;
|
||||
break;
|
||||
}
|
||||
if (mode!=GUI_PASTE_MODE_MIX_BG || pat->data[j][iFine+1]==-1) {
|
||||
if (!(mode==GUI_PASTE_MODE_MIX_BG || mode==GUI_PASTE_MODE_INS_BG) || pat->data[j][iFine+1]==-1) {
|
||||
if (iFine<(3+e->curPat[iCoarse].effectCols*2)) pat->data[j][iFine+1]=val;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2180,6 +2180,30 @@ void FurnaceGUI::editOptions(bool topMenu) {
|
|||
if (ImGui::BeginMenu("paste special...")) {
|
||||
if (ImGui::MenuItem("paste mix",BIND_FOR(GUI_ACTION_PAT_PASTE_MIX))) doPaste(GUI_PASTE_MODE_MIX_FG);
|
||||
if (ImGui::MenuItem("paste mix (background)",BIND_FOR(GUI_ACTION_PAT_PASTE_MIX_BG))) doPaste(GUI_PASTE_MODE_MIX_BG);
|
||||
if (ImGui::BeginMenu("paste with ins (foreground)")) {
|
||||
if (e->song.ins.empty()) {
|
||||
ImGui::Text("no instruments available");
|
||||
}
|
||||
for (size_t i=0; i<e->song.ins.size(); i++) {
|
||||
snprintf(id,4095,"%.2X: %s",(int)i,e->song.ins[i]->name.c_str());
|
||||
if (ImGui::MenuItem(id)) {
|
||||
doPaste(GUI_PASTE_MODE_INS_FG,i);
|
||||
}
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
if (ImGui::BeginMenu("paste with ins (background)")) {
|
||||
if (e->song.ins.empty()) {
|
||||
ImGui::Text("no instruments available");
|
||||
}
|
||||
for (size_t i=0; i<e->song.ins.size(); i++) {
|
||||
snprintf(id,4095,"%.2X: %s",(int)i,e->song.ins[i]->name.c_str());
|
||||
if (ImGui::MenuItem(id)) {
|
||||
doPaste(GUI_PASTE_MODE_INS_BG,i);
|
||||
}
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
if (ImGui::MenuItem("paste flood",BIND_FOR(GUI_ACTION_PAT_PASTE_FLOOD))) doPaste(GUI_PASTE_MODE_FLOOD);
|
||||
if (ImGui::MenuItem("paste overflow",BIND_FOR(GUI_ACTION_PAT_PASTE_OVERFLOW))) doPaste(GUI_PASTE_MODE_OVERFLOW);
|
||||
ImGui::EndMenu();
|
||||
|
|
|
@ -596,7 +596,9 @@ enum PasteMode {
|
|||
GUI_PASTE_MODE_MIX_FG,
|
||||
GUI_PASTE_MODE_MIX_BG,
|
||||
GUI_PASTE_MODE_FLOOD,
|
||||
GUI_PASTE_MODE_OVERFLOW
|
||||
GUI_PASTE_MODE_OVERFLOW,
|
||||
GUI_PASTE_MODE_INS_FG,
|
||||
GUI_PASTE_MODE_INS_BG
|
||||
};
|
||||
|
||||
#define FURKMOD_CTRL (1U<<31)
|
||||
|
@ -1708,7 +1710,7 @@ class FurnaceGUI {
|
|||
void doInsert();
|
||||
void doTranspose(int amount, OperationMask& mask);
|
||||
void doCopy(bool cut);
|
||||
void doPaste(PasteMode mode=GUI_PASTE_MODE_NORMAL);
|
||||
void doPaste(PasteMode mode=GUI_PASTE_MODE_NORMAL, int arg=0);
|
||||
void doChangeIns(int ins);
|
||||
void doInterpolate();
|
||||
void doFade(int p0, int p1, bool mode);
|
||||
|
|
Loading…
Reference in New Issue