You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.3 KiB
114 lines
2.3 KiB
#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);
|
|
|
|
}
|
|
}
|