dde-dock/plugins/sound/sounddeviceswidget.h
tsic404 119d72b0ea fix: adjust sound plugin
remove old v20 code, adjust sound devices widget style
run dbus call in another thread to prevent main thread get into wait.
make deviceList item undrageble, and sound setting clickable.

log:
2023-05-06 14:11:50 +08:00

97 lines
2.4 KiB
C++

// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef SOUNDDEVICESWIDGET_H
#define SOUNDDEVICESWIDGET_H
#include "org_deepin_dde_audio1.h"
#include "org_deepin_dde_audio1_sink.h"
#include <DStyledItemDelegate>
#include <QWidget>
#include <DGuiApplicationHelper>
namespace Dtk { namespace Widget { class DListView; } }
using namespace Dtk::Widget;
namespace Dock {
class TipsWidget;
}
class SliderContainer;
class QStandardItemModel;
class QLabel;
class VolumeModel;
class AudioSink;
class SoundDevicePort;
using DBusAudio = org::deepin::dde::Audio1;
using DBusSink = org::deepin::dde::audio1::Sink;
class SoundDevicesWidget : public QWidget
{
Q_OBJECT
public:
explicit SoundDevicesWidget(QWidget *parent = nullptr);
~SoundDevicesWidget() override;
QWidget* tipsWidget();
QPixmap pixmap() const;
QPixmap pixmap(DGuiApplicationHelper::ColorType colorType, int iconWidth, int iconHeight) const;
Q_SIGNALS:
void enableChanged(bool);
void requestHide();
void iconChanged();
protected:
bool eventFilter(QObject *watcher, QEvent *event) override;
private:
void initUi();
void initConnection();
void resizeHeight();
void resetVolumeInfo();
uint audioPortCardId(const AudioPort &audioport) const;
SoundDevicePort *findPort(const QString &portId, const uint &cardId) const;
void startAddPort(SoundDevicePort *port);
void startRemovePort(const QString &portId, const uint &cardId);
void addPort(const SoundDevicePort *port);
void removePort(const QString &portId, const uint &cardId);
void activePort(const QString &portId, const uint &cardId);
void removeDisabledDevice(QString portId, unsigned int cardId);
void deviceEnabled(bool enable);
void refreshTips(const int volume, const bool force);
private Q_SLOTS:
void onSelectIndexChanged(const QModelIndex &index);
void onDefaultSinkChanged(const QDBusObjectPath & value);
void onAudioDevicesChanged();
private:
Dock::TipsWidget *m_tipsLabel;
QLabel *m_titleLabel;
SliderContainer *m_sliderContainer;
QLabel *m_descriptionLabel;
DListView *m_deviceList;
DBusAudio *m_soundInter;
DBusSink *m_sinkInter;
QStandardItemModel *m_model;
QList<SoundDevicePort *> m_ports;
};
#endif // VOLUMEDEVICESWIDGET_H