~ubuntu-branches/ubuntu/trusty/chinese-calendar/trusty-proposed

« back to all changes in this revision

Viewing changes to chinesecalendar.cpp

  • Committer: Package Import Robot
  • Author(s): abelsaber (Yes,it's true)
  • Date: 2013-02-01 13:39:52 UTC
  • Revision ID: package-import@ubuntu.com-20130201133952-upa3vb0mmnoqzxlw
Tags: upstream-0.7.4
Import upstream version 0.7.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * This file is part of the chinese-calendar project
 
3
 * Copyright (C) 2013 National University of Defense Technology(NUDT) & Kylin Ltd
 
4
 *
 
5
 * This program is free software: you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License version 3 as
 
7
 * published by the Free Software Foundation.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 * GNU General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
16
 *
 
17
 * This project is developed by "UbuntuKylin Members" team,
 
18
 * see <https://launchpad.net/~ubuntukylin~members>
 
19
 * Authors: Abel Liu <guiltyritter@gmail.com>
 
20
 *                 Shine Huang <hostc@163.com>
 
21
 */
 
22
 
 
23
#include "chinesecalendar.h"
 
24
 
 
25
ChineseCalendar::ChineseCalendar(QWidget *parent)
 
26
    : QWidget(parent)
 
27
{
 
28
    setupUi(this);
 
29
 
 
30
    bg = new QPixmap(":/img/chinesecalendarBGyellow.png");
 
31
    icon = QIcon(":/img/chinesecalendar.png");
 
32
    mycalendat=new CCBO;
 
33
    mycalendat->InitConnection(QDir::currentPath ());
 
34
    selectedDate = QDate::currentDate();
 
35
        monthCombo->setCurrentIndex(selectedDate.month() - 1);
 
36
    YearSelect->setDate(selectedDate);
 
37
    connect(monthCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setMonth(int)));
 
38
    connect(monthCombo, SIGNAL(activated(int)), this, SLOT(setMonth(int)));
 
39
    connect(YearSelect, SIGNAL(dateChanged(QDate)), this, SLOT(setYear(QDate)));
 
40
    connect(this->backtotoday, SIGNAL(clicked()), this, SLOT(backtoday()));
 
41
 
 
42
    this->TbnextMonth->setStyleSheet("QPushButton{background-color:transparent;color:rgb(200,200,150);}QPushButton:hover{color:rgb(255,255,255);}");
 
43
    this->TbnextYear->setStyleSheet("QPushButton{background-color:transparent;color:rgb(200,200,150);}QPushButton:hover{color:rgb(255,255,255);}");
 
44
    this->TbpreviousMonth->setStyleSheet("QPushButton{background-color:transparent;color:rgb(200,200,150);}QPushButton:hover{color:rgb(255,255,255);}");
 
45
    this->TbpreviousYear->setStyleSheet("QPushButton{background-color:transparent;color:rgb(200,200,150);}QPushButton:hover{color:rgb(255,255,255);}");
 
46
    this->backtotoday->setStyleSheet("QPushButton{background-color:transparent;color:rgb(200,200,150);}QPushButton:hover{color:rgb(255,255,255);}");
 
47
    this->YearSelect->setStyleSheet("QDateEdit{border: 2px solid lightgray;border-radius: 5px;}");
 
48
    this->monthCombo->setStyleSheet("QComboBox{border: 2px solid lightgray;border-radius: 5px;font:12pt;}");
 
49
    this->label->setStyleSheet("QLabel{font:12pt;}");
 
50
    this->label_2->setStyleSheet("QLabel{font:12pt;}");
 
51
 
 
52
    QDateTime dateTime;
 
53
    QString currentTime;
 
54
    QString week;
 
55
    dateTime = QDateTime::currentDateTime();
 
56
    if(dateTime.toString("ddd") == "Mon")
 
57
        week = "星期一";
 
58
    if(dateTime.toString("ddd") == "Tue")
 
59
        week = "星期二";
 
60
    if(dateTime.toString("ddd") == "Wed")
 
61
        week = "星期三";
 
62
    if(dateTime.toString("ddd") == "Thu")
 
63
        week = "星期四";
 
64
    if(dateTime.toString("ddd") == "Fri")
 
65
        week = "星期五";
 
66
    if(dateTime.toString("ddd") == "Sat")
 
67
        week = "星期六";
 
68
    if(dateTime.toString("ddd") == "Sun")
 
69
        week = "星期日";
 
70
    currentTime = dateTime.toString("yyyy-MM-dd %1").arg(week);
 
71
    QDate day = QDate::currentDate();
 
72
    struct CCalendar datebase;
 
73
    mycalendat->ctcl_solar_to_lunar(day.year(),day.month(),day.day(),&datebase);
 
74
    QString chinesemonth = datebase.cmonth;
 
75
    if (chinesemonth == "一月")
 
76
        chinesemonth = "正月";
 
77
    if (chinesemonth == "十一月")
 
78
        chinesemonth = "冬月";
 
79
    if (chinesemonth == "十二月")
 
80
        chinesemonth = "腊月";
 
81
    QString chineseday = QString("农历 %1%2").arg(chinesemonth).arg(datebase.cday);
 
82
    QString chineseyear = QString("%1年(%2年)").arg(datebase.ganzhi).arg(datebase.shengxiao);
 
83
 
 
84
    QFont font;
 
85
    QPalette pa;
 
86
    font.setPointSize(48);
 
87
    font.setBold(true);
 
88
    this->label_10->setFont(font);
 
89
    this->label_10->setText(QString::number(day.day()));
 
90
    font.setBold(false);
 
91
    font.setPointSize(9);
 
92
    this->label_12->setFont(font);
 
93
    this->label_12->setText(currentTime);
 
94
    font.setPointSize(10);
 
95
    this->label_13->setFont(font);
 
96
    this->label_13->setText(chineseday);
 
97
    this->label_14->setFont(font);
 
98
    this->label_14->setText(chineseyear);
 
99
    font.setPointSize(15);
 
100
    this->label_15->setFont(font);
 
101
 
 
102
    pa.setColor(QPalette::WindowText,Qt::white);
 
103
    this->label->setPalette(pa);
 
104
    this->label_2->setPalette(pa);
 
105
    this->label_15->setPalette(pa);
 
106
    this->label_4->setPalette(pa);
 
107
    this->label_5->setPalette(pa);
 
108
    this->label_6->setPalette(pa);
 
109
    this->label_7->setPalette(pa);
 
110
    this->label_8->setPalette(pa);
 
111
 
 
112
    pa.setColor(QPalette::WindowText,QColor(255,255,255));
 
113
    this->label_3->setPalette(pa);
 
114
    this->label_9->setPalette(pa);
 
115
 
 
116
    pa.setColor(QPalette::WindowText,Qt::red);
 
117
    this->label_10->setPalette(pa);
 
118
    this->label_11->setPalette(pa);
 
119
    this->label_12->setPalette(pa);
 
120
    this->label_13->setPalette(pa);
 
121
    this->label_14->setPalette(pa);
 
122
 
 
123
    map = new QMap<QString, DateItem *>();
 
124
    DateItem *dateitem00 = new DateItem(this);
 
125
    dateitem00->show();
 
126
    map->insert(QString("1-1"), dateitem00 );
 
127
    connect(dateitem00, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
128
 
 
129
    DateItem *dateitem01 = new DateItem(this);
 
130
    dateitem01->show();
 
131
    map->insert(QString("1-2"), dateitem01 );
 
132
    connect(dateitem01, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
133
 
 
134
    DateItem *dateitem02 = new DateItem(this);
 
135
    dateitem02->show();
 
136
    map->insert(QString("1-3"), dateitem02 );
 
137
    connect(dateitem02, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
138
 
 
139
    DateItem *dateitem03 = new DateItem(this);
 
140
    dateitem03->show();
 
141
    map->insert(QString("1-4"), dateitem03 );
 
142
    connect(dateitem03, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
143
 
 
144
    DateItem *dateitem04 = new DateItem(this);
 
145
    dateitem04->show();
 
146
    map->insert(QString("1-5"), dateitem04 );
 
147
    connect(dateitem04, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
148
 
 
149
    DateItem *dateitem05 = new DateItem(this);
 
150
    dateitem05->show();
 
151
    map->insert(QString("1-6"), dateitem05 );
 
152
    connect(dateitem05, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
153
 
 
154
    DateItem *dateitem06 = new DateItem(this);
 
155
    dateitem06->show();
 
156
    map->insert(QString("1-7"), dateitem06 );
 
157
    connect(dateitem06, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
158
 
 
159
    DateItem *dateitem10 = new DateItem(this);
 
160
    dateitem10->show();
 
161
    map->insert(QString("2-1"), dateitem10 );
 
162
    connect(dateitem10, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
163
 
 
164
    DateItem *dateitem11 = new DateItem(this);
 
165
    dateitem11->show();
 
166
    map->insert(QString("2-2"), dateitem11 );
 
167
    connect(dateitem11, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
168
 
 
169
    DateItem *dateitem12 = new DateItem(this);
 
170
    dateitem12->show();
 
171
    map->insert(QString("2-3"), dateitem12 );
 
172
    connect(dateitem12, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
173
 
 
174
    DateItem *dateitem13 = new DateItem(this);
 
175
    dateitem13->show();
 
176
    map->insert(QString("2-4"), dateitem13 );
 
177
    connect(dateitem13, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
178
 
 
179
    DateItem *dateitem14 = new DateItem(this);
 
180
    dateitem14->show();
 
181
    map->insert(QString("2-5"), dateitem14 );
 
182
    connect(dateitem14, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
183
 
 
184
    DateItem *dateitem15 = new DateItem(this);
 
185
    dateitem15->show();
 
186
    map->insert(QString("2-6"), dateitem15 );
 
187
    connect(dateitem15, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
188
 
 
189
    DateItem *dateitem16 = new DateItem(this);
 
190
    dateitem16->show();
 
191
    map->insert(QString("2-7"), dateitem16 );
 
192
    connect(dateitem16, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
193
 
 
194
    DateItem *dateitem20 = new DateItem(this);
 
195
    dateitem20->show();
 
196
    map->insert(QString("3-1"), dateitem20 );
 
197
    connect(dateitem20, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
198
 
 
199
    DateItem *dateitem21 = new DateItem(this);
 
200
    dateitem21->show();
 
201
    map->insert(QString("3-2"), dateitem21 );
 
202
    connect(dateitem21, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
203
 
 
204
    DateItem *dateitem22 = new DateItem(this);
 
205
    dateitem22->show();
 
206
    map->insert(QString("3-3"), dateitem22 );
 
207
    connect(dateitem22, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
208
 
 
209
    DateItem *dateitem23 = new DateItem(this);
 
210
    dateitem23->show();
 
211
    map->insert(QString("3-4"), dateitem23 );
 
212
    connect(dateitem23, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
213
 
 
214
    DateItem *dateitem24 = new DateItem(this);
 
215
    dateitem24->show();
 
216
    map->insert(QString("3-5"), dateitem24 );
 
217
    connect(dateitem24, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
218
 
 
219
    DateItem *dateitem25 = new DateItem(this);
 
220
    dateitem25->show();
 
221
    map->insert(QString("3-6"), dateitem25 );
 
222
    connect(dateitem25, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
223
 
 
224
    DateItem *dateitem26 = new DateItem(this);
 
225
    dateitem26->show();
 
226
    map->insert(QString("3-7"), dateitem26 );
 
227
    connect(dateitem26, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
228
 
 
229
    DateItem *dateitem30 = new DateItem(this);
 
230
    dateitem30->show();
 
231
    map->insert(QString("4-1"), dateitem30 );
 
232
    connect(dateitem30, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
233
 
 
234
    DateItem *dateitem31 = new DateItem(this);
 
235
    dateitem31->show();
 
236
    map->insert(QString("4-2"), dateitem31 );
 
237
    connect(dateitem31, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
238
 
 
239
    DateItem *dateitem32 = new DateItem(this);
 
240
    dateitem32->show();
 
241
    map->insert(QString("4-3"), dateitem32 );
 
242
    connect(dateitem32, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
243
 
 
244
    DateItem *dateitem33 = new DateItem(this);
 
245
    dateitem33->show();
 
246
    map->insert(QString("4-4"), dateitem33 );
 
247
    connect(dateitem33, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
248
 
 
249
    DateItem *dateitem34 = new DateItem(this);
 
250
    dateitem34->show();
 
251
    map->insert(QString("4-5"), dateitem34 );
 
252
    connect(dateitem34, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
253
 
 
254
    DateItem *dateitem35 = new DateItem(this);
 
255
    dateitem35->show();
 
256
    map->insert(QString("4-6"), dateitem35 );
 
257
    connect(dateitem35, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
258
 
 
259
    DateItem *dateitem36 = new DateItem(this);
 
260
    dateitem36->show();
 
261
    map->insert(QString("4-7"), dateitem36 );
 
262
    connect(dateitem36, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
263
 
 
264
    DateItem *dateitem40 = new DateItem(this);
 
265
    dateitem40->show();
 
266
    map->insert(QString("5-1"), dateitem40 );
 
267
    connect(dateitem40, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
268
 
 
269
    DateItem *dateitem41 = new DateItem(this);
 
270
    dateitem41->show();
 
271
    map->insert(QString("5-2"), dateitem41 );
 
272
    connect(dateitem41, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
273
 
 
274
    DateItem *dateitem42 = new DateItem(this);
 
275
    dateitem42->show();
 
276
    map->insert(QString("5-3"), dateitem42 );
 
277
    connect(dateitem42, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
278
 
 
279
    DateItem *dateitem43 = new DateItem(this);
 
280
    dateitem43->show();
 
281
    map->insert(QString("5-4"), dateitem43 );
 
282
    connect(dateitem43, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
283
 
 
284
    DateItem *dateitem44 = new DateItem(this);
 
285
    dateitem44->show();
 
286
    map->insert(QString("5-5"), dateitem44 );
 
287
    connect(dateitem44, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
288
 
 
289
    DateItem *dateitem45 = new DateItem(this);
 
290
    dateitem45->show();
 
291
    map->insert(QString("5-6"), dateitem45 );
 
292
    connect(dateitem45, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
293
 
 
294
    DateItem *dateitem46 = new DateItem(this);
 
295
    dateitem46->show();
 
296
    map->insert(QString("5-7"), dateitem46 );
 
297
    connect(dateitem46, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
298
 
 
299
    DateItem *dateitem50 = new DateItem(this);
 
300
    dateitem50->hide();
 
301
    map->insert(QString("6-1"), dateitem50 );
 
302
    connect(dateitem50, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
303
 
 
304
    DateItem *dateitem51 = new DateItem(this);
 
305
    dateitem51->hide();
 
306
    map->insert(QString("6-2"), dateitem51 );
 
307
    connect(dateitem51, SIGNAL(clicked(QString)), this, SLOT(resetcalendardate(QString)));
 
308
 
 
309
    DateItem *dateitem52 = new DateItem(this);
 
310
    dateitem52->hide();
 
311
    map->insert(QString("6-3"), dateitem52 );
 
312
 
 
313
    DateItem *dateitem53 = new DateItem(this);
 
314
    dateitem53->hide();
 
315
    map->insert(QString("6-4"), dateitem53 );
 
316
 
 
317
    DateItem *dateitem54 = new DateItem(this);
 
318
    dateitem54->hide();
 
319
    map->insert(QString("6-5"), dateitem54 );
 
320
 
 
321
    DateItem *dateitem55 = new DateItem(this);
 
322
    dateitem55->hide();
 
323
    map->insert(QString("6-6"), dateitem55 );
 
324
 
 
325
    DateItem *dateitem56 = new DateItem(this);
 
326
    dateitem56->hide();
 
327
    map->insert(QString("6-7"), dateitem56 );
 
328
 
 
329
    setItemLayout();
 
330
    setCalendar();
 
331
 
 
332
    QTimer *timer = new QTimer(this);
 
333
    timer->setInterval(1000);
 
334
    connect(timer,SIGNAL(timeout()),this,SLOT(setTime()));
 
335
    timer->start();
 
336
 
 
337
    QBitmap objBitmap(size());
 
338
    QPainter painter(&objBitmap);
 
339
    painter.fillRect(rect(),Qt::white);
 
340
    painter.setBrush(QColor(0,0,0));
 
341
    painter.drawRoundedRect(this->rect(),10,10);
 
342
    setMask(objBitmap);
 
343
 
 
344
//    Display *dis = QX11Info::display ();
 
345
//    Atom atom_task = XInternAtom(QX11Info::display (),"_NET_WM_STATE_SKIP_TASKBAR",False);
 
346
//    Atom atom =  XInternAtom(dis,"_NET_WM_STATE",False);
 
347
//    XChangeProperty(dis,winId(),atom,XA_ATOM,32,PropModeAppend,(unsigned char *)&atom_task,1);
 
348
 
 
349
    this->createTray();
 
350
}
 
351
 
 
352
ChineseCalendar::~ChineseCalendar()
 
353
{
 
354
  delete mycalendat;
 
355
}
 
356
 
 
357
void ChineseCalendar::createTray()
 
358
{
 
359
    this->actionShow = new QAction(tr("隐藏/显示"), this);
 
360
    connect(actionShow, SIGNAL(triggered()), this, SLOT(showOrHide()));
 
361
 
 
362
    this->actionStaysOnTop = new QAction(tr("总在最前"), this);
 
363
    this->actionStaysOnTop->setCheckable(true);
 
364
    connect(actionStaysOnTop, SIGNAL(triggered()), this, SLOT(setMode()));
 
365
 
 
366
    this->actionStaysOnBottom = new QAction(tr("总在最后"), this);
 
367
    this->actionStaysOnBottom->setCheckable(true);
 
368
    connect(actionStaysOnBottom, SIGNAL(triggered()), this, SLOT(setMode()));
 
369
 
 
370
    this->actionStaysNormal = new QAction(tr("普通模式"), this);
 
371
    this->actionStaysNormal->setCheckable(true);
 
372
    this->actionStaysNormal->setChecked(true);
 
373
    connect(actionStaysNormal, SIGNAL(triggered()), this, SLOT(setMode()));
 
374
 
 
375
    this->ag = new QActionGroup(this);
 
376
    this->ag->addAction(actionStaysOnTop);
 
377
    this->ag->addAction(actionStaysOnBottom);
 
378
    this->ag->addAction(actionStaysNormal);
 
379
 
 
380
    this->actionQuit = new QAction(tr("退出程序"), this);
 
381
    connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
 
382
 
 
383
    this->trayMenu = new QMenu(this);
 
384
    this->trayMenu->addAction(actionShow);
 
385
    this->trayMenu->addSeparator();
 
386
    this->trayMenu->addAction(actionStaysOnTop);
 
387
    this->trayMenu->addAction(actionStaysOnBottom);
 
388
    this->trayMenu->addAction(actionStaysNormal);
 
389
    this->trayMenu->addSeparator();
 
390
    this->trayMenu->addAction(actionQuit);
 
391
 
 
392
    this->trayIcon = new QSystemTrayIcon(this);
 
393
    this->trayIcon->setIcon(icon);
 
394
    this->trayIcon->setContextMenu(trayMenu);
 
395
    this->trayIcon->show();
 
396
}
 
397
 
 
398
void ChineseCalendar::paintEvent(QPaintEvent *)
 
399
{
 
400
    QPainter painter(this);
 
401
    painter.drawPixmap(0,0,width(),height(),*bg);
 
402
 
 
403
//    painter.setPen(Qt::gray);
 
404
    painter.setPen(QColor(255,121,3,100));
 
405
 
 
406
    if(!isTall)
 
407
    {
 
408
    //row
 
409
        painter.drawLine(5,108,390,108);
 
410
        painter.drawLine(5,147,390,147);
 
411
        painter.drawLine(5,186,390,186);
 
412
        painter.drawLine(5,225,390,225);
 
413
        painter.drawLine(5,264,390,264);
 
414
//        painter.drawLine(5,303,390,303);
 
415
    }
 
416
    else
 
417
    {
 
418
        painter.drawLine(5,116,390,116);
 
419
        painter.drawLine(5,163,390,163);
 
420
        painter.drawLine(5,210,390,210);
 
421
        painter.drawLine(5,257,390,257);
 
422
//        painter.drawLine(5,304,390,304);
 
423
    }
 
424
    //column
 
425
    painter.drawLine(60,69,60,303);
 
426
    painter.drawLine(115,69,115,303);
 
427
    painter.drawLine(170,69,170,303);
 
428
    painter.drawLine(225,69,225,303);
 
429
    painter.drawLine(280,69,280,303);
 
430
    painter.drawLine(335,69,335,303);
 
431
}
 
432
 
 
433
void ChineseCalendar::setItemLayout()
 
434
{
 
435
    if(isTall == false)
 
436
    {
 
437
        map->value("1-1")->resizeItem(55,47);
 
438
        map->value("1-2")->resizeItem(55,47);
 
439
        map->value("1-3")->resizeItem(55,47);
 
440
        map->value("1-4")->resizeItem(55,47);
 
441
        map->value("1-5")->resizeItem(55,47);
 
442
        map->value("1-6")->resizeItem(55,47);
 
443
        map->value("1-7")->resizeItem(55,47);
 
444
        map->value("2-1")->resizeItem(55,47);
 
445
        map->value("2-2")->resizeItem(55,47);
 
446
        map->value("2-3")->resizeItem(55,47);
 
447
        map->value("2-4")->resizeItem(55,47);
 
448
        map->value("2-5")->resizeItem(55,47);
 
449
        map->value("2-6")->resizeItem(55,47);
 
450
        map->value("2-7")->resizeItem(55,47);
 
451
        map->value("3-1")->resizeItem(55,47);
 
452
        map->value("3-2")->resizeItem(55,47);
 
453
        map->value("3-3")->resizeItem(55,47);
 
454
        map->value("3-4")->resizeItem(55,47);
 
455
        map->value("3-5")->resizeItem(55,47);
 
456
        map->value("3-6")->resizeItem(55,47);
 
457
        map->value("3-7")->resizeItem(55,47);
 
458
        map->value("4-1")->resizeItem(55,47);
 
459
        map->value("4-2")->resizeItem(55,47);
 
460
        map->value("4-3")->resizeItem(55,47);
 
461
        map->value("4-4")->resizeItem(55,47);
 
462
        map->value("4-5")->resizeItem(55,47);
 
463
        map->value("4-6")->resizeItem(55,47);
 
464
        map->value("4-7")->resizeItem(55,47);
 
465
        map->value("5-1")->resizeItem(55,47);
 
466
        map->value("5-2")->resizeItem(55,47);
 
467
        map->value("5-3")->resizeItem(55,47);
 
468
        map->value("5-4")->resizeItem(55,47);
 
469
        map->value("5-5")->resizeItem(55,47);
 
470
        map->value("5-6")->resizeItem(55,47);
 
471
        map->value("5-7")->resizeItem(55,47);
 
472
        map->value("6-1")->resizeItem(55,47);
 
473
        map->value("6-2")->resizeItem(55,47);
 
474
        map->value("6-3")->resizeItem(55,47);
 
475
        map->value("6-4")->resizeItem(55,47);
 
476
        map->value("6-5")->resizeItem(55,47);
 
477
        map->value("6-6")->resizeItem(55,47);
 
478
        map->value("6-7")->resizeItem(55,47);
 
479
        isTall = true;
 
480
    }
 
481
    map->value("1-1")->move(5,69);
 
482
    map->value("1-2")->move(60,69);
 
483
    map->value("1-3")->move(115,69);
 
484
    map->value("1-4")->move(170,69);
 
485
    map->value("1-5")->move(225,69);
 
486
    map->value("1-6")->move(280,69);
 
487
    map->value("1-7")->move(335,69);
 
488
    map->value("2-1")->move(5,116);
 
489
    map->value("2-2")->move(60,116);
 
490
    map->value("2-3")->move(115,116);
 
491
    map->value("2-4")->move(170,116);
 
492
    map->value("2-5")->move(225,116);
 
493
    map->value("2-6")->move(280,116);
 
494
    map->value("2-7")->move(335,116);
 
495
    map->value("3-1")->move(5,163);
 
496
    map->value("3-2")->move(60,163);
 
497
    map->value("3-3")->move(115,163);
 
498
    map->value("3-4")->move(170,163);
 
499
    map->value("3-5")->move(225,163);
 
500
    map->value("3-6")->move(280,163);
 
501
    map->value("3-7")->move(335,163);
 
502
    map->value("4-1")->move(5,210);
 
503
    map->value("4-2")->move(60,210);
 
504
    map->value("4-3")->move(115,210);
 
505
    map->value("4-4")->move(170,210);
 
506
    map->value("4-5")->move(225,210);
 
507
    map->value("4-6")->move(280,210);
 
508
    map->value("4-7")->move(335,210);
 
509
    map->value("5-1")->move(5,257);
 
510
    map->value("5-2")->move(60,257);
 
511
    map->value("5-3")->move(115,257);
 
512
    map->value("5-4")->move(170,257);
 
513
    map->value("5-5")->move(225,257);
 
514
    map->value("5-6")->move(280,257);
 
515
    map->value("5-7")->move(335,257);
 
516
    map->value("6-1")->move(5,304);
 
517
    map->value("6-2")->move(60,304);
 
518
    map->value("6-3")->move(115,304);
 
519
    map->value("6-4")->move(170,304);
 
520
    map->value("6-5")->move(225,304);
 
521
    map->value("6-6")->move(280,304);
 
522
    map->value("6-7")->move(335,304);
 
523
}
 
524
 
 
525
void ChineseCalendar::resetItemLayout()
 
526
{
 
527
    map->value("1-1")->resizeItem(55,39);
 
528
    map->value("1-2")->resizeItem(55,39);
 
529
    map->value("1-3")->resizeItem(55,39);
 
530
    map->value("1-4")->resizeItem(55,39);
 
531
    map->value("1-5")->resizeItem(55,39);
 
532
    map->value("1-6")->resizeItem(55,39);
 
533
    map->value("1-7")->resizeItem(55,39);
 
534
    map->value("2-1")->resizeItem(55,39);
 
535
    map->value("2-2")->resizeItem(55,39);
 
536
    map->value("2-3")->resizeItem(55,39);
 
537
    map->value("2-4")->resizeItem(55,39);
 
538
    map->value("2-5")->resizeItem(55,39);
 
539
    map->value("2-6")->resizeItem(55,39);
 
540
    map->value("2-7")->resizeItem(55,39);
 
541
    map->value("3-1")->resizeItem(55,39);
 
542
    map->value("3-2")->resizeItem(55,39);
 
543
    map->value("3-3")->resizeItem(55,39);
 
544
    map->value("3-4")->resizeItem(55,39);
 
545
    map->value("3-5")->resizeItem(55,39);
 
546
    map->value("3-6")->resizeItem(55,39);
 
547
    map->value("3-7")->resizeItem(55,39);
 
548
    map->value("4-1")->resizeItem(55,39);
 
549
    map->value("4-2")->resizeItem(55,39);
 
550
    map->value("4-3")->resizeItem(55,39);
 
551
    map->value("4-4")->resizeItem(55,39);
 
552
    map->value("4-5")->resizeItem(55,39);
 
553
    map->value("4-6")->resizeItem(55,39);
 
554
    map->value("4-7")->resizeItem(55,39);
 
555
    map->value("5-1")->resizeItem(55,39);
 
556
    map->value("5-2")->resizeItem(55,39);
 
557
    map->value("5-3")->resizeItem(55,39);
 
558
    map->value("5-4")->resizeItem(55,39);
 
559
    map->value("5-5")->resizeItem(55,39);
 
560
    map->value("5-6")->resizeItem(55,39);
 
561
    map->value("5-7")->resizeItem(55,39);
 
562
    map->value("6-1")->resizeItem(55,39);
 
563
    map->value("6-2")->resizeItem(55,39);
 
564
    map->value("6-3")->resizeItem(55,39);
 
565
    map->value("6-4")->resizeItem(55,39);
 
566
    map->value("6-5")->resizeItem(55,39);
 
567
    map->value("6-6")->resizeItem(55,39);
 
568
    map->value("6-7")->resizeItem(55,39);
 
569
    isTall = false;
 
570
 
 
571
    map->value("1-1")->move(5,69);
 
572
    map->value("1-2")->move(60,69);
 
573
    map->value("1-3")->move(115,69);
 
574
    map->value("1-4")->move(170,69);
 
575
    map->value("1-5")->move(225,69);
 
576
    map->value("1-6")->move(280,69);
 
577
    map->value("1-7")->move(335,69);
 
578
    map->value("2-1")->move(5,108);
 
579
    map->value("2-2")->move(60,108);
 
580
    map->value("2-3")->move(115,108);
 
581
    map->value("2-4")->move(170,108);
 
582
    map->value("2-5")->move(225,108);
 
583
    map->value("2-6")->move(280,108);
 
584
    map->value("2-7")->move(335,108);
 
585
    map->value("3-1")->move(5,147);
 
586
    map->value("3-2")->move(60,147);
 
587
    map->value("3-3")->move(115,147);
 
588
    map->value("3-4")->move(170,147);
 
589
    map->value("3-5")->move(225,147);
 
590
    map->value("3-6")->move(280,147);
 
591
    map->value("3-7")->move(335,147);
 
592
    map->value("4-1")->move(5,186);
 
593
    map->value("4-2")->move(60,186);
 
594
    map->value("4-3")->move(115,186);
 
595
    map->value("4-4")->move(170,186);
 
596
    map->value("4-5")->move(225,186);
 
597
    map->value("4-6")->move(280,186);
 
598
    map->value("4-7")->move(335,186);
 
599
    map->value("5-1")->move(5,225);
 
600
    map->value("5-2")->move(60,225);
 
601
    map->value("5-3")->move(115,225);
 
602
    map->value("5-4")->move(170,225);
 
603
    map->value("5-5")->move(225,225);
 
604
    map->value("5-6")->move(280,225);
 
605
    map->value("5-7")->move(335,225);
 
606
    map->value("6-1")->move(5,264);
 
607
    map->value("6-2")->move(60,264);
 
608
    map->value("6-3")->move(115,264);
 
609
    map->value("6-4")->move(170,264);
 
610
    map->value("6-5")->move(225,264);
 
611
    map->value("6-6")->move(280,264);
 
612
    map->value("6-7")->move(335,264);
 
613
}
 
614
 
 
615
void ChineseCalendar::setTime()
 
616
{
 
617
    QDateTime dateTime = QDateTime::currentDateTime();
 
618
    this->label_15->setText(dateTime.toString("hh:mm:ss"));
 
619
}
 
620
 
 
621
void ChineseCalendar::resetcalendardate(QString day)
 
622
{
 
623
    QDate date(this->YearSelect->date().year(),this->monthCombo->currentText().toInt(),day.toInt());
 
624
    clearbackground();
 
625
    QString weekday;
 
626
    if(date.toString("ddd") == "Mon")
 
627
        weekday = "星期一";
 
628
    if(date.toString("ddd") == "Tue")
 
629
        weekday = "星期二";
 
630
    if(date.toString("ddd") == "Wed")
 
631
        weekday = "星期三";
 
632
    if(date.toString("ddd") == "Thu")
 
633
        weekday = "星期四";
 
634
    if(date.toString("ddd") == "Fri")
 
635
        weekday = "星期五";
 
636
    if(date.toString("ddd") == "Sat")
 
637
        weekday = "星期六";
 
638
    if(date.toString("ddd") == "Sun")
 
639
        weekday = "星期日";
 
640
    QString selecttime = date.toString("yyyy-MM-dd %1").arg(weekday);
 
641
    struct CCalendar d;
 
642
    mycalendat->ctcl_solar_to_lunar(date.year(),date.month(),date.day(),&d);
 
643
    QString selectmonth = d.cmonth;
 
644
    if (selectmonth == "一月")
 
645
        selectmonth = "正月";
 
646
    if (selectmonth == "十一月")
 
647
        selectmonth = "冬月";
 
648
    if (selectmonth == "十二月")
 
649
        selectmonth = "腊月";
 
650
    QString selectday = QString("农历 %1%2").arg(selectmonth).arg(d.cday);
 
651
    QString selectyear = QString("%1年(%2年)").arg(d.ganzhi).arg(d.shengxiao);
 
652
    this->label_10->setText(day);
 
653
    this->label_12->setText(selecttime);
 
654
    this->label_13->setText(selectday);
 
655
    this->label_14->setText(selectyear);
 
656
}
 
657
 
 
658
void ChineseCalendar::backtoday()
 
659
{
 
660
    QDate today = QDate::currentDate();
 
661
    YearSelect->setDate(today);
 
662
    monthCombo->setCurrentIndex(today.month() - 1);
 
663
    setCalendar();
 
664
 
 
665
}
 
666
 
 
667
void ChineseCalendar::setCalendar()
 
668
{
 
669
    struct CCalendar c;
 
670
    cleardate();
 
671
    QDate date(selectedDate.year(), selectedDate.month(), 1);
 
672
    while (date.month() == selectedDate.month()) {
 
673
        int weekDay = date.dayOfWeek();
 
674
        mycalendat->ctcl_solar_to_lunar(selectedDate.year(),selectedDate.month(),date.day(),&c);
 
675
        QString mycday;
 
676
        mycday=c.cday;
 
677
        if(c.sterm.at(0) >=QChar('0') && c.sterm.at(0) <= QChar('9'))
 
678
          mycday=c.cday;
 
679
        else
 
680
        {
 
681
          if(c.laststerm)
 
682
              mycday=c.cday;
 
683
          else
 
684
              mycday=c.sterm;
 
685
        }
 
686
        int day = date.day();
 
687
        if (weekDay == 7)
 
688
            weekDay = 0;
 
689
        int row = (day + (6 - weekDay) + 7 -1)/7;
 
690
        QString site = QString("%1-%2").arg(row).arg(weekDay+1);
 
691
        map->value(site)->setday(date.day());
 
692
        map->value(site)->setcday(mycday);
 
693
        if(weekDay == 6 || weekDay == 0)
 
694
            map->value(site)->setcolor();
 
695
         date = date.addDays(1);
 
696
    }
 
697
 
 
698
    if (!map->value("6-1")->day().isNull())
 
699
    {
 
700
        map->value("6-1")->show();
 
701
        map->value("6-2")->show();
 
702
        map->value("6-3")->show();
 
703
        map->value("6-4")->show();
 
704
        map->value("6-5")->show();
 
705
        map->value("6-6")->show();
 
706
        map->value("6-7")->show();
 
707
        resetItemLayout();
 
708
    } 
 
709
 
 
710
    QDate today = QDate::currentDate();
 
711
    if(today.year() == selectedDate.year() && today.month() == selectedDate.month())
 
712
    {
 
713
        int d = today.day();
 
714
        int w = today.dayOfWeek();
 
715
        if (w == 7)
 
716
            w = 0;
 
717
        int r = (d + (6 - w) + 7 -1)/7;
 
718
        QString add = QString("%1-%2").arg(r).arg(w+1);
 
719
        resetcalendardate(QString::number(today.day()));
 
720
        map->value(add)->setToday();
 
721
    }
 
722
}
 
723
 
 
724
void ChineseCalendar::clearbackground()
 
725
{
 
726
    map->value("1-1")->clearstyle();
 
727
    map->value("1-2")->clearstyle();
 
728
    map->value("1-3")->clearstyle();
 
729
    map->value("1-4")->clearstyle();
 
730
    map->value("1-5")->clearstyle();
 
731
    map->value("1-6")->clearstyle();
 
732
    map->value("1-7")->clearstyle();
 
733
    map->value("2-1")->clearstyle();
 
734
    map->value("2-2")->clearstyle();
 
735
    map->value("2-3")->clearstyle();
 
736
    map->value("2-4")->clearstyle();
 
737
    map->value("2-5")->clearstyle();
 
738
    map->value("2-6")->clearstyle();
 
739
    map->value("2-7")->clearstyle();
 
740
    map->value("3-1")->clearstyle();
 
741
    map->value("3-2")->clearstyle();
 
742
    map->value("3-3")->clearstyle();
 
743
    map->value("3-4")->clearstyle();
 
744
    map->value("3-5")->clearstyle();
 
745
    map->value("3-6")->clearstyle();
 
746
    map->value("3-7")->clearstyle();
 
747
    map->value("4-1")->clearstyle();
 
748
    map->value("4-2")->clearstyle();
 
749
    map->value("4-3")->clearstyle();
 
750
    map->value("4-4")->clearstyle();
 
751
    map->value("4-5")->clearstyle();
 
752
    map->value("4-6")->clearstyle();
 
753
    map->value("4-7")->clearstyle();
 
754
    map->value("5-1")->clearstyle();
 
755
    map->value("5-2")->clearstyle();
 
756
    map->value("5-3")->clearstyle();
 
757
    map->value("5-4")->clearstyle();
 
758
    map->value("5-5")->clearstyle();
 
759
    map->value("5-6")->clearstyle();
 
760
    map->value("5-7")->clearstyle();
 
761
    map->value("6-1")->clearstyle();
 
762
    map->value("6-2")->clearstyle();
 
763
    map->value("6-3")->clearstyle();
 
764
    map->value("6-4")->clearstyle();
 
765
    map->value("6-5")->clearstyle();
 
766
    map->value("6-6")->clearstyle();
 
767
    map->value("6-7")->clearstyle();
 
768
}
 
769
 
 
770
void ChineseCalendar::cleardate()
 
771
{
 
772
    map->value("1-1")->clear();
 
773
    map->value("1-2")->clear();
 
774
    map->value("1-3")->clear();
 
775
    map->value("1-4")->clear();
 
776
    map->value("1-5")->clear();
 
777
    map->value("1-6")->clear();
 
778
    map->value("1-7")->clear();
 
779
    map->value("2-1")->clear();
 
780
    map->value("2-2")->clear();
 
781
    map->value("2-3")->clear();
 
782
    map->value("2-4")->clear();
 
783
    map->value("2-5")->clear();
 
784
    map->value("2-6")->clear();
 
785
    map->value("2-7")->clear();
 
786
    map->value("3-1")->clear();
 
787
    map->value("3-2")->clear();
 
788
    map->value("3-3")->clear();
 
789
    map->value("3-4")->clear();
 
790
    map->value("3-5")->clear();
 
791
    map->value("3-6")->clear();
 
792
    map->value("3-7")->clear();
 
793
    map->value("4-1")->clear();
 
794
    map->value("4-2")->clear();
 
795
    map->value("4-3")->clear();
 
796
    map->value("4-4")->clear();
 
797
    map->value("4-5")->clear();
 
798
    map->value("4-6")->clear();
 
799
    map->value("4-7")->clear();
 
800
    map->value("5-1")->clear();
 
801
    map->value("5-2")->clear();
 
802
    map->value("5-3")->clear();
 
803
    map->value("5-4")->clear();
 
804
    map->value("5-5")->clear();
 
805
    map->value("5-6")->clear();
 
806
    map->value("5-7")->clear();
 
807
    map->value("6-1")->clear();
 
808
    map->value("6-2")->clear();
 
809
    map->value("6-3")->clear();
 
810
    map->value("6-4")->clear();
 
811
    map->value("6-5")->clear();
 
812
    map->value("6-6")->clear();
 
813
    map->value("6-7")->clear();
 
814
    map->value("6-1")->hide();
 
815
    map->value("6-2")->hide();
 
816
    map->value("6-3")->hide();
 
817
    map->value("6-4")->hide();
 
818
    map->value("6-5")->hide();
 
819
    map->value("6-6")->hide();
 
820
    map->value("6-7")->hide();
 
821
    setItemLayout();
 
822
}
 
823
 
 
824
void ChineseCalendar::mousePressEvent(QMouseEvent *event)
 
825
{
 
826
    if (event->button() == Qt::LeftButton)
 
827
    {
 
828
        if (map->value("6-1")->isHidden())
 
829
        {
 
830
            if (event->x()>5 && event->x()<390 && event->y()>69 && event->y()<304)
 
831
                moveable = false;
 
832
            else moveable = true;
 
833
        }
 
834
        else
 
835
        {
 
836
            if (event->x()>5 && event->x()<390 && event->y()>69 && event->y()<304)
 
837
                moveable = false ;
 
838
            else moveable = true;
 
839
        }
 
840
        dragPos = event->globalPos() - frameGeometry().topLeft();
 
841
        event->accept();
 
842
    }
 
843
 
 
844
}
 
845
 
 
846
void ChineseCalendar::mouseMoveEvent(QMouseEvent *event)
 
847
{
 
848
    if (event->buttons() & Qt::LeftButton && moveable == true )
 
849
    {
 
850
        if (map->value("6-1")->isHidden())
 
851
        {
 
852
            if (event->x()>5 && event->x()<390 && event->y()>69 && event->y()<304)
 
853
                return ;
 
854
            else move(event->globalPos() - dragPos);
 
855
        }
 
856
        else
 
857
        {
 
858
            if (event->x()>5 && event->x()<390 && event->y()>69 && event->y()<304)
 
859
                return ;
 
860
            else move(event->globalPos() - dragPos);
 
861
        }
 
862
        setWindowOpacity(0.5);
 
863
    }
 
864
    event->accept();
 
865
 
 
866
}
 
867
 
 
868
void ChineseCalendar::mouseReleaseEvent(QMouseEvent *event)
 
869
{
 
870
    if (event->button() == Qt::LeftButton)
 
871
    {
 
872
        setWindowOpacity(1);
 
873
    }
 
874
    event->accept();
 
875
}
 
876
 
 
877
void ChineseCalendar::setMonth(int month)
 
878
{
 
879
 
 
880
    int day=0;
 
881
    int newmonth = month+1;
 
882
    if(newmonth<=0)
 
883
    {
 
884
        newmonth = 12;
 
885
        monthCombo->setCurrentIndex(11);
 
886
    }
 
887
    if(newmonth>12)
 
888
    {
 
889
        newmonth = 1;
 
890
    }
 
891
    if(newmonth ==1 || newmonth ==3 || newmonth == 5 || newmonth == 7 || newmonth  == 8 || newmonth == 10 || newmonth ==12)
 
892
    {
 
893
        day =31;
 
894
    }
 
895
    else if(newmonth ==4 || newmonth==6 || newmonth ==9 || newmonth ==11)
 
896
    {
 
897
       day =30;
 
898
    }
 
899
   if(selectedDate.year()%4 ==0 && selectedDate.year()%100!=0)
 
900
    {
 
901
            day = 29;
 
902
    }
 
903
    else if(selectedDate.year()%400 ==0)
 
904
    {
 
905
            day = 29;
 
906
    }
 
907
    else
 
908
    {
 
909
            day = 28;
 
910
    }
 
911
    selectedDate = QDate(selectedDate.year(),newmonth,day);
 
912
    setCalendar();
 
913
}
 
914
 
 
915
void ChineseCalendar::setYear(QDate date)
 
916
{
 
917
    selectedDate = QDate(date.year(), selectedDate.month(), selectedDate.day());
 
918
    setCalendar();
 
919
}
 
920
 
 
921
void ChineseCalendar::on_TbpreviousYear_clicked()
 
922
{
 
923
        YearSelect->setDate(selectedDate.addYears(-1));
 
924
}
 
925
 
 
926
void ChineseCalendar::on_TbpreviousMonth_clicked()
 
927
{
 
928
    if (monthCombo->currentIndex() == 0)
 
929
    {
 
930
        YearSelect->setDate(selectedDate.addYears(-1));
 
931
        monthCombo->setCurrentIndex(11);
 
932
    }
 
933
    else
 
934
        monthCombo->setCurrentIndex(monthCombo->currentIndex()-1);
 
935
}
 
936
 
 
937
void ChineseCalendar::on_TbnextMonth_clicked()
 
938
{
 
939
    if (monthCombo->currentIndex() == 11)
 
940
    {
 
941
        YearSelect->setDate(selectedDate.addYears(1));
 
942
        monthCombo->setCurrentIndex(0);
 
943
    }
 
944
    else
 
945
        monthCombo->setCurrentIndex(monthCombo->currentIndex()+1);
 
946
}
 
947
 
 
948
void ChineseCalendar::on_TbnextYear_clicked()
 
949
{
 
950
        YearSelect->setDate(selectedDate.addYears(1));
 
951
}
 
952
 
 
953
void ChineseCalendar::showOrHide()
 
954
{
 
955
    if(this->isHidden())
 
956
    {
 
957
        this->show();
 
958
    }else
 
959
        this->hide();
 
960
}
 
961
 
 
962
void ChineseCalendar::setMode()
 
963
{
 
964
    if(this->actionStaysOnTop->isChecked())
 
965
    {
 
966
        this->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
 
967
        this->show();
 
968
    } else if(this->actionStaysOnBottom->isChecked())
 
969
    {
 
970
        this->setWindowFlags(Qt::WindowStaysOnBottomHint | Qt::FramelessWindowHint);
 
971
        this->show();
 
972
    } else
 
973
    {
 
974
        this->setWindowFlags(Qt::FramelessWindowHint);
 
975
        this->show();
 
976
    }
 
977
}