refactor: handle click event of system trays

Change-Id: I31b9ecf03e4b9937fa19a3209f5e64e6219b2327
This commit is contained in:
listenerri 2018-10-24 18:09:44 +08:00
parent 11d97f206e
commit 67635df6fd
Notes: gerrit 2018-10-25 16:55:58 +08:00
Verified+1: <jenkins@deepin.com>
Code-Review+2: listenerri <listenerri@gmail.com>
Submitted-by: listenerri <listenerri@gmail.com>
Submitted-at: Thu, 25 Oct 2018 16:55:58 +0800
Reviewed-on: https://cr.deepin.io/39196
Project: dde/dde-dock
Branch: refs/heads/master
31 changed files with 597 additions and 96 deletions

View File

@ -28,6 +28,7 @@
#include <QPluginLoader>
#include <QList>
#include <QMap>
#include <QDBusConnectionInterface>
class DockItemController;
class PluginsItemInterface;

View File

@ -23,7 +23,7 @@
typedef QMap<QString, double> BrightnessMap;
Q_DECLARE_METATYPE(BrightnessMap)
//Q_DECLARE_METATYPE(BrightnessMap)
struct DisplayRect{
qint16 x;

View File

@ -27,6 +27,7 @@
#include <QProcess>
#include <QMouseEvent>
#include <DDBusSender>
#include <QApplication>
DCORE_USE_NAMESPACE

View File

@ -33,8 +33,7 @@ DockPopupWindow::DockPopupWindow(QWidget *parent)
m_acceptDelayTimer(new QTimer(this)),
m_regionInter(new DRegionMonitor(this)),
m_displayInter(new DBusDisplay(this))
m_regionInter(new DRegionMonitor(this))
{
m_acceptDelayTimer->setSingleShot(true);
m_acceptDelayTimer->setInterval(100);

View File

@ -22,8 +22,6 @@
#ifndef DOCKPOPUPWINDOW_H
#define DOCKPOPUPWINDOW_H
#include "dbus/dbusdisplay.h"
#include <darrowrectangle.h>
#include <dregionmonitor.h>
#include <DWindowManagerHelper>
@ -67,7 +65,6 @@ private:
QTimer *m_acceptDelayTimer;
DRegionMonitor *m_regionInter;
DBusDisplay *m_displayInter;
DWindowManagerHelper *m_wmHelper;
};

View File

@ -5,7 +5,9 @@ project(${PLUGIN_NAME})
# Sources files
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp"
"../../frame/util/themeappicon.h" "../../frame/util/themeappicon.cpp")
"../../frame/util/themeappicon.h" "../../frame/util/themeappicon.cpp"
"../../frame/util/dockpopupwindow.h" "../../frame/util/dockpopupwindow.cpp"
"../../frame/dbus/dbusmenu.h" "../../frame/dbus/dbusmenu.cpp")
find_package(PkgConfig REQUIRED)
find_package(Qt5Widgets REQUIRED)
@ -26,7 +28,8 @@ target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS}
${XCB_LIBS_INCLUDE_DIRS}
${DDE-Network-Utils_INCLUDE_DIRS}
${DFrameworkDBus_INCLUDE_DIRS}
../../interfaces)
../../interfaces
../../frame)
target_link_libraries(${PLUGIN_NAME} PRIVATE
${DtkWidget_LIBRARIES}
${Qt5Widgets_LIBRARIES}

View File

@ -25,8 +25,8 @@
#include <QMouseEvent>
#include <QDebug>
AbstractTrayWidget::AbstractTrayWidget(QWidget *parent, Qt::WindowFlags f):
QWidget(parent, f)
AbstractTrayWidget::AbstractTrayWidget(QWidget *parent, Qt::WindowFlags f)
: QWidget(parent, f)
{
}

View File

@ -20,7 +20,7 @@
*/
#include "snitraywidget.h"
#include "../frame/util/themeappicon.h"
#include "util/themeappicon.h"
#include <QPainter>
#include <QApplication>
@ -100,7 +100,7 @@ void SNITrayWidget::sendClick(uint8_t mouseButton, int x, int y)
break;
default:
qDebug() << "unknown mouse button key";
break;
break;
}
}

View File

@ -6,5 +6,117 @@
<file>resources/arrow_right_dark.svg</file>
<file>resources/arrow_up_light.svg</file>
<file>system-trays/shutdown/resources/icons/normal.svg</file>
<file>system-trays/sound/resources/audio-volume-high-symbolic.svg</file>
<file>system-trays/sound/resources/audio-volume-medium-symbolic.svg</file>
<file>system-trays/sound/resources/slider_handle.svg</file>
<file>system-trays/sound/resources/audio-volume-low-symbolic.svg</file>
<file>system-trays/sound/resources/audio-volume-muted-symbolic.svg</file>
<file>system-trays/network/resources/wired/network-wired-symbolic-connecting4.svg</file>
<file>system-trays/network/resources/wired/network-wired-symbolic-connecting3.svg</file>
<file>system-trays/network/resources/wired/network-wired-symbolic-connecting2.svg</file>
<file>system-trays/network/resources/wired/network-wired-symbolic-connecting5.svg</file>
<file>system-trays/network/resources/wired/network-wired-symbolic-connecting1.svg</file>
<file>system-trays/network/resources/wireless/disconnect.svg</file>
<file>system-trays/network/resources/wireless/wireless-60-symbolic.svg</file>
<file>system-trays/network/resources/wireless/refresh_normal.svg</file>
<file>system-trays/network/resources/wireless/wireless-0-symbolic.svg</file>
<file>system-trays/network/resources/wireless/disconnect_press.svg</file>
<file>system-trays/network/resources/wireless/wireless-20-symbolic.svg</file>
<file>system-trays/network/resources/wireless/wireless-40-symbolic.svg</file>
<file>system-trays/network/resources/wireless/wireless-80-symbolic.svg</file>
<file>system-trays/network/resources/wireless/disconnect_hover.svg</file>
<file>system-trays/network/resources/wireless/refresh_hover.svg</file>
<file>system-trays/network/resources/wireless/security.svg</file>
<file>system-trays/network/resources/wireless/select.svg</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner38.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner21.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner66.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner37.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner02.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner81.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner87.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner44.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner27.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner45.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner82.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner11.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner17.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner18.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner03.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner84.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner64.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner43.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner22.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner52.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner76.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner01.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner19.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner59.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner89.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner67.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner48.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner35.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner31.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner78.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner83.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner20.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner60.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner70.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner29.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner46.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner47.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner80.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner07.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner56.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner55.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner72.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner24.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner41.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner06.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner62.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner69.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner40.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner53.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner16.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner30.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner09.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner34.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner14.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner68.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner90.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner32.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner61.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner12.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner28.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner54.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner50.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner15.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner36.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner73.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner10.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner33.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner75.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner13.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner39.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner88.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner04.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner05.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner86.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner65.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner71.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner74.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner42.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner49.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner08.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner85.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner23.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner51.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner79.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner63.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner26.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner25.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner58.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner77.png</file>
<file>system-trays/network/resources/wireless/spinner14/Spinner57.png</file>
</qresource>
</RCC>

View File

@ -0,0 +1,293 @@
#include "abstractsystemtraywidget.h"
#include "dbus/dbusmenu.h"
#include <QProcess>
#include <QDebug>
#include <xcb/xproto.h>
Dock::Position AbstractSystemTrayWidget::DockPosition = Dock::Position::Top;
QPointer<DockPopupWindow> AbstractSystemTrayWidget::PopupWindow = nullptr;
AbstractSystemTrayWidget::AbstractSystemTrayWidget(QWidget *parent)
: AbstractTrayWidget(parent),
m_popupShown(false),
m_popupTipsDelayTimer(new QTimer(this)),
m_popupAdjustDelayTimer(new QTimer(this))
{
if (PopupWindow.isNull())
{
DockPopupWindow *arrowRectangle = new DockPopupWindow(nullptr);
arrowRectangle->setShadowBlurRadius(20);
arrowRectangle->setRadius(6);
arrowRectangle->setShadowYOffset(2);
arrowRectangle->setShadowXOffset(0);
arrowRectangle->setArrowWidth(18);
arrowRectangle->setArrowHeight(10);
PopupWindow = arrowRectangle;
}
m_popupTipsDelayTimer->setInterval(500);
m_popupTipsDelayTimer->setSingleShot(true);
m_popupAdjustDelayTimer->setInterval(10);
m_popupAdjustDelayTimer->setSingleShot(true);
connect(m_popupTipsDelayTimer, &QTimer::timeout, this, &AbstractSystemTrayWidget::showHoverTips);
connect(m_popupAdjustDelayTimer, &QTimer::timeout, this, &AbstractSystemTrayWidget::updatePopupPosition, Qt::QueuedConnection);
}
AbstractSystemTrayWidget::~AbstractSystemTrayWidget()
{
if (m_popupShown)
popupWindowAccept();
}
void AbstractSystemTrayWidget::sendClick(uint8_t mouseButton, int x, int y)
{
switch (mouseButton) {
case XCB_BUTTON_INDEX_1: {
if (trayPopupApplet()) {
showPopupApplet(trayPopupApplet());
}
if (!trayClickCommand().isEmpty()) {
QProcess::startDetached(trayClickCommand());
}
break;
}
case XCB_BUTTON_INDEX_2:
break;
case XCB_BUTTON_INDEX_3:
break;
default:
qDebug() << "unknown mouse button key";
break;
}
}
bool AbstractSystemTrayWidget::event(QEvent *event)
{
if (m_popupShown)
{
switch (event->type())
{
case QEvent::Paint:
if (!m_popupAdjustDelayTimer->isActive())
m_popupAdjustDelayTimer->start();
break;
default:;
}
}
return AbstractTrayWidget::event(event);
}
void AbstractSystemTrayWidget::enterEvent(QEvent *event)
{
m_popupTipsDelayTimer->start();
update();
AbstractTrayWidget::enterEvent(event);
}
void AbstractSystemTrayWidget::leaveEvent(QEvent *event)
{
m_popupTipsDelayTimer->stop();
// auto hide if popup is not model window
if (m_popupShown && !PopupWindow->model())
hidePopup();
update();
AbstractTrayWidget::leaveEvent(event);
}
void AbstractSystemTrayWidget::mousePressEvent(QMouseEvent *event)
{
m_popupTipsDelayTimer->stop();
hideNonModel();
if (event->button() == Qt::RightButton)
return showContextMenu();
AbstractTrayWidget::mousePressEvent(event);
}
const QPoint AbstractSystemTrayWidget::popupMarkPoint() const
{
QPoint p(topleftPoint());
const QRect r = rect();
const int offset = 2;
switch (DockPosition)
{
case Dock::Position::Top: p += QPoint(r.width() / 2, r.height() + offset); break;
case Dock::Position::Bottom: p += QPoint(r.width() / 2, 0 - offset); break;
case Dock::Position::Left: p += QPoint(r.width() + offset, r.height() / 2); break;
case Dock::Position::Right: p += QPoint(0 - offset, r.height() / 2); break;
}
return p;
}
const QPoint AbstractSystemTrayWidget::topleftPoint() const
{
QPoint p;
const QWidget *w = this;
do {
p += w->pos();
w = qobject_cast<QWidget *>(w->parent());
} while (w);
return p;
}
void AbstractSystemTrayWidget::hidePopup()
{
m_popupTipsDelayTimer->stop();
m_popupAdjustDelayTimer->stop();
m_popupShown = false;
PopupWindow->hide();
emit PopupWindow->accept();
// emit requestWindowAutoHide(true);
}
void AbstractSystemTrayWidget::hideNonModel()
{
// auto hide if popup is not model window
if (m_popupShown && !PopupWindow->model())
hidePopup();
}
void AbstractSystemTrayWidget::popupWindowAccept()
{
if (!PopupWindow->isVisible())
return;
disconnect(PopupWindow.data(), &DockPopupWindow::accept, this, &AbstractSystemTrayWidget::popupWindowAccept);
hidePopup();
}
void AbstractSystemTrayWidget::showPopupApplet(QWidget * const applet)
{
// another model popup window already exists
if (PopupWindow->model())
return;
if (!applet) {
return;
}
showPopupWindow(applet, true);
}
void AbstractSystemTrayWidget::showPopupWindow(QWidget * const content, const bool model)
{
m_popupShown = true;
m_lastPopupWidget = content;
// if (model)
// emit requestWindowAutoHide(false);
DockPopupWindow *popup = PopupWindow.data();
QWidget *lastContent = popup->getContent();
if (lastContent)
lastContent->setVisible(false);
switch (DockPosition)
{
case Dock::Position::Top: popup->setArrowDirection(DockPopupWindow::ArrowTop); break;
case Dock::Position::Bottom:popup->setArrowDirection(DockPopupWindow::ArrowBottom); break;
case Dock::Position::Left: popup->setArrowDirection(DockPopupWindow::ArrowLeft); break;
case Dock::Position::Right: popup->setArrowDirection(DockPopupWindow::ArrowRight); break;
}
popup->resize(content->sizeHint());
popup->setContent(content);
const QPoint p = popupMarkPoint();
if (!popup->isVisible())
QMetaObject::invokeMethod(popup, "show", Qt::QueuedConnection, Q_ARG(QPoint, p), Q_ARG(bool, model));
else
popup->show(p, model);
connect(popup, &DockPopupWindow::accept, this, &AbstractSystemTrayWidget::popupWindowAccept, Qt::UniqueConnection);
}
void AbstractSystemTrayWidget::showHoverTips()
{
// another model popup window already exists
if (PopupWindow->model())
return;
// if not in geometry area
const QRect r(topleftPoint(), size());
if (!r.contains(QCursor::pos()))
return;
QWidget * const content = trayTipsWidget();
if (!content)
return;
showPopupWindow(content);
}
void AbstractSystemTrayWidget::showContextMenu()
{
const QString menuJson = contextMenu();
if (menuJson.isEmpty())
return;
QDBusPendingReply<QDBusObjectPath> result = m_menuManagerInter->RegisterMenu();
result.waitForFinished();
if (result.isError())
{
qWarning() << result.error();
return;
}
const QPoint p = popupMarkPoint();
QJsonObject menuObject;
menuObject.insert("x", QJsonValue(p.x()));
menuObject.insert("y", QJsonValue(p.y()));
menuObject.insert("isDockMenu", QJsonValue(true));
menuObject.insert("menuJsonContent", QJsonValue(menuJson));
switch (DockPosition)
{
case Dock::Position::Top: menuObject.insert("direction", "top"); break;
case Dock::Position::Bottom: menuObject.insert("direction", "bottom"); break;
case Dock::Position::Left: menuObject.insert("direction", "left"); break;
case Dock::Position::Right: menuObject.insert("direction", "right"); break;
}
const QDBusObjectPath path = result.argumentAt(0).value<QDBusObjectPath>();
DBusMenu *menuInter = new DBusMenu(path.path(), this);
connect(menuInter, &DBusMenu::ItemInvoked, this, &AbstractSystemTrayWidget::invokedMenuItem);
connect(menuInter, &DBusMenu::ItemInvoked, menuInter, &DBusMenu::deleteLater);
// connect(menuInter, &DBusMenu::MenuUnregistered, this, &AbstractSystemTrayWidget::onContextMenuAccepted, Qt::QueuedConnection);
menuInter->ShowMenu(QString(QJsonDocument(menuObject).toJson()));
hidePopup();
// emit requestWindowAutoHide(false);
}
void AbstractSystemTrayWidget::updatePopupPosition()
{
Q_ASSERT(sender() == m_popupAdjustDelayTimer);
if (!m_popupShown || !PopupWindow->model())
return;
if (PopupWindow->getContent() != m_lastPopupWidget.data())
return popupWindowAccept();
const QPoint p = popupMarkPoint();
PopupWindow->show(p, PopupWindow->model());
}

View File

@ -0,0 +1,61 @@
#ifndef ABSTRACTSYSTEMTRAYWIDGET_H
#define ABSTRACTSYSTEMTRAYWIDGET_H
#include "constants.h"
#include "abstracttraywidget.h"
#include "util/dockpopupwindow.h"
#include "dbus/dbusmenumanager.h"
class AbstractSystemTrayWidget : public AbstractTrayWidget
{
public:
AbstractSystemTrayWidget(QWidget *parent = nullptr);
virtual ~AbstractSystemTrayWidget();
void sendClick(uint8_t mouseButton, int x, int y) Q_DECL_OVERRIDE;
virtual inline QWidget *trayTipsWidget() { return nullptr; }
virtual inline QWidget *trayPopupApplet() { return nullptr; }
virtual inline const QString trayClickCommand() { return QString(); }
virtual inline const QString contextMenu() const {return QString(); }
virtual inline void invokedMenuItem(const QString &itemId, const bool checked) { Q_UNUSED(itemId); Q_UNUSED(checked); }
protected:
bool event(QEvent *event) Q_DECL_OVERRIDE;
void enterEvent(QEvent *event) Q_DECL_OVERRIDE;
void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
protected:
const QPoint popupMarkPoint() const;
const QPoint topleftPoint() const;
void hidePopup();
void hideNonModel();
void popupWindowAccept();
void showPopupApplet(QWidget * const applet);
virtual void showPopupWindow(QWidget * const content, const bool model = false);
virtual void showHoverTips();
protected Q_SLOTS:
void showContextMenu();
private:
void updatePopupPosition();
private:
bool m_popupShown;
QPointer<QWidget> m_lastPopupWidget;
QTimer *m_popupTipsDelayTimer;
QTimer *m_popupAdjustDelayTimer;
DBusMenuManager *m_menuManagerInter;
static Dock::Position DockPosition;
static QPointer<DockPopupWindow> PopupWindow;
};
#endif // ABSTRACTSYSTEMTRAYWIDGET_H

View File

@ -27,7 +27,7 @@
using namespace dde::network;
AbstractNetworkTrayWidget::AbstractNetworkTrayWidget(dde::network::NetworkDevice *device, QWidget *parent)
: AbstractTrayWidget(parent),
: AbstractSystemTrayWidget(parent),
m_device(device),
m_path(device->path())
{

View File

@ -22,13 +22,13 @@
#ifndef ABSTRACTNETWORKTRAYWIDGET_H
#define ABSTRACTNETWORKTRAYWIDGET_H
#include "abstracttraywidget.h"
#include "../../abstractsystemtraywidget.h"
#include <QWidget>
#include <NetworkDevice>
class AbstractNetworkTrayWidget : public AbstractTrayWidget
class AbstractNetworkTrayWidget : public AbstractSystemTrayWidget
{
Q_OBJECT

View File

@ -21,7 +21,7 @@
#include "accesspointwidget.h"
#include "horizontalseperator.h"
#include "../../frame/util/utils.h"
#include "util/utils.h"
#include <QHBoxLayout>
#include <QDebug>
@ -45,11 +45,11 @@ AccessPointWidget::AccessPointWidget()
m_ssidBtn->setObjectName("Ssid");
m_disconnectBtn->setVisible(false);
m_disconnectBtn->setNormalPic(":/wireless/resources/wireless/select.svg");
m_disconnectBtn->setHoverPic(":/wireless/resources/wireless/disconnect_hover.svg");
m_disconnectBtn->setPressPic(":/wireless/resources/wireless/disconnect_press.svg");
m_disconnectBtn->setNormalPic(":/icons/system-trays/network/resources/wireless/select.svg");
m_disconnectBtn->setHoverPic(":/icons/system-trays/network/resources/wireless/disconnect_hover.svg");
m_disconnectBtn->setPressPic(":/icons/system-trays/network/resources/wireless/disconnect_press.svg");
QPixmap iconPix = Utils::renderSVG(":/wireless/resources/wireless/security.svg", QSize(16, 16));
QPixmap iconPix = Utils::renderSVG(":/icons/system-trays/network/resources/wireless/security.svg", QSize(16, 16));
m_securityIconSize = iconPix.size();
m_securityIcon->setPixmap(iconPix);
@ -130,13 +130,13 @@ void AccessPointWidget::setActiveState(const NetworkDevice::DeviceStatus state)
void AccessPointWidget::enterEvent(QEvent *e)
{
QWidget::enterEvent(e);
m_disconnectBtn->setNormalPic(":/wireless/resources/wireless/disconnect.svg");
m_disconnectBtn->setNormalPic(":/icons/system-trays/network/resources/wireless/disconnect.svg");
}
void AccessPointWidget::leaveEvent(QEvent *e)
{
QWidget::leaveEvent(e);
m_disconnectBtn->setNormalPic(":/wireless/resources/wireless/select.svg");
m_disconnectBtn->setNormalPic(":/icons/system-trays/network/resources/wireless/select.svg");
}
void AccessPointWidget::setStrengthIcon(const int strength)
@ -152,7 +152,7 @@ void AccessPointWidget::setStrengthIcon(const int strength)
else
type = QString::number(strength / 10 & ~0x1) + "0";
iconPix = Utils::renderSVG(QString(":/wireless/resources/wireless/wireless-%1-symbolic.svg").arg(type), s);
iconPix = Utils::renderSVG(QString(":/icons/system-trays/network/resources/wireless/wireless-%1-symbolic.svg").arg(type), s);
m_strengthIcon->setPixmap(iconPix);
}

View File

@ -39,7 +39,7 @@ DeviceControlWidget::DeviceControlWidget(QWidget *parent)
m_switchBtn = new DSwitchButton;
const QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/wireless/resources/wireless/refresh_normal.svg");
const QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/icons/system-trays/network/resources/wireless/refresh_normal.svg");
m_loadingIndicator = new DLoadingIndicator;
m_loadingIndicator->setImageSource(pixmap);

View File

@ -90,7 +90,7 @@ WirelessList::WirelessList(WirelessDevice *deviceIter, QWidget *parent)
setStyleSheet("background-color:transparent;");
m_indicator = new DPictureSequenceView(this);
m_indicator->setPictureSequence(":/wireless/indicator/resources/wireless/spinner14/Spinner%1.png", QPair<int, int>(1, 91), 2);
m_indicator->setPictureSequence(":/icons/system-trays/network/resources/wireless/spinner14/Spinner%1.png", QPair<int, int>(1, 91), 2);
m_indicator->setFixedSize(QSize(14, 14) * ratio);
m_indicator->setVisible(false);

View File

@ -135,7 +135,7 @@ void WiredItem::reloadIcon()
m_delayTimer->start();
const quint64 index = QDateTime::currentMSecsSinceEpoch() / 200;
const int num = (index % 5) + 1;
m_icon = QPixmap(QString(":/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num));
m_icon = QPixmap(QString(":/icons/system-trays/network/resources/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num));
update();
return;
}

View File

@ -69,7 +69,7 @@ void WiredTrayWidget::updateIcon()
m_delayTimer->start();
const quint64 index = QDateTime::currentMSecsSinceEpoch() / 200;
const int num = (index % 5) + 1;
m_icon = QPixmap(QString(":/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num));
m_icon = QPixmap(QString(":/icons/system-trays/network/resources/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num));
update();
return;
}
@ -91,17 +91,12 @@ void WiredTrayWidget::updateIcon()
update();
}
void WiredTrayWidget::sendClick(uint8_t mouseButton, int x, int y)
{
}
const QImage WiredTrayWidget::trayImage()
{
return m_icon.toImage();
}
QWidget *WiredTrayWidget::itemTips()
QWidget *WiredTrayWidget::trayTipsWidget()
{
m_itemTips->setText(tr("Unknown"));
@ -124,7 +119,7 @@ QWidget *WiredTrayWidget::itemTips()
return m_itemTips;
}
const QString WiredTrayWidget::itemCommand() const
const QString WiredTrayWidget::trayClickCommand()
{
return "dbus-send --print-reply --dest=com.deepin.dde.ControlCenter /com/deepin/dde/ControlCenter com.deepin.dde.ControlCenter.ShowModule \"string:network\"";
}

View File

@ -41,11 +41,10 @@ public:
public:
void setActive(const bool active) Q_DECL_OVERRIDE;
void updateIcon() Q_DECL_OVERRIDE;
void sendClick(uint8_t mouseButton, int x, int y) Q_DECL_OVERRIDE;
const QImage trayImage() Q_DECL_OVERRIDE;
QWidget *itemTips();
const QString itemCommand() const;
QWidget *trayTipsWidget() Q_DECL_OVERRIDE;
const QString trayClickCommand() Q_DECL_OVERRIDE;
protected:
void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;

View File

@ -218,7 +218,7 @@ const QPixmap WirelessItem::backgroundPix(const int size)
const QPixmap WirelessItem::cachedPix(const QString &key, const int size)
{
if (m_reloadIcon || !m_icons.contains(key)) {
m_icons.insert(key, QIcon::fromTheme(key, QIcon(":/wireless/resources/wireless/" + key + ".svg")).pixmap(size));
m_icons.insert(key, QIcon::fromTheme(key, QIcon(":/icons/system-trays/network/resources/wireless/" + key + ".svg")).pixmap(size));
}
return m_icons.value(key);

View File

@ -114,22 +114,12 @@ void WirelessTrayWidget::updateIcon()
update();
}
void WirelessTrayWidget::sendClick(uint8_t mouseButton, int x, int y)
{
}
const QImage WirelessTrayWidget::trayImage()
{
return m_pixmap.toImage();
}
QWidget *WirelessTrayWidget::itemApplet()
{
return m_wirelessApplet;
}
QWidget *WirelessTrayWidget::itemTips()
QWidget *WirelessTrayWidget::trayTipsWidget()
{
const NetworkDevice::DeviceStatus stat = m_device->status();
@ -151,6 +141,11 @@ QWidget *WirelessTrayWidget::itemTips()
return m_wirelessPopup;
}
QWidget *WirelessTrayWidget::trayPopupApplet()
{
return m_wirelessApplet;
}
void WirelessTrayWidget::onNeedSecrets(const QString &info)
{
m_APList->onNeedSecrets(info);
@ -199,7 +194,7 @@ void WirelessTrayWidget::resizeEvent(QResizeEvent *e)
const QPixmap WirelessTrayWidget::cachedPix(const QString &key, const int size)
{
if (m_reloadIcon || !m_icons.contains(key)) {
m_icons.insert(key, QIcon::fromTheme(key, QIcon(":/wireless/resources/wireless/" + key + ".svg")).pixmap(size));
m_icons.insert(key, QIcon::fromTheme(key, QIcon(":/icons/system-trays/network/resources/wireless/" + key + ".svg")).pixmap(size));
}
return m_icons.value(key);

View File

@ -44,11 +44,10 @@ public:
public:
void setActive(const bool active) Q_DECL_OVERRIDE;
void updateIcon() Q_DECL_OVERRIDE;
void sendClick(uint8_t mouseButton, int x, int y) Q_DECL_OVERRIDE;
const QImage trayImage() Q_DECL_OVERRIDE;
QWidget *itemApplet();
QWidget *itemTips();
QWidget *trayTipsWidget() Q_DECL_OVERRIDE;
QWidget *trayPopupApplet() Q_DECL_OVERRIDE;
public Q_SLOTS:
void onNeedSecrets(const QString &info);

View File

@ -25,10 +25,16 @@
#include <QIcon>
#include <QMouseEvent>
PowerTrayWidget::PowerTrayWidget(AbstractTrayWidget *parent)
: AbstractTrayWidget(parent),
m_powerInter(new DBusPower(this))
#define BATTERY_DISCHARED 2
#define BATTERY_FULL 4
PowerTrayWidget::PowerTrayWidget(QWidget *parent)
: AbstractSystemTrayWidget(parent),
m_powerInter(new DBusPower(this)),
m_tipsLabel(new TipsWidget)
{
m_tipsLabel->setVisible(false);
connect(m_powerInter, &DBusPower::BatteryPercentageChanged, this, &PowerTrayWidget::updateIcon);
connect(m_powerInter, &DBusPower::BatteryStateChanged, this, &PowerTrayWidget::updateIcon);
connect(m_powerInter, &DBusPower::OnBatteryChanged, this, &PowerTrayWidget::updateIcon);
@ -73,14 +79,42 @@ void PowerTrayWidget::updateIcon()
update();
}
void PowerTrayWidget::sendClick(uint8_t mouseButton, int x, int y)
{
}
const QImage PowerTrayWidget::trayImage()
{
m_pixmap.toImage();
return m_pixmap.toImage();
}
QWidget *PowerTrayWidget::trayTipsWidget()
{
const BatteryPercentageMap data = m_powerInter->batteryPercentage();
if (data.isEmpty())
{
m_tipsLabel->setText(tr("Shut down"));
return m_tipsLabel;
}
const uint percentage = qMin(100.0, qMax(0.0, data.value("Display")));
const QString value = QString("%1%").arg(std::round(percentage));
const bool charging = !m_powerInter->onBattery();
if (!charging)
m_tipsLabel->setText(tr("Remaining Capacity %1").arg(value));
else
{
const int batteryState = m_powerInter->batteryState()["Display"];
if (batteryState == BATTERY_FULL || percentage == 100.)
m_tipsLabel->setText(tr("Charged %1").arg(value));
else
m_tipsLabel->setText(tr("Charging %1").arg(value));
}
return m_tipsLabel;
}
const QString PowerTrayWidget::trayClickCommand()
{
return QString("dbus-send --print-reply --dest=com.deepin.dde.ControlCenter /com/deepin/dde/ControlCenter com.deepin.dde.ControlCenter.ShowModule \"string:power\"");
}
QSize PowerTrayWidget::sizeHint() const

View File

@ -22,30 +22,34 @@
#ifndef POWERTRAYWIDGET_H
#define POWERTRAYWIDGET_H
#include "abstracttraywidget.h"
#include "../abstractsystemtraywidget.h"
#include "../widgets/tipswidget.h"
#include "dbus/dbuspower.h"
#include <QWidget>
class PowerTrayWidget : public AbstractTrayWidget
class PowerTrayWidget : public AbstractSystemTrayWidget
{
Q_OBJECT
public:
explicit PowerTrayWidget(AbstractTrayWidget *parent = nullptr);
explicit PowerTrayWidget(QWidget *parent = nullptr);
public:
void setActive(const bool active) Q_DECL_OVERRIDE;
void updateIcon() Q_DECL_OVERRIDE;
void sendClick(uint8_t mouseButton, int x, int y) Q_DECL_OVERRIDE;
const QImage trayImage() Q_DECL_OVERRIDE;
QWidget *trayTipsWidget() Q_DECL_OVERRIDE;
const QString trayClickCommand() Q_DECL_OVERRIDE;
protected:
QSize sizeHint() const Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
private:
DBusPower *m_powerInter;
TipsWidget *m_tipsLabel;
QPixmap m_pixmap;
};

View File

@ -5,9 +5,13 @@
#include <QMouseEvent>
#include <QApplication>
ShutdownTrayWidget::ShutdownTrayWidget(AbstractTrayWidget *parent)
: AbstractTrayWidget(parent)
ShutdownTrayWidget::ShutdownTrayWidget(QWidget *parent)
: AbstractSystemTrayWidget(parent),
m_tipsLabel(new TipsWidget)
{
m_tipsLabel->setText(tr("Shut down"));
m_tipsLabel->setVisible(false);
updateIcon();
}
@ -36,16 +40,21 @@ void ShutdownTrayWidget::updateIcon()
update();
}
void ShutdownTrayWidget::sendClick(uint8_t mouseButton, int x, int y)
{
}
const QImage ShutdownTrayWidget::trayImage()
{
return m_pixmap.toImage();
}
QWidget *ShutdownTrayWidget::trayTipsWidget()
{
return m_tipsLabel;
}
const QString ShutdownTrayWidget::trayClickCommand()
{
return QString("dbus-send --print-reply --dest=com.deepin.dde.shutdownFront /com/deepin/dde/shutdownFront com.deepin.dde.shutdownFront.Show");
}
QSize ShutdownTrayWidget::sizeHint() const
{
return QSize(26, 26);

View File

@ -1,29 +1,34 @@
#ifndef SHUTDOWNTRAYWIDGET_H
#define SHUTDOWNTRAYWIDGET_H
#include "abstracttraywidget.h"
#include "../abstractsystemtraywidget.h"
#include "../widgets/tipswidget.h"
#include <QWidget>
#include <QTimer>
class ShutdownTrayWidget : public AbstractTrayWidget
class ShutdownTrayWidget : public AbstractSystemTrayWidget
{
Q_OBJECT
public:
explicit ShutdownTrayWidget(AbstractTrayWidget *parent = nullptr);
explicit ShutdownTrayWidget(QWidget *parent = nullptr);
public:
void setActive(const bool active) Q_DECL_OVERRIDE;
void updateIcon() Q_DECL_OVERRIDE;
void sendClick(uint8_t mouseButton, int x, int y) Q_DECL_OVERRIDE;
const QImage trayImage() Q_DECL_OVERRIDE;
QWidget *trayTipsWidget() Q_DECL_OVERRIDE;
const QString trayClickCommand() Q_DECL_OVERRIDE;
protected:
QSize sizeHint() const Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
private:
TipsWidget *m_tipsLabel;
QPixmap m_pixmap;
};

View File

@ -43,7 +43,7 @@ VolumeSlider::VolumeSlider(QWidget *parent)
// "background:url(:/image/image/slider_bg.png) 0 2 0 2 stretch;"
"}"
"QSlider::handle{"
"background:url(:/slider_handle.svg) no-repeat;"
"background:url(:/icons/system-trays/sound/resources/slider_handle.svg) no-repeat;"
"width:22px;"
"height:22px;"
"margin:-9px -14px -11px -14px;"

View File

@ -88,7 +88,7 @@ void SinkInputWidget::setMuteIcon()
{
if (m_inputInter->mute()) {
const auto ratio = devicePixelRatioF();
QPixmap muteIcon = DHiDPIHelper::loadNxPixmap(":/audio-volume-muted-symbolic.svg");
QPixmap muteIcon = DHiDPIHelper::loadNxPixmap(":/icons/system-trays/sound/resources/audio-volume-muted-symbolic.svg");
QPixmap appIconSource(getIconFromTheme(m_inputInter->icon(), QSize(24, 24)));
QPixmap temp(appIconSource.size());

View File

@ -23,7 +23,7 @@
#include "sinkinputwidget.h"
#include "componments/horizontalseparator.h"
#include "../widgets/tipswidget.h"
#include "../../frame/util/utils.h"
#include "util/utils.h"
#include <QLabel>
#include <QIcon>
@ -160,7 +160,7 @@ void SoundApplet::onVolumeChanged()
else
volumeString = "low";
const QString &iconName = QString(":/audio-volume-%1-symbolic.svg").arg(volumeString);
const QString &iconName = QString(":/icons/system-trays/sound/resources/audio-volume-%1-symbolic.svg").arg(volumeString);
QPixmap pix = Utils::renderSVG(iconName, QSize(24, 24));
m_volumeBtn->setPixmap(pix);

View File

@ -16,8 +16,8 @@
DWIDGET_USE_NAMESPACE
SoundTrayWidget::SoundTrayWidget(AbstractTrayWidget *parent)
: AbstractTrayWidget(parent),
SoundTrayWidget::SoundTrayWidget(QWidget *parent)
: AbstractSystemTrayWidget(parent),
m_tipsLabel(new TipsWidget(this)),
m_applet(new SoundApplet(this)),
m_sinkInter(nullptr)
@ -68,17 +68,12 @@ void SoundTrayWidget::updateIcon()
update();
}
void SoundTrayWidget::sendClick(uint8_t, int, int)
{
}
const QImage SoundTrayWidget::trayImage()
{
return m_iconPixmap.toImage();
}
QWidget *SoundTrayWidget::tipsWidget()
QWidget *SoundTrayWidget::trayTipsWidget()
{
refreshTips(true);
@ -88,7 +83,7 @@ QWidget *SoundTrayWidget::tipsWidget()
return m_tipsLabel;
}
QWidget *SoundTrayWidget::popupApplet()
QWidget *SoundTrayWidget::trayPopupApplet()
{
return m_applet;
}

View File

@ -1,25 +1,24 @@
#ifndef SOUNDTRAYWIDGET_H
#define SOUNDTRAYWIDGET_H
#include "abstracttraywidget.h"
#include "../abstractsystemtraywidget.h"
#include "soundapplet.h"
#include "dbus/dbussink.h"
#include <QWidget>
class TipsWidget;
class SoundTrayWidget : public AbstractTrayWidget
class SoundTrayWidget : public AbstractSystemTrayWidget
{
public:
SoundTrayWidget(AbstractTrayWidget *parent = nullptr);
SoundTrayWidget(QWidget *parent = nullptr);
void setActive(const bool active) Q_DECL_OVERRIDE;
void updateIcon() Q_DECL_OVERRIDE;
void sendClick(uint8_t, int, int) Q_DECL_OVERRIDE;
const QImage trayImage() Q_DECL_OVERRIDE;
QWidget *tipsWidget();
QWidget *popupApplet();
QWidget *trayTipsWidget() Q_DECL_OVERRIDE;
QWidget *trayPopupApplet() Q_DECL_OVERRIDE;
const QString contextMenu() const;
void invokeMenuItem(const QString menuId, const bool checked);