summaryrefslogtreecommitdiff
path: root/muse2/muse/functions.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2011-07-03 15:53:46 +0000
committerFlorian Jung <flo@windfisch.org>2011-07-03 15:53:46 +0000
commit3970fed7542ca0377c7f418f86f93c513c9b0b63 (patch)
tree6eb725374766461613f72f0a26cd163512c39749 /muse2/muse/functions.cpp
parent99934de53a85e71c8a33c1f39f16eb46d2df3cb7 (diff)
auto-expanding for the score edit's resize tool and for the
global "move notes" function
Diffstat (limited to 'muse2/muse/functions.cpp')
-rw-r--r--muse2/muse/functions.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp
index 9ab209c6..e34adb11 100644
--- a/muse2/muse/functions.cpp
+++ b/muse2/muse/functions.cpp
@@ -286,7 +286,7 @@ bool modify_off_velocity(const set<Part*>& parts, int range, int rate, int offse
return false;
}
-bool modify_notelen(const set<Part*>& parts, int range, int rate, int offset)
+bool modify_notelen(const set<Part*>& parts, int range, int rate, int offset) //FINDMICH EXTEND
{
map<Event*, Part*> events = get_events(parts, range);
Undo operations;
@@ -320,7 +320,7 @@ bool modify_notelen(const set<Part*>& parts, int range, int rate, int offset)
return false;
}
-bool set_notelen(const set<Part*>& parts, int range, int len)
+bool set_notelen(const set<Part*>& parts, int range, int len) //FINDMICH EXTEND
{
return modify_notelen(parts, range, 0, len);
}
@@ -481,10 +481,11 @@ bool crescendo(const set<Part*>& parts, int range, int start_val, int end_val, b
return false;
}
-bool move_notes(const set<Part*>& parts, int range, signed int ticks) //TODO: clipping
+bool move_notes(const set<Part*>& parts, int range, signed int ticks)
{
map<Event*, Part*> events = get_events(parts, range);
Undo operations;
+ map<Part*, int> partlen;
if ( (!events.empty()) && (ticks!=0) )
{
@@ -500,12 +501,17 @@ bool move_notes(const set<Part*>& parts, int range, signed int ticks) //TODO: cl
else
newEvent.setTick(event.tick()+ticks);
- if (newEvent.endTick() > part->lenTick()) //if exceeding the part's end, clip
+ if (newEvent.endTick() > part->lenTick()) //if exceeding the part's end:
{
- if (part->lenTick() > newEvent.tick())
- newEvent.setLenTick(part->lenTick() - newEvent.tick());
+ if (part->hasHiddenNotes()) // auto-expanding is forbidden, clip
+ {
+ if (part->lenTick() > newEvent.tick())
+ newEvent.setLenTick(part->lenTick() - newEvent.tick());
+ else
+ del=true; //if the new length would be <= 0, erase the note
+ }
else
- del=true; //if the new length would be <= 0, erase the note
+ partlen[part]=newEvent.endTick(); // schedule auto-expanding
}
if (del==false)
@@ -514,6 +520,9 @@ bool move_notes(const set<Part*>& parts, int range, signed int ticks) //TODO: cl
operations.push_back(UndoOp(UndoOp::DeleteEvent, event, part, false, false));
}
+ for (map<Part*, int>::iterator it=partlen.begin(); it!=partlen.end(); it++)
+ schedule_resize_all_same_len_clone_parts(it->first, it->second, operations);
+
return song->applyOperationGroup(operations);
}
else
@@ -712,7 +721,7 @@ QMimeData* selected_events_to_mime(const set<Part*>& parts, int range)
return md;
}
-void paste_at(Part* dest_part, const QString& pt, int pos)
+void paste_at(Part* dest_part, const QString& pt, int pos) //FINDMICH EXTEND
{
Undo operations;