From af16b0c1360474e53e3e31adef4e2ed69d60fe00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Mon, 27 Jun 2016 14:33:21 +0800 Subject: [PATCH] optimize datetime plugin Change-Id: I43404063fa1053cfbbd14f8a71bef207cb624185 --- frame/controller/dockpluginscontroller.cpp | 5 +++ frame/controller/dockpluginscontroller.h | 3 ++ frame/util/docksettings.cpp | 2 ++ interfaces/constants.h | 9 +++++ interfaces/pluginproxyinterface.h | 3 ++ plugins/datetime/datetime.pro | 6 ++-- plugins/datetime/datetimeplugin.cpp | 23 +++---------- plugins/datetime/datetimeplugin.h | 8 ++--- plugins/datetime/datetimewidget.cpp | 38 ++++++++++++++++++++++ plugins/datetime/datetimewidget.h | 18 ++++++++++ 10 files changed, 88 insertions(+), 27 deletions(-) create mode 100644 plugins/datetime/datetimewidget.cpp create mode 100644 plugins/datetime/datetimewidget.h diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index 17e77bb68..cdb60aea3 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -23,6 +23,11 @@ void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, co emit pluginItemInserted(item); } +DisplayMode DockPluginsController::displayMode() const +{ + return Fashion; +} + void DockPluginsController::loadPlugins() { // Q_ASSERT(m_pluginLoaderList.isEmpty()); diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index 74b3d3a2c..3c27b8d1b 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -17,8 +17,11 @@ public: explicit DockPluginsController(DockItemController *itemControllerInter = 0); ~DockPluginsController(); + // implements PluginProxyInterface void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey); + Dock::DisplayMode displayMode() const; + signals: void pluginItemInserted(PluginsItem *pluginsItem) const; diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index ee0951eef..79a771ed1 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -178,6 +178,7 @@ void DockSettings::positionChanged() { m_position = Dock::Position(m_dockInter->position()); DockItem::setDockPosition(m_position); + qApp->setProperty(PROP_POSITION, QVariant::fromValue(m_position)); calculateWindowConfig(); @@ -198,6 +199,7 @@ void DockSettings::displayModeChanged() { m_displayMode = Dock::DisplayMode(m_dockInter->displayMode()); DockItem::setDockDisplayMode(m_displayMode); + qApp->setProperty(PROP_DISPLAY_MODE, QVariant::fromValue(m_displayMode)); calculateWindowConfig(); diff --git a/interfaces/constants.h b/interfaces/constants.h index d15503362..9eb748cca 100644 --- a/interfaces/constants.h +++ b/interfaces/constants.h @@ -1,8 +1,11 @@ #ifndef CONSTANTS_H #define CONSTANTS_H +#include + namespace Dock { +#define PROP_DISPLAY_MODE "DisplayMode" enum DisplayMode { Fashion = 0, @@ -11,6 +14,7 @@ enum DisplayMode // Classic = 2, }; +#define PROP_HIDE_MODE "HideMode" enum HideMode { KeepShowing = 0, @@ -18,6 +22,7 @@ enum HideMode SmartHide = 3, }; +#define PROP_POSITION "Position" enum Position { Top = 0, @@ -26,6 +31,7 @@ enum Position Left = 3, }; +#define PROP_HIDE_STATE "HideState" enum HideState { Unknown = 0, @@ -35,4 +41,7 @@ enum HideState } +Q_DECLARE_METATYPE(Dock::DisplayMode) +Q_DECLARE_METATYPE(Dock::Position) + #endif // CONSTANTS_H diff --git a/interfaces/pluginproxyinterface.h b/interfaces/pluginproxyinterface.h index e73160c3a..e5bcee424 100644 --- a/interfaces/pluginproxyinterface.h +++ b/interfaces/pluginproxyinterface.h @@ -1,6 +1,8 @@ #ifndef PLUGINPROXYINTERFACE_H #define PLUGINPROXYINTERFACE_H +#include "constants.h" + #include class PluginsItemInterface; @@ -9,6 +11,7 @@ class PluginProxyInterface public: virtual void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) = 0; + virtual Dock::DisplayMode displayMode() const = 0; }; #endif // PLUGINPROXYINTERFACE_H diff --git a/plugins/datetime/datetime.pro b/plugins/datetime/datetime.pro index 75a036d0b..204d7d35c 100644 --- a/plugins/datetime/datetime.pro +++ b/plugins/datetime/datetime.pro @@ -10,10 +10,12 @@ TARGET = $$qtLibraryTarget(datetime) DESTDIR = $$_PRO_FILE_PWD_/../ HEADERS += \ - datetimeplugin.h + datetimeplugin.h \ + datetimewidget.h SOURCES += \ - datetimeplugin.cpp + datetimeplugin.cpp \ + datetimewidget.cpp target.path = $${PREFIX}/lib/dde-dock/plugins/ INSTALLS += target diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index e45f7f547..a9f476dee 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -2,26 +2,19 @@ DatetimePlugin::DatetimePlugin(QObject *parent) : QObject(parent), - m_timeLabel(new QLabel), m_refershTimer(new QTimer(this)) { - m_timeLabel->setAlignment(Qt::AlignCenter); - m_timeLabel->setStyleSheet("color:white;" -// "background-color:black;" - "padding:5px;" - "font-size:12px;"); - m_refershTimer->setInterval(1000); m_refershTimer->start(); - connect(m_refershTimer, &QTimer::timeout, this, &DatetimePlugin::refershTime); + m_centeralWidget = new DatetimeWidget; - refershTime(); + connect(m_refershTimer, &QTimer::timeout, m_centeralWidget, static_cast(&DatetimeWidget::update)); } DatetimePlugin::~DatetimePlugin() { - delete m_timeLabel; + delete m_centeralWidget; } const QString DatetimePlugin::pluginName() @@ -46,13 +39,5 @@ QWidget *DatetimePlugin::itemWidget(const QString &itemKey) { Q_UNUSED(itemKey); - return m_timeLabel; -} - -void DatetimePlugin::refershTime() -{ - const QString text = QTime::currentTime().toString(tr("HH:mm")); - - if (m_timeLabel->text() != text) - m_timeLabel->setText(text); + return m_centeralWidget; } diff --git a/plugins/datetime/datetimeplugin.h b/plugins/datetime/datetimeplugin.h index 0684fbc47..5dde4f46f 100644 --- a/plugins/datetime/datetimeplugin.h +++ b/plugins/datetime/datetimeplugin.h @@ -2,8 +2,8 @@ #define DATETIMEPLUGIN_H #include "pluginsiteminterface.h" +#include "datetimewidget.h" -#include #include class DatetimePlugin : public QObject, PluginsItemInterface @@ -22,12 +22,8 @@ public: QWidget *itemWidget(const QString &itemKey); - -private slots: - void refershTime(); - private: - QLabel *m_timeLabel; + DatetimeWidget *m_centeralWidget; QTimer *m_refershTimer; }; diff --git a/plugins/datetime/datetimewidget.cpp b/plugins/datetime/datetimewidget.cpp new file mode 100644 index 000000000..9f07f520f --- /dev/null +++ b/plugins/datetime/datetimewidget.cpp @@ -0,0 +1,38 @@ +#include "datetimewidget.h" +#include "constants.h" + +#include +#include +#include + +DatetimeWidget::DatetimeWidget(QWidget *parent) + : QWidget(parent) +{ + +} + +QSize DatetimeWidget::sizeHint() const +{ + QFontMetrics fm(qApp->font()); + + return fm.boundingRect("88:88").size() + QSize(20, 10); +} + +void DatetimeWidget::paintEvent(QPaintEvent *e) +{ + Q_UNUSED(e); + + const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value(); + + QPainter painter(this); + + if (displayMode == Dock::Efficient) + { + painter.setPen(Qt::white); + painter.drawText(rect(), Qt::AlignCenter, "88:88"); + } + else + { + + } +} diff --git a/plugins/datetime/datetimewidget.h b/plugins/datetime/datetimewidget.h new file mode 100644 index 000000000..36787961c --- /dev/null +++ b/plugins/datetime/datetimewidget.h @@ -0,0 +1,18 @@ +#ifndef DATETIMEWIDGET_H +#define DATETIMEWIDGET_H + +#include + +class DatetimeWidget : public QWidget +{ + Q_OBJECT + +public: + explicit DatetimeWidget(QWidget *parent = 0); + +private: + QSize sizeHint() const; + void paintEvent(QPaintEvent *e); +}; + +#endif // DATETIMEWIDGET_H