summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit/drumedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/midiedit/drumedit.cpp')
-rw-r--r--muse2/muse/midiedit/drumedit.cpp105
1 files changed, 60 insertions, 45 deletions
diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp
index 5cd4c130..b8d97283 100644
--- a/muse2/muse/midiedit/drumedit.cpp
+++ b/muse2/muse/midiedit/drumedit.cpp
@@ -43,6 +43,7 @@
#include "drummap.h"
#include "audio.h"
#include "gconfig.h"
+#include "functions.h"
/*
static const char* map_file_pattern[] = {
@@ -59,13 +60,12 @@ static const char* map_file_save_pattern[] = {
};
*/
-int DrumEdit::_quantInit = 96;
int DrumEdit::_rasterInit = 96;
int DrumEdit::_widthInit = 600;
int DrumEdit::_heightInit = 400;
int DrumEdit::_dlistWidthInit = 50;
int DrumEdit::_dcanvasWidthInit = 300;
-int DrumEdit::_toInit = 0;
+QByteArray DrumEdit::_toolbarInit;
static const int xscale = -10;
static const int yscale = 1;
@@ -155,12 +155,12 @@ void DrumEdit::closeEvent(QCloseEvent* e)
//---------------------------------------------------------
DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned initPos)
- : MidiEditor(_quantInit, _rasterInit, pl, parent, name)
+ : MidiEditor(_rasterInit, pl, parent, name)
{
+ setFocusPolicy(Qt::StrongFocus);
split1w1 = 0;
resize(_widthInit, _heightInit);
selPart = 0;
- _to = _toInit;
QSignalMapper *signalMapper = new QSignalMapper(this);
//---------Pulldown Menu----------------------------
@@ -235,12 +235,24 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini
fixedAction = menuFunctions->addAction(tr("Set Fixed Length"));
veloAction = menuFunctions->addAction(tr("Modify Velocity"));
+ quantizeAction = menuFunctions->addAction(tr("Quantize"));
+ QAction* eraseEventAction = menuFunctions->addAction(tr("Erase Event"));
+ QAction* noteShiftAction = menuFunctions->addAction(tr("Note Shift"));
+ QAction* delOverlapsAction = menuFunctions->addAction(tr("Delete Overlaps"));
connect(fixedAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(veloAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ connect(quantizeAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ connect(eraseEventAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ connect(noteShiftAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ connect(delOverlapsAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
signalMapper->setMapping(fixedAction, DrumCanvas::CMD_FIXED_LEN);
signalMapper->setMapping(veloAction, DrumCanvas::CMD_MODIFY_VELOCITY);
+ signalMapper->setMapping(quantizeAction, DrumCanvas::CMD_QUANTIZE);
+ signalMapper->setMapping(eraseEventAction, DrumCanvas::CMD_ERASE_EVENT);
+ signalMapper->setMapping(noteShiftAction, DrumCanvas::CMD_NOTE_SHIFT);
+ signalMapper->setMapping(delOverlapsAction, DrumCanvas::CMD_DELETE_OVERLAPS);
QMenu* menuScriptPlugins = menuBar()->addMenu(tr("&Plugins"));
song->populateScriptMenu(menuScriptPlugins, this);
@@ -317,7 +329,7 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini
addToolBarBreak();
// don't show pitch value in toolbar
- toolbar = new Toolbar1(this, _rasterInit, _quantInit, false);
+ toolbar = new Toolbar1(this, _rasterInit, false);
addToolBar(toolbar);
addToolBarBreak();
@@ -456,13 +468,15 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini
// connect toolbar
connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
- connect(toolbar, SIGNAL(quantChanged(int)), SLOT(setQuant(int)));
connect(toolbar, SIGNAL(rasterChanged(int)), SLOT(setRaster(int)));
connect(toolbar, SIGNAL(soloChanged(bool)), SLOT(soloChanged(bool)));
connect(info, SIGNAL(valueChanged(NoteInfo::ValType, int)), SLOT(noteinfoChanged(NoteInfo::ValType, int)));
connect(ctrl, SIGNAL(clicked()), SLOT(addCtrl()));
+ if (!_toolbarInit.isEmpty())
+ restoreState(_toolbarInit);
+
QClipboard* cb = QApplication::clipboard();
connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged()));
@@ -603,16 +617,6 @@ void DrumEdit::setRaster(int val)
}
//---------------------------------------------------------
-// setQuant
-//---------------------------------------------------------
-
-void DrumEdit::setQuant(int val)
- {
- _quantInit = val;
- MidiEditor::setQuant(val);
- }
-
-//---------------------------------------------------------
// edit currently selected Event
//---------------------------------------------------------
@@ -722,10 +726,8 @@ void DrumEdit::readStatus(Xml& xml)
break;
case Xml::TagEnd:
if (tag == "drumedit") {
- _quantInit = _quant;
_rasterInit = _raster;
toolbar->setRaster(_raster);
- toolbar->setQuant(_quant);
canvas->redrawGrid();
return;
}
@@ -749,9 +751,7 @@ void DrumEdit::readConfiguration(Xml& xml)
case Xml::End:
return;
case Xml::TagStart:
- if (tag == "quant")
- _quantInit = xml.parseInt();
- else if (tag == "raster")
+ if (tag == "raster")
_rasterInit = xml.parseInt();
else if (tag == "width")
_widthInit = xml.parseInt();
@@ -761,9 +761,8 @@ void DrumEdit::readConfiguration(Xml& xml)
_dcanvasWidthInit = xml.parseInt();
else if (tag == "dlistwidth")
_dlistWidthInit = xml.parseInt();
- else if (tag == "to") {
- _toInit = xml.parseInt();
- }
+ else if (tag == "toolbars")
+ _toolbarInit = QByteArray::fromHex(xml.parse1().toAscii());
else
xml.unknown("DrumEdit");
break;
@@ -784,13 +783,12 @@ void DrumEdit::readConfiguration(Xml& xml)
void DrumEdit::writeConfiguration(int level, Xml& xml)
{
xml.tag(level++, "drumedit");
- xml.intTag(level, "quant", _quantInit);
xml.intTag(level, "raster", _rasterInit);
xml.intTag(level, "width", _widthInit);
xml.intTag(level, "height", _heightInit);
xml.intTag(level, "dlistwidth", _dlistWidthInit);
xml.intTag(level, "dcanvaswidth", _dcanvasWidthInit);
- xml.intTag(level, "to", _toInit);
+ xml.strTag(level, "toolbars", _toolbarInit.toHex().data());
xml.tag(level, "/drumedit");
}
@@ -898,18 +896,18 @@ void DrumEdit::reset()
void DrumEdit::cmd(int cmd)
{
switch(cmd) {
- case DrumCanvas::CMD_LOAD:
- load();
- break;
- case DrumCanvas::CMD_SAVE:
- save();
- break;
- case DrumCanvas::CMD_RESET:
- reset();
- break;
- default:
- ((DrumCanvas*)(canvas))->cmd(cmd);
- break;
+ case DrumCanvas::CMD_LOAD: load(); break;
+ case DrumCanvas::CMD_SAVE: save(); break;
+ case DrumCanvas::CMD_RESET: reset(); break;
+ case DrumCanvas::CMD_MODIFY_VELOCITY: modify_velocity(partlist_to_set(parts())); break;
+ case DrumCanvas::CMD_ERASE_EVENT: erase_notes(partlist_to_set(parts())); break;
+ case DrumCanvas::CMD_DEL: erase_notes(partlist_to_set(parts()),1); break; //delete selected events
+ case DrumCanvas::CMD_DELETE_OVERLAPS: delete_overlaps(partlist_to_set(parts())); break;
+ case DrumCanvas::CMD_NOTE_SHIFT: move_notes(partlist_to_set(parts())); break;
+ //case DrumCanvas::CMD_FIXED_LEN: // this must be handled by the drum canvas, due to its
+ // special nature (each drum has its own length)
+
+ default: ((DrumCanvas*)(canvas))->cmd(cmd);
}
}
@@ -1028,12 +1026,31 @@ void DrumEdit::newCanvasWidth(int w)
void DrumEdit::resizeEvent(QResizeEvent* ev)
{
QWidget::resizeEvent(ev);
- _widthInit = ev->size().width();
- _heightInit = ev->size().height();
-
+ storeInitialState();
//TODO: Make the dlist not expand/shrink, but the canvas instead
}
+//---------------------------------------------------------
+// focusOutEvent
+//---------------------------------------------------------
+
+void DrumEdit::focusOutEvent(QFocusEvent* ev)
+ {
+ QWidget::focusOutEvent(ev);
+ storeInitialState();
+ }
+
+//---------------------------------------------------------
+// storeInitialState
+//---------------------------------------------------------
+
+void DrumEdit::storeInitialState()
+ {
+ _widthInit = width();
+ _heightInit = height();
+ _toolbarInit=saveState();
+ }
+
//---------------------------------------------------------
// configChanged
@@ -1229,9 +1246,7 @@ void DrumEdit::keyPressEvent(QKeyEvent* event)
event->ignore();
return;
}
- setQuant(val);
setRaster(val);
- toolbar->setQuant(_quant);
toolbar->setRaster(_raster);
}
@@ -1271,7 +1286,7 @@ void DrumEdit::execDeliveredScript(int id)
{
//QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id];
QString scriptfile = song->getScriptPath(id, true);
- song->executeScript(scriptfile.toLatin1().constData(), parts(), quant(), true);
+ song->executeScript(scriptfile.toLatin1().constData(), parts(), raster(), true);
}
//---------------------------------------------------------
@@ -1280,7 +1295,7 @@ void DrumEdit::execDeliveredScript(int id)
void DrumEdit::execUserScript(int id)
{
QString scriptfile = song->getScriptPath(id, false);
- song->executeScript(scriptfile.toLatin1().constData(), parts(), quant(), true);
+ song->executeScript(scriptfile.toLatin1().constData(), parts(), raster(), true);
}
void DrumEdit::setStep(QString v)