From 4c5823e6a2dc4c9f8f9509ff74bbe105f44fc77f Mon Sep 17 00:00:00 2001 From: Robert Vokac Date: Sat, 18 May 2024 17:15:46 +0200 Subject: [PATCH] Added ProgressWater --- .../timecalc/app/TimeCalcConfiguration.java | 8 ++ .../utils/timecalc/app/TimeCalcProperty.java | 4 + .../timecalc/swing/progress/ProgressBar.java | 2 - .../swing/progress/ProgressWater.java | 74 +++++++++++++++++++ .../timecalc/swing/windows/ConfigWindow.java | 22 +++++- .../timecalc/swing/windows/MainWindow.java | 27 ++++++- .../src/main/resources/timecalc-default.conf | 3 + 7 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressWater.java diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java index a3bdee7..13b0d14 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java @@ -224,6 +224,13 @@ public class TimeCalcConfiguration { = new StringProperty(TimeCalcProperty.BAR_TYPE.getKey()); public final IntegerProperty barHeightProperty = new IntegerProperty(TimeCalcProperty.BAR_HEIGHT.getKey()); + // + public final BooleanProperty waterVisibleProperty + = new BooleanProperty(TimeCalcProperty.WATER_VISIBLE.getKey()); + public final BooleanProperty waterHiddenProperty + = new BooleanProperty(TimeCalcProperty.WATER_HIDDEN.getKey()); + public final StringProperty waterTypeProperty + = new StringProperty(TimeCalcProperty.WATER_TYPE.getKey()); // @@ -362,6 +369,7 @@ public class TimeCalcConfiguration { squareVisibleProperty,squareTypeProperty, circleVisibleProperty,circleTypeProperty,circleInnerCircleVisibleProperty,circleOuterCircleOnlyBorderProperty, barVisibleProperty, barTypeProperty, barHiddenProperty, barHeightProperty, + waterVisibleProperty, waterTypeProperty, waterHiddenProperty, colorVisibleProperty, colorTypeProperty, colorHiddenProperty, colorHeightProperty, dotVisibleProperty,dotTypeProperty, fuelVisibleProperty, fuelTypeProperty, fuelHiddenProperty, diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperty.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperty.java index ab574f6..73a8fd2 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperty.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperty.java @@ -110,6 +110,10 @@ public enum TimeCalcProperty { BAR_HIDDEN("bar.hidden", "Bar : Hidden"), BAR_HEIGHT("bar.height", "Bar : Height", Integer.class), // + WATER_VISIBLE("water.visible", "Water"), + WATER_TYPE("water.type", "Water : Type"), + WATER_HIDDEN("water.hidden", "Water : Hidden"), + // COLOR_VISIBLE("color.visible", "Color"), COLOR_TYPE("color.type", "Color : Type"), COLOR_HIDDEN("color.hidden", "Color : Hidden"), diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressBar.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressBar.java index 6042c98..73058a5 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressBar.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressBar.java @@ -4,10 +4,8 @@ import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.swing.common.Widget; import org.nanoboot.utils.timecalc.swing.progress.battery.Battery; import org.nanoboot.utils.timecalc.utils.common.NumberFormats; -import org.nanoboot.utils.timecalc.utils.property.BooleanProperty; import org.nanoboot.utils.timecalc.utils.property.IntegerProperty; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressWater.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressWater.java new file mode 100644 index 0000000..98f234b --- /dev/null +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressWater.java @@ -0,0 +1,74 @@ +package org.nanoboot.utils.timecalc.swing.progress; + +import org.nanoboot.utils.timecalc.entity.Visibility; +import org.nanoboot.utils.timecalc.swing.common.Widget; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +public class ProgressWater extends Widget { + + public ProgressWater() { + System.out.println("Starting ProgressWater"); + setPreferredSize(new Dimension(100, 400)); + } + + private static final Color WATER_COLOR = new Color(128, 197, 222); + + @Override + public void paintWidget(Graphics g) { + + Visibility visibility + = Visibility.valueOf(visibilityProperty.getValue()); + Graphics2D brush = (Graphics2D) g; + brush.setColor( + visibility.isStronglyColored() || mouseOver ? + WATER_COLOR + : FOREGROUND_COLOR); + brush.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + int tankHeight = (int) (getHeight() * 0.48); + + int doneWaterHeight = (int) (tankHeight * (donePercent())); + + int h = getHeight() - 1; + int w = getWidth() - 1; + int w48 = (int) (w * 0.48); + int w52 = (int) (w * 0.52); + int h48 = (int) (h * 0.48); + int h52 = (int) (h * 0.52); + + int w4 = (int) (w * 0.04); + int h4 = (int) (h * 0.04); + + brush.fillRect(2, doneWaterHeight, w - 1, + (int) (tankHeight * (1d - donePercent()))); + brush.fillRect(2, h - doneWaterHeight, w - 1, + (int) (tankHeight * (donePercent()))); + if(donePercent() < 1d) { + brush.fillRect(w48, h48, w4 + 1, h4 + tankHeight); + } + brush.setColor( + visibility.isStronglyColored() || mouseOver ? + Color.BLACK : FOREGROUND_COLOR); + + brush.drawPolyline( + new int[] {w48, 1, 1, w, w, w52}, + new int[] {h48, h48, 1, 1, + h48, h48}, + 6); + + brush.drawPolyline( + new int[] {w52, w, w, 1, 1, w48}, + new int[] {h52, h52, h, h, + h52, h52}, + 6); + brush.drawLine(w48, h48, w48, h52); + brush.drawLine(w52, h48, w52, h52); + } + +} diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java index 8f9beb0..f08f552 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/ConfigWindow.java @@ -210,6 +210,13 @@ public class ConfigWindow extends TWindow { private final JTextField barHeightProperty = new JTextField(TimeCalcProperty.BAR_HEIGHT.getKey()); // + private final JCheckBox waterVisibleProperty + = new JCheckBox(TimeCalcProperty.WATER_VISIBLE.getKey()); + private final JTextField waterTypeProperty + = new JTextField(TimeCalcProperty.WATER_TYPE.getKey()); + private final JCheckBox waterHiddenProperty + = new JCheckBox(TimeCalcProperty.WATER_HIDDEN.getKey()); + // private final JCheckBox colorVisibleProperty = new JCheckBox(TimeCalcProperty.COLOR_VISIBLE.getKey()); private final JTextField colorTypeProperty @@ -497,6 +504,7 @@ public class ConfigWindow extends TWindow { // barVisibleProperty.setSelected(enable); barHeightProperty.setText("50"); + waterVisibleProperty.setSelected(enable); colorVisibleProperty.setSelected(enable); colorHeightProperty.setText("50"); swingVisibleProperty.setSelected(enable); @@ -591,6 +599,7 @@ public class ConfigWindow extends TWindow { squareVisibleProperty,squareHiddenProperty,squareTypeProperty, circleVisibleProperty,circleHiddenProperty,circleTypeProperty,circleInnerCircleVisibleProperty,circleOuterCircleVisibleProperty, barVisibleProperty, barHiddenProperty, barTypeProperty, barHeightProperty, + waterVisibleProperty, waterHiddenProperty, waterTypeProperty, colorVisibleProperty, colorHiddenProperty, colorTypeProperty, colorHeightProperty, dotVisibleProperty,dotHiddenProperty,dotTypeProperty, fuelVisibleProperty,fuelTypeProperty,fuelHiddenProperty,fuelIconVisibleProperty, @@ -1011,7 +1020,18 @@ public class ConfigWindow extends TWindow { index = 5; } - if (key.startsWith("square.")||key.startsWith("circle.")||key.startsWith("dot.")||key.startsWith("swing.")||key.startsWith("walking-human.") || key.startsWith("fuel.") || key.startsWith("rotation.") || key.startsWith("bar.") || key.startsWith("color.")) { + if ( + key.startsWith("square.") || + key.startsWith("circle.") || + key.startsWith("dot.") || + key.startsWith("swing.") || + key.startsWith("walking-human.") || + key.startsWith("fuel.") || + key.startsWith("rotation.") || + key.startsWith("bar.") || + key.startsWith("color.") || + key.startsWith("water.") + ) { index = 6; } diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java index 9ad260b..eef3614 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java @@ -37,6 +37,7 @@ import org.nanoboot.utils.timecalc.swing.progress.ProgressMoney; import org.nanoboot.utils.timecalc.swing.progress.ProgressRotation; import org.nanoboot.utils.timecalc.swing.progress.ProgressSquare; import org.nanoboot.utils.timecalc.swing.progress.ProgressSwing; +import org.nanoboot.utils.timecalc.swing.progress.ProgressWater; import org.nanoboot.utils.timecalc.swing.progress.Time; import org.nanoboot.utils.timecalc.swing.progress.WalkingHumanProgress; import org.nanoboot.utils.timecalc.swing.progress.battery.Battery; @@ -142,6 +143,7 @@ public class MainWindow extends TWindow { private final ProgressRotation progressRotation; private final ProgressBar progressBar; private final ProgressColor progressColor; + private final ProgressWater progressWater; private final JLabel hourGlassElapsedDayIcon; private final JLabel hourGlassRemainsDayIcon; private final JLabel hourGlassElapsedWeekIcon; @@ -547,6 +549,21 @@ public class MainWindow extends TWindow { add(progressColor); // + this.progressWater = new ProgressWater(); + progressWater.setBounds(progressSquare.getX() + progressSquare.getWidth() + 4 * SwingUtils.MARGIN, + progressSquare.getY(), + 100, 550 /*exitButton.getY() + exitButton.getHeight() - SwingUtils.MARGIN*/); + + progressWater.visibleProperty + .bindTo(timeCalcConfiguration.waterVisibleProperty); + progressWater.typeProperty + .bindTo(timeCalcConfiguration.waterTypeProperty); + progressWater.hiddenProperty + .bindTo(timeCalcConfiguration.waterHiddenProperty); + + add(progressWater); + // + { progressSquare.typeProperty .bindTo(timeCalcConfiguration.squareTypeProperty); @@ -1005,8 +1022,10 @@ public class MainWindow extends TWindow { widget.typeVisibleProperty.bindTo(timeCalcConfiguration.typeVisibleProperty); } ); - setSize(progressSquare.getX() + progressSquare.getWidth() - + 5 * SwingUtils.MARGIN, + + int standardWidth = progressSquare.getX() + progressSquare.getWidth() + + 5 * SwingUtils.MARGIN; + setSize(standardWidth, focusButton.getY() + focusButton.getHeight() + SwingUtils.MARGIN + focusButton.getHeight() + 2 * SwingUtils.MARGIN); @@ -1247,6 +1266,9 @@ public class MainWindow extends TWindow { if(ONLY_ACTIVITIES_WINDOW_IS_ALLOWED) { break; } + setSize(standardWidth + (timeCalcConfiguration.waterVisibleProperty.isEnabled() ? 120 : 0), + focusButton.getY() + focusButton.getHeight() + SwingUtils.MARGIN + + focusButton.getHeight() + 2 * SwingUtils.MARGIN); boolean stronglyColored = Visibility .valueOf(timeCalcApp.visibilityProperty.getValue()) @@ -1625,6 +1647,7 @@ public class MainWindow extends TWindow { progressRotation.setProgress(progress); progressBar.setProgress(progress); progressColor.setProgress(progress); + progressWater.setProgress(progress); dayBattery.setProgress(progress); monthBattery.setProgress(progress); diff --git a/modules/time-calc-app/src/main/resources/timecalc-default.conf b/modules/time-calc-app/src/main/resources/timecalc-default.conf index e0550c2..9abafdc 100644 --- a/modules/time-calc-app/src/main/resources/timecalc-default.conf +++ b/modules/time-calc-app/src/main/resources/timecalc-default.conf @@ -64,6 +64,9 @@ bar.visible=true bar.type=day bar.hidden=false bar.height=25 +water.visible=true +water.type=day +water.hidden=false color.visible=true color.type=day color.hidden=false