summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit/drumedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/midiedit/drumedit.cpp')
-rw-r--r--muse2/muse/midiedit/drumedit.cpp93
1 files changed, 68 insertions, 25 deletions
diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp
index fd28d8ea..7766bb08 100644
--- a/muse2/muse/midiedit/drumedit.cpp
+++ b/muse2/muse/midiedit/drumedit.cpp
@@ -44,6 +44,7 @@
#include <QRect>
#include "drumedit.h"
+#include "dcanvas.h"
#include "mtscale.h"
#include "scrollscale.h"
#include "xml.h"
@@ -79,7 +80,7 @@ bool DrumEdit::_ignore_hide_init = false;
static const int xscale = -10;
static const int yscale = 1;
-static const int drumeditTools = MusEGui::PointerTool | MusEGui::PencilTool | MusEGui::RubberTool | MusEGui::CursorTool | MusEGui::DrawTool;
+static const int drumeditTools = MusEGui::PointerTool | MusEGui::PencilTool | MusEGui::RubberTool | MusEGui::CursorTool | MusEGui::DrawTool | PanTool | ZoomTool;
//---------------------------------------------------------
@@ -98,10 +99,10 @@ void DrumEdit::setHeaderWhatsThis()
header->setWhatsThis(COL_NOTE, tr("this is the note which is played"));
header->setWhatsThis(COL_OUTCHANNEL, tr("override track output channel (hold ctl to affect all rows)"));
header->setWhatsThis(COL_OUTPORT, tr("override track output port (hold ctl to affect all rows)"));
- header->setWhatsThis(COL_LEVEL1, tr("shift + control key: draw velocity level 1"));
- header->setWhatsThis(COL_LEVEL2, tr("control key: draw velocity level 2"));
- header->setWhatsThis(COL_LEVEL3, tr("shift key: draw velocity level 3"));
- header->setWhatsThis(COL_LEVEL4, tr("draw velocity level 4"));
+ header->setWhatsThis(COL_LEVEL1, tr("control + meta keys: draw velocity level 1"));
+ header->setWhatsThis(COL_LEVEL2, tr("meta key: draw velocity level 2"));
+ header->setWhatsThis(COL_LEVEL3, tr("draw default velocity level 3"));
+ header->setWhatsThis(COL_LEVEL4, tr("meta + alt keys: draw velocity level 4"));
}
//---------------------------------------------------------
@@ -120,10 +121,10 @@ void DrumEdit::setHeaderToolTips()
header->setToolTip(COL_NOTE, tr("this is the note which is played"));
header->setToolTip(COL_OUTCHANNEL, tr("override track output channel (ctl: affect all rows)"));
header->setToolTip(COL_OUTPORT, tr("override track output port (ctl: affect all rows)"));
- header->setToolTip(COL_LEVEL1, tr("shift + control key: draw velocity level 1"));
- header->setToolTip(COL_LEVEL2, tr("control key: draw velocity level 2"));
- header->setToolTip(COL_LEVEL3, tr("shift key: draw velocity level 3"));
- header->setToolTip(COL_LEVEL4, tr("draw velocity level 4"));
+ header->setToolTip(COL_LEVEL1, tr("control + meta keys: draw velocity level 1"));
+ header->setToolTip(COL_LEVEL2, tr("meta key: draw velocity level 2"));
+ header->setToolTip(COL_LEVEL3, tr("draw default velocity level 3"));
+ header->setToolTip(COL_LEVEL4, tr("meta + alt keys: draw velocity level 4"));
}
//---------------------------------------------------------
@@ -433,6 +434,8 @@ DrumEdit::DrumEdit(MusECore::PartList* pl, QWidget* parent, const char* name, un
speaker->setFocusPolicy(Qt::NoFocus);
tools->addWidget(speaker);
+ tools->addAction(QWhatsThis::createAction(this));
+
tools2 = new MusEGui::EditToolBar(this, drumeditTools);
addToolBar(tools2);
@@ -507,7 +510,8 @@ DrumEdit::DrumEdit(MusECore::PartList* pl, QWidget* parent, const char* name, un
canvas->setCanvasTools(drumeditTools);
canvas->setFocus();
connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int)));
- connect(canvas, SIGNAL(horizontalZoom(bool,int)), SLOT(horizontalZoom(bool,int)));
+ connect(canvas, SIGNAL(horizontalZoom(bool,const QPoint&)), SLOT(horizontalZoom(bool, const QPoint&)));
+ connect(canvas, SIGNAL(horizontalZoom(int, const QPoint&)), SLOT(horizontalZoom(int, const QPoint&)));
connect(canvas, SIGNAL(ourDrumMapChanged(bool)), SLOT(ourDrumMapChanged(bool)));
time->setOrigin(offset, 0);
@@ -567,6 +571,8 @@ DrumEdit::DrumEdit(MusECore::PartList* pl, QWidget* parent, const char* name, un
connect(dlist, SIGNAL(keyReleased(int, bool)), canvas, SLOT(keyReleased(int, bool)));
connect(dlist, SIGNAL(mapChanged(int, int)), canvas, SLOT(mapChanged(int, int)));
connect(dlist, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*)));
+ connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumInstrument(int)));
+ connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), canvas, SLOT(setCurDrumInstrument(int)));
gridS1->setRowStretch(1, 100);
gridS1->setColumnStretch(0, 100);
@@ -667,6 +673,40 @@ void DrumEdit::songChanged1(MusECore::SongChangedFlags_t bits)
}
//---------------------------------------------------------
+// horizontalZoom
+//---------------------------------------------------------
+
+void DrumEdit::horizontalZoom(bool zoom_in, const QPoint& glob_pos)
+{
+ int mag = hscroll->mag();
+ int zoomlvl = MusEGui::ScrollScale::getQuickZoomLevel(mag);
+ if(zoom_in)
+ {
+ if (zoomlvl < MusEGui::ScrollScale::zoomLevels-1)
+ zoomlvl++;
+ }
+ else
+ {
+ if (zoomlvl > 1)
+ zoomlvl--;
+ }
+ int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ QPoint cp = canvas->mapFromGlobal(glob_pos);
+ QPoint sp = split1->mapFromGlobal(glob_pos);
+ if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < split1->height())
+ hscroll->setMag(newmag, cp.x());
+}
+
+void DrumEdit::horizontalZoom(int mag, const QPoint& glob_pos)
+{
+ QPoint cp = canvas->mapFromGlobal(glob_pos);
+ QPoint sp = split1->mapFromGlobal(glob_pos);
+ if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < split1->height())
+ hscroll->setMag(hscroll->mag() + mag, cp.x());
+}
+
+//---------------------------------------------------------
// updateHScrollRange
//---------------------------------------------------------
@@ -944,6 +984,7 @@ void DrumEdit::writeStatus(int level, MusECore::Xml& xml) const
header->writeStatus(level, xml);
xml.intTag(level, "steprec", canvas->steprec());
xml.intTag(level, "midiin", canvas->midiin());
+ xml.intTag(level, "tool", int(canvas->tool()));
xml.intTag(level, "playEvents", _playEvents);
xml.intTag(level, "xpos", hscroll->pos());
xml.intTag(level, "xmag", hscroll->mag());
@@ -977,6 +1018,11 @@ void DrumEdit::readStatus(MusECore::Xml& xml)
canvas->setMidiin(val);
midiin->setChecked(val);
}
+ else if (tag == "tool") {
+ int tool = xml.parseInt();
+ canvas->setTool(tool);
+ tools2->set(tool);
+ }
else if (tag == "ctrledit") {
CtrlEdit* ctrl = addCtrl();
ctrl->readStatus(xml);
@@ -1340,10 +1386,9 @@ void DrumEdit::setupNewCtrl(CtrlEdit* ctrlEdit)
connect(ctrlEdit, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
connect(ctrlEdit, SIGNAL(destroyedCtrl(CtrlEdit*)), SLOT(removeCtrl(CtrlEdit*)));
connect(ctrlEdit, SIGNAL(yposChanged(int)), toolbar, SLOT(setInt(int)));
+ connect(ctrlEdit, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*)));
connect(tools2, SIGNAL(toolChanged(int)), ctrlEdit, SLOT(setTool(int)));
- connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumInstrument(int)));
- connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), canvas, SLOT(setCurDrumInstrument(int)));
- connect(canvas, SIGNAL(curPartHasChanged(MusECore::Part*)), ctrlEdit, SLOT(curPartHasChanged(MusECore::Part*)));
+ connect(canvas, SIGNAL(curPartHasChanged(MusECore::Part*)), ctrlEdit, SLOT(curPartHasChanged(MusECore::Part*)));
setCurDrumInstrument(dlist->getSelectedInstrument());
@@ -1519,22 +1564,20 @@ void DrumEdit::keyPressEvent(QKeyEvent* event)
tools2->set(MusEGui::CursorTool);
return;
}
+ else if (key == shortcuts[SHRT_TOOL_PAN].key) {
+ tools2->set(MusEGui::PanTool);
+ return;
+ }
+ else if (key == shortcuts[SHRT_TOOL_ZOOM].key) {
+ tools2->set(MusEGui::ZoomTool);
+ return;
+ }
else if (key == shortcuts[SHRT_ZOOM_IN].key) {
- int offset = 0;
- QPoint cp = canvas->mapFromGlobal(QCursor::pos());
- QPoint sp = split1->mapFromGlobal(QCursor::pos());
- if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < split1->height())
- offset = cp.x();
- horizontalZoom(true, offset);
+ horizontalZoom(true, QCursor::pos());
return;
}
else if (key == shortcuts[SHRT_ZOOM_OUT].key) {
- int offset = 0;
- QPoint cp = canvas->mapFromGlobal(QCursor::pos());
- QPoint sp = split1->mapFromGlobal(QCursor::pos());
- if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < split1->height())
- offset = cp.x();
- horizontalZoom(false, offset);
+ horizontalZoom(false, QCursor::pos());
return;
}
else if (key == shortcuts[SHRT_SCROLL_LEFT].key) {