upload kwrechner-gui
This commit is contained in:
@@ -0,0 +1,318 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include <QPainter>
|
||||
#include <QCloseEvent>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
, trayIcon(new QSystemTrayIcon(this))
|
||||
{
|
||||
ui->setupUi(this);
|
||||
connect(ui->pushButton_kw_berechnen, SIGNAL(clicked()), SLOT(dateCalculate()));
|
||||
connect(ui->pushButton_datum_berechnen, SIGNAL(clicked()), SLOT(kwCalculate()));
|
||||
|
||||
//Tray icon menu
|
||||
auto menu = this->createMenu();
|
||||
this->trayIcon->setContextMenu(menu);
|
||||
|
||||
QDate *dateToday= new QDate( QDate::currentDate() );
|
||||
ui->dateEdit_kw_berechnen->setDate(*dateToday);
|
||||
dateCalculate();
|
||||
datum heute (dateToday->day(), dateToday->month(), dateToday->year());
|
||||
|
||||
ui->spinBox_datum_jahr->setValue(heute.getJahr());
|
||||
ui->spinBox_datum_kw->setValue(heute.kwBerechnen());
|
||||
kwCalculate();
|
||||
|
||||
QPixmap pixmap(24,24);
|
||||
pixmap.fill(Qt::white);
|
||||
QPainter painter(&pixmap);
|
||||
painter.drawText(pixmap.rect(),Qt::AlignCenter,QString::number(heute.kwBerechnen()));
|
||||
|
||||
// App icon
|
||||
auto appIcon = QIcon(pixmap);
|
||||
this->trayIcon->setIcon(appIcon);
|
||||
this->setWindowIcon(appIcon);
|
||||
|
||||
// Displaying the tray icon
|
||||
this->trayIcon->show();
|
||||
|
||||
// Interaction
|
||||
connect(trayIcon, &QSystemTrayIcon::activated, this, &MainWindow::iconActivated);
|
||||
}
|
||||
|
||||
QMenu* MainWindow::createMenu()
|
||||
{
|
||||
// App can exit via Quit menu
|
||||
auto quitAction = new QAction("&Quit", this);
|
||||
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
|
||||
|
||||
auto menu = new QMenu(this);
|
||||
menu->addAction(quitAction);
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason_)
|
||||
{
|
||||
switch (reason_) {
|
||||
case QSystemTrayIcon::Trigger:
|
||||
if (isHidden())
|
||||
show();
|
||||
else
|
||||
hide();
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::dateCalculate()
|
||||
{
|
||||
QDate date1 = ui->dateEdit_kw_berechnen->date();
|
||||
|
||||
int day = date1.day();
|
||||
int month = date1.month();
|
||||
int year = date1.year();
|
||||
datum datum1 (day, month, year);
|
||||
ui->lineEdit_kw_berechnen_ausgabe->setText(QString::number(datum1.kwBerechnen()));
|
||||
}
|
||||
|
||||
void MainWindow::kwCalculate()
|
||||
{
|
||||
int kw = ui->spinBox_datum_kw->value();
|
||||
int jahr = ui->spinBox_datum_jahr->value();
|
||||
|
||||
if (kw == 53 && datum(3,1,jahr+1).kwBerechnen() == 1) {
|
||||
kw = 1;
|
||||
ui->spinBox_datum_kw->setValue(kw);
|
||||
jahr += 1;
|
||||
ui->spinBox_datum_jahr->setValue(jahr);
|
||||
}
|
||||
datum start = datum::kwStartBerechnen(kw, jahr);
|
||||
datum ende = datum::kwEndeBerechnen(start);
|
||||
|
||||
QString ausgabe = QString::number(start.getTag()) + "." + QString::number(start.getMonat()) + "." + QString::number(start.getJahr())
|
||||
+ " - " + QString::number(ende.getTag()) + "." + QString::number(ende.getMonat()) + "." + QString::number(ende.getJahr());
|
||||
ui->lineEdit_datum_berechnen_ausgabe->setText(ausgabe);
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
hide();
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
int datum::getTag()
|
||||
{
|
||||
return tag;
|
||||
}
|
||||
|
||||
int datum::getMonat()
|
||||
{
|
||||
return monat;
|
||||
}
|
||||
|
||||
int datum::getJahr()
|
||||
{
|
||||
return jahr;
|
||||
}
|
||||
|
||||
bool datum::schaltjahrBestimmen(int jahr) {
|
||||
bool sjahr = 0;
|
||||
if (!((jahr % 4) || !(jahr % 100)) || !((jahr % 4) || (jahr % 400)))
|
||||
sjahr = 1;
|
||||
return sjahr;
|
||||
}
|
||||
|
||||
datum::datum() {
|
||||
tag = 1;
|
||||
monat = 1;
|
||||
jahr = 2020;
|
||||
schaltjahr = schaltjahrBestimmen(jahr);
|
||||
}
|
||||
|
||||
datum::datum(int t, int m, int j) {
|
||||
|
||||
tag = t;
|
||||
monat = m;
|
||||
jahr = j;
|
||||
schaltjahr = schaltjahrBestimmen(j);
|
||||
|
||||
}
|
||||
|
||||
datum::~datum() {
|
||||
|
||||
}
|
||||
|
||||
void datum::ausgeben() {
|
||||
cout << tag << " tag " << monat << " Monat " << jahr << " Jahr " << schaltjahr << endl;
|
||||
}
|
||||
|
||||
int datum::wochentag()
|
||||
{
|
||||
int year = jahr;
|
||||
int m = monat;
|
||||
if (m < 3)
|
||||
year--;
|
||||
|
||||
string yearst = to_string(year);
|
||||
string cst = yearst.substr(0, 2);
|
||||
string yst = yearst.substr(2, 4);
|
||||
int y = stoi(yst);
|
||||
int c = stoi(cst);
|
||||
int d = tag;
|
||||
|
||||
|
||||
if (m == 1 || m == 2)
|
||||
m += 10;
|
||||
else
|
||||
m -= 2;
|
||||
|
||||
int w = (d + (int)(2.6 * m - 0.2) + y + (int)(y / 4) + (int)(c / 4) - 2 * c) % 7;
|
||||
if (w < 0)
|
||||
w += 7;
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
int datum::kwBerechnen()
|
||||
{
|
||||
int monate[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
int tage = 0;
|
||||
|
||||
if (monat == 1)
|
||||
tage = tag;
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < monat - 1; i++)
|
||||
tage += monate[i];
|
||||
tage += tag;
|
||||
}
|
||||
|
||||
if (schaltjahrBestimmen(jahr) == 1 && monat > 2)
|
||||
tage += 1;
|
||||
|
||||
|
||||
datum ersteJan(1, 1, jahr);
|
||||
int wochentagErste = ersteJan.wochentag();
|
||||
int offset = 0;
|
||||
int kw = 0;
|
||||
|
||||
if (wochentagErste <= 4) {
|
||||
offset = wochentagErste - 2;
|
||||
kw += 1;
|
||||
}
|
||||
|
||||
else {
|
||||
offset = (8 - wochentagErste) % 7;
|
||||
offset = 7 - (offset+1);
|
||||
}
|
||||
|
||||
|
||||
kw += ((tage + offset) / 7);
|
||||
|
||||
if (kw == 0)
|
||||
{
|
||||
datum datum2(31, 12, jahr - 1);
|
||||
if (datum2.kwBerechnen() == 52)
|
||||
kw = 52;
|
||||
else
|
||||
kw = 53;
|
||||
}
|
||||
|
||||
else if (kw == 53)
|
||||
{
|
||||
datum datum1(1, 1, jahr + 1);
|
||||
if (datum1.wochentag() < 4)
|
||||
kw = 1;
|
||||
}
|
||||
|
||||
return kw;
|
||||
}
|
||||
|
||||
void datum::changeMonat(int m)
|
||||
{
|
||||
monat = (monat+m)%12;
|
||||
if (monat == 0)
|
||||
monat = 12;
|
||||
}
|
||||
|
||||
void datum::changeTag(int t)
|
||||
{
|
||||
tag += t;
|
||||
}
|
||||
|
||||
void datum::changeJahr(int j)
|
||||
{
|
||||
jahr += j;
|
||||
}
|
||||
|
||||
datum datum::kwStartBerechnen(int kw, int jahr)
|
||||
{
|
||||
datum datumErste(1, 1, jahr);
|
||||
|
||||
int kwAnfang = datumErste.kwBerechnen();
|
||||
if (kwAnfang == 53 || kwAnfang == 52)
|
||||
{
|
||||
datumErste.changeTag(3);
|
||||
kwAnfang = 1;
|
||||
}
|
||||
|
||||
int wochentag = datumErste.wochentag();
|
||||
|
||||
for (int i = 1; i < wochentag; i++)
|
||||
{
|
||||
datumErste.changeTag(-1);
|
||||
}
|
||||
|
||||
int monate[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
|
||||
if (datumErste.schaltjahrBestimmen(jahr))
|
||||
monate[1] = 29;
|
||||
|
||||
int stelle = 0;
|
||||
for (int i = 1; i < kw; i++)
|
||||
{
|
||||
|
||||
datumErste.changeTag(7);
|
||||
if (datumErste.getTag() > monate[stelle])
|
||||
{
|
||||
datumErste.changeTag(-(monate[stelle]));
|
||||
datumErste.changeMonat(1);
|
||||
stelle++;
|
||||
}
|
||||
}
|
||||
|
||||
if (datumErste.getTag()<1)
|
||||
datumErste = kwStartBerechnen(53, jahr-1);
|
||||
|
||||
else if (datumErste.wochentag()==0)
|
||||
datumErste.changeTag(1);
|
||||
|
||||
return datumErste;
|
||||
}
|
||||
|
||||
datum datum::kwEndeBerechnen(datum start)
|
||||
{
|
||||
int monate[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
int vorMonat = start.getMonat();
|
||||
if (start.schaltjahrBestimmen(start.getJahr()))
|
||||
monate[1] = 29;
|
||||
|
||||
start.changeTag(6);
|
||||
if (start.getTag()>monate[start.getMonat()-1]) {
|
||||
start.changeTag(-(monate[start.getMonat()-1]));
|
||||
start.changeMonat(1);
|
||||
if (vorMonat==12 && start.getMonat() == 1)
|
||||
start.changeJahr(1);
|
||||
}
|
||||
return start;
|
||||
}
|
||||
Reference in New Issue
Block a user