zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit d88c58e1630b81895e6ee323ce1db9cff1b27eca
parent c6dedb43ddf70e28f936d195282c4a90821ad83a
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Thu,  7 May 2015 15:52:29 -0400

Preset Copy/Paste For Named Non-Array Type Fixed

Diffstat:
Msrc/Misc/PresetExtractor.cpp | 57+++++++++++++++++++++++++++++++++------------------------
Msrc/UI/PresetsUI.fl | 37++++++++++++++++---------------------
2 files changed, 49 insertions(+), 45 deletions(-)

diff --git a/src/Misc/PresetExtractor.cpp b/src/Misc/PresetExtractor.cpp @@ -94,7 +94,7 @@ const rtosc::Ports preset_ports { {"scan-for-presets:", rDoc("Scan For Presets"), 0, dummy}, {"copy:s:ss:si:ssi", rDoc("Copy <s> URL to <s> Name/Clipboard from subfield <i>"), 0, dummy}, - {"paste:s:ss:si:ssi", rDoc("Paste <s> URL to <s> Name/Clipboard from subfield <i>"), 0, dummy}, + {"paste:s:ss:si:ssi", rDoc("Paste <s> URL to <s> File-Name/Clipboard from subfield <i>"), 0, dummy}, {"clipboard-type:", rDoc("Type Stored In Clipboard"), 0, dummy} }; @@ -188,32 +188,26 @@ void *capture(Master *m, std::string url) } template<class T> -std::string doCopy(MiddleWare &mw, string url) +std::string doCopy(MiddleWare &mw, string url, string name) { XMLwrapper xml; - mw.doReadOnlyOp([&xml, url,&mw](){ + mw.doReadOnlyOp([&xml, url, name, &mw](){ Master *m = mw.spawnMaster(); //Get the pointer T *t = (T*)capture<void*>(m, url+"self"); //Extract Via mxml //t->add2XML(&xml); - t->copy(presetsstore, NULL); + t->copy(presetsstore, name.empty()? NULL:name.c_str()); }); return "";//xml.getXMLdata(); } template<class T, typename... Ts> -void doPaste(MiddleWare &mw, string url, string type, string data, Ts&&... args) +void doPaste(MiddleWare &mw, string url, string type, XMLwrapper &xml, Ts&&... args) { - printf("Do Paste<%d>\n", data.size()); - if(data.length() < 20) - return; - //Generate a new object T *t = new T(std::forward<Ts>(args)...); - XMLwrapper xml; - xml.putXMLdata(data.data()); if(xml.enterbranch(type) == 0) return; @@ -285,7 +279,7 @@ void doArrayPaste(MiddleWare &mw, int field, string url, string type, string dat * extra handling. * See MiddleWare.cpp for these specifics */ -void doClassPaste(std::string type, std::string type_, MiddleWare &mw, string url, string data) +void doClassPaste(std::string type, std::string type_, MiddleWare &mw, string url, XMLwrapper &data) { printf("Class Paste\n"); if(type == "EnvelopeParams") @@ -311,26 +305,26 @@ void doClassPaste(std::string type, std::string type_, MiddleWare &mw, string ur } } -std::string doClassCopy(std::string type, MiddleWare &mw, string url) +std::string doClassCopy(std::string type, MiddleWare &mw, string url, string name) { if(type == "EnvelopeParams") - return doCopy<EnvelopeParams>(mw, url); + return doCopy<EnvelopeParams>(mw, url, name); else if(type == "LFOParams") - return doCopy<LFOParams>(mw, url); + return doCopy<LFOParams>(mw, url, name); else if(type == "FilterParams") - return doCopy<FilterParams>(mw, url); + return doCopy<FilterParams>(mw, url, name); else if(type == "ADnoteParameters") - return doCopy<ADnoteParameters>(mw, url); + return doCopy<ADnoteParameters>(mw, url, name); else if(type == "PADnoteParameters") - return doCopy<PADnoteParameters>(mw, url); + return doCopy<PADnoteParameters>(mw, url, name); else if(type == "SUBnoteParameters") - return doCopy<SUBnoteParameters>(mw, url); + return doCopy<SUBnoteParameters>(mw, url, name); else if(type == "OscilGen") - return doCopy<OscilGen>(mw, url); + return doCopy<OscilGen>(mw, url, name); else if(type == "Resonance") - return doCopy<Resonance>(mw, url); + return doCopy<Resonance>(mw, url, name); else if(type == "EffectMgr") - doCopy<EffectMgr>(mw, url); + doCopy<EffectMgr>(mw, url, name); return "UNDEF"; } @@ -384,6 +378,7 @@ std::string getUrlType(std::string url) * API Stubs * *****************************************************************************/ +#if 0 Clipboard clipboardCopy(MiddleWare &mw, string url) { //Identify The Self Type of the Object @@ -402,18 +397,32 @@ void clipBoardPaste(const char *url, Clipboard clip) (void) url; (void) clip; } +#endif void presetCopy(MiddleWare &mw, std::string url, std::string name) { (void) name; - doClassCopy(getUrlType(url), mw, url); + doClassCopy(getUrlType(url), mw, url, name); printf("PresetCopy()\n"); } void presetPaste(MiddleWare &mw, std::string url, std::string name) { (void) name; printf("PresetPaste()\n"); - doClassPaste(getUrlType(url), getUrlPresetType(url, mw), mw, url, presetsstore.clipboard.data); + string data = ""; + XMLwrapper xml; + if(name.empty()) { + data = presetsstore.clipboard.data; + if(data.length() < 20) + return; + if(!xml.putXMLdata(data.c_str())) + return; + } else { + if(xml.loadXMLfile(name)) + return; + } + + doClassPaste(getUrlType(url), getUrlPresetType(url, mw), mw, url, xml); } void presetCopyArray(MiddleWare &mw, std::string url, int field, std::string name) { diff --git a/src/UI/PresetsUI.fl b/src/UI/PresetsUI.fl @@ -37,6 +37,7 @@ class PresetsUI {} { listmodel.callback = [this](Osc_ListModel::list_t list) { copybrowse->clear(); pastebrowse->clear(); + files.clear(); printf("adding entries<%s>...\\n", datamodel.value.c_str()); if(datamodel.value.empty()) return; @@ -46,11 +47,14 @@ class PresetsUI {} { same |= strstr(type.c_str(), "Plfo") && strstr(datamodel.value.c_str(), "Plfo"); if(!same) continue; + files.push_back(std::get<0>(list[i])); copybrowse->add(std::get<1>(list[i]).c_str()); pastebrowse->add(std::get<1>(list[i]).c_str()); }}; datamodel.callback = [this](Osc_DataModel::value_t val) { printf("Value = %s\\n", val.c_str()); + copytypetext->label(val.c_str()); + pastetypetext->label(val.c_str()); listmodel.update("/presets/scan-for-presets"); }; @@ -78,7 +82,7 @@ class PresetsUI {} { callback {const char *tmp=presetname->value(); if (tmp!=NULL) { if (strlen(tmp)>0){ - /*presetCopy(url, tmp);*/ + osc->write("/presets/copy", "ss", url.c_str(), tmp); copywin->hide(); }; };} @@ -87,7 +91,7 @@ class PresetsUI {} { Fl_Button copybutton { label {Copy to Clipboard} callback { - /*presetCopy(url, "");*/ + osc->write("/presets/copy", "s", url.c_str()); copywin->hide();} xywh {25 385 90 35} box THIN_UP_BOX align 192 } @@ -132,15 +136,18 @@ class PresetsUI {} { } Fl_Button pastepbutton { label {Paste from Preset} - callback {int n=pastebrowse->value(); - if (n!=0){/* presetPaste(url, n);*/} + callback {int n=pastebrowse->value()-1; + if (n>=0){ + osc->write("/presets/paste", "ss", url.c_str(), files[n].c_str()); + } pastewin->hide(); pui->refresh();} xywh {10 355 160 20} box THIN_UP_BOX } Fl_Button pastebutton { label {Paste from Clipboard} - callback {/*presetPaste(url, 0);*/ + callback { + osc->write("/presets/paste", "s", url.c_str()); pastewin->hide(); pui->refresh();} xywh {25 385 90 35} box THIN_UP_BOX align 192 @@ -186,10 +193,9 @@ class PresetsUI {} { presetname->cut(0,presetname->maximum_size()); if(but) { - /*presetCopy(url_, "");*/ + osc->write("/presets/copy", "s", url_.c_str()); } else { rescan(url_); - /*copytypetext->label(presetClipboardType().c_str());*/ copywin->show(); };} {} } @@ -202,13 +208,10 @@ class PresetsUI {} { deletepbutton->deactivate(); if(but) { - /*presetPaste(url, 0);*/ + osc->write("/presets/paste", "s", url.c_str()); pui->refresh(); } else { rescan(url_); - /*pastetypetext->label(presetClipboardType().c_str()); - if (presetCheckClipboardType()) pastebutton->activate(); - else pastebutton->deactivate();*/ pastewin->show(); };} {} } @@ -218,16 +221,6 @@ class PresetsUI {} { printf("Datamodel Update..."); datamodel.update(url+"preset-type"); - /*presetRescan();*/ - - /* - for (unsigned int i=0;i<presetsstore.presets.size();i++){ - std::string name=presetsstore.presets[i].name; - if(name.empty()) - continue; - copybrowse->add(name.c_str()); - pastebrowse->add(name.c_str()); - };*/ } {} } decl {std::string url;} {public local @@ -238,6 +231,8 @@ class PresetsUI {} { } decl {Osc_DataModel datamodel;} {public local } + decl {std::vector<std::string> files;} {public local + } decl {PresetsUI_ *pui;} {public local } }