SVG5/formcalendarview.cpp
2025-10-12 13:55:56 +09:00

409 lines
8.1 KiB
C++

#include "formcalendarview.h"
#include "ui_formcalendarview.h"
#include <QResizeEvent>
#include <QLabel>
#include "dialogcalendar.h"
#include "commondata.h"
QDate FormCalendarView::m_DateStart;
QDate FormCalendarView::m_DateEnd;
FormCalendarView::FormCalendarView(QWidget *parent) :
QWidget(parent),
ui(new Ui::FormCalendarView)
{
ui->setupUi(this);
m_nMode = CHANGE_DATE_START;
m_DateStart = QDate::currentDate();
m_DateEnd = QDate::currentDate();
ui->gridLayout->setSpacing(0);
ui->horizontalLayout->setSpacing(0);
int i=0;
int j=0;
m_pViewDays = new SDayView**[7];
for(i=0 ; i<6 ; i++)
{
m_pViewDays[i] = new SDayView*[6];
for(j=0 ; j<7 ; j++)
{
m_pViewDays[i][j] = new SDayView(this);
m_pViewDays[i][j]->SetRowColumn(i, j);
//m_pViewDays[i][j]->setGeometry(0, 0, 100, 30);
m_pViewDays[i][j]->setStyleSheet("QWidget{ background: none; border: none;} ");
connect(m_pViewDays[i][j], SIGNAL(Clicked(int, int)), this, SLOT(Clicked(int, int)));
}
}
for(i=0 ; i<6 ; i++)
{
for(j=0 ; j<7 ; j++)
{
ui->gridLayout->addWidget(m_pViewDays[i][j], i, j);
}
}
QStringList strListDayName;
strListDayName << "SUN";
strListDayName << "MON";
strListDayName << "TUE";
strListDayName << "WED";
strListDayName << "THU";
strListDayName << "FRI";
strListDayName << "SAT";
ui->horizontalLayout->addSpacing(50);
for(i=0 ; i<7 ; i++)
{
QLabel* pLabel = new QLabel(this);
QString strDayName = strListDayName[i];
pLabel->setText(strDayName);
if(i==0)
{
pLabel->setStyleSheet("QLabel{ background: #D6E0E5; qproperty-alignment: AlignCenter; color: #FF0000;}");
}
else if(i==6)
{
pLabel->setStyleSheet("QLabel{ background: #D6E0E5; qproperty-alignment: AlignCenter; color: #0019FF;}");
}
else
{
pLabel->setStyleSheet("QLabel{ background: #D6E0E5; qproperty-alignment: AlignCenter;}");
}
ui->horizontalLayout->addWidget(pLabel);
}
ui->horizontalLayout->addSpacing(50);
}
FormCalendarView::~FormCalendarView()
{
delete ui;
}
void FormCalendarView::resizeEvent(QResizeEvent *event)
{
QSize nSize = event->size();
int nHeightTitle = 66;
ui->verticalLayoutWidget->setGeometry(0, 0, nSize.width(), nSize.height());
QSize nSizeDayOfWeek(nSize.width(), nHeightTitle);
ui->frame_DayOfWeek->setMaximumSize(nSizeDayOfWeek);
ui->gridLayoutWidget->setGeometry(50, 0, nSize.width()-100, nSize.height()-nHeightTitle);
ui->horizontalLayoutWidget->setGeometry(0, 0, nSize.width(), nHeightTitle);
}
void FormCalendarView::SetCalendar(int nYear, int nMonth)
{
int nStartDay = 0;
int nMonthDay = 0;
int nPrevMonthDay = 0;
int nPrevMonth = nMonth-1;
int nPrevYear = nYear;
int nNextMonth = nMonth+1;
int nNextYear = nYear;
QDate date(nYear, nMonth, 1);
nMonthDay = date.daysInMonth();
nStartDay = date.dayOfWeek();
if(nPrevMonth<=0)
{
nPrevYear = nYear - 1;
nPrevMonth = 12;
}
if(nNextMonth>12)
{
nNextYear = nYear+1;
nNextMonth = 1;
}
QDate datePrevMonth(nPrevYear, nPrevMonth, 1);
nPrevMonthDay = datePrevMonth.daysInMonth();
int i=0;
int j=0;
int nIndexDisplay = 0;
int nDay = 1;
int nIndexNextMonthDay = 1;
for(i=0 ; i<6 ; i++)
{
for(j=0 ; j<7 ; j++)
{
if(nIndexDisplay>=nStartDay && nDay<=nMonthDay)
{
m_pViewDays[i][j]->SetDate(QDate(nYear, nMonth, nDay), true);
nDay++;
}
else
{
if(i==0)
{
int nPrevDay = nPrevMonthDay - nStartDay + (j+1);
m_pViewDays[i][j]->SetDate(QDate(nPrevYear, nPrevMonth, nPrevDay), false);
}
else
{
m_pViewDays[i][j]->SetDate(QDate(nNextYear, nNextMonth, nIndexNextMonthDay), false);
nIndexNextMonthDay++;
}
//m_pViewDays[i][j]->ClearDate();
}
nIndexDisplay++;
}
}
ui->gridLayout->update();
update();
}
void FormCalendarView::SetToday()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd;
UpdateDayState();
}
void FormCalendarView::SetLast3Days()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addDays(-2);
UpdateDayState();
}
void FormCalendarView::SetLastWeek()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addDays(-6);
UpdateDayState();
}
void FormCalendarView::SetLast2Weeks()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addDays(-13);
UpdateDayState();
}
void FormCalendarView::SetLast3Weeks()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addDays(-20);
UpdateDayState();
}
void FormCalendarView::SetLastMonth()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addMonths(-1);
m_DateStart = m_DateStart.addDays(1);
UpdateDayState();
}
void FormCalendarView::SetLast2Month()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addMonths(-2);
m_DateStart = m_DateStart.addDays(1);
UpdateDayState();
}
void FormCalendarView::SetLast6Months()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addMonths(-6);
m_DateStart = m_DateStart.addDays(1);
UpdateDayState();
}
void FormCalendarView::SetLastYear()
{
ClearDayState();
m_DateEnd = QDate::currentDate();
m_DateStart = m_DateEnd.addYears(-1);
m_DateStart = m_DateStart.addDays(1);
UpdateDayState();
}
void FormCalendarView::UpdateDayState()
{
int i=0;
int j=0;
for(i=0 ; i<6 ; i++)
{
for(j=0 ; j<7 ; j++)
{
if(m_pViewDays[i][j]->GetDate()==m_DateStart)
{
m_pViewDays[i][j]->Select();
//m_pViewDays[i][j]->update();
}
if(m_pViewDays[i][j]->GetDate()==m_DateEnd)
{
m_pViewDays[i][j]->Select();
//m_pViewDays[i][j]->update();
}
}
}
update();
}
void FormCalendarView::ClearDayState()
{
int i=0;
int j=0;
for(i=0 ; i<6 ; i++)
{
for(j=0 ; j<7 ; j++)
{
if(m_pViewDays[i][j]->IsSelected()==true)
{
m_pViewDays[i][j]->Unselect();
m_pViewDays[i][j]->update();
}
}
}
update();
}
QDate FormCalendarView::GetDateStart()
{
return m_DateStart;
}
QDate FormCalendarView::GetDateEnd()
{
return m_DateEnd;
}
void FormCalendarView::SetDateStart(QDate date)
{
m_DateStart = date;
}
void FormCalendarView::SetDateEnd(QDate date)
{
m_DateEnd = date;
}
void FormCalendarView::Clicked(int nIndexRow, int nIndexColumn)
{
if(m_nMode==CHANGE_DATE_START)
{
QDate date = m_pViewDays[nIndexRow][nIndexColumn]->GetDate();
m_DateStart = date;
m_DateEnd = date;
m_nMode = CHANGE_DATE_END;
}
else if(m_nMode==CHANGE_DATE_END)
{
QDate date = m_pViewDays[nIndexRow][nIndexColumn]->GetDate();
m_DateEnd = date;
m_nMode = CHANGE_DATE_START;
}
if(m_DateStart>m_DateEnd)
{
QDate dateTmp;
dateTmp = m_DateStart;
m_DateStart = m_DateEnd;
m_DateEnd = dateTmp;
}
UpdateDayState();
SetSearchDateUpdate(SEARCH_USER_DEFINED);
ExecuteClickDate();
}
void FormCalendarView::SetModeChangeStart()
{
m_nMode = CHANGE_DATE_START;
}
void FormCalendarView::SetModeChangeEnd()
{
m_nMode = CHANGE_DATE_END;
}