summaryrefslogtreecommitdiffstats
path: root/arts/modules/common/env_instrumentitem_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'arts/modules/common/env_instrumentitem_impl.cc')
-rw-r--r--arts/modules/common/env_instrumentitem_impl.cc113
1 files changed, 113 insertions, 0 deletions
diff --git a/arts/modules/common/env_instrumentitem_impl.cc b/arts/modules/common/env_instrumentitem_impl.cc
new file mode 100644
index 00000000..17959ca0
--- /dev/null
+++ b/arts/modules/common/env_instrumentitem_impl.cc
@@ -0,0 +1,113 @@
+#include <vector>
+#include "artsmodulescommon.h"
+#include "debug.h"
+#include "env_item_impl.h"
+#include "connect.h"
+#include "../runtime/sequenceutils.h"
+
+namespace Arts {
+namespace Environment {
+
+class InstrumentItem_impl : virtual public InstrumentItem_skel,
+ virtual public Item_impl
+{
+protected:
+ Synth_MIDI_TEST instrument;
+ bool running;
+
+public:
+ InstrumentItem_impl() : running(false)
+ {
+ }
+ ~InstrumentItem_impl()
+ {
+ /* this will allow freeing the instrument */
+ if(running)
+ instrument.stop();
+ }
+ void filename(const std::string& newFilename)
+ {
+ if(newFilename != instrument.filename())
+ {
+ instrument.filename(newFilename);
+ filename_changed(newFilename);
+
+ if(!running) {
+ instrument.start();
+ running = true;
+ }
+ }
+ }
+ std::string filename()
+ {
+ return instrument.filename();
+ }
+ void busname(const std::string& newBusname)
+ {
+ if(newBusname != instrument.busname())
+ {
+ instrument.busname(newBusname);
+ busname_changed(newBusname);
+ }
+ }
+ std::string busname()
+ {
+ return instrument.busname();
+ }
+ MidiPort port()
+ {
+ return instrument;
+ }
+ void loadFromList(const std::vector<std::string>& list)
+ {
+ unsigned long i;
+ std::string cmd,param;
+ for(i=0;i<list.size();i++)
+ {
+ if(parse_line(list[i],cmd,param)) // otherwise: empty or comment
+ {
+ if(cmd == "filename") {
+ filename(param.c_str());
+ }
+ }
+ }
+ }
+ std::vector<std::string> *saveToList()
+ {
+ std::vector<std::string> *result = new std::vector<std::string>;
+ sqprintf(result,"filename=%s",filename().c_str());
+ return result;
+ }
+};
+REGISTER_IMPLEMENTATION(InstrumentItem_impl);
+
+class InstrumentItemGuiFactory_impl
+ : virtual public InstrumentItemGuiFactory_skel
+{
+public:
+ Widget createGui(Object object)
+ {
+ arts_return_val_if_fail(!object.isNull(), Arts::Widget::null());
+
+ InstrumentItem instrument = DynamicCast(object);
+ arts_return_val_if_fail(!instrument.isNull(), Arts::Widget::null());
+
+ Widget panel;
+ panel.width(150); panel.height(60); panel.show();
+
+ LineEdit edit;
+ edit.x(20); edit.y(10); edit.width(120); edit.height(40);
+ edit.text(instrument.filename());
+ edit.parent(panel);
+ edit.show();
+ connect(edit,"text_changed", instrument, "filename");
+ panel._addChild(edit,"editWidget");
+
+ return panel;
+ }
+};
+
+REGISTER_IMPLEMENTATION(InstrumentItemGuiFactory_impl);
+
+}
+}