feat: 更改任务栏界面的时间显示格式

任务栏界面时间格式根据控制中心设置来显示

Log: 更改任务栏界面的时间显示格式
Task: https://pms.uniontech.com/zentao/task-view-30918.html
Change-Id: I35c47685c2efbe8f12afdc9a2bb5bb59f4b5324e
Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/932
Reviewed-by: <mailman@uniontech.com>
Reviewed-by: niecheng <niecheng@uniontech.com>
Reviewed-by: wangwei <wangwei@uniontech.com>
Tested-by: <mailman@uniontech.com>
This commit is contained in:
聂成 2020-07-30 17:41:20 +08:00 committed by niecheng
parent 9fd43e1c4d
commit 77eae531b7
4 changed files with 79 additions and 22 deletions

View File

@ -1 +0,0 @@
deb [trusted=yes] http://shuttle.corp.deepin.com/cache/repos/eagle-sp3/release-candidate/RERF5byA5Y-R5rWL6K-VMTE5OQ unstable main contrib

View File

@ -11,16 +11,22 @@ find_package(Qt5Widgets REQUIRED)
find_package(Qt5Svg REQUIRED)
find_package(Qt5DBus REQUIRED)
find_package(DtkWidget REQUIRED)
pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus)
add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN")
add_library(${PLUGIN_NAME} SHARED ${SRCS} datetime.qrc)
set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../)
target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ../../interfaces)
target_include_directories(${PLUGIN_NAME} PUBLIC
${DtkWidget_INCLUDE_DIRS}
${DFrameworkDBus_INCLUDE_DIRS}
../../interfaces ${Qt5DBus_INCLUDE_DIRS}
)
target_link_libraries(${PLUGIN_NAME} PRIVATE
${Qt5DBus_LIBRARIES}
${DtkWidget_LIBRARIES}
${Qt5Widgets_LIBRARIES}
${Qt5Svg_LIBRARIES}
${DFrameworkDBus_INCLUDE_DIRS}
)
install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins)

View File

@ -40,8 +40,16 @@ DatetimeWidget::DatetimeWidget(QWidget *parent)
: QWidget(parent)
, m_24HourFormat(false)
, m_timeOffset(false)
, m_timedateInter(new Timedate("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", QDBusConnection::sessionBus(), this))
, m_shortDateFormat("yyyy-MM-dd")
, m_shortTimeFormat("hh:mm")
{
setMinimumSize(PLUGIN_BACKGROUND_MIN_SIZE, PLUGIN_BACKGROUND_MIN_SIZE);
setShortDateFormat(m_timedateInter->shortDateFormat());
setShortTimeFormat(m_timedateInter->shortTimeFormat());
connect(m_timedateInter, &Timedate::ShortDateFormatChanged, this, &DatetimeWidget::setShortDateFormat);
connect(m_timedateInter, &Timedate::ShortTimeFormatChanged, this, &DatetimeWidget::setShortTimeFormat);
}
void DatetimeWidget::set24HourFormat(const bool value)
@ -59,6 +67,43 @@ void DatetimeWidget::set24HourFormat(const bool value)
}
}
/**
* @brief DatetimeWidget::setShortDateFormat
* @param type
*/
void DatetimeWidget::setShortDateFormat(int type)
{
switch (type) {
case 0: m_shortDateFormat = "yyyy/M/d"; break;
case 1: m_shortDateFormat = "yyyy-M-d"; break;
case 2: m_shortDateFormat = "yyyy.M.d"; break;
case 3: m_shortDateFormat = "yyyy/MM/dd"; break;
case 4: m_shortDateFormat = "yyyy-MM-dd"; break;
case 5: m_shortDateFormat = "yyyy.MM.dd"; break;
case 6: m_shortDateFormat = "yy/M/d"; break;
case 7: m_shortDateFormat = "yy-M-d"; break;
case 8: m_shortDateFormat = "yy.M.d"; break;
default: m_shortDateFormat = "yyyy-MM-dd"; break;
}
update();
}
/**
* @brief DatetimeWidget::setShortTimeFormat
* @param type
*/
void DatetimeWidget::setShortTimeFormat(int type)
{
switch (type) {
case 0: m_shortTimeFormat = "h:m"; break;
case 1: m_shortTimeFormat = "hh:mm"; break;
case 2: m_shortTimeFormat = "h:m"; break;
case 3: m_shortTimeFormat = "hh:mm"; break;
default: m_shortTimeFormat = "hh:mm"; break;
}
update();
}
QSize DatetimeWidget::curTimeSize() const
{
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
@ -66,21 +111,19 @@ QSize DatetimeWidget::curTimeSize() const
m_timeFont = TIME_FONT;
m_dateFont = DATE_FONT;
QFontMetrics fm(m_timeFont);
QString format;
if (m_24HourFormat)
format = "hh:mm";
else {
QString format = m_shortTimeFormat;
if (!m_24HourFormat) {
if (position == Dock::Top || position == Dock::Bottom)
format = "hh:mm AP";
format = format.append(" AP");
else
format = "hh:mm\nAP";
format = format.append("\nAP");
}
QString timeString = QDateTime::currentDateTime().toString(format);
QSize timeSize = fm.boundingRect(timeString).size();
if (timeString.contains("\n")) {
QStringList SL = timeString.split("\n");
timeSize = QSize(fm.boundingRect(SL.at(0)).width(), fm.boundingRect(SL.at(0)).height() + fm.boundingRect(SL.at(1)).height());
QStringList SL = timeString.split("\n");
timeSize = QSize(fm.boundingRect(SL.at(0)).width(), fm.boundingRect(SL.at(0)).height() + fm.boundingRect(SL.at(1)).height());
}
QSize dateSize = QFontMetrics(m_dateFont).boundingRect("0000/00/00").size();
@ -89,7 +132,7 @@ QSize DatetimeWidget::curTimeSize() const
while (QFontMetrics(m_timeFont).boundingRect(timeString).size().height() + QFontMetrics(m_dateFont).boundingRect("0000/00/00").size().height() > height()) {
m_timeFont.setPixelSize(m_timeFont.pixelSize() - 1);
timeSize.setWidth(QFontMetrics(m_timeFont).boundingRect(timeString).size().width());
if (m_timeFont.pixelSize() - m_dateFont.pixelSize() == 1){
if (m_timeFont.pixelSize() - m_dateFont.pixelSize() == 1) {
m_dateFont.setPixelSize(m_dateFont.pixelSize() - 1);
dateSize.setWidth(QFontMetrics(m_dateFont).boundingRect("0000/00/00").size().width());
}
@ -103,7 +146,7 @@ QSize DatetimeWidget::curTimeSize() const
} else {
timeSize.setHeight(QFontMetrics(m_timeFont).boundingRect(timeString).size().height() * 2);
}
if (m_timeFont.pixelSize() - m_dateFont.pixelSize() == 1){
if (m_timeFont.pixelSize() - m_dateFont.pixelSize() == 1) {
m_dateFont.setPixelSize(m_dateFont.pixelSize() - 1);
dateSize.setWidth(QFontMetrics(m_dateFont).boundingRect("0000/00/00").size().height());
}
@ -128,14 +171,12 @@ void DatetimeWidget::paintEvent(QPaintEvent *e)
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QString format;
if (m_24HourFormat)
format = "hh:mm";
else {
QString format = m_shortTimeFormat;
if (!m_24HourFormat) {
if (position == Dock::Top || position == Dock::Bottom)
format = "hh:mm AP";
format = format.append(" AP");
else
format = "hh:mm\nAP";
format = format.append("\nAP");
}
painter.setFont(m_timeFont);
@ -144,15 +185,15 @@ void DatetimeWidget::paintEvent(QPaintEvent *e)
QRect timeRect = rect();
QRect dateRect = rect();
if (position == Dock::Top || position == Dock::Bottom){
timeRect.setBottom(rect().center().y() + 6);
dateRect.setTop(timeRect.bottom() - 4);
if (position == Dock::Top || position == Dock::Bottom) {
timeRect.setBottom(rect().center().y() + 6);
dateRect.setTop(timeRect.bottom() - 4);
} else {
timeRect.setBottom(rect().center().y() + m_timeOffset);
dateRect.setTop(timeRect.bottom());
}
painter.drawText(timeRect, Qt::AlignBottom | Qt::AlignHCenter, current.toString(format));
format = "yyyy/MM/dd";
format = m_shortDateFormat;
painter.setFont(m_dateFont);
painter.drawText(dateRect, Qt::AlignTop | Qt::AlignHCenter, current.toString(format));
}

View File

@ -22,8 +22,12 @@
#ifndef DATETIMEWIDGET_H
#define DATETIMEWIDGET_H
#include <com_deepin_daemon_timedate.h>
#include <QWidget>
using Timedate = com::deepin::daemon::Timedate;
class DatetimeWidget : public QWidget
{
Q_OBJECT
@ -40,6 +44,10 @@ signals:
public slots:
void set24HourFormat(const bool value);
private Q_SLOTS:
void setShortDateFormat(int type);
void setShortTimeFormat(int type);
private:
void paintEvent(QPaintEvent *e);
QSize curTimeSize() const;
@ -49,6 +57,9 @@ private:
mutable QFont m_timeFont;
mutable QFont m_dateFont;
mutable int m_timeOffset;
Timedate *m_timedateInter;
QString m_shortDateFormat;
QString m_shortTimeFormat;
};