diff options
author | Florian Jung <flo@windfisch.org> | 2011-06-03 14:24:08 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2011-06-03 14:24:08 +0000 |
commit | db164b62e3892bd17d1a2eabca76bde3b67072df (patch) | |
tree | ab71ac4b4f05ab94c008d75ef7052bef5af6cc74 /muse2/muse/arranger | |
parent | def4fdb391f5207ebbe61881416f39f3d896cc5d (diff) | |
parent | 9187899632c14d64b3fae6477b7f941240f912a6 (diff) |
merged with trunk and adapted new functions
Diffstat (limited to 'muse2/muse/arranger')
-rw-r--r-- | muse2/muse/arranger/arranger.cpp | 4 | ||||
-rw-r--r-- | muse2/muse/arranger/pcanvas.cpp | 23 | ||||
-rw-r--r-- | muse2/muse/arranger/pcanvas.h | 3 | ||||
-rw-r--r-- | muse2/muse/arranger/tlist.cpp | 111 | ||||
-rw-r--r-- | muse2/muse/arranger/tlist.h | 11 |
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*); |