#include "MainWindow.h" #include #include #include #include #include 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(); }