Added life progress

This commit is contained in:
Robert Vokac 2024-04-23 17:19:59 +02:00
parent b6a4e4a5e0
commit ef5cae98ee
No known key found for this signature in database
GPG Key ID: 693D30BEE3329055
6 changed files with 70 additions and 4 deletions

View File

@ -13,7 +13,7 @@ import java.util.Date;
* @since 21.03.2024
*/
public class Progress {
private final double[] array = new double[6];
private final double[] array = new double[7];
@Getter
@Setter
private int workDaysInMonth;
@ -30,7 +30,7 @@ public class Progress {
if (type == WidgetType.PRESENTATION) {
long currentTime = new Date().getTime() / 1000l;
long l = currentTime % 30;
long l = currentTime % 35;
if (l >= 0 && l < 5) {
type = WidgetType.MINUTE;
}
@ -49,6 +49,9 @@ public class Progress {
if (l >= 25 && l < 30) {
type = WidgetType.YEAR;
}
if (l >= 30 && l < 35) {
type = WidgetType.LIFE;
}
}
return type;
@ -141,6 +144,36 @@ public class Progress {
}
}
public static final int STARTED_WORKING_AGE = 26;
public static final int RETIREMENT_AGE = 65;
public static double getLifeProgress(Date birthDate, Date currentDate) {
if(birthDate == null) {
Calendar calTmp = Calendar.getInstance();
calTmp.set(Calendar.YEAR, 2000);
calTmp.set(Calendar.MONTH, 0);
calTmp.set(Calendar.DAY_OF_MONTH, 1);
}
Calendar birthDateCal = Calendar.getInstance();
Calendar currentDateCal = Calendar.getInstance();
Calendar birthDateStartedWorkingCal = Calendar.getInstance();
birthDateCal.setTime(birthDate);
currentDateCal.setTime(currentDate);
birthDateStartedWorkingCal.setTime(birthDate);
birthDateStartedWorkingCal.add(Calendar.YEAR, STARTED_WORKING_AGE);
Date birthDateStartedWorking = birthDateStartedWorkingCal.getTime();
if(currentDate.compareTo(birthDateStartedWorking) < 0) {
return 0d;
}
Calendar retirementDateCal = Calendar.getInstance();
retirementDateCal.setTime(birthDate);
retirementDateCal.add(Calendar.YEAR, RETIREMENT_AGE);
Date retirementDate = retirementDateCal.getTime();
long secondsForWork = retirementDate.getTime() - birthDateStartedWorking.getTime();
long alreadyWorked = currentDate.getTime() - birthDateStartedWorking.getTime();
return (double)alreadyWorked / (double)secondsForWork;
}
// public static double getYearProgress(Integer year, Integer month,
// Integer day, Integer hour, Integer minute, Integer second,
// Integer millisecond) {

View File

@ -7,7 +7,7 @@ import org.nanoboot.utils.timecalc.app.TimeCalcException;
* @since 21.03.2024
*/
public enum WidgetType {
MINUTE, HOUR, DAY, WEEK, MONTH, YEAR, PRESENTATION;
MINUTE, HOUR, DAY, WEEK, MONTH, YEAR, LIFE, PRESENTATION;
public int getIndex() {
int i = 0;
for(WidgetType wt:WidgetType.values()) {

View File

@ -240,7 +240,7 @@ public class Widget extends JPanel implements
}
if(typeProperty.getValue().equals(WidgetType.PRESENTATION.name())) {
long currentTime = new Date().getTime() / 1000l;
long l = currentTime % 30;
long l = currentTime % 35;
if (l >= 0 && l < 5) {
return getDonePercentForWidgetType(WidgetType.MINUTE);
}
@ -259,6 +259,9 @@ public class Widget extends JPanel implements
if (l >= 25 && l < 30) {
return getDonePercentForWidgetType(WidgetType.YEAR);
}
if (l >= 30 && l < 35) {
return getDonePercentForWidgetType(WidgetType.LIFE);
}
return getDonePercentForWidgetType(WidgetType.DAY);
}
return getDonePercentForWidgetType(WidgetType.valueOf(typeProperty.getValue().toUpperCase(

View File

@ -24,6 +24,7 @@ public class WidgetMenu extends JPopupMenu {
private final JMenuItem typeWeekMenuItem;
private final JMenuItem typeMonthMenuItem;
private final JMenuItem typeYearMenuItem;
private final JMenuItem typeLifeMenuItem;
private final JMenuItem typePresentationMenuItem;
private final Widget widget;
private WidgetType selectedType;
@ -48,6 +49,7 @@ public class WidgetMenu extends JPopupMenu {
this.typeWeekMenuItem = new JMenuItem(WidgetType.WEEK.name());
this.typeMonthMenuItem = new JMenuItem(WidgetType.MONTH.name());
this.typeYearMenuItem = new JMenuItem(WidgetType.YEAR.name());
this.typeLifeMenuItem = new JMenuItem(WidgetType.LIFE.name());
this.typePresentationMenuItem = new JMenuItem(WidgetType.PRESENTATION.name());
typeMenuItem.add(typeMinuteMenuItem);
typeMenuItem.add(typeHourMenuItem);
@ -55,6 +57,7 @@ public class WidgetMenu extends JPopupMenu {
typeMenuItem.add(typeWeekMenuItem);
typeMenuItem.add(typeMonthMenuItem);
typeMenuItem.add(typeYearMenuItem);
typeMenuItem.add(typeLifeMenuItem);
typeMenuItem.add(typePresentationMenuItem);
BiConsumer<JMenuItem, WidgetType> typeActionCreator = (m,w) -> {
@ -73,6 +76,7 @@ public class WidgetMenu extends JPopupMenu {
typeActionCreator.accept(typeWeekMenuItem, WidgetType.WEEK);
typeActionCreator.accept(typeMonthMenuItem, WidgetType.MONTH);
typeActionCreator.accept(typeYearMenuItem, WidgetType.YEAR);
typeActionCreator.accept(typeLifeMenuItem, WidgetType.LIFE);
typeActionCreator.accept(typePresentationMenuItem, WidgetType.PRESENTATION);
//if(!aClass.getSimpleName().contains("Battery")) {
@ -92,6 +96,7 @@ public class WidgetMenu extends JPopupMenu {
this.typeWeekMenuItem.setText(WidgetType.WEEK.name());
this.typeMonthMenuItem.setText(WidgetType.MONTH.name());
this.typeYearMenuItem.setText(WidgetType.YEAR.name());
this.typeLifeMenuItem.setText(WidgetType.LIFE.name());
this.typePresentationMenuItem.setText(WidgetType.PRESENTATION.name());
switch (widgetType) {
case MINUTE: typeMinuteMenuItem.setText(typeMinuteMenuItem.getText() + " (*)");break;
@ -100,6 +105,7 @@ public class WidgetMenu extends JPopupMenu {
case WEEK: typeWeekMenuItem.setText(typeWeekMenuItem.getText() + " (*)");break;
case MONTH: typeMonthMenuItem.setText(typeMonthMenuItem.getText() + " (*)");break;
case YEAR: typeYearMenuItem.setText(typeYearMenuItem.getText() + " (*)");break;
case LIFE: typeLifeMenuItem.setText(typeLifeMenuItem.getText() + " (*)");break;
case PRESENTATION: typePresentationMenuItem.setText(typePresentationMenuItem.getText() + " (*)");break;
default: throw new TimeCalcException("Unsupported WidgetType: " + widgetType);
}

View File

@ -1,6 +1,7 @@
package org.nanoboot.utils.timecalc.swing.progress;
import org.nanoboot.utils.timecalc.app.GetProperty;
import org.nanoboot.utils.timecalc.entity.Progress;
import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.entity.WidgetType;
import org.nanoboot.utils.timecalc.swing.common.SwingUtils;
@ -76,6 +77,7 @@ public class ProgressMoney extends Widget implements GetProperty {
case WEEK: value = perDay * 5d * progress.getDonePercent(WidgetType.WEEK);break;
case MONTH: value = perMonth * progress.getDonePercent(WidgetType.MONTH);break;
case YEAR: value = perMonth * 12 * progress.getDonePercent(WidgetType.YEAR);break;
case LIFE: value = perMonth * 12 * (Progress.RETIREMENT_AGE - Progress.STARTED_WORKING_AGE) * progress.getDonePercent(WidgetType.LIFE);break;
}
Visibility visibility

View File

@ -1334,10 +1334,32 @@ public class MainWindow extends TWindow {
double minuteProgress
= Progress.getMinuteProgress(secondNow, millisecondNow);
double yearProgress = Progress.getYearProgress(clock, monthProgress);
String birthDate = timeCalcConfiguration.lifeBirthDateProperty.getValue();
Calendar birthDateCal = Calendar.getInstance();
if(birthDate != null&& !birthDate.isEmpty()) {
String[] array = birthDate.split("-");
if(array.length == 3) {
try {
int year = Integer.valueOf(array[0]);
int month = Integer.valueOf(array[1]);
int day = Integer.valueOf(array[2]);
birthDateCal.set(Calendar.YEAR, year);
birthDateCal.set(Calendar.MONTH, month - 1);
birthDateCal.set(Calendar.DAY_OF_MONTH, day);
} catch (Exception e) {
System.err.println("Parsing birth date failed: " + birthDate + " : " + birthDate);
birthDateCal = null;
}
}
}
double lifeProgress = Progress.getLifeProgress(
birthDateCal == null ? null : birthDateCal.getTime(),
time.asCalendar().getTime());
progress.set(WidgetType.HOUR, hourProgress);
progress.set(WidgetType.WEEK, weekProgress);
progress.set(WidgetType.MINUTE, minuteProgress);
progress.set(WidgetType.YEAR, yearProgress);
progress.set(WidgetType.LIFE, lifeProgress);
progressSquare.setProgress(progress);
progressCircle.setProgress(progress);
progressSwing.setProgress(progress);