From 8cf35c5ceb10d5c54e933127fb60c5034ef8a149 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sat, 5 Oct 2019 23:04:53 +0800 Subject: Replaced the option "default output device" with a more powerful one. Old code for default output device completely removed. --- qmidiplayer-desktop/qmpdeviceprioritydialog.cpp | 98 +++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 qmidiplayer-desktop/qmpdeviceprioritydialog.cpp (limited to 'qmidiplayer-desktop/qmpdeviceprioritydialog.cpp') diff --git a/qmidiplayer-desktop/qmpdeviceprioritydialog.cpp b/qmidiplayer-desktop/qmpdeviceprioritydialog.cpp new file mode 100644 index 0000000..a319fd1 --- /dev/null +++ b/qmidiplayer-desktop/qmpdeviceprioritydialog.cpp @@ -0,0 +1,98 @@ +#include +#include +#include "qmpdeviceprioritydialog.hpp" +#include "qmpsettingswindow.hpp" +#include "../core/qmpmidiplay.hpp" +#include "ui_qmpdeviceprioritydialog.h" + +qmpDevicePriorityDialog::qmpDevicePriorityDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::qmpDevicePriorityDialog) +{ + ui->setupUi(this); + model=new QStandardItemModel(this); + ui->tvDevices->setModel(model); + ui->tvDevices->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); + ui->tvDevices->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::ResizeToContents); + ui->tvDevices->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); + model->setHorizontalHeaderLabels({"E","Device","Connected?"}); + setdevs=qmpSettingsWindow::getSettingsIntf()->value("Midi/DevicePriority",QList{"Internal FluidSynth"}).toList(); +} + +qmpDevicePriorityDialog::~qmpDevicePriorityDialog() +{ + delete ui; +} + +void qmpDevicePriorityDialog::setupRegisteredDevices() +{ + std::set sset,sconn; + auto conndevs=CMidiPlayer::getInstance()->getMidiOutDevices(); + for(auto dev:conndevs) + sconn.insert(dev); + for(auto dev:setdevs) + { + QStandardItem *e=new QStandardItem; + e->setCheckable(true); + e->setEditable(false); + e->setCheckState(Qt::CheckState::Checked); + QStandardItem *a=new QStandardItem; + a->setEnabled(false); + a->setText(sconn.find(dev.toString().toStdString())!=sconn.end()?"Connected":"Disconnected"); + a->setEditable(false); + QStandardItem *devn=new QStandardItem(dev.toString()); + devn->setEditable(false); + model->appendRow({e,devn,a}); + sset.insert(dev.toString().toStdString()); + } + for(auto dev:conndevs) + { + if(sset.find(dev)!=sset.end())continue; + QStandardItem *e=new QStandardItem; + e->setCheckable(true); + e->setEditable(false); + e->setCheckState(Qt::CheckState::Unchecked); + QStandardItem *a=new QStandardItem; + a->setEnabled(false); + a->setText("Connected"); + a->setEditable(false); + QStandardItem *devn=new QStandardItem(QString::fromStdString(dev)); + devn->setEditable(false); + model->appendRow({e,devn,a}); + } +} + +void qmpDevicePriorityDialog::on_pbUp_clicked() +{ + const QModelIndex &idx=ui->tvDevices->selectionModel()->currentIndex(); + if(idx.isValid()&&idx.row()>0) + { + int row=idx.row(); + auto r=model->takeRow(row); + model->insertRow(row-1,r); + ui->tvDevices->clearSelection(); + ui->tvDevices->selectionModel()->setCurrentIndex(model->index(row-1,idx.column()),QItemSelectionModel::Rows|QItemSelectionModel::Select); + } +} + +void qmpDevicePriorityDialog::on_pbDown_clicked() +{ + const QModelIndex &idx=ui->tvDevices->selectionModel()->currentIndex(); + if(idx.isValid()&&idx.row()rowCount()-1) + { + int row=idx.row(); + auto r=model->takeRow(row); + model->insertRow(row+1,r); + ui->tvDevices->clearSelection(); + ui->tvDevices->selectionModel()->setCurrentIndex(model->index(row+1,idx.column()),QItemSelectionModel::Rows|QItemSelectionModel::Select); + } +} + +void qmpDevicePriorityDialog::on_buttonBox_accepted() +{ + QList setdevs; + for(int i=0;irowCount();++i) + if(model->item(i,0)->checkState()==Qt::CheckState::Checked) + setdevs.push_back(model->item(i,1)->text()); + qmpSettingsWindow::getSettingsIntf()->setValue("Midi/DevicePriority",setdevs); +} -- cgit v1.2.3