MCPcopy Create free account
hub / github.com/celtera/libremidi / main

Function main

examples/gui/main.cpp:32–170  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30};
31
32int main(int argc, char** argv)
33{
34#if defined(_WIN32) && __has_include(<winrt/base.h>)
35 // Necessary for using WinUWP and WinMIDI, must be done as early as possible in your main()
36 // In addition, we are using Qt in this example which requires COM to be in single-thread mode.
37 winrt::init_apartment(winrt::apartment_type::single_threaded);
38#endif
39 using namespace libremidi;
40 auto in_api = libremidi::midi1::in_default_configuration();
41 auto out_api = libremidi::midi1::out_default_configuration();
42 auto observer_api = libremidi::midi1::observer_default_configuration();
43
44 // Create the GUI
45 QApplication app{argc, argv};
46 QSplitter main;
47 QListWidget inputs, outputs, messages;
48 main.addWidget(&inputs);
49 main.addWidget(&messages);
50 main.addWidget(&outputs);
51
52 main.show();
53
54 std::map<libremidi::input_port, QListWidgetItem*, port_name_sort> input_items;
55 std::map<libremidi::output_port, QListWidgetItem*, port_name_sort> output_items;
56
57 // Define the observer callbacks which will fill the list widgets with the input & output devices
58 observer_configuration conf{.input_added = [&](const input_port& p) {
59 auto item = new QListWidgetItem{QString::fromStdString(p.display_name)};
60 item->setData(Qt::UserRole, QVariant::fromValue(p));
61 input_items[p] = item;
62
63 inputs.addItem(item);
64 }, .input_removed = [&](const input_port& p) {
65 if (auto it = input_items.find(p); it != input_items.end())
66 {
67 for(int i = 0; i < inputs.count(); i++) {
68 if(auto item = inputs.item(i); item == it->second) {
69 delete inputs.takeItem(i);
70 break;
71 }
72 }
73 input_items.erase(it);
74 }
75 }, .output_added = [&](const output_port& p) {
76 auto item = new QListWidgetItem{QString::fromStdString(p.display_name)};
77 item->setData(Qt::UserRole, QVariant::fromValue(p));
78 output_items[p] = item;
79
80 outputs.addItem(item);
81 }, .output_removed = [&](const output_port& p) {
82 if (auto it = output_items.find(p); it != output_items.end())
83 {
84 for(int i = 0; i < outputs.count(); i++) {
85 if(auto item = outputs.item(i); item == it->second) {
86 delete outputs.takeItem(i);
87 break;
88 }
89 }

Callers

nothing calls this directly

Calls 7

endMethod · 0.45
sizeMethod · 0.45
is_port_openMethod · 0.45
send_messageMethod · 0.45
close_portMethod · 0.45
open_portMethod · 0.45
execMethod · 0.45

Tested by

no test coverage detected