Replace all files with local version
This commit is contained in:
parent
e0ea44a255
commit
cd424e2e93
@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
project(PomodoroTimer VERSION 2.0.0 LANGUAGES CXX)
|
project(PomodoroTimer VERSION 0.1.1 LANGUAGES CXX)
|
||||||
|
|
||||||
# Set C++ standard
|
# Set C++ standard
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) [year] [fullname]
|
Copyright (c) 2025 Dmytro Hovenko
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@ -15,6 +15,8 @@
|
|||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
|
#include "TimerState.h"
|
||||||
|
|
||||||
// StatisticsChart implementation
|
// StatisticsChart implementation
|
||||||
StatisticsChart::StatisticsChart(QWidget *parent)
|
StatisticsChart::StatisticsChart(QWidget *parent)
|
||||||
: QWidget(parent), m_maxValue(0)
|
: QWidget(parent), m_maxValue(0)
|
||||||
@ -49,6 +51,7 @@ void StatisticsChart::paintEvent(QPaintEvent *event)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr int LABEL_SKIP_INTERVAL = 3;
|
||||||
const int margin = 40;
|
const int margin = 40;
|
||||||
const int chartWidth = width() - 2 * margin;
|
const int chartWidth = width() - 2 * margin;
|
||||||
const int chartHeight = height() - 2 * margin;
|
const int chartHeight = height() - 2 * margin;
|
||||||
@ -77,7 +80,7 @@ void StatisticsChart::paintEvent(QPaintEvent *event)
|
|||||||
painter.drawRect(barRect);
|
painter.drawRect(barRect);
|
||||||
|
|
||||||
// Draw date labels (every 3rd day to avoid crowding)
|
// Draw date labels (every 3rd day to avoid crowding)
|
||||||
if ((x - margin) % (barWidth * 3) == 0) {
|
if ((x - margin) % (barWidth * LABEL_SKIP_INTERVAL) == 0) {
|
||||||
painter.setPen(Qt::black);
|
painter.setPen(Qt::black);
|
||||||
QString dateStr = it.key().toString("dd/MM");
|
QString dateStr = it.key().toString("dd/MM");
|
||||||
painter.drawText(x, height() - 10, dateStr);
|
painter.drawText(x, height() - 10, dateStr);
|
||||||
@ -320,10 +323,16 @@ void StatisticsDialog::loadDailyStatistics()
|
|||||||
QDate today = QDate::currentDate();
|
QDate today = QDate::currentDate();
|
||||||
for (int i = 0; i < 30; ++i) {
|
for (int i = 0; i < 30; ++i) {
|
||||||
QDate date = today.addDays(-i);
|
QDate date = today.addDays(-i);
|
||||||
QString key = QString("dailyStats/workTime_%1").arg(date.toString("yyyy-MM-dd"));
|
QSettings settings;
|
||||||
int workTime = settings.value(key, 0).toInt();
|
QVariantMap dailyStats = settings.value("dailyStats").toMap();
|
||||||
if (workTime > 0) {
|
|
||||||
m_dailyWorkTime[date] = workTime / 60; // Convert to minutes
|
for (auto it = dailyStats.begin(); it != dailyStats.end(); ++it) {
|
||||||
|
QDate date = QDate::fromString(it.key(), "yyyy-MM-dd");
|
||||||
|
if (date.isValid()) {
|
||||||
|
QVariantMap dayData = it.value().toMap();
|
||||||
|
m_dailyWorkTime[date] = dayData["workTime"].toInt();
|
||||||
|
m_dailySessions[date] = dayData["sessions"].toInt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString sessionKey = QString("dailyStats/sessions_%1").arg(date.toString("yyyy-MM-dd"));
|
QString sessionKey = QString("dailyStats/sessions_%1").arg(date.toString("yyyy-MM-dd"));
|
||||||
@ -338,45 +347,37 @@ void StatisticsDialog::updateOverview()
|
|||||||
{
|
{
|
||||||
m_totalSessionsLabel->setText(QString::number(m_totalSessions));
|
m_totalSessionsLabel->setText(QString::number(m_totalSessions));
|
||||||
|
|
||||||
|
// Правильное форматирование времени
|
||||||
|
m_totalTimeLabel->setText(TimerStateHelper::formatDuration(m_totalWorkTime + m_totalBreakTime));
|
||||||
|
m_workTimeLabel->setText(TimerStateHelper::formatDuration(m_totalWorkTime));
|
||||||
|
m_breakTimeLabel->setText(TimerStateHelper::formatDuration(m_totalBreakTime)); // исправлено
|
||||||
|
|
||||||
|
int avgSession = m_totalSessions > 0 ? (m_totalWorkTime / m_totalSessions) : 0;
|
||||||
|
m_avgSessionLabel->setText(TimerStateHelper::formatDuration(avgSession));
|
||||||
|
|
||||||
int totalMinutes = (m_totalWorkTime + m_totalBreakTime) / 60;
|
int totalMinutes = (m_totalWorkTime + m_totalBreakTime) / 60;
|
||||||
m_totalTimeLabel->setText(QString("%1h %2m")
|
|
||||||
.arg(totalMinutes / 60)
|
|
||||||
.arg(totalMinutes % 60));
|
|
||||||
|
|
||||||
int workMinutes = m_totalWorkTime / 60;
|
int workMinutes = m_totalWorkTime / 60;
|
||||||
m_workTimeLabel->setText(QString("%1h %2m")
|
|
||||||
.arg(workMinutes / 60)
|
|
||||||
.arg(workMinutes % 60));
|
|
||||||
|
|
||||||
int breakMinutes = m_totalBreakTime / 60;
|
|
||||||
m_breakTimeLabel->setText(QString("%1h %2m")
|
|
||||||
.arg(breakMinutes / 60)
|
|
||||||
.arg(breakMinutes % 60));
|
|
||||||
|
|
||||||
int avgSession = m_totalSessions > 0 ? workMinutes / m_totalSessions : 0;
|
|
||||||
m_avgSessionLabel->setText(QString("%1 minutes").arg(avgSession));
|
|
||||||
|
|
||||||
int efficiency = totalMinutes > 0 ? (workMinutes * 100 / totalMinutes) : 0;
|
int efficiency = totalMinutes > 0 ? (workMinutes * 100 / totalMinutes) : 0;
|
||||||
m_efficiencyLabel->setText(QString("%1%").arg(efficiency));
|
m_efficiencyLabel->setText(QString("%1%").arg(efficiency));
|
||||||
|
|
||||||
// Period statistics
|
// Period statistics
|
||||||
QDate today = QDate::currentDate();
|
QDate today = QDate::currentDate();
|
||||||
int todayMinutes = m_dailyWorkTime.value(today, 0);
|
int todayMinutes = m_dailyWorkTime.value(today, 0);
|
||||||
m_todayLabel->setText(QString("%1 minutes").arg(todayMinutes));
|
m_todayLabel->setText(TimerStateHelper::formatDuration(todayMinutes * 60));
|
||||||
|
|
||||||
// Calculate week total
|
// Calculate week total
|
||||||
int weekTotal = 0;
|
int weekTotal = 0;
|
||||||
for (int i = 0; i < 7; ++i) {
|
for (int i = 0; i < 7; ++i) {
|
||||||
weekTotal += m_dailyWorkTime.value(today.addDays(-i), 0);
|
weekTotal += m_dailyWorkTime.value(today.addDays(-i), 0);
|
||||||
}
|
}
|
||||||
m_weekLabel->setText(QString("%1 minutes").arg(weekTotal));
|
m_weekLabel->setText(TimerStateHelper::formatDuration(weekTotal * 60));
|
||||||
|
|
||||||
// Calculate month total
|
// Calculate month total
|
||||||
int monthTotal = 0;
|
int monthTotal = 0;
|
||||||
for (int i = 0; i < 30; ++i) {
|
for (int i = 0; i < 30; ++i) {
|
||||||
monthTotal += m_dailyWorkTime.value(today.addDays(-i), 0);
|
monthTotal += m_dailyWorkTime.value(today.addDays(-i), 0);
|
||||||
}
|
}
|
||||||
m_monthLabel->setText(QString("%1 minutes").arg(monthTotal));
|
m_monthLabel->setText(TimerStateHelper::formatDuration(monthTotal * 60));
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatisticsDialog::updateChart()
|
void StatisticsDialog::updateChart()
|
||||||
|
|||||||
15
TimerState.h
15
TimerState.h
@ -45,10 +45,6 @@ public:
|
|||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString getStateTextString(TimerState state) {
|
|
||||||
return getStateText(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int getDurationForState(TimerState state, int workDuration, int shortBreak, int longBreak) noexcept {
|
static int getDurationForState(TimerState state, int workDuration, int shortBreak, int longBreak) noexcept {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case TimerState::Work:
|
case TimerState::Work:
|
||||||
@ -60,6 +56,17 @@ public:
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString formatDuration(int seconds) noexcept
|
||||||
|
{
|
||||||
|
const int hours = seconds / 3600;
|
||||||
|
const int minutes = (seconds % 3600) / 60;
|
||||||
|
if (hours > 0)
|
||||||
|
{
|
||||||
|
return QString("%1h %2m").arg(hours).arg(minutes);
|
||||||
|
}
|
||||||
|
return QString("%1m").arg(minutes);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TIMERSTATE_H
|
#endif // TIMERSTATE_H
|
||||||
|
|||||||
2
main.cpp
2
main.cpp
@ -11,7 +11,7 @@
|
|||||||
namespace {
|
namespace {
|
||||||
// Application constants - use QStringLiteral for compile-time optimization
|
// Application constants - use QStringLiteral for compile-time optimization
|
||||||
const QString APP_NAME = QStringLiteral("Pomodoro Timer");
|
const QString APP_NAME = QStringLiteral("Pomodoro Timer");
|
||||||
const QString APP_VERSION = QStringLiteral("0.1.0");
|
const QString APP_VERSION = QStringLiteral("0.1.1");
|
||||||
const QString ORGANIZATION = QStringLiteral("PomodoroApp");
|
const QString ORGANIZATION = QStringLiteral("PomodoroApp");
|
||||||
|
|
||||||
// Icon generation constants
|
// Icon generation constants
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Version=1.0
|
Version=0.1.1
|
||||||
Name=Pomodoro Timer
|
Name=Pomodoro Timer
|
||||||
GenericName=Time Management
|
GenericName=Time Management
|
||||||
Comment=A simple Pomodoro timer to help you focus.
|
Comment=A simple Pomodoro timer to help you focus.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user