From 0757d74f734db8cf9d1b5ac229c52ce429563dd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Wed, 21 Sep 2016 10:24:42 +0800 Subject: [PATCH] add time plugin context menu Change-Id: I0b8705c03d00d678b6197aaed66fddddf8b7a79c --- plugins/datetime/datetimeplugin.cpp | 32 +++++++++++++++++++++++++++++ plugins/datetime/datetimeplugin.h | 3 +++ plugins/datetime/datetimewidget.cpp | 3 +++ plugins/datetime/datetimewidget.h | 3 +++ 4 files changed, 41 insertions(+) diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index b378706b3..327cd0524 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -18,6 +18,8 @@ DatetimePlugin::DatetimePlugin(QObject *parent) m_centeralWidget = new DatetimeWidget; + connect(m_centeralWidget, &DatetimeWidget::requestContextMenu, [this] {m_proxyInter->requestContextMenu(this, QString());}); + connect(m_refershTimer, &QTimer::timeout, this, &DatetimePlugin::updateCurrentTimeString); } @@ -66,6 +68,36 @@ const QString DatetimePlugin::itemCommand(const QString &itemKey) return "dde-calendar"; } +const QString DatetimePlugin::itemContextMenu(const QString &itemKey) +{ + Q_UNUSED(itemKey); + + QList items; + items.reserve(1); + + QMap open; + open["itemId"] = "open"; + open["itemText"] = tr("Time Settings"); + open["isActive"] = true; + items.push_back(open); + + QMap menu; + menu["items"] = items; + menu["checkableMenu"] = false; + menu["singleCheck"] = false; + + return QJsonDocument::fromVariant(menu).toJson(); +} + +void DatetimePlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked) +{ + Q_UNUSED(itemKey) + Q_UNUSED(menuId) + Q_UNUSED(checked) + + QProcess::startDetached("dde-control-center", QStringList() << "datetime"); +} + void DatetimePlugin::updateCurrentTimeString() { const QDateTime currentDateTime = QDateTime::currentDateTime(); diff --git a/plugins/datetime/datetimeplugin.h b/plugins/datetime/datetimeplugin.h index 977ab34eb..f9b804cb7 100644 --- a/plugins/datetime/datetimeplugin.h +++ b/plugins/datetime/datetimeplugin.h @@ -26,6 +26,9 @@ public: QWidget *itemTipsWidget(const QString &itemKey) override; const QString itemCommand(const QString &itemKey) override; + const QString itemContextMenu(const QString &itemKey) override; + + void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked); private slots: void updateCurrentTimeString(); diff --git a/plugins/datetime/datetimewidget.cpp b/plugins/datetime/datetimewidget.cpp index acd8f6eaa..62c0fd586 100644 --- a/plugins/datetime/datetimewidget.cpp +++ b/plugins/datetime/datetimewidget.cpp @@ -105,7 +105,10 @@ void DatetimeWidget::mousePressEvent(QMouseEvent *e) const QPoint p(e->pos() - rect().center()); if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) + { + emit requestContextMenu(); return; + } QWidget::mousePressEvent(e); } diff --git a/plugins/datetime/datetimewidget.h b/plugins/datetime/datetimewidget.h index 1e145543e..fa74f873d 100644 --- a/plugins/datetime/datetimewidget.h +++ b/plugins/datetime/datetimewidget.h @@ -10,6 +10,9 @@ class DatetimeWidget : public QWidget public: explicit DatetimeWidget(QWidget *parent = 0); +signals: + void requestContextMenu() const; + private: QSize sizeHint() const; void resizeEvent(QResizeEvent *e);