summaryrefslogtreecommitdiffstats
path: root/pica-client/dialogs
diff options
context:
space:
mode:
authorAnton <anton@picapica>2021-07-04 03:03:50 +0400
committerAnton <anton@picapica>2021-07-04 03:03:50 +0400
commitbac29a930f2cd5825f6edb400d87eea2171b0cc1 (patch)
treebeb810bc84f909185ac8cdc46d47c9fc127b2235 /pica-client/dialogs
parentceeb6d790fa071637a6f24ce0df6b9e220690793 (diff)
downloadpica-pica-bac29a930f2cd5825f6edb400d87eea2171b0cc1.tar.gz
pica-pica-bac29a930f2cd5825f6edb400d87eea2171b0cc1.zip
pica-client/audio: enumerate ALSA devices on Linux
Diffstat (limited to 'pica-client/dialogs')
-rw-r--r--pica-client/dialogs/settingsdialog.cpp76
-rw-r--r--pica-client/dialogs/settingsdialog.h7
2 files changed, 69 insertions, 14 deletions
diff --git a/pica-client/dialogs/settingsdialog.cpp b/pica-client/dialogs/settingsdialog.cpp
index 9342160..86faba6 100644
--- a/pica-client/dialogs/settingsdialog.cpp
+++ b/pica-client/dialogs/settingsdialog.cpp
@@ -122,12 +122,19 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
// Audio Devices
QLabel *lbAudioCaptureDev = new QLabel(tr("Microphone Device 🎙️"));
QLabel *lbAudioPlaybackDev = new QLabel(tr("Playback device 🎧"));
+ QLabel *lbAudioRingDev = new QLabel(tr("Ring device 🔔☎️"));
audioCaptureDev = new QComboBox(this);
- audioCaptureDev->addItem(QString("default"));
+ audioCaptureDev->setMinimumHeight(audioCaptureDev->height() * 2);
+ fillAudioCaptureDevices();
audioPlaybackDev = new QComboBox(this);
- audioPlaybackDev->addItem(QString("default"));
+ audioPlaybackDev->setMinimumHeight(audioPlaybackDev->height() * 2);
+ fillAudioPlaybackDevices();
+
+ audioRingDev = new QComboBox(this);
+ audioRingDev->setMinimumHeight(audioRingDev->height() * 2);
+ fillAudioRingDevices();
btAudioTest = new QPushButton(tr("Test"), this);
@@ -135,6 +142,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
audiodevlayout->addWidget(audioCaptureDev);
audiodevlayout->addWidget(lbAudioPlaybackDev);
audiodevlayout->addWidget(audioPlaybackDev);
+ audiodevlayout->addWidget(lbAudioRingDev);
+ audiodevlayout->addWidget(audioRingDev);
audiodevlayout->addWidget(btAudioTest);
audiodevlayout->addStretch(1);
@@ -142,8 +151,6 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
//Video Devices
videoDev = new QComboBox(this);
- //videoDev->setSizeAdjustPolicy(QComboBox::AdjustToContents);
- //videoDev->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
videoDev->setMinimumHeight(videoDev->height() * 2);
fillVideoDevices();
videoDevRefresh = new QPushButton(tr("Refresh 🔄"), this);
@@ -182,19 +189,43 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
setWindowTitle(tr("Pica Pica Messenger Settings"));
}
-void SettingsDialog::fillVideoDevices()
+void SettingsDialog::fillDevicesComboBox(QComboBox *cb, MediaDevice *dev, enum MediaDeviceStreamDirection dir)
{
- videoDev->clear();
- QList<MediaDeviceInfo> vd = VideoDevice().Enumerate();
- for (int i = 0; i < vd.size(); i++)
+ cb->clear();
+ QList<MediaDeviceInfo> md = dev->Enumerate(dir);
+ for (int i = 0; i < md.size(); i++)
{
QString item = QString(QLatin1String("%2\n(%1)"))
- .arg(vd.at(i).device)
- .arg(vd.at(i).humanReadable);
- videoDev->addItem(item, vd.at(i).device);
+ .arg(md.at(i).device)
+ .arg(md.at(i).humanReadable);
+ cb->addItem(item, md.at(i).device);
}
}
+void SettingsDialog::fillVideoDevices()
+{
+ VideoDevice vd;
+ fillDevicesComboBox(videoDev, &vd, CAPTURE);
+}
+
+void SettingsDialog::fillAudioCaptureDevices()
+{
+ AudioDevice acd;
+ fillDevicesComboBox(audioCaptureDev, &acd, CAPTURE);
+}
+
+void SettingsDialog::fillAudioPlaybackDevices()
+{
+ AudioDevice apd;
+ fillDevicesComboBox(audioPlaybackDev, &apd, PLAYBACK);
+}
+
+void SettingsDialog::fillAudioRingDevices()
+{
+ AudioDevice ard;
+ fillDevicesComboBox(audioRingDev, &ard, PLAYBACK);
+}
+
void SettingsDialog::toggleIncomingConnections(bool checked)
{
addr->setEnabled(checked);
@@ -305,10 +336,25 @@ void SettingsDialog::loadSettings()
break;
}
- QString videoCapDev = st.loadValue("video.capture_device", QString()).toString();
- int videoDevItem = videoDev->findData(videoCapDev);
+ QString videoCapDevVal = st.loadValue("video.capture_device", QString()).toString();
+ int videoDevItem = videoDev->findData(videoCapDevVal);
if (videoDevItem >= 0)
videoDev->setCurrentIndex(videoDevItem);
+
+ QString audioCapDevVal = st.loadValue("audio.capture_device", "default").toString();
+ int audioCapDevItem = audioCaptureDev->findData(audioCapDevVal);
+ if (audioCapDevItem >= 0)
+ audioCaptureDev->setCurrentIndex(audioCapDevItem);
+
+ QString audioPlaybackDevVal = st.loadValue("audio.playback_device", "default").toString();
+ int audioPlaybackDevItem = audioPlaybackDev->findData(audioPlaybackDevVal);
+ if (audioPlaybackDevItem >= 0)
+ audioPlaybackDev->setCurrentIndex(audioPlaybackDevItem);
+
+ QString audioRingDevVal = st.loadValue("audio.ring_device", "default").toString();
+ int audioRingDevItem = audioRingDev->findData(audioRingDevVal);
+ if (audioRingDevItem >= 0)
+ audioRingDev->setCurrentIndex(audioRingDevItem);
}
void SettingsDialog::storeSettings()
@@ -347,6 +393,8 @@ void SettingsDialog::storeSettings()
st.storeValue("multiple_logins.state", QString::number(mlpstate));
- QString videoCapDev;
st.storeValue("video.capture_device", videoDev->itemData(videoDev->currentIndex()).toString());
+ st.storeValue("audio.capture_device", audioCaptureDev->itemData(audioCaptureDev->currentIndex()).toString());
+ st.storeValue("audio.playback_device", audioPlaybackDev->itemData(audioPlaybackDev->currentIndex()).toString());
+ st.storeValue("audio.ring_device", audioRingDev->itemData(audioRingDev->currentIndex()).toString());
}
diff --git a/pica-client/dialogs/settingsdialog.h b/pica-client/dialogs/settingsdialog.h
index 98f486a..cf767b2 100644
--- a/pica-client/dialogs/settingsdialog.h
+++ b/pica-client/dialogs/settingsdialog.h
@@ -24,6 +24,7 @@
#include <QRadioButton>
#include <QComboBox>
#include <QCheckBox>
+#include "../mediadevice.h"
class SettingsDialog : public QDialog
{
@@ -54,6 +55,7 @@ private:
QComboBox *audioCaptureDev;
QComboBox *audioPlaybackDev;
+ QComboBox *audioRingDev;
QComboBox *videoDev;
QPushButton *videoDevRefresh;
@@ -65,12 +67,17 @@ private:
void loadSettings();
void storeSettings();
+ void fillDevicesComboBox(QComboBox *cb, MediaDevice *dev, enum MediaDeviceStreamDirection dir);
+
private slots:
void OK();
void Cancel();
void toggleIncomingConnections(bool checked);
void toggleMultipleLogins(bool checked);
void fillVideoDevices();
+ void fillAudioCaptureDevices();
+ void fillAudioPlaybackDevices();
+ void fillAudioRingDevices();
};