From 75ec461eeaa851cb5c53f4cfffc434e3e529ed1d Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Mon, 22 Jun 2020 21:10:04 +0200 Subject: Restructures the project source and cleans up a bit --- src/widgets/elidelabel.cpp | 59 ++++++++++++++++++++++++ src/widgets/elidelabel.hpp | 28 ++++++++++++ src/widgets/mediaplayer.cpp | 86 +++++++++++++++++++++++++++++++++++ src/widgets/mediaplayer.hpp | 42 +++++++++++++++++ src/widgets/mediaplayer.ui | 85 ++++++++++++++++++++++++++++++++++ src/widgets/searchbar.cpp | 26 +++++++++++ src/widgets/searchbar.hpp | 19 ++++++++ src/widgets/ssltrusteditor.cpp | 82 +++++++++++++++++++++++++++++++++ src/widgets/ssltrusteditor.hpp | 44 ++++++++++++++++++ src/widgets/ssltrusteditor.ui | 101 +++++++++++++++++++++++++++++++++++++++++ 10 files changed, 572 insertions(+) create mode 100644 src/widgets/elidelabel.cpp create mode 100644 src/widgets/elidelabel.hpp create mode 100644 src/widgets/mediaplayer.cpp create mode 100644 src/widgets/mediaplayer.hpp create mode 100644 src/widgets/mediaplayer.ui create mode 100644 src/widgets/searchbar.cpp create mode 100644 src/widgets/searchbar.hpp create mode 100644 src/widgets/ssltrusteditor.cpp create mode 100644 src/widgets/ssltrusteditor.hpp create mode 100644 src/widgets/ssltrusteditor.ui (limited to 'src/widgets') diff --git a/src/widgets/elidelabel.cpp b/src/widgets/elidelabel.cpp new file mode 100644 index 0000000..dc0a6b2 --- /dev/null +++ b/src/widgets/elidelabel.cpp @@ -0,0 +1,59 @@ +#include "elidelabel.hpp" + +#include + +ElideLabel::ElideLabel(QWidget* parent) + : QLabel(parent) +{ + m_elideMode = Qt::ElideNone; +} + +ElideLabel::ElideLabel(const QString &text, QWidget* parent) : QLabel(text, parent) +{ + m_elideMode = Qt::ElideNone; +} + +ElideLabel::~ElideLabel() +{ +} + +void ElideLabel::setElideMode(Qt::TextElideMode mode) +{ + m_elideMode = mode; +} + +Qt::TextElideMode ElideLabel::elideMode() const +{ + return m_elideMode; +} + +void ElideLabel::paintEvent(QPaintEvent * event) +{ + if (m_elideMode == Qt::ElideNone) + { + QLabel::paintEvent(event); + } + else + { + QFrame::paintEvent(event); + QPainter painter(this); + QRect r = contentsRect(); + painter.drawText(r, alignment(), fontMetrics().elidedText(text(), m_elideMode, r.width())); + } +} + +QSize ElideLabel::minimumSizeHint() const +{ + if (m_elideMode != Qt::ElideNone) + { + const QFontMetrics& fm = fontMetrics(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) + QSize size(fm.horizontalAdvance("..."), fm.height()); +#else + QSize size(fm.width("..."), fm.height()); +#endif + return size; + } + + return QLabel::minimumSizeHint(); +} diff --git a/src/widgets/elidelabel.hpp b/src/widgets/elidelabel.hpp new file mode 100644 index 0000000..9eae69d --- /dev/null +++ b/src/widgets/elidelabel.hpp @@ -0,0 +1,28 @@ +#ifndef ELIDELABEL_HPP +#define ELIDELABEL_HPP + +#include + +class ElideLabel : public QLabel +{ + Q_OBJECT + Q_PROPERTY(Qt::TextElideMode elideMode READ elideMode WRITE setElideMode) + +public: + ElideLabel(QWidget* parent = 0); + ElideLabel(const QString &text, QWidget* parent = 0); + ~ElideLabel(); + + void setElideMode(Qt::TextElideMode mode); + Qt::TextElideMode elideMode() const; + + QSize minimumSizeHint() const; + +protected: + virtual void paintEvent(QPaintEvent * event); + +private: + Qt::TextElideMode m_elideMode; +}; + +#endif // ELIDELABEL_HPP diff --git a/src/widgets/mediaplayer.cpp b/src/widgets/mediaplayer.cpp new file mode 100644 index 0000000..e510d21 --- /dev/null +++ b/src/widgets/mediaplayer.cpp @@ -0,0 +1,86 @@ +#include "mediaplayer.hpp" +#include "ui_mediaplayer.h" + +#include +#include +#include +#include + +MediaPlayer::MediaPlayer(QWidget *parent) : + QWidget(parent), + ui(new Ui::MediaPlayer), + media_stream(), + player() +{ + ui->setupUi(this); + + this->player.setVideoOutput(this->ui->video_out); + + connect(&this->player, &QMediaPlayer::durationChanged, this->ui->media_progress, &QSlider::setMaximum); + connect(&this->player, &QMediaPlayer::positionChanged, this->ui->media_progress, &QSlider::setValue); + + connect(&this->player, &QMediaPlayer::audioAvailableChanged, this->ui->mute_button, &QToolButton::setEnabled); + // connect(&this->player, &QMediaPlayer::videoAvailableChanged, this->ui->video_out, &QVideoWidget::setVisible); + + connect(&this->player, &QMediaPlayer::stateChanged, this, &MediaPlayer::on_media_playbackChanged); + connect(&this->player, &QMediaPlayer::mediaStatusChanged, [](QMediaPlayer::MediaStatus status) { + qDebug() << "media status changed" << status; + }); + + connect(&this->player, &QMediaPlayer::positionChanged, this, &MediaPlayer::on_media_positionChanged); + + connect(this->ui->media_progress, &QSlider::valueChanged, &this->player, &QMediaPlayer::setPosition); +} + +MediaPlayer::~MediaPlayer() +{ + delete ui; +} + +void MediaPlayer::setMedia(QByteArray const & data, QUrl const & ref_url, QString const & mime) +{ + this->player.stop(); + + this->mime = mime; + + this->media_stream.close(); + this->media_stream.setData(data); // = QBuffer { &this->backing_buffer }; + this->media_stream.open(QIODevice::ReadOnly); + + QMediaContent content { ref_url }; + + this->player.setMedia(content, &this->media_stream); +} + +void MediaPlayer::stopPlaying() +{ + this->player.stop(); +} + +void MediaPlayer::on_playpause_button_clicked() +{ + if(this->player.state() != QMediaPlayer::PlayingState) { + this->player.play(); + } else { + this->player.pause(); + } +} + +void MediaPlayer::on_mute_button_clicked(bool checked) +{ + this->player.setMuted(checked); +} + +void MediaPlayer::on_media_positionChanged(qint64 pos) +{ + auto time = QTime::fromMSecsSinceStartOfDay(pos); + + this->ui->media_position->setText(time.toString()); +} + +void MediaPlayer::on_media_playbackChanged(QMediaPlayer::State status) +{ + this->ui->playpause_button->setIcon( + (status == QMediaPlayer::PlayingState) ? QIcon::fromTheme("pause") : QIcon::fromTheme("play") + ); +} diff --git a/src/widgets/mediaplayer.hpp b/src/widgets/mediaplayer.hpp new file mode 100644 index 0000000..c39a800 --- /dev/null +++ b/src/widgets/mediaplayer.hpp @@ -0,0 +1,42 @@ +#ifndef MEDIAPLAYER_HPP +#define MEDIAPLAYER_HPP + +#include +#include +#include +#include + +namespace Ui { +class MediaPlayer; +} + +class MediaPlayer : public QWidget +{ + Q_OBJECT + +public: + explicit MediaPlayer(QWidget *parent = nullptr); + ~MediaPlayer(); + + void setMedia(QByteArray const & data, QUrl const & ref_url, QString const & mime); + + void stopPlaying(); + +private slots: + void on_playpause_button_clicked(); + + void on_mute_button_clicked(bool checked); + +private: // slots + void on_media_positionChanged(qint64 pos); + + void on_media_playbackChanged(QMediaPlayer::State); + +private: + Ui::MediaPlayer *ui; + QBuffer media_stream; + QString mime; + QMediaPlayer player; +}; + +#endif // MEDIAPLAYER_HPP diff --git a/src/widgets/mediaplayer.ui b/src/widgets/mediaplayer.ui new file mode 100644 index 0000000..39fb570 --- /dev/null +++ b/src/widgets/mediaplayer.ui @@ -0,0 +1,85 @@ + + + MediaPlayer + + + + 0 + 0 + 640 + 480 + + + + Form + + + + + + + + + + + Click to play/pause + + + ... + + + + + + + + + + Qt::Horizontal + + + + + + + 00:00:00 + + + Qt::PlainText + + + + + + + Mute/unmute audio + + + ... + + + + + + true + + + false + + + + + + + + + + QVideoWidget + QWidget +
QVideoWidget
+ 1 +
+
+ + +
diff --git a/src/widgets/searchbar.cpp b/src/widgets/searchbar.cpp new file mode 100644 index 0000000..4d8ea3a --- /dev/null +++ b/src/widgets/searchbar.cpp @@ -0,0 +1,26 @@ +#include "searchbar.hpp" + +#include + +SearchBar::SearchBar(QWidget *parent) : QLineEdit(parent) +{ + +} + +void SearchBar::keyPressEvent(QKeyEvent *event) +{ + if(event->key() == Qt::Key_Escape) { + emit this->escapePressed(); + } else { + QLineEdit::keyPressEvent(event); + } +} + +void SearchBar::keyReleaseEvent(QKeyEvent *event) +{ + if(event->key() == Qt::Key_Escape) { + // Eat the event + } else { + QLineEdit::keyReleaseEvent(event); + } +} diff --git a/src/widgets/searchbar.hpp b/src/widgets/searchbar.hpp new file mode 100644 index 0000000..e03331f --- /dev/null +++ b/src/widgets/searchbar.hpp @@ -0,0 +1,19 @@ +#ifndef SEARCHBAR_HPP +#define SEARCHBAR_HPP + +#include + +class SearchBar : public QLineEdit +{ + Q_OBJECT +public: + explicit SearchBar(QWidget *parent = nullptr); + +signals: + void escapePressed(); +public: + void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; +}; + +#endif // SEARCHBAR_HPP diff --git a/src/widgets/ssltrusteditor.cpp b/src/widgets/ssltrusteditor.cpp new file mode 100644 index 0000000..af10a72 --- /dev/null +++ b/src/widgets/ssltrusteditor.cpp @@ -0,0 +1,82 @@ +#include "ssltrusteditor.hpp" +#include "ui_ssltrusteditor.h" + +SslTrustEditor::SslTrustEditor(QWidget *parent) : + QWidget(parent), + ui(new Ui::SslTrustEditor) +{ + ui->setupUi(this); + + this->ui->trust_level->clear(); + this->ui->trust_level->addItem("Trust on first encounter", QVariant::fromValue(SslTrust::TrustOnFirstUse)); + this->ui->trust_level->addItem("Trust everything", QVariant::fromValue(SslTrust::TrustEverything)); + this->ui->trust_level->addItem("Manually verify fingerprints", QVariant::fromValue(SslTrust::TrustNoOne)); + + this->ui->trusted_hosts->setModel(&this->current_trust.trusted_hosts); + + this->ui->trusted_hosts->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + this->ui->trusted_hosts->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents); + this->ui->trusted_hosts->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents); + + connect( + this->ui->trusted_hosts->selectionModel(), + &QItemSelectionModel::currentChanged, + this, + &SslTrustEditor::on_trusted_server_selection); +} + +SslTrustEditor::~SslTrustEditor() +{ + delete ui; +} + +SslTrust SslTrustEditor::trust() const +{ + return this->current_trust; +} + +void SslTrustEditor::setTrust(const SslTrust &trust) +{ + this->current_trust = trust; + + this->ui->trust_level->setCurrentIndex( + this->ui->trust_level->findData(QVariant::fromValue(trust.trust_level)) + ); + + if(trust.enable_ca) + this->ui->trust_enable_ca->setChecked(true); + else + this->ui->trust_disable__ca->setChecked(true); + + this->ui->trusted_hosts->resizeColumnsToContents(); +} + +void SslTrustEditor::on_trust_revoke_selected_clicked() +{ + this->current_trust.trusted_hosts.remove(this->ui->trusted_hosts->currentIndex()); +} + +void SslTrustEditor::on_trust_enable_ca_clicked() +{ + this->current_trust.enable_ca = true; +} + +void SslTrustEditor::on_trust_disable__ca_clicked() +{ + this->current_trust.enable_ca = false; +} + +void SslTrustEditor::on_trust_level_currentIndexChanged(int index) +{ + this->current_trust.trust_level = SslTrust::TrustLevel(this->ui->trust_level->itemData(index).toInt()); +} + +void SslTrustEditor::on_trusted_server_selection(const QModelIndex ¤t, const QModelIndex &previous) +{ + Q_UNUSED(previous); + if(auto host = this->current_trust.trusted_hosts.get(current); host) { + this->ui->trust_revoke_selected->setEnabled(true); + } else { + this->ui->trust_revoke_selected->setEnabled(false); + } +} diff --git a/src/widgets/ssltrusteditor.hpp b/src/widgets/ssltrusteditor.hpp new file mode 100644 index 0000000..841ba64 --- /dev/null +++ b/src/widgets/ssltrusteditor.hpp @@ -0,0 +1,44 @@ +#ifndef SSLTRUSTEDITOR_HPP +#define SSLTRUSTEDITOR_HPP + +#include + +#include "ssltrust.hpp" + +namespace Ui { +class SslTrustEditor; +} + +class SslTrustEditor : public QWidget +{ + Q_OBJECT + +public: + explicit SslTrustEditor(QWidget *parent = nullptr); + ~SslTrustEditor(); + + + SslTrust trust() const; + void setTrust(SslTrust const & trust); + +private slots: + void on_trust_revoke_selected_clicked(); + + void on_trust_enable_ca_clicked(); + + void on_trust_disable__ca_clicked(); + + void on_trust_level_currentIndexChanged(int index); + +private: + + + void on_trusted_server_selection(QModelIndex const & current, QModelIndex const & previous); + +private: + Ui::SslTrustEditor *ui; + + SslTrust current_trust; +}; + +#endif // SSLTRUSTEDITOR_HPP diff --git a/src/widgets/ssltrusteditor.ui b/src/widgets/ssltrusteditor.ui new file mode 100644 index 0000000..068c065 --- /dev/null +++ b/src/widgets/ssltrusteditor.ui @@ -0,0 +1,101 @@ + + + SslTrustEditor + + + + 0 + 0 + 640 + 480 + + + + Form + + + + + + Trust Level + + + + + + + + + + Certificate Authorities + + + + + + + + + Use local certificate authorities + + + + + + + Don't use local certificate authorities + + + + + + + + + Trusted Hosts + + + + + + + + + true + + + + + + + + + false + + + Revoke trust + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + -- cgit v1.2.3