summaryrefslogtreecommitdiff
path: root/src/maindialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/maindialog.cpp')
-rw-r--r--src/maindialog.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/maindialog.cpp b/src/maindialog.cpp
new file mode 100644
index 0000000..ee6fdd7
--- /dev/null
+++ b/src/maindialog.cpp
@@ -0,0 +1,44 @@
+/* ============================================================
+ * SPDX-License-Identifier: GPL-3.0-only
+ * Copyright (C) 2023 aqua <aqua@iserlohn-fortress.net>
+ * ============================================================ */
+
+#include "maindialog.hpp"
+#include "playlist.hpp"
+#include "playlistmodel.hpp"
+#include "ui_maindialog.h"
+#include <QAudioOutput>
+#include <QFileDialog>
+#include <QMediaPlayer>
+
+MainDialog::MainDialog(QWidget *parent)
+ : QDialog(parent), ui(new Ui::MainDialog),
+ m_playlist(new Playlist(this)), m_player{new QMediaPlayer(this)}, m_audioSink{new QAudioOutput(this)}
+{
+ m_player->setAudioOutput(m_audioSink);
+ m_audioSink->setVolume(50);
+
+ ui->setupUi(this);
+ ui->playlist->setModel(m_playlist->model());
+
+ connect(ui->fsSetRoot, &QPushButton::clicked, this, [this]() {
+ const auto root = QFileDialog::getExistingDirectory(this, tr("Set Root"), QDir::homePath());
+ if (!root.isEmpty()) ui->fsView->setRootPath(root);
+ });
+
+ connect(m_player, &QMediaPlayer::durationChanged, ui->progress, &QSlider::setMaximum);
+ connect(m_player, &QMediaPlayer::positionChanged, ui->progress, &QSlider::setValue);
+
+ connect(ui->fsView, &FSView::addLocalFile, m_playlist, &Playlist::appendUrl);
+ connect(ui->open, &QPushButton::clicked, this, [this]() {
+ const auto filelist = QFileDialog::getOpenFileUrls(this, tr("Open Files"));
+ m_playlist->appendList(filelist);
+ });
+ connect(ui->playlist, &QListView::activated, this, [this](const QModelIndex &index) {
+ const auto url = m_playlist->model()->data(index, Qt::DisplayRole).toUrl();
+ m_player->setSource(url);
+ m_player->play();
+ });
+}
+
+MainDialog::~MainDialog() { delete ui; }