From 048fcaa1ada790549c8a1c0e2d1160d385785e71 Mon Sep 17 00:00:00 2001
From: Nil Geisweiller <a-lin@sourceforge.net>
Date: Sun, 10 Dec 2006 20:58:12 +0000
Subject: see ChangeLog

---
 muse/ChangeLog                     |  6 +++++
 muse/muse/midiedit/ecanvas.cpp     | 24 ++++++++++---------
 muse/muse/midiedit/prcanvas.cpp    | 48 +++++++++++++++++++++++---------------
 muse/muse/route.cpp                |  4 ++--
 muse/synti/deicsonze/deicsonze.cpp |  2 +-
 5 files changed, 51 insertions(+), 33 deletions(-)

diff --git a/muse/ChangeLog b/muse/ChangeLog
index 709a80a6..4892c302 100644
--- a/muse/ChangeLog
+++ b/muse/ChangeLog
@@ -1,3 +1,9 @@
+10.12 (ng)
+      - items in pianoroll play the right pitch (event.pitch + transpose)
+      - items in pianoroll are displayed correctly according to Y zoom
+      - selection in the pianoroll are dragged correctly
+      - fix RouteNode::write(Xml& xml, const char* label) xml.put --> xml.tagE
+      - fix eventCanvas::genCanvasPopup(), uncheck unselected action
 08.12 (ws)
       - first version of midi instrument editor (*.idf files)
       (ng) deicsonze
diff --git a/muse/muse/midiedit/ecanvas.cpp b/muse/muse/midiedit/ecanvas.cpp
index 343f3f53..ae99db11 100644
--- a/muse/muse/midiedit/ecanvas.cpp
+++ b/muse/muse/midiedit/ecanvas.cpp
@@ -348,8 +348,9 @@ void EventCanvas::mousePressCanvasA(QMouseEvent* me)
 
       curItem = searchItem(start);
       if (curItem && editor->playEvents()) {
-	      MidiEvent e(0, 0, ME_NOTEON, curItem->event.pitch(), curItem->event.velo());
-      	track()->playMidiEvent(&e);
+	      int pitch = curItem->event.pitch() + track()->transposition();
+	      MidiEvent e(0, 0, ME_NOTEON, pitch, curItem->event.velo());
+      	      track()->playMidiEvent(&e);
             }
 
       if (curItem && (button == Qt::MidButton)) {
@@ -453,7 +454,8 @@ void EventCanvas::mousePressCanvasA(QMouseEvent* me)
                               if (curItem) {
                                     items.add(curItem);
       					if (editor->playEvents()) {
-	      					MidiEvent e(0, 0, ME_NOTEON, curItem->event.pitch(), curItem->event.velo());
+					        int pitch = curItem->event.pitch() + track()->transposition();
+	      					MidiEvent e(0, 0, ME_NOTEON, pitch, curItem->event.velo());
       						track()->playMidiEvent(&e);
                                     	}
             				}
@@ -586,7 +588,8 @@ void EventCanvas::mouseMoveCanvasA(QPoint pos)
 void EventCanvas::mouseReleaseCanvasA(QMouseEvent* me)
       {
       if (curItem && editor->playEvents()) {
-	      MidiEvent e(0, 0, ME_NOTEON, curItem->event.pitch(), 0);
+	      int pitch = curItem->event.pitch() + track()->transposition();
+	      MidiEvent e(0, 0, ME_NOTEON, pitch, 0);
       	track()->playMidiEvent(&e);
             }
       // ignore event if (another) button is already active:
@@ -715,8 +718,7 @@ QMenu* EventCanvas::genCanvasPopup()
             QAction* a = getAction(toolList[i], this);
             a->setData(data);
             a->setCheckable(true);
-            if (data == int(_tool))
-                  a->setChecked(true);
+	    a->setChecked(data == int(_tool));
             canvasPopup->addAction(a);
             }
       return canvasPopup;
@@ -806,7 +808,7 @@ void EventCanvas::deleteItem(const QPoint& p)
 
 void EventCanvas::moveItems(const QPoint& pos, int dir)
       {
-      int dy = pos.y() - start.y();
+      int dpitch = y2pitch(pos.y()) - y2pitch(start.y());
 
       Pos sp(pix2pos(start.x()));
       Pos cp(pix2pos(pos.x()));
@@ -832,15 +834,15 @@ void EventCanvas::moveItems(const QPoint& pos, int dir)
             else
                   p = item->pos + dx;
             p.snap(raster());
-            int ny = pitch2y(y2pitch(pitch2y(item->event.pitch()) + dy));
 
             if (p < *curPart)
                   p = *curPart;
 
-            if (item->moving != p || (item->my - wpos.y()) != ny) {
+            if (item->moving != p || dpitch !=0) {
                   item->moving = p;
                   if (dir != 1)
-                        item->my = ny + wpos.y();
+		    item->my = pitch2y(item->event.pitch() + dpitch)
+		      + (int)(wpos.y() / _ymag);
                   itemMoved(item);
                   }
             }
@@ -1204,7 +1206,7 @@ void EventCanvas::mouseMove(QPoint pos)
                               if (curPitch != keyDown)
                                     noteOff(keyDown);
                               keyDown = curPitch;
-			      int velocity = pos.x()*127/40;
+			      int velocity = std::min(pos.x()*127/40, 127);
                               noteOn(keyDown, velocity, shift);
                               }
                         }
diff --git a/muse/muse/midiedit/prcanvas.cpp b/muse/muse/midiedit/prcanvas.cpp
index d80d77ed..17f79bab 100644
--- a/muse/muse/midiedit/prcanvas.cpp
+++ b/muse/muse/midiedit/prcanvas.cpp
@@ -56,7 +56,7 @@ PianoCanvas::PianoCanvas(MidiEditor* pr)
 void PianoCanvas::addItem(Part* part, const Event& event)
       {
       CItem* item   = new CItem(event, part);
-      int y         = pitch2y(event.pitch()) + keyHeight/4 + wpos.y();
+      int y         = pitch2y(event.pitch()) + keyHeight/4 + (int)(wpos.y()/_ymag);
       item->pos     = event.pos() + *part;
       unsigned time = item->pos.time(timeType());
       item->bbox    = QRect(time, y, event.lenTick(), keyHeight/2);
@@ -203,13 +203,16 @@ void PianoCanvas::moveItem(CItem* item, DragType dtype)
       {
       Part* part  = item->part;
       Event event = item->event;
-      int npitch  = y2pitch(item->my -wpos.y() + item->bbox.height()/2);
-      if (event.pitch() != npitch && editor->playEvents()) {
+      int npitch  = y2pitch((int)((item->my - (int)(wpos.y()/_ymag) 
+				   + item->bbox.height())*_ymag));
+      if ((curItem==item) //remove this if want to have all selection playing
+	  && event.pitch() != npitch && editor->playEvents()) {
             // release note:
-            MidiEvent ev1(0, 0, 0x90, event.pitch() + track()->transposition(), 0);
+            MidiEvent ev1(0, 0, 0x90, playedPitch, 0);
             track()->playMidiEvent(&ev1);
-            MidiEvent ev2(0, 0, 0x90, npitch + track()->transposition(), event.velo());
-            track()->playMidiEvent(&ev2);
+	    //remove below because the note is never cut off
+            //MidiEvent ev2(0, 0, 0x90, npitch + track()->transposition(), event.velo());
+            //track()->playMidiEvent(&ev2);
             }
 
       Event newEvent = event.clone();
@@ -236,6 +239,7 @@ CItem* PianoCanvas::newItem(const QPoint& p, int)
             return 0;
 
       int pitch = y2pitch(p.y());
+
       Event e(Note);
       e.setPitch(pitch);
       e.setVelo(curVelo);
@@ -244,7 +248,7 @@ CItem* PianoCanvas::newItem(const QPoint& p, int)
       CItem* i = new CItem(e, curPart);
       int l    = timeType() == AL::TICKS ? e.lenTick() : e.lenFrame();
       int x    = pos.time(timeType());
-      int y    = pitch2y(pitch) + keyHeight/4 + wpos.y();
+      int y    = pitch2y(pitch) + keyHeight/4 + (int)(wpos.y() / _ymag);
       i->bbox  = QRect(x, y, l, keyHeight/2);
 
       return i;
@@ -593,11 +597,13 @@ void PianoCanvas::itemPressed(const CItem* item)
             return;
       Event event    = item->event;
       playedPitch    = event.pitch() + track()->transposition();
-      int velo       = event.velo();
+      //int velo       = event.velo();
 
       // play note:
-      MidiEvent e(0, 0, 0x90, playedPitch, velo);
-      track()->playMidiEvent(&e);
+      //I comment the following code because a note
+      //is already played in EventCanvas::mousePressCanvasA(QMouseEvent* me)
+      /*MidiEvent e(0, 0, 0x90, playedPitch, velo);
+      track()->playMidiEvent(&e);*/
       }
 
 //---------------------------------------------------------
@@ -621,16 +627,20 @@ void PianoCanvas::itemReleased()
 
 void PianoCanvas::itemMoved(const CItem* item)
       {
-      int npitch = y2pitch(item->my - wpos.y());
-      if ((playedPitch != -1) && (playedPitch != npitch)) {
+      int npitch  = y2pitch((int)((item->my - (int)(wpos.y()/_ymag) 
+				   + item->bbox.height())*_ymag));
+      npitch += track()->transposition();
+      if ((curItem==item) //remove this if want to have all selection playing
+	  && (playedPitch != -1) && (playedPitch != npitch)
+	  && editor->playEvents()) {
             Event event = item->event;
-            // release note:
-            MidiEvent ev1(0, 0, 0x90, playedPitch, 0);
-            track()->playMidiEvent(&ev1);
-            // play note:
-            MidiEvent e2(0, 0, 0x90, npitch + track()->transposition(), event.velo());
-            track()->playMidiEvent(&e2);
-            playedPitch = npitch + track()->transposition();
+	    // release note:
+	    MidiEvent ev1(0, 0, 0x90, playedPitch, 0);
+	    track()->playMidiEvent(&ev1);
+	    // play note:
+	    MidiEvent e2(0, 0, 0x90, npitch, event.velo());
+	    track()->playMidiEvent(&e2);
+	    playedPitch = npitch;
             }
       }
 
diff --git a/muse/muse/route.cpp b/muse/muse/route.cpp
index 7808a088..7d4d364c 100644
--- a/muse/muse/route.cpp
+++ b/muse/muse/route.cpp
@@ -345,10 +345,10 @@ const char* RouteNode::tname() const
 void RouteNode::write(Xml& xml, const char* label) const
       {
       if (channel != -1)
-            xml.put(QString("<%1 type=\"%2\" channel=\"%3\" name=\"%4\"/>")
+            xml.tagE(QString("%1 type=\"%2\" channel=\"%3\" name=\"%4\"")
                .arg(label).arg(tname()).arg(channel + 1).arg(name()));
       else
-            xml.put(QString("<%1 type=\"%2\" name=\"%3\"/>")
+            xml.tagE(QString("%1 type=\"%2\" name=\"%3\"")
                .arg(label).arg(tname()).arg(name()));
       }
 
diff --git a/muse/synti/deicsonze/deicsonze.cpp b/muse/synti/deicsonze/deicsonze.cpp
index 908dc1f5..0aa23fcd 100644
--- a/muse/synti/deicsonze/deicsonze.cpp
+++ b/muse/synti/deicsonze/deicsonze.cpp
@@ -834,7 +834,7 @@ int DeicsOnze::getChorusReturn() const {
 // getReverbReturn
 //----------------------------------------------------------------
 int DeicsOnze::getReverbReturn() const {
-  return(amp2level(_global.chorusReturn/2.0));
+  return(amp2level(_global.reverbReturn/2.0));
 }
 
 //----------------------------------------------------------------
-- 
cgit v1.2.3