ukui-panel/plugin-calendar/ukuicalendarwidget.cpp

161 lines
6.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/&gt;.
*
*/
#include "ukuicalendarwidget.h"
#include "../panel/iukuipanelplugin.h"
#include "kysdk/applications/windowmanager/windowmanager.h"
#include <QApplication>
#include <QDesktopWidget>
#include <QScreen>
#define WEBVIEW_WIDTH (454)
#define WEBVIEW_MAX_HEIGHT (704)
#define WEBVIEW_MIN_HEIGHT (600)
#define POPUP_BORDER_SPACING 4
#define CALENDAR_BUTTON_WIDTH 120
#define HOUR_SYSTEM_CONTROL "org.ukui.control-center.panel.plugins"
#define DATA_FORMAT "date" //日期格式yyyy/MM/dd、yyyy-MM-dd
#define TIME_FORMAT "hoursystem" //时间格式12小时制、24小时制
#define WEEK_FORMAT "firstday" //一周第一天:星期一、星期日
#define CALENDAR_FORMAT "calendar" //日历格式:公历-solarlunar、农历-lunar
#define PANEL_CONFIG "/usr/share/ukui/ukui-panel/panel-commission.ini"
const int WIDGET_GAP = 8;
UKUICalendarWidget::UKUICalendarWidget(IUKUIPanelPlugin *plugin, QWidget *parent) :
m_parent(parent),
m_plugin(plugin)
{
//加载翻译
translator();
//实例化日历的窗口
m_frmLunarWidget = new frmLunarCalendarWidget(); //新版日历
m_widget = new LunarCalendarWidget();
connect(m_widget,&LunarCalendarWidget::yijiChangeUp,m_frmLunarWidget,&frmLunarCalendarWidget::changeUpSize);
connect(m_widget,&LunarCalendarWidget::yijiChangeDown,m_frmLunarWidget,&frmLunarCalendarWidget::changeDownSize);
connect(m_widget,&LunarCalendarWidget::almanacChanged,m_frmLunarWidget,&frmLunarCalendarWidget::showAlmanac);
connect(m_frmLunarWidget,&frmLunarCalendarWidget::yijiFChangeDown, this, [=] (){ //日历的宜忌按钮取消
changeWidowpos();
});
connect(m_frmLunarWidget,&frmLunarCalendarWidget::yijiFChangeUp, this, [=] (){ //日历的宜忌按钮勾选
changeWidowpos();
});
//实例化任务栏日期按钮
m_calendarButton = new CalendarButton(plugin, this);
connect(m_calendarButton,&CalendarButton::pressShowHideCalendar,[=](){ //点击显示新版日历主窗口
if(!m_widget->isHidden()) {
m_widget->hide();
} else {
changeWidowpos(true);
}
});
//按钮布局
m_layout=new UKUi::GridLayout(this);
m_layout->addWidget(m_calendarButton);
m_layout->setAlignment(Qt::AlignCenter);
}
UKUICalendarWidget::~UKUICalendarWidget()
{
}
void UKUICalendarWidget::realign()
{
if (m_plugin->panel()->isHorizontal()) {
this->setFixedSize(CALENDAR_BUTTON_WIDTH,m_plugin->panel()->panelSize()-5);
} else {
this->setFixedSize(m_plugin->panel()->panelSize()-5,CALENDAR_BUTTON_WIDTH);
}
}
void UKUICalendarWidget::translator()
{
m_translator = new QTranslator(this);
QString locale = QLocale::system().name();
if (locale == "zh_CN"){
if (m_translator->load(QM_INSTALL))
qApp->installTranslator(m_translator);
else
qDebug() <<PLUGINNAME<<"Load translations file" << locale << "failed!";
} else if (locale == "bo_CN") {
if (m_translator->load(BO_QM_INSTALL)) {
qApp->installTranslator(m_translator);
} else {
qDebug() <<PLUGINNAME<<"Load translations file" << locale << "failed!";
}
}
}
/* 显示新版日历窗口 */
void UKUICalendarWidget::changeWidowpos(bool restore)
{
int totalHeight = qApp->primaryScreen()->size().height() + qApp->primaryScreen()->geometry().y();
int totalWidth = qApp->primaryScreen()->size().width() + qApp->primaryScreen()->geometry().x();
QRect rect;
switch (m_plugin->panel()->position()) {
case IUKUIPanel::PositionBottom:
rect.setRect(totalWidth-m_frmLunarWidget->width() - WIDGET_GAP,
totalHeight-m_plugin->panel()->panelSize()-m_frmLunarWidget->height()-WIDGET_GAP,
m_frmLunarWidget->width(),
m_frmLunarWidget->height());
break;
case IUKUIPanel::PositionTop:
rect.setRect(totalWidth-m_frmLunarWidget->width()-WIDGET_GAP,
qApp->primaryScreen()->geometry().y()+m_plugin->panel()->panelSize()+WIDGET_GAP,
m_frmLunarWidget->width(),
m_frmLunarWidget->height());
break;
case IUKUIPanel::PositionLeft:
rect.setRect(qApp->primaryScreen()->geometry().x()+m_plugin->panel()->panelSize()+WIDGET_GAP,
totalHeight-m_frmLunarWidget->height()-WIDGET_GAP,
m_frmLunarWidget->width(),
m_frmLunarWidget->height());
break;
case IUKUIPanel::PositionRight:
rect.setRect(totalWidth-m_plugin->panel()->panelSize()-m_frmLunarWidget->width()-WIDGET_GAP,
totalHeight-m_frmLunarWidget->height()-WIDGET_GAP,
m_frmLunarWidget->width(),
m_frmLunarWidget->height());
break;
default:
rect.setRect(qApp->primaryScreen()->geometry().x()+m_plugin->panel()->panelSize()+WIDGET_GAP,
totalHeight-m_frmLunarWidget->height(),
m_frmLunarWidget->width(),
m_frmLunarWidget->height());
break;
}
m_widget->setFixedSize(rect.width(),rect.height());
if(restore) {
// Q_EMIT(m_frmLunarWidget->onShowToday());
m_widget->showCalendar(true);
} else {
m_widget->showCalendar(false);
}
kdk::WindowManager::setGeometry(m_widget->windowHandle(),rect);
}