summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit/piano.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/midiedit/piano.cpp')
-rw-r--r--muse2/muse/midiedit/piano.cpp265
1 files changed, 202 insertions, 63 deletions
diff --git a/muse2/muse/midiedit/piano.cpp b/muse2/muse/midiedit/piano.cpp
index 1000ffe9..afbf8328 100644
--- a/muse2/muse/midiedit/piano.cpp
+++ b/muse2/muse/midiedit/piano.cpp
@@ -26,7 +26,11 @@
#include <stdio.h>
#include "piano.h"
+#include "globals.h"
+#include "song.h"
+namespace MusEGui {
+
static const char *oct_xpm[] = {
// w h colors
"40 91 2 1",
@@ -120,134 +124,125 @@ static const char *oct_xpm[] = {
".........................#...#.........#",
".........................#.............#",
".........................#.............#",
- ".........................#...#.........#", // 10
+ ".........................#...#.........#", // 9
"..........................###..........#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC1[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###.....#....#",
".........................#...#...##....#",
".........................#........#....#",
".........................#........#....#",
- ".........................#...#....#....#", // 10
+ ".........................#...#....#....#", // 9
"..........................###....###...#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC2[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###....##....#",
".........................#...#..#..#...#",
".........................#........#....#",
".........................#.......#.....#",
- ".........................#...#..#......#", // 10
+ ".........................#...#..#......#", // 9
"..........................###...####...#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC3[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###....##....#",
".........................#...#..#..#...#",
".........................#........#....#",
".........................#.........#...#",
- ".........................#...#..#..#...#", // 10
+ ".........................#...#..#..#...#", // 9
"..........................###....##....#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC4[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###...#..#...#",
".........................#...#..#..#...#",
".........................#......####...#",
".........................#.........#...#",
- ".........................#...#.....#...#", // 10
+ ".........................#...#.....#...#", // 9
"..........................###......#...#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC5[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###...####...#",
".........................#...#..#......#",
".........................#......###....#",
".........................#.........#...#",
- ".........................#...#.....#...#", // 10
+ ".........................#...#.....#...#", // 9
"..........................###...###....#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC6[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###....###...#",
".........................#...#..#......#",
".........................#......###....#",
".........................#......#..#...#",
- ".........................#...#..#..#...#", // 10
+ ".........................#...#..#..#...#", // 9
"..........................###...###....#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC7[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###...####...#",
".........................#...#.....#...#",
".........................#........#....#",
".........................#.......#.....#",
- ".........................#...#..#......#", // 10
+ ".........................#...#..#......#", // 9
"..........................###...#......#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpmC8[] = {
- "40 10 2 1",
- ". c #c0c0c0",
+ "40 9 2 1",
+ ". c none",
"# c #000000",
".......................................#",
"..........................###....##....#",
- ".........................#...#..#..#....#",
+ ".........................#...#..#..#...#",
".........................#.......##....#",
".........................#......#..#...#",
- ".........................#...#..#..#...#", // 10
+ ".........................#...#..#..#...#", // 9
"..........................###....##....#",
".......................................#",
".......................................#",
- ".......................................#",
};
static const char *mk1_xpm[] = {
@@ -266,7 +261,7 @@ static const char *mk1_xpm[] = {
"#######################................#",
"########################...............#",
"########################...............#",
- "####################################### ",
+ "########################################",
};
static const char *mk2_xpm[] = {
@@ -285,7 +280,7 @@ static const char *mk2_xpm[] = {
"#######################................#",
"########################...............#",
"########################...............#", // 7
- "####################################### ",
+ "########################################",
};
static const char *mk3_xpm[] = {
@@ -325,6 +320,83 @@ static const char *mk4_xpm[] = {
"........................................",
"........................................",
};
+
+static const char *mk5_xpm[] = {
+ "40 13 2 1",
+ ". c #ffff00",
+ "# c none",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ "#######################................#",
+ "########################...............#",
+ "########################...............#",
+ "########################################",
+ };
+
+static const char *mk6_xpm[] = {
+ "40 13 2 1",
+ ". c #ffff00",
+ "# c none",
+ "########################...............#",
+ "########################...............#",
+ "#######################................#", //------------------------
+ ".......................................#",
+ ".......................................#",
+ ".......................................#", // 6
+ ".......................................#",
+ ".......................................#",
+ ".......................................#", //--------------------------
+ "#######################................#",
+ "########################...............#",
+ "########################...............#", // 7
+ "########################################",
+ };
+
+static const char *mk7_xpm[] = {
+ "40 13 2 1",
+ ". c #ffff00",
+ "# c none",
+ "########################...............#",
+ "########################...............#",
+ "#######################................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ ".......................................#",
+ "########################################",
+ };
+
+static const char *mk8_xpm[] = {
+ "40 13 2 1",
+ "# c #ffff00",
+ ". c none",
+ "........................................",
+ "........................................",
+ "........................................",
+ "#######################.................",
+ "########################................",
+ "########################................",
+ "########################................",
+ "########################................",
+ "########################................",
+ "#######################.................",
+ "........................................",
+ "........................................",
+ "........................................",
+ };
+
/*
0 1 2 3 4 5 6 7 8 9 10
c-2 c-1 C0 C1 C2 C3 C4 C5 C6 C7 C8 - G8
@@ -367,10 +439,11 @@ static const char *mk4_xpm[] = {
//---------------------------------------------------------
Piano::Piano(QWidget* parent, int ymag)
- : MusEGui::View(parent, 1, ymag)
+ : View(parent, 1, ymag)
{
setMouseTracking(true);
curPitch = -1;
+ _curSelectedPitch = 60; // Start with 'C3"
octave = new QPixmap(oct_xpm);
c_keys[0] = new QPixmap(mk1_xpmC8);
c_keys[1] = new QPixmap(mk1_xpmC7);
@@ -385,6 +458,12 @@ Piano::Piano(QWidget* parent, int ymag)
mk2 = new QPixmap(mk2_xpm);
mk3 = new QPixmap(mk3_xpm);
mk4 = new QPixmap(mk4_xpm);
+
+ mk5 = new QPixmap(mk5_xpm);
+ mk6 = new QPixmap(mk6_xpm);
+ mk7 = new QPixmap(mk7_xpm);
+ mk8 = new QPixmap(mk8_xpm);
+
keyDown = -1;
button = Qt::NoButton;
}
@@ -398,39 +477,67 @@ void Piano::draw(QPainter& p, const QRect& r)
QPoint offset(0, KH*2);
p.drawTiledPixmap(r, *octave, r.topLeft()+offset);
+ if (_curSelectedPitch != -1 && _curSelectedPitch != curPitch)
+ {
+ int y = pitch2y(_curSelectedPitch);
+ QPixmap* pm;
+ switch(_curSelectedPitch % 12) {
+ case 0:
+ case 5:
+ pm = mk7;
+ break;
+ case 2:
+ case 7:
+ case 9:
+ pm = mk6;
+ break;
+ case 4:
+ case 11:
+ pm = mk5;
+ break;
+ default:
+ pm = mk8;
+ break;
+ }
+ p.drawPixmap(0, y, *pm);
+ }
+
+ if (curPitch != -1)
+ {
+ int y = pitch2y(curPitch);
+ QPixmap* pm;
+ switch(curPitch % 12) {
+ case 0:
+ case 5:
+ pm = mk3;
+ break;
+ case 2:
+ case 7:
+ case 9:
+ pm = mk2;
+ break;
+ case 4:
+ case 11:
+ pm = mk1;
+ break;
+ default:
+ pm = mk4;
+ break;
+ }
+ p.drawPixmap(0, y, *pm);
+ }
+
// draw C notes
for (int drawKey = 0; drawKey < 8;drawKey++) {
int octaveSize=91;
- int drawY = octaveSize * drawKey + 81 - KH*2;
+ int drawY = octaveSize * drawKey + 82 - KH*2;
if (drawY > r.y() && drawY < r.y() + r.height()) {
p.drawPixmap(0,drawY,*c_keys[drawKey]);
}
}
-
- if (curPitch == -1)
- return;
- int y = pitch2y(curPitch);
- QPixmap* pm;
- switch(curPitch % 12) {
- case 0:
- case 5:
- pm = mk3;
- break;
- case 2:
- case 7:
- case 9:
- pm = mk2;
- break;
- case 4:
- case 11:
- pm = mk1;
- break;
- default:
- pm = mk4;
- break;
- }
- p.drawPixmap(0, y, *pm);
+
+
}
//---------------------------------------------------------
@@ -547,6 +654,13 @@ void Piano::viewMousePressEvent(QMouseEvent* event)
int velocity = event->x()*127/40;
emit keyPressed(keyDown, velocity>127 ? 127 : velocity, shift); //emit keyPressed(keyDown, shift);
}
+
+ if (keyDown != -1 && keyDown != _curSelectedPitch) {
+ _curSelectedPitch = keyDown;
+ emit curSelectedPitchChanged(_curSelectedPitch);
+ redraw();
+ MusEGlobal::song->update(SC_DRUMMAP);
+ }
}
//---------------------------------------------------------
@@ -563,3 +677,28 @@ void Piano::viewMouseReleaseEvent(QMouseEvent* event)
}
}
+//---------------------------------------------------------
+// setCurSelectedPitch
+//---------------------------------------------------------
+
+void Piano::setCurSelectedPitch(int pitch)
+ {
+ if (pitch < 0 || pitch >= 128)
+ return;
+ if (pitch != _curSelectedPitch) {
+ _curSelectedPitch = pitch;
+ emit curSelectedPitchChanged(_curSelectedPitch);
+ redraw();
+ }
+ }
+
+//---------------------------------------------------------
+// wheelEvent
+//---------------------------------------------------------
+
+void Piano::wheelEvent(QWheelEvent* ev)
+ {
+ emit redirectWheelEvent(ev);
+ }
+
+} // namespace MusEGui