fix:148558中等一般未确认【UKUI需求 17140】【小插件】【日历】控制面板时间设置为12小时制,日历小插件的上下午信息未汉化

This commit is contained in:
wangguixi 2022-11-25 17:19:43 +08:00 committed by yan wang
parent b28a3cf615
commit 20b84a533d
17 changed files with 244 additions and 402 deletions

340
Time.qml
View File

@ -1,340 +0,0 @@
import QtQuick 2.0
import QtQml 2.12
import QtQuick.Layouts 1.12
import org.ukui.appwidget 1.0
import QtGraphicalEffects 1.0
//import QtQuick.Controls 2.0
AppWidget {
id:appwidget
appname: "time"
visible: true
width: 448*scalefactor
height: 162*scalefactor
anchors.centerIn: parent
property double scalefactor: 1.00
property string timeformat: "12";
property string dateformat: "cn"
property string hour;
property string minute;
property int hournumber;
property string week;
property string amorpm;
property bool v: false
property string themename;
property bool qmleffect: false
Timer {
id: gettime;
interval: 100;
running: true;
repeat: true;
triggeredOnStart: true
onTriggered: {
appwidget.hour = Qt.formatTime(new Date(),"hh");
appwidget.minute = Qt.formatTime(new Date(),"mm");
if(appwidget.timeformat === "12") {
appwidget.hournumber = Number(appwidget.hour);
if(appwidget.hournumber > 12) {
if(appwidget.dateformat == "cn") {
ampm.text = "下午"
}
else if(appwidget.dateformat == "en") {
ampm.text = "PM"
}
appwidget.hournumber -= 12;
}
else {
if(appwidget.dateformat == "cn") {
ampm.text = "上午"
}
else if(appwidget.dateformat == "en") {
ampm.text = "AM"
}
}
if(appwidget.hournumber < 10) {
time1rec.width = 244
time1.width = 244
// console.log("=12 =",time1rec.width);
}else {
time1rec.width = 294
time1.width = 294
// console.log("=12 =",time1rec.width);
}
appwidget.hour = appwidget.hournumber.toString();
time1.text = appwidget.hour + ":" + appwidget.minute
// console.log("=12=",time1.text);
}
else {
time2.text = appwidget.hour + ":" + appwidget.minute
// console.log("=24=",time2.text);
}
week1.text = Qt.formatDate(new Date(),"ddd")
week2.text = Qt.formatDate(new Date(),"ddd")
if(dateformat == "cn") {
date1.text = Qt.formatDate(new Date(),"MM/dd");
date2.text = Qt.formatDate(new Date(),"MM/dd");
}
if(dateformat == "en") {
date1.text = Qt.formatDate(new Date(),"MM-dd");
date2.text = Qt.formatDate(new Date(),"MM-dd");
}
}
}
Rectangle {
id :twelverec
color: "transparent"
// radius: 15
anchors.fill: parent
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: !v
Rectangle {
id :time1rec
color: "transparent"
// border.color: "green"
anchors.verticalCenter: parent.verticalCenter
width: 244*appwidget.scalefactor
height: 112*appwidget.scalefactor
Text {
id: time1
anchors.fill:parent
verticalAlignment: TextInput.AlignVCenter
color: "#FAFAFA"
font.pixelSize:112*appwidget.scalefactor
font.letterSpacing: 0
font.family: "STxihei"
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
}
Rectangle {
//
id :spacing1
width: 16*appwidget.scalefactor
height: 112*appwidget.scalefactor
anchors.left: time1rec.right
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
}
Rectangle {
id :daterec
color: "transparent"
// border.color: "pink"
width: 137*appwidget.scalefactor
height: 96*appwidget.scalefactor
anchors.verticalCenter: parent.verticalCenter
Layout.fillWidth: true
anchors.left: spacing1.right
ColumnLayout{
width: 137*appwidget.scalefactor
height: 96*appwidget.scalefactor
anchors.centerIn: parent
Text {
id: ampm
color: "#FAFAFA";
font.pixelSize:40*appwidget.scalefactor;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
RowLayout {
Text {
id: week1
color: "#FAFAFA";
font.pixelSize: 28*appwidget.scalefactor;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
Text {
id: date1
color: "#FAFAFA";
font.pixelSize: 28*appwidget.scalefactor;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
}
}
}
}
Rectangle{
id :twentyfoursystem
color: "transparent"
// radius: 15
anchors.fill: parent
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: v
Rectangle {
id :time2rec
color: "transparent"
// border.color: "pink"
anchors.verticalCenter: parent.verticalCenter
width: 294*appwidget.scalefactor
height: 112*appwidget.scalefactor
Text {
id: time2
anchors.fill:parent
verticalAlignment: TextInput.AlignVCenter
color: "#FAFAFA"
font.pixelSize:112*appwidget.scalefactor
font.letterSpacing:0
font.family: "STxihei"
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
}
Rectangle {
//
id :spacing2
width: 16*appwidget.scalefactor
height: 112*appwidget.scalefactor
anchors.left: time2rec.right
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
}
Rectangle {
color: "transparent"
width: 87*appwidget.scalefactor
height: 112*appwidget.scalefactor
Layout.fillWidth: true
anchors.verticalCenter: parent.verticalCenter
anchors.left: spacing2.right
ColumnLayout{
width: 87*appwidget.scalefactor
height: 112*appwidget.scalefactor
anchors.centerIn: parent
Layout.fillWidth: true
Text {
id: week2
color: "#FAFAFA";
font.pixelSize:40*appwidget.scalefactor;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
Text {
id: date2
color: "#FAFAFA";
font.pixelSize:40*appwidget.scalefactor;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
layer.enabled: appwidget.qmleffect
layer.effect: DropShadow {
verticalOffset: 1
color: "#40262626"
samples: 4
}
}
}
}
}
Component.onCompleted: {
initScalefactor()
gettime.start();
// appwidget.update.connect(appwidget.onupdate);
console.log("qml 接收到数据更新信号");
appwidget.creatGsetting("org.ukui.control-center.panel.plugins");
appwidget.gsettingUpdate.connect(appwidget.onGsettingUpdate);
timeformat = appwidget.getGsettingValue("org.ukui.control-center.panel.plugins","hoursystem");
dateformat = appwidget.getGsettingValue("org.ukui.control-center.panel.plugins","date");
if(timeformat == "24") {
v = true
}else {
v = false
}
console.log("当前gsetting为", timeformat, dateformat);
}
function onGsettingUpdate(key, value)
{
if(key === "hoursystem")
{
timeformat = value
if(timeformat == "24") {
v = true
}else {
v = false
}
}
if(key === "date")
{
dateformat = value
}
}
function initScalefactor()
{
//,
//
//console.log("", appwidget.parent.width,appwidget.parent.height);
if(appwidget.parent.width == 0 || appwidget.parent.height == 0) {
appwidget.scalefactor = 1.0
console.log("父类窗口大小为 0 默认缩放比为1.0")
return
}
appwidget.scalefactor = appwidget.parent.width/448
//console.log("", appwidget.scalefactor);
var tw = appwidget.scalefactor *448
var th = appwidget.scalefactor *162
//console.log("", tw,th ,appwidget.height);
if(th > appwidget.parent.height) {
appwidget.scalefactor = appwidget.parent.height/162
//console.log("", appwidget.scalefactor);
}
}
}

View File

@ -1,9 +0,0 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>data/time/time.conf</file>
<file>data/time/time.png</file>
<file>data/time/time.qml</file>
<file>Time.qml</file>
</qresource>
</RCC>

5
time/time.pro Normal file
View File

@ -0,0 +1,5 @@
TEMPLATE = subdirs
SUBDIRS += \
ukui-appwidget-time \
ukui-appwidget-time-service

View File

@ -0,0 +1,3 @@
[D-BUS Service]
Name=org.ukui.appwidget.provider.time
Exec=/usr/bin/ukui-appwidget-time-service

View File

@ -0,0 +1,8 @@
#include <QCoreApplication>
#include <timeprovider.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TimeProvider time;
return a.exec();
}

View File

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>data/org.ukui.appwidget.provider.time.service</file>
</qresource>
</RCC>

View File

@ -0,0 +1,65 @@
#include "timeprovider.h"
#include <ukui/kappwidgetmanager.h>
#include <unistd.h>
#define UKUI_CONTROL_CENTER_SERVER "org.freedesktop.Accounts"
//#define UKUI_CONTROL_CENTER_PATH "/org/freedesktop/Accounts/User1000"
#define UKUI_CONTROL_CENTER_INTERFACE "org.freedesktop.Accounts.User"
#define PROPERTIES_NAME "FormatsLocale"
TimeProvider::TimeProvider(QString providername, QObject *parent)
: KAppWidgetProvider(providername, parent)
{
QString UKUI_CONTROL_CENTER_PATH = "/org/freedesktop/Accounts/User" + QString("%1").arg(QString::number(getuid()));
m_interface = new QDBusInterface(UKUI_CONTROL_CENTER_SERVER,
UKUI_CONTROL_CENTER_PATH,
UKUI_CONTROL_CENTER_INTERFACE,
QDBusConnection::systemBus());
m_local = m_interface->property(PROPERTIES_NAME);
qDebug() << "当前FormatsLocale为" << m_local;
}
TimeProvider::~TimeProvider()
{
delete m_manager;
}
void TimeProvider::appWidgetRecevie(const QString &eventname,
const QString &widgetname,
const QDBusVariant &value)
{
Q_UNUSED(eventname);
Q_UNUSED(widgetname);
Q_UNUSED(value);
}
void TimeProvider::appWidgetUpdate()
{
QVariantMap m;
m.insert("FormatsLocale", m_local);
if(m_manager) {
m_manager->updateAppWidget("time", m);
qDebug() <<"更新时间小插件";
}
}
void TimeProvider::appWidgetDisable()
{
}
void TimeProvider::appWidgetDeleted()
{
}
void TimeProvider::appWidgetEnable()
{
if(!m_manager) {
m_manager = new AppWidget::KAppWidgetManager(this);
}
QVariantMap m;
m.insert("FormatsLocale" , m_local);
if(m_manager) {
m_manager->updateAppWidget("time", m);
qDebug() <<"更新时间小插件";
}
}
void TimeProvider::appWidgetClicked(const QString &widgetname, const QDBusVariant &value)
{
Q_UNUSED(widgetname);
Q_UNUSED(value);
}

View File

@ -0,0 +1,25 @@
#ifndef TIMEPROVIDER_H
#define TIMEPROVIDER_H
#include <QtDBus/QtDBus>
#include <ukui/kappwidgetprovider.h>
namespace AppWidget {
class KAppWidgetManager;
}
class TimeProvider:public AppWidget::KAppWidgetProvider
{
public:
TimeProvider(QString providername = "time",QObject *parent = nullptr);
~TimeProvider();
void appWidgetRecevie(const QString &eventname, const QString &widgetname, const QDBusVariant &value);
void appWidgetUpdate();
void appWidgetDisable();
void appWidgetDeleted();
void appWidgetEnable();
void appWidgetClicked(const QString &widgetname, const QDBusVariant &value);
private:
AppWidget::KAppWidgetManager * m_manager = nullptr;
QDBusInterface *m_interface = nullptr;
QVariant m_local;
};
#endif // TIMEPROVIDER_H

View File

@ -0,0 +1,34 @@
QT -= gui
QT += dbus
CONFIG += c++11 console
CONFIG -= app_bundle
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
LIBS += -lukui-appwidget-manager -lukui-appwidget-provider
SOURCES += \
main.cpp \
timeprovider.cpp
# Default rules for deployment.
qnx: target.path = /usr/bin/
else: unix:!android: target.path = /usr/bin/
timeservice.files += data/org.ukui.appwidget.provider.time.service
timeservice.path += /usr/share/dbus-1/services/
INSTALLS += target timeservice
HEADERS += \
timeprovider.h
RESOURCES += \
src.qrc

View File

@ -1,7 +1,7 @@
[AppWidget]
name = time
providerName = clock
previewPath = /usr/share/appwidgetdemo/clock/time.png
providerName = time
previewPath = /usr/share/appwidgetdemo/time/time.png
qmlFile = /usr/share/appwidget/qml/time.qml
zoom = false
rightButton = false

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -13,7 +13,8 @@ AppWidget {
anchors.centerIn: parent
property double scalefactor: 1.00
property string timeformat: "12";
property string dateformat: "cn"
property string dateformat: "cn";
property string locale: "zh_CN.UTF-8"
property string hour;
property string minute;
property int hournumber;
@ -22,6 +23,8 @@ AppWidget {
property bool v: false
property string themename;
property bool qmleffect: false
property bool qmlenable: true
Timer {
id: gettime;
@ -35,19 +38,19 @@ AppWidget {
if(appwidget.timeformat === "12") {
appwidget.hournumber = Number(appwidget.hour);
if(appwidget.hournumber > 12) {
if(appwidget.dateformat == "cn") {
if(appwidget.locale == "zh_CN.UTF-8") {
ampm.text = "下午"
}
else if(appwidget.dateformat == "en") {
else if(appwidget.locale == "en_US.UTF-8") {
ampm.text = "PM"
}
appwidget.hournumber -= 12;
}
else {
if(appwidget.dateformat == "cn") {
if(appwidget.locale == "zh_CN.UTF-8") {
ampm.text = "上午"
}
else if(appwidget.dateformat == "en") {
else if(appwidget.locale == "en_US.UTF-8") {
ampm.text = "AM"
}
}
@ -93,6 +96,11 @@ AppWidget {
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: !v
Component.onCompleted:{
console.log("===aaaa=======",twelverec.width,twelverec.height)
console.log("=====",appwidget.scalefactor)
}
Rectangle {
id :time1rec
color: "transparent"
@ -241,6 +249,7 @@ AppWidget {
anchors.verticalCenter: parent.verticalCenter
anchors.left: spacing2.right
ColumnLayout{
width: 87*appwidget.scalefactor
height: 112*appwidget.scalefactor
@ -284,7 +293,9 @@ AppWidget {
initScalefactor()
gettime.start();
// appwidget.update.connect(appwidget.onupdate);
appwidget.update.connect(appwidget.onupdate);
userStatusChangedSignal.connect(onUserStatusChanged)
console.log("qml 接收到数据更新信号");
appwidget.creatGsetting("org.ukui.control-center.panel.plugins");
@ -298,6 +309,17 @@ AppWidget {
}
console.log("当前gsetting为", timeformat, dateformat);
}
function onupdate()
{
for (var i in appwidget.datavalue)
{
var info = appwidget.datavalue[i];
if( i === "FormatsLocale") {
console.log("date", info);
appwidget.locale = info;
}
}
}
function onGsettingUpdate(key, value)
{
if(key === "hoursystem")
@ -318,7 +340,7 @@ AppWidget {
{
//,
//
//console.log("", appwidget.parent.width,appwidget.parent.height);
console.log("父类窗口大小", appwidget.parent.width,appwidget.parent.height);
if(appwidget.parent.width == 0 || appwidget.parent.height == 0) {
appwidget.scalefactor = 1.0
console.log("父类窗口大小为 0 默认缩放比为1.0")
@ -334,6 +356,16 @@ AppWidget {
//console.log("", appwidget.scalefactor);
}
}
function onUserStatusChanged(status)
{
console.log("qml Appwidget demosearch user status changed ", status);
if(status === "Normal") {
appwidget.qmlenable = true;
}else if(status === "Editable") {
appwidget.qmlenable = false;
}
}
}

View File

@ -1,23 +1,25 @@
import QtQuick 2.12
import QtQuick.Window 2.12
//import QtQuick.Controls 2.12
Window {
visible: true
width: 640
height: 480
color: "transparent"
title: qsTr("Hello World")
Rectangle{
width: 300
height: 200
// color: "transparent"
id:rec
anchors.centerIn: parent
width: 448
height:162
color: "transparent"
border.color: "green"
Time{
Loader{
source: "/data/time.qml"
}
}
}
}
}

View File

@ -0,0 +1,8 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>data/time.qml</file>
<file>data/time.png</file>
<file>data/time.conf</file>
</qresource>
</RCC>

View File

@ -0,0 +1,36 @@
QT += quick
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Refer to the documentation for the
# deprecated API to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
# Default rules for deployment.
target.path = /usr/bin
timeqml.files += data/time.qml
timeqml.path = /usr/share/appwidget/qml/
timeconf.files += data/time.conf
timeconf.path = /usr/share/appwidget/config/
timepreview.files += data/time.png
timepreview.path = /usr/share/appwidgetdemo/time/
INSTALLS += target timeqml timepreview timeconf

View File

@ -1,36 +1,4 @@
QT += quick
TEMPLATE = subdirs
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Refer to the documentation for the
# deprecated API to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
# Default rules for deployment.
target.path = /usr/bin
timeqml.files += data/time/time.qml
timeqml.path = /usr/share/appwidget/qml/
timecong.files += data/time/time.conf
timecong.path = /usr/share/appwidget/config/
timepreview.files += data/time/time.png
timepreview.path = /usr/share/appwidgetdemo/clock/
INSTALLS += target timeqml timepreview timecong
SUBDIRS += \
time