diff options
author | Florian Jung <flo@windfisch.org> | 2012-03-15 19:10:20 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2012-03-15 19:10:20 +0000 |
commit | e232be5476afe17a3abc717f757e667832d9daa6 (patch) | |
tree | 3653e77acb51a700572b89466640552cf3bbb250 /muse2/muse | |
parent | 27b7bf6815cda7abb67026c37b3e44daee1803cb (diff) |
custom columns only consider controller changes at tick0 now
Diffstat (limited to 'muse2/muse')
-rw-r--r-- | muse2/muse/arranger/tlist.cpp | 9 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.cpp | 3 | ||||
-rw-r--r-- | muse2/muse/track.cpp | 21 | ||||
-rw-r--r-- | muse2/muse/track.h | 5 |
4 files changed, 29 insertions, 9 deletions
diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index b5fa2a1a..77686ff2 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -425,7 +425,7 @@ void TList::paint(const QRect& r) MusECore::MidiTrack* mt=dynamic_cast<MusECore::MidiTrack*>(track); MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; MusECore::MidiController* mctl = mp->midiController(col_ctrl_no); - int val=mt->getFirstControllerValue(col_ctrl_no,MusECore::CTRL_VAL_UNKNOWN); + int val=mt->getControllerValueAtTick(0,col_ctrl_no,MusECore::CTRL_VAL_UNKNOWN); if (val!=MusECore::CTRL_VAL_UNKNOWN) val-=mctl->bias(); @@ -810,7 +810,7 @@ void TList::mouseDoubleClickEvent(QMouseEvent* ev) ctrl_edit->setMinimum(mctl->minVal()-1); // -1 because of the specialValueText ctrl_edit->setMaximum(mctl->maxVal()); - ctrl_edit->setValue(((MusECore::MidiTrack*)editTrack)->getFirstControllerValue(ctrl_num)-mctl->bias()); + ctrl_edit->setValue(((MusECore::MidiTrack*)editTrack)->getControllerValueAtTick(0,ctrl_num)-mctl->bias()); int w=colw; if (w < ctrl_edit->sizeHint().width()) w=ctrl_edit->sizeHint().width(); ctrl_edit->setGeometry(colx, coly, w, colh); @@ -1858,7 +1858,7 @@ void TList::mousePressEvent(QMouseEvent* ev) int minval=mctl->minVal()+mctl->bias(); int maxval=mctl->maxVal()+mctl->bias(); - int val = mt->getFirstControllerValue(ctrl_num); + int val = mt->getControllerValueAtTick(0,ctrl_num); int oldval=val; if (ctrl_num!=MusECore::CTRL_PROGRAM) @@ -1919,7 +1919,6 @@ void TList::mousePressEvent(QMouseEvent* ev) MusECore::MidiTrack* mt=(MusECore::MidiTrack*)t; MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; - MusECore::MidiController* mctl = mp->midiController(ctrl_num); MusECore::MidiInstrument* instr = mp->instrument(); PopupMenu* pup = new PopupMenu(true); @@ -2335,7 +2334,7 @@ void TList::wheelEvent(QWheelEvent* ev) int minval=mctl->minVal()+mctl->bias(); int maxval=mctl->maxVal()+mctl->bias(); - int val = mt->getFirstControllerValue(ctrl_num); + int val = mt->getControllerValueAtTick(0,ctrl_num); int oldval=val; if (ctrl_num!=MusECore::CTRL_PROGRAM) diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 5722a275..f06c2ad7 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4704,12 +4704,13 @@ void ScoreCanvas::add_new_parts(const std::map< MusECore::Part*, std::set<MusECo * o test old- and new drumtrack recording, steprecording * * CURRENT TODO - * o column's widths aren't stored into configuration. fix that. * o automatically send controller changes by the arranger columns * if necessary (i.e., if no later controller overrides this) * o make custom columns only look at CCs at tick0, not at "the firstCC" * beacuse this probably causes confusion. * o custom columns should also be able to store at cpos, not only at tick0 + * + * o column's widths aren't stored into configuration. fix that. * o storing <no_toplevels /> into a template file seems to ignore * the arranger's "MDI-ness", sets is at subwin all the time! * diff --git a/muse2/muse/track.cpp b/muse2/muse/track.cpp index e810f677..26ac101b 100644 --- a/muse2/muse/track.cpp +++ b/muse2/muse/track.cpp @@ -1306,6 +1306,27 @@ int MidiTrack::getFirstControllerValue(int ctrl, int def) return val; } +int MidiTrack::getControllerValueAtTick(int tick, int ctrl, int def) +{ + for (iPart pit=parts()->begin(); pit!=parts()->end(); pit++) + { + Part* part=pit->second; + if (part->tick() > tick) break; // ignore this and the rest. we'd find nothing any more + if (part->endTick() < tick) continue; // ignore only this. + for (iEvent eit=part->events()->begin(); eit!=part->events()->end(); eit++) + { + if (eit->first+part->tick() > tick) break; // we won't find anything in this part from now on. + if (eit->first+part->tick() < tick) continue; // ignore only this + + // else if (eit->first+part->tick() == tick) and + if (eit->second.type()==Controller && eit->second.dataA()==ctrl) + return eit->second.dataB(); + } + } + + return def; +} + // returns true if the autoupdate changed something bool MidiTrack::auto_update_drummap() diff --git a/muse2/muse/track.h b/muse2/muse/track.h index b8133fae..b92f2146 100644 --- a/muse2/muse/track.h +++ b/muse2/muse/track.h @@ -110,7 +110,6 @@ class Track { Track(TrackType); Track(const Track&, int flags); virtual ~Track(); - //virtual Track& operator=(const Track& t); DELETETHIS virtual void assign(const Track&, int flags); static const char* _cname[]; @@ -183,7 +182,7 @@ class Track { bool mute() const { return _mute; } bool off() const { return _off; } bool recordFlag() const { return _recordFlag; } - // + // Internal use... static void clearSoloRefCounts(); void updateSoloState(); @@ -220,7 +219,6 @@ class Track { //--------------------------------------------------------- class MidiTrack : public Track { - int _outPort; int _outChannel; bool _recEcho; // For midi (and audio). Whether to echo incoming record events to output device. @@ -306,6 +304,7 @@ class MidiTrack : public Track { static bool visible() { return _isVisible; } int getFirstControllerValue(int ctrl, int def=-1); + int getControllerValueAtTick(int tick, int ctrl, int def=-1); void setClef(clefTypes i) { clefType = i; } clefTypes getClef() { return clefType; } |