Time improvements - wip4

This commit is contained in:
Robert Vokac 2024-02-10 13:41:43 +00:00
parent 14f4931999
commit ed6c6070d9
No known key found for this signature in database
GPG Key ID: 693D30BEE3329055
7 changed files with 205 additions and 96 deletions

View File

@ -1,74 +1,85 @@
package org.nanoboot.utils.timecalc.app; package org.nanoboot.utils.timecalc.app;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Properties; import java.util.Properties;
/** /**
* @author Robert Vokac * @author Robert Vokac
* @since 20.02.2024 * @since 20.02.2024
*/ */
public class TimeCalcConf { public class TimeCalcProperties {
private static final String CLOCK_HANDS_LONG = "clock.hands.long"; private static final String CLOCK_HANDS_LONG = "clock.hands.long";
private static final String JOKE_VISIBLE = "jokes.visible"; private static final String CLOCK_HANDS_SECOND_ENABLED = "clock.hands.second.enabled";
private static final String BATTERY_WAVES_ENABLED = "battery.waves.enabled"; private static final String CLOCK_HANDS_MILLISECOND_ENABLED = "clock.hands.millisecond.enabled";
private static final String EVERYTHING_HIDDEN = "everything-hidden"; private static final String BATTERY_WAVES_ENABLED = "battery.waves.enabled";
private static final String TOASTS_ENABLED = "toasts.enabled"; private static final String DEFAULT_VISIBILITY = "default-visibility";
private static final String VISIBILITY_ONLY_GREY_OR_NONE_ENABLED = "visibility.only-grey-or-none.enabled";
private static TimeCalcConf INSTANCE; private static final String JOKES_ENABLED = "jokes.enabled";
private final Properties properties = new Properties(); private static final String COMMANDS_ENABLED = "commands-enabled";
private static final String TOASTS_ENABLED = "toasts.enabled";
private TimeCalcConf() {
if (!new File("timecalc.conf").exists()) { private static TimeCalcProperties INSTANCE;
//nothing to do; private final Properties properties = new Properties();
return;
} private TimeCalcProperties() {
try { if (!new File("timecalc.conf").exists()) {
this.properties.load(new FileInputStream("timecalc.conf")); //nothing to do;
} catch (IOException e) { return;
System.err.println(e); }
} try {
} this.properties.load(new FileInputStream("timecalc.conf"));
} catch (IOException e) {
public static TimeCalcConf getInstance() { System.err.println(e);
if (INSTANCE == null) { }
INSTANCE = new TimeCalcConf(); if(!isSecondEnabled() && isMillisecondEnabled()) {
} System.out.println("Sorry, seconds are disabled, millisecond must be disabled too.");
return INSTANCE; this.properties.setProperty(TimeCalcProperties.CLOCK_HANDS_MILLISECOND_ENABLED, "false");
} }
}
public boolean areClockHandsLong() {
return getBooleanProperty(CLOCK_HANDS_LONG, true); public static TimeCalcProperties getInstance() {
} if (INSTANCE == null) {
INSTANCE = new TimeCalcProperties();
public boolean isJokeVisible() { }
return getBooleanProperty(JOKE_VISIBLE, true); return INSTANCE;
} }
public boolean areBatteryWavesEnabled() { public boolean areClockHandsLong() {
return getBooleanProperty(BATTERY_WAVES_ENABLED, true); return getBooleanProperty(CLOCK_HANDS_LONG, true);
} }
public boolean isEverythingHidden() { public boolean isSecondEnabled() {
return getBooleanProperty(EVERYTHING_HIDDEN, false); return getBooleanProperty(CLOCK_HANDS_SECOND_ENABLED, true);
} }
public boolean isMillisecondEnabled() {
public boolean areToastsEnabled() { return getBooleanProperty(CLOCK_HANDS_MILLISECOND_ENABLED, false);
return getBooleanProperty(TOASTS_ENABLED, true); }
}
public boolean areJokesEnabled() {
private boolean getBooleanProperty(String key, boolean defaultValue) { return getBooleanProperty(COMMANDS_ENABLED, true);
if (!properties.containsKey(key)) { }
return defaultValue;
} public boolean areBatteryWavesEnabled() {
return properties.get(key).equals("true"); return getBooleanProperty(BATTERY_WAVES_ENABLED, true);
} }
public void load() {
//to be implemented public boolean areToastsEnabled() {
} return getBooleanProperty(TOASTS_ENABLED, true);
public void save() { }
//to be implemented
} private boolean getBooleanProperty(String key, boolean defaultValue) {
if (!properties.containsKey(key)) {
} return defaultValue;
}
return properties.get(key).equals("true");
}
public void load() {
//to be implemented
}
public void save() {
//to be implemented
}
}

View File

@ -261,7 +261,7 @@ public class TimeCalcManager {
} catch (IOException rex) { } catch (IOException rex) {
Logger.getLogger(TimeCalcManager.class.getName()).log(Level.SEVERE, null, rex); Logger.getLogger(TimeCalcManager.class.getName()).log(Level.SEVERE, null, rex);
} }
System.out.println("current dir=" + new File(".").getAbsolutePath());
if(testProperties.containsKey("current.day")) { if(testProperties.containsKey("current.day")) {
calNow.set(Calendar.DAY_OF_MONTH, Integer.parseInt((String) testProperties.get("current.day"))); calNow.set(Calendar.DAY_OF_MONTH, Integer.parseInt((String) testProperties.get("current.day")));
analogClock.dayProperty.setValue(Integer.valueOf((String) testProperties.get("current.day"))); analogClock.dayProperty.setValue(Integer.valueOf((String) testProperties.get("current.day")));
@ -310,6 +310,10 @@ public class TimeCalcManager {
} else { } else {
analogClock.millisecondProperty.bindTo(time.millisecondProperty); analogClock.millisecondProperty.bindTo(time.millisecondProperty);
} }
analogClock.millisecondEnabledProperty.setValue(
TimeCalcProperties.getInstance().isMillisecondEnabled());
analogClock.secondEnabledProperty.setValue(
TimeCalcProperties.getInstance().isSecondEnabled());
window.add(analogClock); window.add(analogClock);
@ -462,7 +466,7 @@ public class TimeCalcManager {
exitButton.setOriginalForeground(); exitButton.setOriginalForeground();
} }
jokeButton.setVisible( jokeButton.setVisible(
TimeCalcConf.getInstance().isJokeVisible() TimeCalcProperties.getInstance().areJokesEnabled()
&& !visibility.isNone()); && !visibility.isNone());
window.setTitle(visibility.isNone() ? "" : windowTitle); window.setTitle(visibility.isNone() ? "" : windowTitle);

View File

@ -0,0 +1,85 @@
package org.nanoboot.utils.timecalc.app;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* @author Robert Vokac
* @since 20.02.2024
*/
public class TimeCalcProperties {
private static final String CLOCK_HANDS_LONG = "clock.hands.long";
private static final String CLOCK_HANDS_SECOND_ENABLED = "clock.hands.second.enabled";
private static final String CLOCK_HANDS_MILLISECOND_ENABLED = "clock.hands.millisecond.enabled";
private static final String BATTERY_WAVES_ENABLED = "battery.waves.enabled";
private static final String DEFAULT_VISIBILITY = "default-visibility";
private static final String VISIBILITY_ONLY_GREY_OR_NONE_ENABLED = "visibility.only-grey-or-none.enabled";
private static final String JOKES_ENABLED = "jokes.enabled";
private static final String COMMANDS_ENABLED = "commands-enabled";
private static final String TOASTS_ENABLED = "toasts.enabled";
private static TimeCalcProperties INSTANCE;
private final Properties properties = new Properties();
private TimeCalcProperties() {
if (!new File("timecalc.conf").exists()) {
//nothing to do;
return;
}
try {
this.properties.load(new FileInputStream("timecalc.conf"));
} catch (IOException e) {
System.err.println(e);
}
if(!isSecondEnabled() && isMillisecondEnabled()) {
System.out.println("Sorry, seconds are disabled, millisecond must be disabled too.");
this.properties.setProperty(TimeCalcProperties.CLOCK_HANDS_MILLISECOND_ENABLED, "false");
}
}
public static TimeCalcProperties getInstance() {
if (INSTANCE == null) {
INSTANCE = new TimeCalcProperties();
}
return INSTANCE;
}
public boolean areClockHandsLong() {
return getBooleanProperty(CLOCK_HANDS_LONG, true);
}
public boolean isSecondEnabled() {
return getBooleanProperty(CLOCK_HANDS_SECOND_ENABLED, true);
}
public boolean isMillisecondEnabled() {
return getBooleanProperty(CLOCK_HANDS_MILLISECOND_ENABLED, false);
}
public boolean areJokesEnabled() {
return getBooleanProperty(COMMANDS_ENABLED, true);
}
public boolean areBatteryWavesEnabled() {
return getBooleanProperty(BATTERY_WAVES_ENABLED, true);
}
public boolean areToastsEnabled() {
return getBooleanProperty(TOASTS_ENABLED, true);
}
private boolean getBooleanProperty(String key, boolean defaultValue) {
if (!properties.containsKey(key)) {
return defaultValue;
}
return properties.get(key).equals("true");
}
public void load() {
//to be implemented
}
public void save() {
//to be implemented
}
}

View File

@ -2,7 +2,7 @@ package org.nanoboot.utils.timecalc.swing.progress;
import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.swing.common.Widget; import org.nanoboot.utils.timecalc.swing.common.Widget;
import org.nanoboot.utils.timecalc.app.TimeCalcConf; import org.nanoboot.utils.timecalc.app.TimeCalcProperties;
import org.nanoboot.utils.timecalc.utils.common.DateFormats; import org.nanoboot.utils.timecalc.utils.common.DateFormats;
import org.nanoboot.utils.timecalc.utils.common.TimeHM; import org.nanoboot.utils.timecalc.utils.common.TimeHM;
@ -16,7 +16,8 @@ import java.awt.Graphics2D;
import java.awt.RenderingHints; import java.awt.RenderingHints;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar;
import org.nanoboot.utils.timecalc.utils.property.BooleanProperty;
import org.nanoboot.utils.timecalc.utils.property.IntegerProperty; import org.nanoboot.utils.timecalc.utils.property.IntegerProperty;
//https://kodejava.org/how-do-i-write-a-simple-analog-clock-using-java-2d/ //https://kodejava.org/how-do-i-write-a-simple-analog-clock-using-java-2d/
@ -40,7 +41,9 @@ public class AnalogClock extends Widget {
public IntegerProperty minuteProperty = new IntegerProperty("minuteProperty"); public IntegerProperty minuteProperty = new IntegerProperty("minuteProperty");
public IntegerProperty secondProperty = new IntegerProperty("secondProperty"); public IntegerProperty secondProperty = new IntegerProperty("secondProperty");
public IntegerProperty millisecondProperty = new IntegerProperty("millisecondProperty"); public IntegerProperty millisecondProperty = new IntegerProperty("millisecondProperty");
public IntegerProperty dayOfWeekProperty = new IntegerProperty("dayOfWeek"); public IntegerProperty dayOfWeekProperty = new IntegerProperty("dayOfWeekProperty");
public BooleanProperty secondEnabledProperty = new BooleanProperty("secondEnabledProperty", true);
public BooleanProperty millisecondEnabledProperty = new BooleanProperty("millisecondEnabledProperty", false);
public AnalogClock(TimeHM startTimeIn, public AnalogClock(TimeHM startTimeIn,
TimeHM endTimeIn) { TimeHM endTimeIn) {
@ -125,27 +128,33 @@ public class AnalogClock extends Widget {
drawClockFace(g2d, centerX, centerY, side / 2 - 40, visibility); drawClockFace(g2d, centerX, centerY, side / 2 - 40, visibility);
// //
drawHand(g2d, side / 2 - 10, millisecond / 1000.0, 1.0f, if(millisecondEnabledProperty.isEnabled()) {
COLOR_FOR_MILLISECOND_HAND_STRONGLY_COLORED, visibility); drawHand(g2d, side / 2 - 10, millisecond / 1000.0, 1.0f,
if (TimeCalcConf.getInstance().areClockHandsLong()) {
drawHand(g2d, (side / 2 - 10) / 4,
(millisecond > 500 ? millisecond - 500 : millisecond + 500) / 1000.0, 1.0f,
COLOR_FOR_MILLISECOND_HAND_STRONGLY_COLORED, visibility); COLOR_FOR_MILLISECOND_HAND_STRONGLY_COLORED, visibility);
if (TimeCalcProperties.getInstance().areClockHandsLong()) {
drawHand(g2d, (side / 2 - 10) / 4,
(millisecond > 500 ? millisecond - 500 :
millisecond + 500) / 1000.0, 1.0f,
COLOR_FOR_MILLISECOND_HAND_STRONGLY_COLORED,
visibility);
}
} }
//
if(secondEnabledProperty.isEnabled()) {
drawHand(g2d, side / 2 - 10, second / 60.0, 0.5f, Color.RED, visibility); drawHand(g2d, side / 2 - 10, second / 60.0, 0.5f, Color.RED, visibility);
if (TimeCalcConf.getInstance().areClockHandsLong()) { if (TimeCalcProperties.getInstance().areClockHandsLong()) {
drawHand(g2d, (side / 2 - 10) / 4, drawHand(g2d, (side / 2 - 10) / 4,
(second > 30 ? second - 30 : second + 30) / 60.0, 0.5f, (second > 30 ? second - 30 : second + 30) / 60.0, 0.5f,
Color.RED, visibility); Color.RED, visibility);
} }
}
// //
double minutes = minute / 60.0 + second / 60.0 / 60.0; double minutes = minute / 60.0 + second / 60.0 / 60.0;
drawHand(g2d, side / 2 - 20, minutes, 2.0f, drawHand(g2d, side / 2 - 20, minutes, 2.0f,
Color.BLUE, visibility); Color.BLUE, visibility);
if (TimeCalcConf.getInstance().areClockHandsLong()) { if (TimeCalcProperties.getInstance().areClockHandsLong()) {
drawHand(g2d, (side / 2 - 20) / 4, drawHand(g2d, (side / 2 - 20) / 4,
minutes + minutes > 0.5 ? minutes - 0.5 : minutes + minutes > 0.5 ? minutes - 0.5 :
minutes + (minutes > 0.5 ? (-1) : 1) * 0.5, 2.0f, minutes + (minutes > 0.5 ? (-1) : 1) * 0.5, 2.0f,
@ -156,7 +165,7 @@ public class AnalogClock extends Widget {
drawHand(g2d, side / 2 - 40, drawHand(g2d, side / 2 - 40,
hours, 4.0f, hours, 4.0f,
Color.BLACK, visibility); Color.BLACK, visibility);
if (TimeCalcConf.getInstance().areClockHandsLong()) { if (TimeCalcProperties.getInstance().areClockHandsLong()) {
drawHand(g2d, (side / 2 - 40) / 4, drawHand(g2d, (side / 2 - 40) / 4,
hours + hours > 0.5 ? hours - 0.5 : hours + hours > 0.5 ? hours - 0.5 :
hours + (hours > 0.5 ? (-1) : 1) * 0.5, 4.0f, hours + (hours > 0.5 ? (-1) : 1) * 0.5, 4.0f,

View File

@ -3,7 +3,7 @@ package org.nanoboot.utils.timecalc.swing.progress;
import lombok.Getter; import lombok.Getter;
import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.swing.common.Widget; import org.nanoboot.utils.timecalc.swing.common.Widget;
import org.nanoboot.utils.timecalc.app.TimeCalcConf; import org.nanoboot.utils.timecalc.app.TimeCalcProperties;
import org.nanoboot.utils.timecalc.utils.property.BooleanProperty; import org.nanoboot.utils.timecalc.utils.property.BooleanProperty;
import org.nanoboot.utils.timecalc.utils.common.NumberFormats; import org.nanoboot.utils.timecalc.utils.common.NumberFormats;
import org.nanoboot.utils.timecalc.utils.common.Utils; import org.nanoboot.utils.timecalc.utils.common.Utils;
@ -101,7 +101,7 @@ public class Battery extends Widget {
1;//donePercent < 0.5 ? 0.5 : donePercent;// (donePercent * 100 - ((int)(donePercent * 100))); 1;//donePercent < 0.5 ? 0.5 : donePercent;// (donePercent * 100 - ((int)(donePercent * 100)));
int waterSurfaceHeight = int waterSurfaceHeight =
(int) (4 * surfacePower);//2 + (int) (Math.random() * 3); (int) (4 * surfacePower);//2 + (int) (Math.random() * 3);
if (waterSurfaceHeight <= 2 || !TimeCalcConf.getInstance() if (waterSurfaceHeight <= 2 || !TimeCalcProperties.getInstance()
.areBatteryWavesEnabled() || wavesProperty.isDisabled()) { .areBatteryWavesEnabled() || wavesProperty.isDisabled()) {
waterSurfaceHeight = 0; waterSurfaceHeight = 0;
} }

View File

@ -1,7 +1,7 @@
package org.nanoboot.utils.timecalc.utils.common; package org.nanoboot.utils.timecalc.utils.common;
import org.nanoboot.utils.timecalc.swing.common.Toaster; import org.nanoboot.utils.timecalc.swing.common.Toaster;
import org.nanoboot.utils.timecalc.app.TimeCalcConf; import org.nanoboot.utils.timecalc.app.TimeCalcProperties;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JTextPane; import javax.swing.JTextPane;
@ -63,7 +63,7 @@ public class Jokes {
} }
public static void showRandom() { public static void showRandom() {
if(!TimeCalcConf.getInstance().isJokeVisible()) { if(!TimeCalcProperties.getInstance().areJokesEnabled()) {
//nothing to do //nothing to do
return; return;
} }

View File

@ -1,9 +1,9 @@
clock.hands.long=true clock.hands.long=true
clock.hands.second.enabled=true clock.hands.second.enabled=true
clock.hands.millisecond.enabled=false clock.hands.millisecond.enabled=true
jokes.visible=true
battery.waves.enabled=true battery.waves.enabled=true
default-visibility=STRONGLY_COLORED default-visibility=STRONGLY_COLORED
visibility.only-grey-or-none.enabled=false visibility.only-grey-or-none.enabled=false
jokes.enabled=true jokes.enabled=true
commands.enabled=true commands.enabled=true
toasts.enabled=true