diff options
author | Florian Jung <flo@windfisch.org> | 2011-05-23 20:04:52 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2011-05-23 20:04:52 +0000 |
commit | 5e04b219a6de8e41f132fcaec26876ecdb5ae9b5 (patch) | |
tree | 0380e5724d80c6ac91bd448868525d372de60e2b /muse2/muse/midiedit/dcanvas.cpp | |
parent | b5bdb59699abd38a3aa90dfb4d9882b2be7f5be0 (diff) | |
parent | a16b4e2746309724086f55d7df8b15da40939b20 (diff) |
merged with deeper_changes. see changelog
Diffstat (limited to 'muse2/muse/midiedit/dcanvas.cpp')
-rw-r--r-- | muse2/muse/midiedit/dcanvas.cpp | 95 |
1 files changed, 30 insertions, 65 deletions
diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp index 1303c189..eea29b46 100644 --- a/muse2/muse/midiedit/dcanvas.cpp +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -19,6 +19,7 @@ #include <stdio.h> #include <values.h> #include <errno.h> +#include <set> //#include <sys/stat.h> //#include <sys/mman.h> @@ -31,7 +32,6 @@ #include "globals.h" #include "midiport.h" #include "audio.h" -#include "velocity.h" #include "shortcuts.h" #include "icons.h" @@ -608,7 +608,7 @@ void DrumCanvas::drawCanvas(QPainter& p, const QRect& rect) //--------------------------------------------------------- // drawTopItem //--------------------------------------------------------- -void DrumCanvas::drawTopItem(QPainter &p, const QRect &r) +void DrumCanvas::drawTopItem(QPainter& p, const QRect&) { // draw cursor if (_tool == CursorTool) { @@ -743,20 +743,6 @@ void DrumCanvas::cmd(int cmd) editor->setCurCanvasPart(newpt); } break; - case CMD_DEL: - if (selectionSize()) { - song->startUndo(); - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!i->second->isSelected()) - continue; - Event ev = i->second->event(); - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgDeleteEvent(ev, i->second->part(), false); - audio->msgDeleteEvent(ev, i->second->part(), false, false, false); - } - song->endUndo(SC_EVENT_REMOVED); - } - return; case CMD_SAVE: case CMD_LOAD: @@ -819,52 +805,6 @@ void DrumCanvas::cmd(int cmd) song->setPos(0, p, true, true, true); //CDW } break; - case CMD_MODIFY_VELOCITY: - { - Velocity w; - w.setRange(0); //TODO: Make this work! Probably put _to & _toInit in ecanvas instead - if (!w.exec()) - break; - int range = w.range(); // all, selected, looped, sel+loop - int rate = w.rateVal(); - int offset = w.offsetVal(); - - song->startUndo(); - for (iCItem k = items.begin(); k != items.end(); ++k) { - DEvent* devent = (DEvent*)(k->second); - Event event = devent->event(); - if (event.type() != Note) - continue; - unsigned tick = event.tick(); - bool selected = k->second->isSelected(); - bool inLoop = (tick >= song->lpos()) && (tick < song->rpos()); - - if ((range == 0) - || (range == 1 && selected) - || (range == 2 && inLoop) - || (range == 3 && selected && inLoop)) { - int velo = event.velo(); - - //velo = rate ? (velo * 100) / rate : 64; - velo = (velo * rate) / 100; - velo += offset; - - if (velo <= 0) - velo = 1; - if (velo > 127) - velo = 127; - if (event.velo() != velo) { - Event newEvent = event.clone(); - newEvent.setVelo(velo); - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgChangeEvent(event, newEvent, devent->part(), false); - audio->msgChangeEvent(event, newEvent, devent->part(), false, false, false); - } - } - } - song->endUndo(SC_EVENT_MODIFIED); - } - break; } updateSelection(); redraw(); @@ -1399,13 +1339,10 @@ void DrumCanvas::keyPress(QKeyEvent* event) if (_tool == CursorTool) { int key = event->key(); - ///if (event->state() & Qt::ShiftButton) if (((QInputEvent*)event)->modifiers() & Qt::ShiftModifier) key += Qt::SHIFT; - ///if (event->state() & Qt::AltButton) if (((QInputEvent*)event)->modifiers() & Qt::AltModifier) key += Qt::ALT; - ///if (event->state() & Qt::ControlButton) if (((QInputEvent*)event)->modifiers() & Qt::ControlModifier) key+= Qt::CTRL; @@ -1538,3 +1475,31 @@ void DrumCanvas::selectCursorEvent(Event *ev) } updateSelection(); } + + +void DrumCanvas::moveAwayUnused() +{ + using std::set; + + set<int> used; + for (iCItem it=items.begin(); it!=items.end(); it++) + { + const Event& ev=it->second->event(); + + if (ev.type()==Note) + used.insert(ev.pitch()); + } + + int count=0; + for (set<int>::iterator it=used.begin(); it!=used.end();) + { + while ((*it != count) && (used.find(count)!=used.end())) count++; + + if (*it != count) + mapChanged(*it, count); + + count++; + + used.erase(it++); + } +} |