summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse2/muse/midiedit/dcanvas.cpp29
-rw-r--r--muse2/muse/midiedit/dcanvas.h3
-rw-r--r--muse2/muse/midiedit/drumedit.cpp8
-rw-r--r--muse2/muse/midiedit/scoreedit.cpp8
4 files changed, 45 insertions, 3 deletions
diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp
index 18463eb0..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>
@@ -1474,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++);
+ }
+}
diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h
index cf653648..b86bc2d7 100644
--- a/muse2/muse/midiedit/dcanvas.h
+++ b/muse2/muse/midiedit/dcanvas.h
@@ -84,6 +84,7 @@ class DrumCanvas : public EventCanvas {
void setTool2(int);
void setCurDrumInstrument(int);
virtual void setStep(int);
+ void moveAwayUnused();
public:
enum {
@@ -91,7 +92,7 @@ class DrumCanvas : public EventCanvas {
CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT,
CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PREV_PART, CMD_SELECT_NEXT_PART,
CMD_DEL, CMD_FIXED_LEN, CMD_RIGHT, CMD_LEFT, CMD_RIGHT_NOSNAP, CMD_LEFT_NOSNAP, CMD_MODIFY_VELOCITY, CMD_CRESCENDO,
- CMD_QUANTIZE, CMD_ERASE_EVENT, CMD_NOTE_SHIFT, CMD_DELETE_OVERLAPS
+ CMD_QUANTIZE, CMD_ERASE_EVENT, CMD_NOTE_SHIFT, CMD_DELETE_OVERLAPS, CMD_REORDER_LIST
};
DrumCanvas(MidiEditor*, QWidget*, int, int,
const char* name = 0);
diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp
index f95ee4f6..9e64d7a7 100644
--- a/muse2/muse/midiedit/drumedit.cpp
+++ b/muse2/muse/midiedit/drumedit.cpp
@@ -233,14 +233,17 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini
menuFunctions->setTearOffEnabled(true);
+ QAction* reorderListAction = menuFunctions->addAction(tr("Re-order list"));
+ menuFunctions->addSeparator();
fixedAction = menuFunctions->addAction(tr("Set Fixed Length"));
veloAction = menuFunctions->addAction(tr("Modify Velocity"));
crescAction = menuFunctions->addAction(tr("Crescendo/Decrescendo"));
quantizeAction = menuFunctions->addAction(tr("Quantize"));
QAction* eraseEventAction = menuFunctions->addAction(tr("Erase Event"));
- QAction* noteShiftAction = menuFunctions->addAction(tr("Note Shift"));
+ QAction* noteShiftAction = menuFunctions->addAction(tr("Move Notes"));
QAction* delOverlapsAction = menuFunctions->addAction(tr("Delete Overlaps"));
+ connect(reorderListAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(fixedAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(veloAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(crescAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
@@ -249,6 +252,7 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini
connect(noteShiftAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(delOverlapsAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ signalMapper->setMapping(reorderListAction, DrumCanvas::CMD_REORDER_LIST);
signalMapper->setMapping(fixedAction, DrumCanvas::CMD_FIXED_LEN);
signalMapper->setMapping(veloAction, DrumCanvas::CMD_MODIFY_VELOCITY);
signalMapper->setMapping(crescAction, DrumCanvas::CMD_CRESCENDO);
@@ -904,10 +908,12 @@ void DrumEdit::cmd(int cmd)
case DrumCanvas::CMD_RESET: reset(); break;
case DrumCanvas::CMD_MODIFY_VELOCITY: modify_velocity(partlist_to_set(parts())); break;
case DrumCanvas::CMD_CRESCENDO: crescendo(partlist_to_set(parts())); break;
+ case DrumCanvas::CMD_QUANTIZE: quantize_notes(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_REORDER_LIST: ((DrumCanvas*)(canvas))->moveAwayUnused(); 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)
diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp
index dccac615..bbdd3d6f 100644
--- a/muse2/muse/midiedit/scoreedit.cpp
+++ b/muse2/muse/midiedit/scoreedit.cpp
@@ -4211,13 +4211,14 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed)
/* BUGS and potential bugs
+ * o quantize always quantizes length. make this selectable!
* o when the keymap is not used, this will probably lead to a bug
* same when mastertrack is disabled
* o tied notes don't work properly when there's a key-change in
* between, for example, when a cis is tied to a des
*
* CURRENT TODO
- * x nothing atm
+ * o drum list: scroll while dragging
*
* IMPORTANT TODO
* o add a select-clef-toolbox for tracks
@@ -4226,6 +4227,11 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed)
* (0,5 sec) when displaying a whole song in scores
* o transpose etc. must also transpose key-pressure events
* o transpose: support in-key-transpose
+ * o legato: extend length to next note
+ * o delete: add velo and len threshold
+ * o thin out: remove unneeded ctrl messages
+ * o in drum roll: changing the list causes undo to be triggered, WTF?
+ * o changing list is dead slow
*
* less important stuff
* o controller view in score editor