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:
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
}
}