!31 add longdate and weekday format

From: @Venland 
Reviewed-by: @open-bot 
Signed-off-by: @open-bot
This commit is contained in:
openeuler-ci-bot 2024-03-26 06:44:30 +00:00 committed by Gitee
commit f5a4457e38
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 329 additions and 2 deletions

View File

@ -0,0 +1,322 @@
From bbfc2cb909ef6ebf5f5824cb65486ce2941df997 Mon Sep 17 00:00:00 2001
From: liweigang <izmirvii@gmail.com>
Date: Mon, 25 Mar 2024 14:03:15 +0800
Subject: [PATCH] feat: add longdate and weekday format
Signed-off-by: liweigang <izmirvii@gmail.com>
---
plugins/datetime/datetimeplugin.cpp | 8 +-
plugins/datetime/datetimewidget.cpp | 199 ++++++++++++++++++++++++++++
plugins/datetime/datetimewidget.h | 17 ++-
3 files changed, 218 insertions(+), 6 deletions(-)
diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp
index 93c4e89..feaf50f 100644
--- a/plugins/datetime/datetimeplugin.cpp
+++ b/plugins/datetime/datetimeplugin.cpp
@@ -221,10 +221,10 @@ void DatetimePlugin::updateCurrentTimeString()
{
const QDateTime currentDateTime = QDateTime::currentDateTime();
- if (m_centralWidget->is24HourFormat())
- m_dateTipsLabel->setText(currentDateTime.date().toString(Qt::SystemLocaleLongDate) + currentDateTime.toString(" HH:mm:ss"));
- else
- m_dateTipsLabel->setText(currentDateTime.date().toString(Qt::SystemLocaleLongDate) + currentDateTime.toString(" hh:mm:ss A"));
+ // 实时刷新日期,防止日期显示错误
+ m_centralWidget->updateDateTimeString();
+
+ m_dateTipsLabel->setText(m_centralWidget->getDateTime());
const QString currentString = currentDateTime.toString("yyyy/MM/dd hh:mm");
diff --git a/plugins/datetime/datetimewidget.cpp b/plugins/datetime/datetimewidget.cpp
index 08bfbb3..4e0b252 100644
--- a/plugins/datetime/datetimewidget.cpp
+++ b/plugins/datetime/datetimewidget.cpp
@@ -39,17 +39,29 @@ DWIDGET_USE_NAMESPACE
DatetimeWidget::DatetimeWidget(QWidget *parent)
: QWidget(parent)
, m_24HourFormat(false)
+ , m_longDateFormatType(0)
+ , m_longTimeFormatType(0)
, 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")
+ , m_longTimeFormat(" hh:mm:ss")
+ , m_weekdayFormatType(0)
{
setMinimumSize(PLUGIN_BACKGROUND_MIN_SIZE, PLUGIN_BACKGROUND_MIN_SIZE);
setShortDateFormat(m_timedateInter->shortDateFormat());
setShortTimeFormat(m_timedateInter->shortTimeFormat());
+ setLongDateFormat(m_timedateInter->longDateFormat());
+ setWeekdayFormat(m_timedateInter->weekdayFormat());
+ setLongTimeFormat(m_timedateInter->longTimeFormat());
+ set24HourFormat(m_timedateInter->use24HourFormat());
+ updateDateTimeString();
connect(m_timedateInter, &Timedate::ShortDateFormatChanged, this, &DatetimeWidget::setShortDateFormat);
connect(m_timedateInter, &Timedate::ShortTimeFormatChanged, this, &DatetimeWidget::setShortTimeFormat);
+ connect(m_timedateInter, &Timedate::LongDateFormatChanged, this, &DatetimeWidget::setLongDateFormat);
+ connect(m_timedateInter, &Timedate::WeekdayFormatChanged, this, &DatetimeWidget::setWeekdayFormat);
+ connect(m_timedateInter, &Timedate::LongTimeFormatChanged, this, &DatetimeWidget::setLongTimeFormat);
//连接日期时间修改信号,更新日期时间插件的布局
connect(m_timedateInter, &Timedate::TimeUpdate, this, [ = ]{
if (isVisible()) {
@@ -65,6 +77,7 @@ void DatetimeWidget::set24HourFormat(const bool value)
}
m_24HourFormat = value;
+ updateLongTimeFormat();
update();
if (isVisible()) {
@@ -115,6 +128,192 @@ void DatetimeWidget::setShortTimeFormat(int type)
}
}
+/**
+ * @brief DatetimeWidget::setLongDateFormat 根据类型设置长日期显示格式
+ * @param type 自定义类型
+ */
+void DatetimeWidget::setLongDateFormat(int type)
+{
+ if (m_longDateFormatType == type)
+ return;
+
+ m_longDateFormatType = type;
+ updateDateTimeString();
+}
+
+/**
+ * @brief DatetimeWidget::setLongTimeFormat 根据类型设置长时间显示格式
+ * @param type 自定义类型
+ */
+void DatetimeWidget::setLongTimeFormat(int type)
+{
+ if (m_longTimeFormatType == type)
+ return;
+
+ m_longTimeFormatType = type;
+ updateLongTimeFormat();
+ updateDateTimeString();
+}
+
+/**
+ * @brief DatetimeWidget::setWeekdayFormat 根据类型设置周显示格式
+ * @param type 自定义类型
+ */
+void DatetimeWidget::setWeekdayFormat(int type)
+{
+ if (m_weekdayFormatType == type)
+ return;
+
+ m_weekdayFormatType = type;
+ updateWeekdayFormat();
+ updateDateTimeString();
+}
+
+/**
+ * @brief DatetimeWidget::updateWeekdayFormat 更新周的显示格式
+ */
+void DatetimeWidget::updateWeekdayFormat()
+{
+ const QDateTime currentDateTime = QDateTime::currentDateTime();
+ auto dayOfWeek = currentDateTime.date().dayOfWeek();
+
+ if (0 == m_weekdayFormatType) {
+ switch (dayOfWeek) {
+ case 1:
+ m_weekFormat = tr("Monday"); //星期一
+ break;
+ case 2:
+ m_weekFormat = tr("Tuesday"); //星期二
+ break;
+ case 3:
+ m_weekFormat = tr("Wednesday"); //星期三
+ break;
+ case 4:
+ m_weekFormat = tr("Thursday"); //星期四
+ break;
+ case 5:
+ m_weekFormat = tr("Friday"); //星期五
+ break;
+ case 6:
+ m_weekFormat = tr("Saturday"); //星期六
+ break;
+ case 7:
+ m_weekFormat = tr("Sunday"); //星期天
+ break;
+ default:
+ m_weekFormat = tr("Monday"); //星期一
+ break;
+ }
+ } else {
+ switch (dayOfWeek) {
+ case 1:
+ m_weekFormat = tr("monday"); //周一
+ break;
+ case 2:
+ m_weekFormat = tr("tuesday"); //周二
+ break;
+ case 3:
+ m_weekFormat = tr("wednesday"); //周三
+ break;
+ case 4:
+ m_weekFormat = tr("thursday"); //周四
+ break;
+ case 5:
+ m_weekFormat = tr("friday"); //周五
+ break;
+ case 6:
+ m_weekFormat = tr("saturday"); //周六
+ break;
+ case 7:
+ m_weekFormat = tr("sunday"); //周天
+ break;
+ default:
+ m_weekFormat = tr("monday"); //周一
+ break;
+ }
+ }
+}
+
+void DatetimeWidget::updateLongTimeFormat()
+{
+ if (m_24HourFormat) {
+ switch (m_longTimeFormatType) {
+ case 0: m_longTimeFormat = " h:mm:ss"; break;
+ case 1: m_longTimeFormat = " hh:mm:ss"; break;
+ default: m_longTimeFormat = " hh:mm:ss"; break;
+ }
+ } else {
+ switch (m_longTimeFormatType) {
+ case 0: m_longTimeFormat = " h:mm:ss A"; break;
+ case 1: m_longTimeFormat = " hh:mm:ss A"; break;
+ default: m_longTimeFormat = " hh:mm:ss A"; break;
+ }
+ }
+}
+
+/**
+ * @brief DatetimeWidget::updateWeekdayTimeString 更新任务栏时间标签的显示
+ */
+void DatetimeWidget::updateDateTimeString()
+{
+ QString longTimeFormat("");
+ const QDateTime currentDateTime = QDateTime::currentDateTime();
+ int year = currentDateTime.date().year();
+ int month = currentDateTime.date().month();
+ int day = currentDateTime.date().day();
+
+ auto lang = QLocale::system().language();
+ bool isZhLocale = lang == QLocale::Chinese || lang == QLocale::Tibetan || lang == QLocale::Uighur;
+
+ // 根据相应语言去显示对应的格式
+ // 中文: 格式为xxxx年xx月xx日 星期x hh:mm:ss,如: 2024年3月25日 星期一 13:27:55
+ // 英文: 格式为x x, xxxx, x hh:mm:ss,如 Mar 25, 2024, Monday 13:27:55
+ // 其他语言: 按照国际当地长时间格式显示
+ if (isZhLocale) {
+ QString longTimeFormat = QString(tr("%1year%2month%3day")).arg(year).arg(month).arg(day);
+
+ // 实时更新周的日期显示
+ updateWeekdayFormat();
+
+ switch (m_longDateFormatType) {
+ case 0:
+ m_dateTime = longTimeFormat + currentDateTime.toString(m_longTimeFormat);
+ break;
+ case 1:
+ m_dateTime = longTimeFormat + QString(" ") + m_weekFormat + currentDateTime.toString(m_longTimeFormat);
+ break;
+ case 2:
+ m_dateTime = m_weekFormat + QString(" ") + longTimeFormat + currentDateTime.toString(m_longTimeFormat);
+ break;
+ default:
+ m_dateTime = longTimeFormat + QString(" ") + m_weekFormat + currentDateTime.toString(m_longTimeFormat);
+ break;
+ }
+ } else if (lang == QLocale::English) {
+ auto longDateString = currentDateTime.date().toString(Qt::SystemLocaleLongDate);
+ auto week = longDateString.split(",").at(0);
+ // 获取英文的日期格式字符串,-2是去掉","和" "
+ auto longDateTimeFormat = longDateString.right(longDateString.size() - week.size() - 2);
+
+ switch (m_longDateFormatType) {
+ case 0:
+ m_dateTime = longDateTimeFormat + currentDateTime.toString(m_longTimeFormat);
+ break;
+ case 1:
+ m_dateTime = longDateTimeFormat + QString(", ") + week + currentDateTime.toString(m_longTimeFormat);
+ break;
+ case 2:
+ m_dateTime = week + QString(", ") + longDateTimeFormat + currentDateTime.toString(m_longTimeFormat);
+ break;
+ default:
+ m_dateTime = longDateTimeFormat + QString(", ") + week + currentDateTime.toString(m_longTimeFormat);
+ break;
+ }
+ } else {
+ m_dateTime = currentDateTime.date().toString(Qt::SystemLocaleLongDate) + currentDateTime.toString(m_longTimeFormat);
+ }
+}
+
/**
* @brief DatetimeWidget::curTimeSize 调整时间日期字体大小
* @return 返回时间和日期绘制的区域大小
diff --git a/plugins/datetime/datetimewidget.h b/plugins/datetime/datetimewidget.h
index 42cba49..d6ab548 100644
--- a/plugins/datetime/datetimewidget.h
+++ b/plugins/datetime/datetimewidget.h
@@ -33,10 +33,11 @@ class DatetimeWidget : public QWidget
Q_OBJECT
public:
- explicit DatetimeWidget(QWidget *parent = 0);
+ explicit DatetimeWidget(QWidget *parent = nullptr);
- bool is24HourFormat() const { return m_24HourFormat; }
QSize sizeHint() const;
+ inline bool is24HourFormat() const { return m_24HourFormat; }
+ inline QString getDateTime() { return m_dateTime; }
protected:
void resizeEvent(QResizeEvent *event);
@@ -47,22 +48,34 @@ signals:
public slots:
void set24HourFormat(const bool value);
+ void updateDateTimeString();
private Q_SLOTS:
void setShortDateFormat(int type);
void setShortTimeFormat(int type);
+ void setLongDateFormat(int type);
+ void setWeekdayFormat(int type);
+ void setLongTimeFormat(int type);
private:
QSize curTimeSize() const;
+ void updateWeekdayFormat();
+ void updateLongTimeFormat();
private:
bool m_24HourFormat;
+ int m_longDateFormatType;
+ int m_longTimeFormatType;
+ int m_weekdayFormatType;
mutable QFont m_timeFont;
mutable QFont m_dateFont;
mutable int m_timeOffset;
Timedate *m_timedateInter;
QString m_shortDateFormat;
QString m_shortTimeFormat;
+ QString m_dateTime;
+ QString m_weekFormat;
+ QString m_longTimeFormat;
};
#endif // DATETIMEWIDGET_H
--
2.33.1

View File

@ -2,11 +2,12 @@
Name: dde-dock
Version: 5.4.56.2
Release: 3
Release: 4
Summary: Deepin desktop-environment - Dock module
License: GPLv3
URL: https://github.com/linuxdeepin/dde-dock
Source0: %{name}-%{version}.tar.gz
Source0: %{name}-%{version}.tar.gz
Patch0: 0001-feat-add-longdate-and-weekday-format.patch
BuildRequires: cmake
BuildRequires: libarchive
@ -90,6 +91,7 @@ sed -i 's|/usr/lib/dde-dock/plugins|%{_libdir}/dde-dock/plugins|' plugins/plugin
sed -i 's|local/lib/dde-dock/plugins|local/%{_lib}/dde-dock/plugins|' plugins/plugin-guide/plugins-developer-guide.md
sed -i 's|lrelease|lrelease-qt5|' translate_generation.sh
%patch0 -p1
%build
export PATH=%{_qt5_bindir}:$PATH
@ -120,6 +122,9 @@ export PATH=%{_qt5_bindir}:$PATH
%changelog
* Mon Mar 25 2024 liweigang <liweiganga@uniontech.com> - 5.4.56.2-4
- feat: add longdate and weekday format
* Wed Feb 28 2024 liuzhilin <liuzhilin@uniontech.com> - 5.4.56.2-3
- fix url in spec