|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include "MainWindow.h"
- #include <vector>
- #include <QTimer>
-
- #include <QString>
- #include <string>
- #include <QDebug>
-
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- {
- tabWidget = new QTabWidget(this);
-
- pianoKeyBoard = new PianoKeyBoard(-350, 175, 700, 500, this);
- circleOfFifths = new CircleOfFifths(-250, 0, 500, 500, this);
- scene_Demo = new QGraphicsScene(-250,0,500,500, this);
-
- gV_Keyboard = new QGraphicsView(pianoKeyBoard, tabWidget);
- gV_CircleOfFifths = new QGraphicsView(circleOfFifths, tabWidget);
- gV_Demo = new QGraphicsView(scene_Demo, tabWidget);
- midiLog = new QPlainTextEdit();
-
-
- tabWidget->addTab(gV_Keyboard, "Keyboard");
- tabWidget->addTab(gV_CircleOfFifths, "Circle of Fifths");
- tabWidget->addTab(gV_Demo, "Lightshow Demonstration");
- tabWidget->addTab(midiLog, "Midi Messages Log");
-
- setCentralWidget(tabWidget);
- midiPiano = new MidiListener;
-
- midiPiano->moveToThread(&midiThread);
-
- connect(this, &MainWindow::stopMidi, midiPiano, &MidiListener::stop);
- // Wenn THIS das signal "startMidiListener" abgibt, wird Slot midiPiano->start ausgeführt
- connect(this, &MainWindow::startMidiListener, midiPiano, &MidiListener::start);
- connect(this, &MainWindow::nextMidiMessage, midiPiano, &MidiListener::listen);
- // Wenn midiPiano das signal "newMidiMessage" abgibt, wird this.handlemidimessage ausgeführt
- connect(midiPiano, &MidiListener::newMidiMessage, this, &MainWindow::handleMidiMessage);
- midiThread.start();
- emit startMidiListener();
-
- }
-
- void MainWindow::lightShowDemonstration(int b1, int b2, int b3)
- {
- if(b1==0x90)
- {
- if(b2>108 || b2<21) return; //no valid piano-key
- scene_Demo->setBackgroundBrush(colorScale.getToneByKeyboardPosition(b2)->getColor());
- }
- else if(b1==0x80)
- {
- if(b2>108 || b2<21) return; //no valid piano key
- if(scene_Demo->backgroundBrush().color() == colorScale.getToneByKeyboardPosition(b2)->getColor()) //only reset color if current color still is same tone
- scene_Demo->setBackgroundBrush(Qt::white);
- }
-
- }
-
- void MainWindow::handleMidiMessage(int b1, int b2, int b3){
- if(b1 != 0)
- {
- midiLog->appendPlainText(QString::asprintf("Byte 1: %x, Byte 2: %x, Byte 3: %x", b1, b2, b3));
- lightShowDemonstration(b1, b2, b3);
- }
- midiThread.msleep(10);
- emit nextMidiMessage();
- }
-
- MainWindow::~MainWindow()
- {
- emit stopMidi();
- midiThread.quit();
- midiThread.wait();
- }
-
|