summaryrefslogtreecommitdiff
path: root/muse2/muse/ctrl
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/ctrl')
-rw-r--r--muse2/muse/ctrl/ctrlcanvas.cpp103
-rw-r--r--muse2/muse/ctrl/ctrlcanvas.h7
-rw-r--r--muse2/muse/ctrl/ctrledit.cpp11
-rw-r--r--muse2/muse/ctrl/ctrledit.h1
-rw-r--r--muse2/muse/ctrl/ctrlpanel.cpp145
-rw-r--r--muse2/muse/ctrl/ctrlpanel.h4
6 files changed, 190 insertions, 81 deletions
diff --git a/muse2/muse/ctrl/ctrlcanvas.cpp b/muse2/muse/ctrl/ctrlcanvas.cpp
index 96143b10..ddecdbf6 100644
--- a/muse2/muse/ctrl/ctrlcanvas.cpp
+++ b/muse2/muse/ctrl/ctrlcanvas.cpp
@@ -39,6 +39,7 @@
#include "gconfig.h"
#include "ctrlpanel.h"
#include "midiedit/drummap.h"
+#include "drumedit.h"
static MusECore::MidiCtrlValList veloList(MusECore::CTRL_VELOCITY); // dummy
@@ -211,6 +212,11 @@ CtrlCanvas::CtrlCanvas(MidiEditor* e, QWidget* parent, int xmag,
noEvents=false;
//_isFirstMove = true;
//_lastDelta = QPoint(0, 0);
+
+ if (dynamic_cast<DrumEdit*>(editor) && dynamic_cast<DrumEdit*>(editor)->old_style_drummap_mode()==false)
+ filterTrack=true;
+ else
+ filterTrack=false;
ctrl = &veloList;
_controller = &MusECore::veloCtrl;
@@ -229,10 +235,10 @@ CtrlCanvas::CtrlCanvas(MidiEditor* e, QWidget* parent, int xmag,
connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(configChanged()));
- curDrumInstrument = editor->curDrumInstrument();
- //printf("CtrlCanvas::CtrlCanvas curDrumInstrument:%d\n", curDrumInstrument);
+ setCurDrumPitch(editor->curDrumInstrument());
+ //printf("CtrlCanvas::CtrlCanvas curDrumPitch:%d\n", curDrumPitch);
- connect(editor, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumInstrument(int)));
+ connect(editor, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumPitch(int)));
updateItems();
}
@@ -329,7 +335,7 @@ void CtrlCanvas::setMidiController(int num)
_panel->setHWController(curTrack, &MusECore::veloCtrl);
else
_panel->setHWController(curTrack, _controller);
- }
+ }
}
//---------------------------------------------------------
@@ -538,15 +544,21 @@ void CtrlCanvas::partControllers(const MusECore::MidiPart* part, int num, int* d
int di;
int n;
- if((mt->type() != MusECore::Track::DRUM) && curDrumInstrument != -1)
+ if(!mt->isDrumTrack() && curDrumPitch != -1)
printf("keyfilter != -1 in non drum track?\n");
- if((mt->type() == MusECore::Track::DRUM) && (curDrumInstrument != -1) && ((num & 0xff) == 0xff))
+ if((mt->type() == MusECore::Track::DRUM) && (curDrumPitch > 0) && ((num & 0xff) == 0xff))
{
- di = (num & ~0xff) | curDrumInstrument;
- n = (num & ~0xff) | MusEGlobal::drumMap[curDrumInstrument].anote; // construct real controller number
- //num = (num & ~0xff) | curDrumInstrument); // construct real controller number
- mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[curDrumInstrument].port];
+ di = (num & ~0xff) | curDrumPitch;
+ n = (num & ~0xff) | MusEGlobal::drumMap[curDrumPitch].anote; // construct real controller number
+ //num = (num & ~0xff) | curDrumPitch); // construct real controller number
+ mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[curDrumPitch].port];
+ }
+ else if ((mt->type() == MusECore::Track::NEW_DRUM) && (curDrumPitch > 0) && ((num & 0xff) == 0xff)) //FINDMICHJETZT does this work?
+ {
+ di = (num & ~0xff) | curDrumPitch;
+ n = (num & ~0xff) | curDrumPitch;
+ mp = &MusEGlobal::midiPorts[mt->outPort()];
}
else
{
@@ -602,6 +614,10 @@ void CtrlCanvas::updateItems()
CEvent* lastce = 0;
MusECore::MidiPart* part = (MusECore::MidiPart*)(p->second);
+
+ if (filterTrack && part->track() != curTrack)
+ continue;
+
MusECore::EventList* el = part->events();
//MusECore::MidiController* mc;
MusECore::MidiCtrlValList* mcvl;
@@ -618,15 +634,15 @@ void CtrlCanvas::updateItems()
if(_cnum == MusECore::CTRL_VELOCITY && e.type() == MusECore::Note)
{
- //printf("CtrlCanvas::updateItems MusECore::CTRL_VELOCITY curDrumInstrument:%d\n", curDrumInstrument);
+ //printf("CtrlCanvas::updateItems MusECore::CTRL_VELOCITY curDrumPitch:%d\n", curDrumPitch);
newev = 0;
- if(curDrumInstrument == -1)
+ if (curDrumPitch == -1) // and NOT >0
{
// This is interesting - it would allow ALL drum note velocities to be shown.
// But currently the drum list ALWAYS has a selected item so this is not supposed to happen.
items.add(newev = new CEvent(e, part, e.velo()));
}
- else if (e.dataA() == curDrumInstrument) //same note
+ else if (e.dataA() == curDrumPitch) //same note. if curDrumPitch==-2, this never is true
items.add(newev = new CEvent(e, part, e.velo()));
if(newev && e.selected())
selection.push_back(newev);
@@ -677,7 +693,7 @@ void CtrlCanvas::updateSelections()
void CtrlCanvas::viewMousePressEvent(QMouseEvent* event)
{
- if(!_controller) // p4.0.27
+ if(!_controller || curDrumPitch==-2) // p4.0.27
return;
start = event->pos();
@@ -785,7 +801,7 @@ void CtrlCanvas::viewMousePressEvent(QMouseEvent* event)
void CtrlCanvas::viewMouseMoveEvent(QMouseEvent* event)
{
- if(!_controller) // p4.0.27
+ if(!_controller || curDrumPitch==-2) // p4.0.27
return;
QPoint pos = event->pos();
@@ -796,7 +812,7 @@ void CtrlCanvas::viewMouseMoveEvent(QMouseEvent* event)
if (!moving)
break;
drag = DRAG_LASSO;
- // weiter mit DRAG_LASSO:
+ // fallthrough
case DRAG_LASSO:
lasso.setRect(start.x(), start.y(), dist.x(), dist.y());
redraw();
@@ -858,7 +874,7 @@ void CtrlCanvas::viewMouseReleaseEvent(QMouseEvent* event)
case DRAG_LASSO_START:
lasso.setRect(-1, -1, -1, -1);
-
+ //fallthrough
case DRAG_LASSO:
if(_controller) // p4.0.27
{
@@ -1691,8 +1707,8 @@ void CtrlCanvas::pdrawItems(QPainter& p, const QRect& rect, const MusECore::Midi
MusECore::MidiTrack* mt = part->track();
MusECore::MidiPort* mp;
- if((mt->type() == MusECore::Track::DRUM) && (curDrumInstrument != -1) && ((_cnum & 0xff) == 0xff))
- mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[curDrumInstrument].port];
+ if((mt->type() == MusECore::Track::DRUM) && (curDrumPitch > 0) && ((_cnum & 0xff) == 0xff))
+ mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[curDrumPitch].port];
else
mp = &MusEGlobal::midiPorts[mt->outPort()];
@@ -1858,7 +1874,7 @@ void CtrlCanvas::pdraw(QPainter& p, const QRect& rect)
{
MusECore::MidiPart* part = (MusECore::MidiPart*)(ip->second);
//if((velo && part == curPart) || (!velo && part != curPart))
- if(part == curPart)
+ if(part == curPart || (filterTrack && part->track() != curTrack))
continue;
// Draw items for all parts - other than current part
pdrawItems(p, rect, part, velo, !velo);
@@ -1924,10 +1940,14 @@ void CtrlCanvas::drawOverlay(QPainter& p)
int y = fontMetrics().lineSpacing() + 2;
p.drawText(2, y, s);
- if (noEvents) {
+ if (curDrumPitch==-2)
+ {
+ p.drawText(2 , y * 2, tr("Make the current part's track match the selected drumlist entry"));
+ }
+ else if (noEvents) {
//p.setFont(MusEGlobal::config.fonts[3]);
//p.setPen(Qt::black);
- //p.drawText(width()/2-100,height()/2-10, tr("Use shift + pencil or line tool to draw new events"));
+ //p.drawText(width()/2-100,height()/2-10, "Use shift + pencil or line tool to draw new events");
p.drawText(2 , y * 2, tr("Drawing hint: Hold Ctrl to affect only existing events"));
}
}
@@ -1946,9 +1966,16 @@ QRect CtrlCanvas::overlayRect() const
//r.translate(2, 2); // top/left margin
int y = fm.lineSpacing() + 2;
r.translate(2, y);
- if (noEvents)
+ if (curDrumPitch==-2)
{
- QRect r2(fm.boundingRect(QString(tr("Use shift + pencil or line tool to draw new events"))));
+ QRect r2(fm.boundingRect(QString(tr("Make the current part's track match the selected drumlist entry"))));
+ //r2.translate(width()/2-100, height()/2-10);
+ r2.translate(2, y * 2);
+ r |= r2;
+ }
+ else if (noEvents)
+ {
+ QRect r2(fm.boundingRect(QString(tr("Use pencil or line tool to draw new events"))));
//r2.translate(width()/2-100, height()/2-10);
r2.translate(2, y * 2);
r |= r2;
@@ -1979,13 +2006,24 @@ void CtrlCanvas::draw(QPainter& p, const QRect& rect)
}
//---------------------------------------------------------
-// setCurDrumInstrument
+// setCurDrumPitch
//---------------------------------------------------------
-void CtrlCanvas::setCurDrumInstrument(int di)
+void CtrlCanvas::setCurDrumPitch(int instrument)
+{
+ DrumEdit* drumedit = dynamic_cast<DrumEdit*>(editor);
+ if (drumedit == NULL || drumedit->old_style_drummap_mode())
+ curDrumPitch = instrument;
+ else // new style drummap mode
{
- curDrumInstrument = di;
- //printf("CtrlCanvas::setCurDrumInstrument curDrumInstrument:%d\n", curDrumInstrument);
+ if (drumedit->get_instrument_map()[instrument].tracks.contains(curTrack))
+ curDrumPitch = drumedit->get_instrument_map()[instrument].pitch;
+ else
+ curDrumPitch = -2; // this means "invalid", but not "unused"
+ }
+
+
+ //printf("CtrlCanvas::setCurDrumPitch curDrumPitch:%d\n", curDrumPitch);
//
// check if current controller is only valid for
@@ -2001,6 +2039,13 @@ void CtrlCanvas::setCurDrumInstrument(int di)
// }
// Removed by T356
//songChanged(-1);
- }
+}
+
+void CtrlCanvas::curPartHasChanged(MusECore::Part*)
+{
+ setCurTrackAndPart();
+ setCurDrumPitch(editor->curDrumInstrument());
+ songChanged(SC_EVENT_MODIFIED);
+}
} // namespace MusEGui
diff --git a/muse2/muse/ctrl/ctrlcanvas.h b/muse2/muse/ctrl/ctrlcanvas.h
index f9fcb54f..50b71bbe 100644
--- a/muse2/muse/ctrl/ctrlcanvas.h
+++ b/muse2/muse/ctrl/ctrlcanvas.h
@@ -121,6 +121,7 @@ class CtrlCanvas : public MusEGui::View {
int line2y;
bool drawLineMode;
bool noEvents;
+ bool filterTrack;
void viewMousePressEvent(QMouseEvent* event);
void viewMouseMoveEvent(QMouseEvent*);
@@ -161,7 +162,7 @@ class CtrlCanvas : public MusEGui::View {
QPoint start;
MusEGui::Tool tool;
unsigned pos[3];
- int curDrumInstrument; //Used by the drum-editor to view velocity of only one key (one drum)
+ int curDrumPitch; //Used by the drum-editor to view velocity of only one key (one drum)
void leaveEvent(QEvent*e);
QPoint raster(const QPoint&) const;
@@ -181,12 +182,13 @@ class CtrlCanvas : public MusEGui::View {
private slots:
void songChanged(int type);
void configChanged();
- void setCurDrumInstrument(int);
+ void setCurDrumPitch(int);
public slots:
void setTool(int t);
void setPos(int, unsigned, bool adjustScrollbar);
void setController(int ctrl);
+ void curPartHasChanged(MusECore::Part*);
signals:
void followEvent(int);
@@ -201,6 +203,7 @@ class CtrlCanvas : public MusEGui::View {
MusECore::MidiCtrlValList* ctrlValList() { return ctrl; }
MusECore::MidiController* controller() { return _controller; }
MusECore::MidiTrack* track() const { return curTrack; }
+ int getCurDrumPitch() const { return curDrumPitch; }
};
} // namespace MusEGui
diff --git a/muse2/muse/ctrl/ctrledit.cpp b/muse2/muse/ctrl/ctrledit.cpp
index 7c960dd8..5fbdecaf 100644
--- a/muse2/muse/ctrl/ctrledit.cpp
+++ b/muse2/muse/ctrl/ctrledit.cpp
@@ -55,8 +55,10 @@ CtrlEdit::CtrlEdit(QWidget* parent, MidiEditor* e, int xmag,
setObjectName(name);
setAttribute(Qt::WA_DeleteOnClose);
QHBoxLayout* hbox = new QHBoxLayout;
- panel = new CtrlPanel(0, e, "panel");
- canvas = new CtrlCanvas(e, 0, xmag, "ctrlcanvas", panel);
+ canvas = new CtrlCanvas(e, 0, xmag, "ctrlcanvas");
+ panel = new CtrlPanel(0, e, canvas, "panel");
+ canvas->setPanel(panel);
+
QWidget* vscale = new MusEGui::VScale;
hbox->setContentsMargins(0, 0, 0, 0);
@@ -180,4 +182,9 @@ void CtrlEdit::setController(const QString& name)
}
}
+void CtrlEdit::curPartHasChanged(MusECore::Part* p)
+{
+ canvas->curPartHasChanged(p);
+}
+
} // namespace MusEGui
diff --git a/muse2/muse/ctrl/ctrledit.h b/muse2/muse/ctrl/ctrledit.h
index 1f7a67a9..a0a941cc 100644
--- a/muse2/muse/ctrl/ctrledit.h
+++ b/muse2/muse/ctrl/ctrledit.h
@@ -60,6 +60,7 @@ class CtrlEdit : public QWidget {
void setXMag(int val) { canvas->setXMag(val); }
void setCanvasWidth(int w);
void setController(int /*n*/);
+ void curPartHasChanged(MusECore::Part*);
signals:
void timeChanged(unsigned);
diff --git a/muse2/muse/ctrl/ctrlpanel.cpp b/muse2/muse/ctrl/ctrlpanel.cpp
index 1889c608..e46f949c 100644
--- a/muse2/muse/ctrl/ctrlpanel.cpp
+++ b/muse2/muse/ctrl/ctrlpanel.cpp
@@ -64,7 +64,7 @@ namespace MusEGui {
// CtrlPanel
//---------------------------------------------------------
-CtrlPanel::CtrlPanel(QWidget* parent, MidiEditor* e, const char* name)
+CtrlPanel::CtrlPanel(QWidget* parent, MidiEditor* e, CtrlCanvas* c, const char* name)
: QWidget(parent)
{
setObjectName(name);
@@ -72,6 +72,7 @@ CtrlPanel::CtrlPanel(QWidget* parent, MidiEditor* e, const char* name)
//ctrlMainPop = 0;
//ctrlSubPop = 0;
editor = e;
+ ctrlcanvas = c;
setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
QVBoxLayout* vbox = new QVBoxLayout;
QHBoxLayout* bbox = new QHBoxLayout;
@@ -173,11 +174,11 @@ void CtrlPanel::heartBeat()
{
int outport;
int chan;
- int cdi = editor->curDrumInstrument();
- if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1)
+ int cdp = ctrlcanvas->getCurDrumPitch();
+ if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdp != -1)
{
- outport = MusEGlobal::drumMap[cdi].port;
- chan = MusEGlobal::drumMap[cdi].channel;
+ outport = MusEGlobal::drumMap[cdp].port;
+ chan = MusEGlobal::drumMap[cdp].channel;
}
else
{
@@ -251,11 +252,11 @@ void CtrlPanel::labelDoubleClicked()
int outport;
int chan;
- int cdi = editor->curDrumInstrument();
- if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1)
+ int cdp = ctrlcanvas->getCurDrumPitch();
+ if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdp != -1)
{
- outport = MusEGlobal::drumMap[cdi].port;
- chan = MusEGlobal::drumMap[cdi].channel;
+ outport = MusEGlobal::drumMap[cdp].port;
+ chan = MusEGlobal::drumMap[cdp].channel;
}
else
{
@@ -355,11 +356,11 @@ void CtrlPanel::ctrlChanged(double val)
int outport;
int chan;
- int cdi = editor->curDrumInstrument();
- if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1)
+ int cdp = ctrlcanvas->getCurDrumPitch();
+ if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdp != -1)
{
- outport = MusEGlobal::drumMap[cdi].port;
- chan = MusEGlobal::drumMap[cdi].channel;
+ outport = MusEGlobal::drumMap[cdp].port;
+ chan = MusEGlobal::drumMap[cdp].channel;
}
else
{
@@ -424,13 +425,19 @@ void CtrlPanel::setHWController(MusECore::MidiTrack* t, MusECore::MidiController
MusECore::MidiPort* mp;
int ch;
- int cdi = editor->curDrumInstrument();
+ int cdp = ctrlcanvas->getCurDrumPitch();
_dnum = _ctrl->num();
- if(_track->type() == MusECore::Track::DRUM && ((_dnum & 0xff) == 0xff) && cdi != -1)
+ if(_track->type() == MusECore::Track::DRUM && ((_dnum & 0xff) == 0xff) && cdp != -1)
{
- _dnum = (_dnum & ~0xff) | MusEGlobal::drumMap[cdi].anote;
- mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[cdi].port];
- ch = MusEGlobal::drumMap[cdi].channel;
+ _dnum = (_dnum & ~0xff) | MusEGlobal::drumMap[cdp].anote;
+ mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[cdp].port];
+ ch = MusEGlobal::drumMap[cdp].channel;
+ }
+ else if(_track->type() == MusECore::Track::NEW_DRUM && ((_dnum & 0xff) == 0xff) && cdp != -1)
+ {
+ _dnum = (_dnum & ~0xff) | cdp; //FINDMICHJETZT does that work?
+ mp = &MusEGlobal::midiPorts[_track->outPort()];
+ ch = _track->outChannel();
}
else
{
@@ -542,6 +549,21 @@ void CtrlPanel::setHeight(int h)
}
#if 0
+/* WARNING: INVALID CODE! *\
+ * the code which has been disabled by the above #if 0 is partly *
+ * OBSOLETE! it lacks support for new-style drum tracks, especially *
+ * the drum-controller-handling for these! *
+ * *
+ * when you ever enable that code again, first check the changes *
+ * flo93 did somewhere between revision 1188 and 1188+something *
+ * (let's say, 1195; it's NOT the revision in which this comment *
+ * has been introduced) in experimental to the currently enabled *
+ * code below. then apply similar changes to the currently disabled *
+\* code here! */
+#error "INVALID CODE. please check the comment in ctrlpanel.cpp which starts with 'WARNING: INVALID CODE'"
+just to be sure: dear compiler, please refuse to compile.
+dear user: read the comment above!
+
struct CI {
QString s;
bool used;
@@ -564,8 +586,9 @@ void CtrlPanel::ctrlPopup()
MusECore::MidiTrack* track = (MusECore::MidiTrack*)(part->track());
int channel = track->outChannel();
MusECore::MidiPort* port = &MusEGlobal::midiPorts[track->outPort()];
- int curDrumInstrument = editor->curDrumInstrument();
+ int curDrumPitch = ctrlcanvas->getCurDrumPitch();
bool isDrum = track->type() == MusECore::Track::DRUM;
+ bool isNewDrum = track->type() == MusECore::Track::NEW_DRUM;
QMenu* pop = new QMenu;
//pop->clear();
@@ -583,12 +606,20 @@ void CtrlPanel::ctrlPopup()
MusECore::MidiController* c = port->midiController(cl->num());
// dont show drum specific controller if not a drum track
if ((c->num() & 0xff) == 0xff) {
- if (!isDrum)
- continue;
- // only show controller for curDrumInstrument:
- if ((cl->num() & 0xff) != MusEGlobal::drumMap[curDrumInstrument].anote) {
- continue;
- }
+ if (isDrum)
+ {
+ // only show controller for curDrumPitch:
+ if ((curDrumPitch == -1) || ((cl->num() & 0xff) != MusEGlobal::drumMap[curDrumPitch].anote))
+ continue;
+ }
+ else if (isNewDrum)
+ {
+ // only show controller for curDrumPitch: FINDMICH does this work?
+ if ((curDrumPitch == -1) || ((cl->num() & 0xff) != curDrumPitch))
+ continue;
+ }
+ else
+ continue;
}
isList i = sList.begin();
for (; i != sList.end(); ++i) {
@@ -651,8 +682,10 @@ void CtrlPanel::ctrlPopup()
for (iMusECore::MidiController ci = mcl->begin(); ci != mcl->end(); ++ci)
{
int num = ci->second->num();
- if (isDrum && ((num & 0xff) == 0xff))
- num = (num & ~0xff) + MusEGlobal::drumMap[curDrumInstrument].anote;
+ if (isDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1)
+ num = (num & ~0xff) + MusEGlobal::drumMap[curDrumPitch].anote;
+ if (isNewDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1) //FINDMICHJETZT does this work?
+ num = (num & ~0xff) + curDrumPitch;
if(cll->find(channel, num) == cll->end())
pop1->addAction(ci->second->name());
@@ -665,8 +698,10 @@ void CtrlPanel::ctrlPopup()
c = ci->second;
if (c->name() == s) {
int num = c->num();
- if (isDrum && ((num & 0xff) == 0xff))
- num = (num & ~0xff) + MusEGlobal::drumMap[curDrumInstrument].anote;
+ if (isDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1)
+ num = (num & ~0xff) + MusEGlobal::drumMap[curDrumPitch].anote;
+ if (isNewDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1) //FINDMICHJETZT does this work?
+ num = (num & ~0xff) + curDrumPitch;
if(cll->find(channel, num) == cll->end())
{
@@ -722,8 +757,9 @@ void CtrlPanel::ctrlPopup()
MusECore::MidiTrack* track = (MusECore::MidiTrack*)(part->track());
int channel = track->outChannel();
MusECore::MidiPort* port = &MusEGlobal::midiPorts[track->outPort()];
- int curDrumInstrument = editor->curDrumInstrument();
+ int curDrumPitch = ctrlcanvas->getCurDrumPitch();
bool isDrum = track->type() == MusECore::Track::DRUM;
+ bool isNewDrum = track->type() == MusECore::Track::NEW_DRUM;
MusECore::MidiInstrument* instr = port->instrument();
MusECore::MidiControllerList* mcl = instr->controller();
@@ -739,12 +775,20 @@ void CtrlPanel::ctrlPopup()
MusECore::MidiController* c = port->midiController(cl->num());
// dont show drum specific controller if not a drum track
if ((c->num() & 0xff) == 0xff) {
- if (!isDrum)
- continue;
- // only show controller for curDrumInstrument:
- if ((cl->num() & 0xff) != MusEGlobal::drumMap[curDrumInstrument].anote) {
- continue;
- }
+ if (isDrum)
+ {
+ // only show controller for curDrumPitch:
+ if ((curDrumPitch == -1) || ((cl->num() & 0xff) != MusEGlobal::drumMap[curDrumPitch].anote))
+ continue;
+ }
+ else if (isNewDrum)
+ {
+ // only show controller for curDrumPitch: FINDMICH does this work?
+ if ((curDrumPitch == -1) || ((cl->num() & 0xff) != curDrumPitch))
+ continue;
+ }
+ else
+ continue;
}
isList i = sList.begin();
for (; i != sList.end(); ++i) {
@@ -854,10 +898,12 @@ void CtrlPanel::ctrlPopup()
int num = ci->second->num();
if((num & 0xff) == 0xff)
{
- // dont show drum specific controller if not a drum track
- if(!isDrum)
+ if (isDrum && curDrumPitch!=-1)
+ num = (num & ~0xff) + MusEGlobal::drumMap[curDrumPitch].anote;
+ else if (isNewDrum && curDrumPitch!=-1)
+ num = (num & ~0xff) + curDrumPitch; //FINDMICH does this work?
+ else // dont show drum specific controller if not a drum track
continue;
- num = (num & ~0xff) + MusEGlobal::drumMap[curDrumInstrument].anote;
}
if(cll->find(channel, num) == cll->end())
@@ -884,8 +930,10 @@ void CtrlPanel::ctrlPopup()
{
c = ci->second;
int num = c->num();
- if (isDrum && ((num & 0xff) == 0xff))
- num = (num & ~0xff) + MusEGlobal::drumMap[curDrumInstrument].anote;
+ if (isDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1)
+ num = (num & ~0xff) + MusEGlobal::drumMap[curDrumPitch].anote;
+ else if (isNewDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1)
+ num = (num & ~0xff) + curDrumPitch; //FINDMICHJETZT does this work?
if(num != rv2)
continue;
@@ -921,8 +969,11 @@ void CtrlPanel::ctrlPopup()
if (act2) {
int rv2 = act2->data().toInt();
int num = rv2;
- if (isDrum && ((num & 0xff) == 0xff))
- num = (num & ~0xff) + MusEGlobal::drumMap[curDrumInstrument].anote;
+ if (isDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1)
+ num = (num & ~0xff) + MusEGlobal::drumMap[curDrumPitch].anote;
+ if (isNewDrum && ((num & 0xff) == 0xff) && curDrumPitch!=-1)
+ num = (num & ~0xff) + curDrumPitch; //FINDMICHJETZT does this work?
+
if(cll->find(channel, num) == cll->end())
{
MusECore::MidiCtrlValList* vl = new MusECore::MidiCtrlValList(num);
@@ -969,11 +1020,11 @@ void CtrlPanel::ctrlRightClicked(const QPoint& p, int /*id*/)
if(!editor->curCanvasPart() || !_ctrl)
return;
- int cdi = editor->curDrumInstrument();
+ int cdp = ctrlcanvas->getCurDrumPitch();
int ctlnum = _ctrl->num();
- if(_track->type() == MusECore::Track::DRUM && ((ctlnum & 0xff) == 0xff) && cdi != -1)
- //ctlnum = (ctlnum & ~0xff) | MusEGlobal::drumMap[cdi].enote;
- ctlnum = (ctlnum & ~0xff) | cdi;
+ if(_track->type() == MusECore::Track::DRUM && ((ctlnum & 0xff) == 0xff) && cdp != -1)
+ //ctlnum = (ctlnum & ~0xff) | MusEGlobal::drumMap[cdp].enote;
+ ctlnum = (ctlnum & ~0xff) | cdp;
MusECore::MidiPart* part = dynamic_cast<MusECore::MidiPart*>(editor->curCanvasPart());
MusEGlobal::song->execMidiAutomationCtlPopup(0, part, p, ctlnum);
diff --git a/muse2/muse/ctrl/ctrlpanel.h b/muse2/muse/ctrl/ctrlpanel.h
index c28708cb..ab6c1777 100644
--- a/muse2/muse/ctrl/ctrlpanel.h
+++ b/muse2/muse/ctrl/ctrlpanel.h
@@ -37,6 +37,7 @@ namespace MusEGui {
class DoubleLabel;
class Knob;
class MidiEditor;
+class CtrlCanvas;
//---------------------------------------------------------
// CtrlPanel
@@ -48,6 +49,7 @@ class CtrlPanel: public QWidget {
//QMenu* pop;
QPushButton* selCtrl;
MidiEditor* editor;
+ CtrlCanvas* ctrlcanvas;
MusECore::MidiTrack* _track;
MusECore::MidiController* _ctrl;
@@ -77,7 +79,7 @@ class CtrlPanel: public QWidget {
void ctrlPopup();
public:
- CtrlPanel(QWidget*, MidiEditor*, const char* name = 0);
+ CtrlPanel(QWidget*, MidiEditor*, CtrlCanvas*, const char* name = 0);
void setHWController(MusECore::MidiTrack* t, MusECore::MidiController* ctrl);
};