summaryrefslogtreecommitdiff
path: root/muse2/muse/arranger
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2011-06-03 14:24:08 +0000
committerFlorian Jung <flo@windfisch.org>2011-06-03 14:24:08 +0000
commitdb164b62e3892bd17d1a2eabca76bde3b67072df (patch)
treeab71ac4b4f05ab94c008d75ef7052bef5af6cc74 /muse2/muse/arranger
parentdef4fdb391f5207ebbe61881416f39f3d896cc5d (diff)
parent9187899632c14d64b3fae6477b7f941240f912a6 (diff)
merged with trunk and adapted new functions
Diffstat (limited to 'muse2/muse/arranger')
-rw-r--r--muse2/muse/arranger/arranger.cpp4
-rw-r--r--muse2/muse/arranger/pcanvas.cpp23
-rw-r--r--muse2/muse/arranger/pcanvas.h3
-rw-r--r--muse2/muse/arranger/tlist.cpp111
-rw-r--r--muse2/muse/arranger/tlist.h11
5 files changed, 133 insertions, 19 deletions
diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp
index d74bed78..e1205d6f 100644
--- a/muse2/muse/arranger/arranger.cpp
+++ b/muse2/muse/arranger/arranger.cpp
@@ -69,6 +69,7 @@ void Arranger::setHeaderToolTips()
header->setToolTip(COL_OPORT, tr("Midi output port or synth midi port"));
header->setToolTip(COL_TIMELOCK, tr("Time Lock"));
header->setToolTip(COL_AUTOMATION, tr("Automation parameter selection"));
+ header->setToolTip(COL_CLEF, tr("Notation clef"));
}
@@ -87,6 +88,7 @@ void Arranger::setHeaderWhatsThis()
header->setWhatsThis(COL_OCHANNEL, tr("Midi/drum track: Output channel number.\nAudio track: Channels.\nMid/right-click to change."));
header->setWhatsThis(COL_OPORT, tr("Midi/drum track: Output port.\nSynth track: Assigned midi port.\nLeft-click to change.\nRight-click to show GUI."));
header->setWhatsThis(COL_TIMELOCK, tr("Time lock"));
+ header->setToolTip(COL_CLEF, tr("Notation clef. Select this tracks notation clef."));
}
//---------------------------------------------------------
@@ -290,6 +292,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name)
header->setColumnLabel(tr("Ch"), COL_OCHANNEL, 30);
header->setColumnLabel(tr("T"), COL_TIMELOCK, fm1.width('T')+fw);
header->setColumnLabel(tr("Automation"), COL_AUTOMATION, 75);
+ header->setColumnLabel(tr("Clef"), COL_CLEF, 75);
header->setResizeMode(COL_RECORD, QHeaderView::Fixed);
header->setResizeMode(COL_MUTE, QHeaderView::Fixed);
header->setResizeMode(COL_SOLO, QHeaderView::Fixed);
@@ -299,6 +302,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name)
header->setResizeMode(COL_OCHANNEL, QHeaderView::Fixed);
header->setResizeMode(COL_TIMELOCK, QHeaderView::Fixed);
header->setResizeMode(COL_AUTOMATION, QHeaderView::Interactive);
+ header->setResizeMode(COL_CLEF, QHeaderView::Interactive);
setHeaderToolTips();
setHeaderWhatsThis();
diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp
index 006b9333..d65b8957 100644
--- a/muse2/muse/arranger/pcanvas.cpp
+++ b/muse2/muse/arranger/pcanvas.cpp
@@ -1624,7 +1624,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi
int hoffset = (mt->height() - th ) / 2; // offset from bottom
if (ctrl_type == CTRL_PITCH)
- p.drawLine(t, hoffset + r.y() + th/2, t, hoffset + r.y() + val*th/8192/2 + th/2);
+ p.drawLine(t, hoffset + r.y() + th/2, t, hoffset + r.y() - val*th/8192/2 + th/2);
}
}
@@ -1641,7 +1641,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi
int hoffset = (mt->height() - th ) / 2; // offset from bottom
if (ctrl_type == 10)
- p.drawLine(t, hoffset + r.y() + val*th/127, t, hoffset + r.y() + th);
+ p.drawLine(t, hoffset + r.y() + th - val*th/127, t, hoffset + r.y() + th);
}
}
@@ -1658,7 +1658,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi
int hoffset = (mt->height() - th ) / 2; // offset from bottom
if (ctrl_type == 7)
- p.drawLine(t, hoffset + r.y() + val*th/127, t, hoffset + r.y() + th);
+ p.drawLine(t, hoffset + r.y() + th - val*th/127, t, hoffset + r.y() + th);
}
}
@@ -1690,7 +1690,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi
if (config.canvasShowPartType & 4) //y-stretch?
{
- for (iEvent i = events->begin(); i != ito; ++i)
+ for (iEvent i = events->begin(); i != events->end(); ++i)
{
if (i->second.type()==Note)
{
@@ -1725,6 +1725,19 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi
lowest_pitch--;
highest_pitch++;
}
+
+ if (heavyDebugMsg)
+ {
+ if (!isdrum)
+ printf("DEBUG: arranger: cakewalk enabled, y-stretching from %i to %i. eventlist=%p\n",lowest_pitch, highest_pitch, events);
+ else
+ {
+ printf("DEBUG: arranger: cakewalk enabled, y-stretching drums: ");;
+ for (map<int,int>::iterator it=y_mapper.begin(); it!=y_mapper.end(); it++)
+ printf("%i ", it->first);
+ printf("; eventlist=%p\n",events);
+ }
+ }
}
else
{
@@ -1734,6 +1747,8 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi
if (isdrum)
for (int cnt=0;cnt<127;cnt++)
y_mapper[cnt]=cnt;
+
+ if (heavyDebugMsg) printf("DEBUG: arranger: cakewalk enabled, y-stretch disabled\n");
}
p.setPen(QColor(color_brightness,color_brightness,color_brightness));
diff --git a/muse2/muse/arranger/pcanvas.h b/muse2/muse/arranger/pcanvas.h
index e48af2d4..18e47426 100644
--- a/muse2/muse/arranger/pcanvas.h
+++ b/muse2/muse/arranger/pcanvas.h
@@ -57,6 +57,7 @@ class CtrlVal;
//---------------------------------------------------------
class PartCanvas : public Canvas {
+ Q_OBJECT
int* _raster;
TrackList* tracks;
@@ -69,7 +70,7 @@ class PartCanvas : public Canvas {
AutomationObject automation;
//std::vector<TrackAutomationView*> automationViews;
- Q_OBJECT
+
virtual void keyPress(QKeyEvent*);
virtual void mousePress(QMouseEvent*);
virtual void mouseMove(QMouseEvent* event);
diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp
index 4b531607..4f050c46 100644
--- a/muse2/muse/arranger/tlist.cpp
+++ b/muse2/muse/arranger/tlist.cpp
@@ -11,7 +11,7 @@
#include <QKeyEvent>
#include <QLineEdit>
-#include <QMenu>
+//#include <QMenu>
#include <QMessageBox>
#include <QMouseEvent>
#include <QPainter>
@@ -21,6 +21,7 @@
#include <QScrollBar>
#include <QWheelEvent>
#include <QIcon>
+#include <QSpinBox>
#include "popupmenu.h"
#include "globals.h"
@@ -44,6 +45,7 @@
#include "midiedit/drummap.h"
#include "synth.h"
#include "config.h"
+#include "popupmenu.h"
#ifdef DSSI_SUPPORT
#include "dssihost.h"
@@ -230,13 +232,15 @@ void TList::paint(const QRect& r)
switch (section) {
case COL_RECORD:
- if (track->canRecord()) {
+ if (track->canRecord() && !header->isSectionHidden(COL_RECORD)) {
drawCenteredPixmap(p,
track->recordFlag() ? record_on_Icon : record_off_Icon, r);
}
break;
case COL_CLASS:
{
+ if (header->isSectionHidden(COL_CLASS))
+ break;
const QPixmap* pm = 0;
switch(type) {
case Track::MIDI:
@@ -297,7 +301,11 @@ void TList::paint(const QRect& r)
{
QString s;
int n;
- if (track->isMidiTrack()) {
+ if (track->isMidiTrack() && track->type() == Track::DRUM) {
+ p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, "-");
+ break;
+ }
+ else if (track->isMidiTrack()) {
n = ((MidiTrack*)track)->outChannel() + 1;
}
else {
@@ -356,6 +364,18 @@ void TList::paint(const QRect& r)
p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s);
}
break;
+ case COL_CLEF:
+ if (track->isMidiTrack()) {
+ QString s = tr("no clef");
+ if (((MidiTrack*)track)->getClef() == trebleClef)
+ s=tr("Treble");
+ else if (((MidiTrack*)track)->getClef() == bassClef)
+ s=tr("Bass");
+ else if (((MidiTrack*)track)->getClef() == grandStaff)
+ s=tr("Grand");
+ p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s);
+ }
+ break;
default:
break;
}
@@ -419,6 +439,20 @@ void TList::returnPressed()
setFocus();
}
+void TList::chanValueChanged(int val)
+{
+ Track* track = editTrack->clone(false);
+ ((MidiTrack*)editTrack)->setOutChannel(val-1);
+ audio->msgChangeTrack(track, editTrack);
+}
+
+void TList::chanValueFinished()
+{
+ editTrack = 0;
+ chan_edit->hide();
+ setFocus();
+}
+
//---------------------------------------------------------
// adjustScrollbar
//---------------------------------------------------------
@@ -472,7 +506,7 @@ void TList::mouseDoubleClickEvent(QMouseEvent* ev)
if (section == COL_NAME) {
editTrack = t;
if (editor == 0) {
- editor = new QLineEdit(this);
+ editor = new QLineEdit(this);
/*connect(editor, SIGNAL(returnPressed()),
SLOT(returnPressed()));*/
editor->setFrame(true);
@@ -483,6 +517,25 @@ void TList::mouseDoubleClickEvent(QMouseEvent* ev)
editMode = true;
editor->show();
}
+ else if (section == COL_OCHANNEL) {
+ if (t->isMidiTrack() && t->type() != Track::DRUM)
+ {
+ editTrack=t;
+ if (chan_edit==0) {
+ chan_edit=new QSpinBox(this);
+ chan_edit->setMinimum(1);
+ chan_edit->setMaximum(16);
+ connect(chan_edit, SIGNAL(valueChanged(int)), SLOT(chanValueChanged(int)));
+ connect(chan_edit, SIGNAL(editingFinished()), SLOT(chanValueFinished()));
+ }
+ chan_edit->setValue(((MidiTrack*)editTrack)->outChannel()+1);
+ int w=colw;
+ if (w < chan_edit->sizeHint().width()) w=chan_edit->sizeHint().width();
+ chan_edit->setGeometry(colx, coly, w, colh);
+ chan_edit->show();
+ chan_edit->setFocus();
+ }
+ }
else
mousePressEvent(ev);
}
@@ -883,9 +936,11 @@ void TList::changeAutomationColor(QAction* act)
//---------------------------------------------------------
// colorMenu
//---------------------------------------------------------
-QMenu* TList::colorMenu(QColor c, int id)
+//QMenu* TList::colorMenu(QColor c, int id)
+PopupMenu* TList::colorMenu(QColor c, int id)
{
- QMenu * m = new QMenu(this);
+ //QMenu * m = new QMenu(this);
+ PopupMenu * m = new PopupMenu(this); //, true); TODO
for (int i = 0; i< 6; i++) {
QPixmap pix(10,10);
QPainter p(&pix);
@@ -1054,11 +1109,39 @@ void TList::mousePressEvent(QMouseEvent* ev)
mode = START_DRAG;
switch (col) {
+ case COL_CLEF:
+ if (t->isMidiTrack()) {
+ QMenu* p = new QMenu;
+ p->addAction(tr("Treble clef"))->setData(0);
+ p->addAction(tr("Bass clef"))->setData(1);
+ p->addAction(tr("Grand Staff"))->setData(2);
+
+ // Show the menu
+ QAction* act = p->exec(ev->globalPos(), 0);
+ if (act) {
+ switch (act->data().toInt()) {
+ case 0:
+ ((MidiTrack*)t)->setClef(trebleClef);
+ break;
+ case 1:
+ ((MidiTrack*)t)->setClef(bassClef);
+ break;
+ case 2:
+ ((MidiTrack*)t)->setClef(grandStaff);
+ break;
+ default:
+ break;
+ }
+ }
+ delete p;
+ }
+
+ break;
case COL_AUTOMATION:
{
if (!t->isMidiTrack()) {
editAutomation = t;
- PopupMenu* p = new PopupMenu();
+ PopupMenu* p = new PopupMenu(true);
p->disconnect();
p->clear();
p->setTitle(tr("Viewable automation"));
@@ -1075,12 +1158,11 @@ void TList::mousePressEvent(QMouseEvent* ev)
int data = cl->id() * 256; // shift 8 bits
data += 150; // illegal color > 100
act->setData(data);
- QMenu *m = colorMenu(cl->color(), cl->id());
+ //QMenu *m = colorMenu(cl->color(), cl->id());
+ PopupMenu *m = colorMenu(cl->color(), cl->id());
act->setMenu(m);
}
connect(p, SIGNAL(triggered(QAction*)), SLOT(changeAutomation(QAction*)));
- //connect(p, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide()));
- //p->popup(QCursor::pos());
p->exec(QCursor::pos());
delete p;
@@ -1236,8 +1318,10 @@ void TList::mousePressEvent(QMouseEvent* ev)
{
MidiTrack* mt = dynamic_cast<MidiTrack*>(t);
if (mt == 0)
- break;
-
+ break;
+ if (mt->type() == Track::DRUM)
+ break;
+
int channel = mt->outChannel();
channel += delta;
if(channel >= MIDI_CHANNELS)
@@ -1511,6 +1595,9 @@ void TList::wheelEvent(QWheelEvent* ev)
case COL_OCHANNEL:
if (t->isMidiTrack()) {
MidiTrack* mt = (MidiTrack*)t;
+ if (mt && mt->type() == Track::DRUM)
+ break;
+
int channel = mt->outChannel() + delta;
if (channel >= MIDI_CHANNELS)
diff --git a/muse2/muse/arranger/tlist.h b/muse2/muse/arranger/tlist.h
index 8bebef95..607ca8c0 100644
--- a/muse2/muse/arranger/tlist.h
+++ b/muse2/muse/arranger/tlist.h
@@ -14,12 +14,14 @@
class QKeyEvent;
class QLineEdit;
+class QSpinBox;
class QMouseEvent;
class QPaintEvent;
class QResizeEvent;
class QScrollBar;
class QWheelEvent;
-class QMenu;
+//class QMenu;
+class PopupMenu;
class ScrollScale;
class Track;
@@ -36,6 +38,7 @@ enum TrackColumn {
COL_OCHANNEL,
COL_TIMELOCK,
COL_AUTOMATION,
+ COL_CLEF,
COL_NONE = -1
};
@@ -55,6 +58,7 @@ class TList : public QWidget {
Header* header;
QScrollBar* _scroll;
QLineEdit* editor;
+ QSpinBox* chan_edit;
Track* editTrack;
Track* editAutomation;
@@ -85,10 +89,13 @@ class TList : public QWidget {
void classesPopupMenu(Track*, int x, int y);
TrackList getRecEnabledTracks();
void setHeaderToolTips();
- QMenu* colorMenu(QColor c, int id);
+ //QMenu* colorMenu(QColor c, int id);
+ PopupMenu* colorMenu(QColor c, int id);
private slots:
void returnPressed();
+ void chanValueChanged(int);
+ void chanValueFinished();
void songChanged(int flags);
void changeAutomation(QAction*);
void changeAutomationColor(QAction*);