范朋程 a6c5c09efe feat: 适配飞行模式
飞行模式开启时,应禁用蓝牙,飞行模式关闭后,取消禁用

Log:
Influence: 飞行模块开启或关闭,需要禁用或启动蓝牙模块
Task: https://pms.uniontech.com/zentao/task-view-89206.html
Change-Id: I1dbec5a1e02265d37f5d708276274c5e92811314
2021-11-26 15:18:49 +08:00

131 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd.
*
* Author: chenwei <chenwei@uniontech.com>
*
* Maintainer: chenwei <chenwei@uniontech.com>
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef BLUETOOTHAPPLET_H
#define BLUETOOTHAPPLET_H
#include <QWidget>
#include <QScrollArea>
#include <QStandardItemModel>
#include <dtkwidget_global.h>
#include <com_deepin_daemon_airplanemode.h>
class QVBoxLayout;
class QHBoxLayout;
class Device;
class Adapter;
class BluetoothAdapterItem;
class AdaptersManager;
class HorizontalSeperator;
DWIDGET_BEGIN_NAMESPACE
class DLabel;
class DSwitchButton;
class DListView;
DWIDGET_END_NAMESPACE
DWIDGET_USE_NAMESPACE
using DBusAirplaneMode = com::deepin::daemon::AirplaneMode;
class SettingLabel : public QWidget
{
Q_OBJECT
public:
explicit SettingLabel(QString text, QWidget *parent = nullptr);
void addButton(QWidget *button, int space);
DLabel *label() { return m_label; }
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *ev) override;
void paintEvent(QPaintEvent *event) override;
private:
DLabel *m_label;
QHBoxLayout *m_layout;
};
class BluetoothApplet : public QWidget
{
Q_OBJECT
public:
explicit BluetoothApplet(QWidget *parent = nullptr);
bool poweredInitState();
// 当前是否有蓝牙适配器
bool hasAadapter();
// 刷新蓝牙适配器搜索到的设备列表
void setAdapterRefresh();
// 设置当前所有蓝牙适配器的电源状态
void setAdapterPowered(bool state);
// 已连接蓝牙设备名称列表用于获取鼠标悬浮在蓝牙插件上时tips显示内容
QStringList connectedDevicesName();
inline bool airplaneModeEnable() const { return m_airplaneModeEnable;}
signals:
void noAdapter();
void justHasAdapter();
void powerChanged(bool state);
void deviceStateChanged(const Device *device);
public slots:
// 蓝牙适配器增加
void onAdapterAdded(Adapter *adapter);
// 蓝牙适配器移除
void onAdapterRemoved(Adapter *adapter);
// 设置蓝牙适配器电源是否开启
void onSetAdapterPower(Adapter *adapter, bool state);
// 更新蓝牙适配器电源状态,用于更新任务栏蓝牙插件图标的显示状态
void updateBluetoothPowerState();
void setAirplaneModeEnabled(bool enable);
private:
void initUi();
void initConnect();
// 更新蓝牙插件主界面大小
void updateSize();
void updateIconTheme();
private:
QScrollArea *m_scroarea;
QWidget *m_contentWidget;
AdaptersManager *m_adaptersManager;
SettingLabel *m_settingLabel;
QVBoxLayout *m_mainLayout;
QVBoxLayout *m_contentLayout;
HorizontalSeperator *m_seperator;
QStringList m_connectDeviceName;
QMap<QString, BluetoothAdapterItem *> m_adapterItems; // 所有蓝牙适配器
DBusAirplaneMode *m_airPlaneModeInter;
bool m_airplaneModeEnable;
};
#endif // BLUETOOTHAPPLET_H