-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmainwindow.cpp
86 lines (76 loc) · 2.37 KB
/
mainwindow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "mainwindow.h"
#include <QApplication>
using Synthesia::MidiCommDescription;
using Synthesia::MidiCommDescriptionList;
using Synthesia::MidiEvent;
void MainWindow::tempMidi()
{
emit midiInputReady();
}
void MainWindow::midiInputUpdate()
{
if (!midiIn)
return;
while (midiIn->KeepReading()) {
MidiEvent ev = midiIn->Read();
if (ev.Type() == Synthesia::MidiEventType_NoteOn)
scoreArea->showNote(Note(MidiNote(ev.NoteNumber())));
}
}
void
MainWindow::midiMenuTriggered(QAction *action)
{
std::wstring name = action->text().toStdWString();
MidiCommDescriptionList midis = MidiCommIn::GetDeviceList();
MidiCommDescriptionList::const_iterator it = midis.begin();
for (; it != midis.end(); ++it) {
if (it->name == name) {
if (midiIn) {
delete midiIn;
midiIn = NULL;
}
midiIn = new MidiCommIn(it->id);
Synthesia::MidiCommCallback<MainWindow> *cb =
new Synthesia::MidiCommCallback<MainWindow> (this, &MainWindow::tempMidi);
midiIn->SetReadyCallback(cb);
}
}
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
connect(this, SIGNAL(midiInputReady()),
this, SLOT(midiInputUpdate()));
midiIn = NULL;
MidiCommDescriptionList midis = MidiCommIn::GetDeviceList();
QMenu *midimenu = menuBar()->addMenu("Midi In");
connect(midimenu, SIGNAL(triggered(QAction*)),
this, SLOT(midiMenuTriggered(QAction*)));
MidiCommDescriptionList::const_iterator it = midis.begin();
if (it != midis.end()) {
QAction *first = NULL;
QActionGroup *radio = new QActionGroup(this);
radio->setExclusive(true);
for (; it != midis.end(); ++it) {
QAction *act = midimenu->addAction(QString::fromStdWString(it->name));
radio->addAction(act);
act->setCheckable(true);
if (first == NULL)
first = act;
}
first->trigger();
} else {
midimenu->addAction("None Found")->setDisabled(true);
}
scoreArea = new ScoreArea;
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(scoreArea);
QWidget *dummy = new QWidget;
dummy->setLayout(layout);
setCentralWidget(dummy);
}
MainWindow::~MainWindow()
{
if (midiIn)
delete midiIn;
}