From 439e6514a37193efc34a4e01fdfb0bfec9528afe Mon Sep 17 00:00:00 2001 From: Robert Vokac Date: Sat, 18 May 2024 17:12:11 +0200 Subject: [PATCH] Added glasshour icons. Elapsed and remains text fields are now coloured (red or green), if the visibility mode is not grey --- .../timecalc/swing/controls/TTextField.java | 10 ++ .../timecalc/swing/controls/TWindow.java | 1 + .../timecalc/swing/windows/MainWindow.java | 109 +++++++++++++++--- .../src/main/resources/hourglass_elapsed.png | Bin 0 -> 879 bytes .../src/main/resources/hourglass_remains.png | Bin 0 -> 899 bytes 5 files changed, 103 insertions(+), 17 deletions(-) create mode 100644 modules/time-calc-app/src/main/resources/hourglass_elapsed.png create mode 100644 modules/time-calc-app/src/main/resources/hourglass_remains.png diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TTextField.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TTextField.java index d8b8819..8e9bd80 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TTextField.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TTextField.java @@ -167,6 +167,10 @@ public class TTextField extends JTextField implements GetProperty { public void setBoundsFromLeft(JComponent jComponent) { setBoundsFromLeft(jComponent, 0); } + public void setBoundsFromLeftWithAdditionalX(JComponent jComponent, int additionalX) { + setBounds(jComponent.getX() + jComponent.getWidth() + SwingUtils.MARGIN + additionalX, + jComponent.getY() + 0); + } public void setBoundsFromLeft(JComponent jComponent, int additionalY) { setBounds(jComponent.getX() + jComponent.getWidth() + SwingUtils.MARGIN, @@ -188,8 +192,14 @@ public class TTextField extends JTextField implements GetProperty { } public void setOriginalForeground() { + if(!autoManageForeground) { + //nothing to do + return; + } this.setForeground(originalForeground); } + @Getter @Setter + private boolean autoManageForeground = true; @Override public Property getVisibilityProperty() { diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TWindow.java index 749d9b4..84c3793 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/controls/TWindow.java @@ -2,6 +2,7 @@ package org.nanoboot.utils.timecalc.swing.controls; import org.nanoboot.utils.timecalc.utils.property.IntegerProperty; +import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.Timer; import java.awt.Component; 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 7f5d00a..482104c 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 @@ -4,7 +4,6 @@ import org.nanoboot.utils.timecalc.app.CommandActionListener; import org.nanoboot.utils.timecalc.app.GetProperty; import org.nanoboot.utils.timecalc.app.TimeCalcApp; import org.nanoboot.utils.timecalc.app.TimeCalcConfiguration; -import org.nanoboot.utils.timecalc.swing.common.TimeCalcKeyAdapter; import org.nanoboot.utils.timecalc.app.TimeCalcProperties; import org.nanoboot.utils.timecalc.app.TimeCalcProperty; import org.nanoboot.utils.timecalc.entity.Progress; @@ -16,6 +15,7 @@ import org.nanoboot.utils.timecalc.persistence.impl.sqlite.ActivityRepositorySQL import org.nanoboot.utils.timecalc.persistence.impl.sqlite.WorkingDayRepositorySQLiteImpl; import org.nanoboot.utils.timecalc.swing.common.AboutButton; import org.nanoboot.utils.timecalc.swing.common.SwingUtils; +import org.nanoboot.utils.timecalc.swing.common.TimeCalcKeyAdapter; import org.nanoboot.utils.timecalc.swing.common.Toaster; import org.nanoboot.utils.timecalc.swing.common.WeekStatistics; import org.nanoboot.utils.timecalc.swing.common.Widget; @@ -28,24 +28,25 @@ import org.nanoboot.utils.timecalc.swing.controls.TTextField; import org.nanoboot.utils.timecalc.swing.controls.TWindow; import org.nanoboot.utils.timecalc.swing.progress.AnalogClock; import org.nanoboot.utils.timecalc.swing.progress.ProgressBar; +import org.nanoboot.utils.timecalc.swing.progress.ProgressCircle; import org.nanoboot.utils.timecalc.swing.progress.ProgressColor; +import org.nanoboot.utils.timecalc.swing.progress.ProgressDot; +import org.nanoboot.utils.timecalc.swing.progress.ProgressFuelGauge; +import org.nanoboot.utils.timecalc.swing.progress.ProgressLife; +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.Time; +import org.nanoboot.utils.timecalc.swing.progress.WalkingHumanProgress; import org.nanoboot.utils.timecalc.swing.progress.battery.Battery; import org.nanoboot.utils.timecalc.swing.progress.battery.DayBattery; import org.nanoboot.utils.timecalc.swing.progress.battery.HourBattery; import org.nanoboot.utils.timecalc.swing.progress.battery.MinuteBattery; import org.nanoboot.utils.timecalc.swing.progress.battery.MonthBattery; -import org.nanoboot.utils.timecalc.swing.progress.ProgressCircle; -import org.nanoboot.utils.timecalc.swing.progress.ProgressLife; -import org.nanoboot.utils.timecalc.swing.progress.ProgressMoney; -import org.nanoboot.utils.timecalc.swing.progress.ProgressSquare; -import org.nanoboot.utils.timecalc.swing.progress.ProgressSwing; -import org.nanoboot.utils.timecalc.swing.progress.ProgressFuelGauge; -import org.nanoboot.utils.timecalc.swing.progress.weather.ProgressWeather; -import org.nanoboot.utils.timecalc.swing.progress.Time; -import org.nanoboot.utils.timecalc.swing.progress.WalkingHumanProgress; import org.nanoboot.utils.timecalc.swing.progress.battery.WeekBattery; import org.nanoboot.utils.timecalc.swing.progress.battery.YearBattery; +import org.nanoboot.utils.timecalc.swing.progress.weather.ProgressWeather; import org.nanoboot.utils.timecalc.utils.common.Constants; import org.nanoboot.utils.timecalc.utils.common.DateFormats; import org.nanoboot.utils.timecalc.utils.common.FileConstants; @@ -54,14 +55,19 @@ import org.nanoboot.utils.timecalc.utils.common.TTime; import org.nanoboot.utils.timecalc.utils.common.Utils; import org.nanoboot.utils.timecalc.utils.property.ChangeListener; import org.nanoboot.utils.timecalc.utils.property.IntegerProperty; +import org.nanoboot.utils.timecalc.utils.property.ReadOnlyProperty; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JCheckBox; +import javax.swing.JComponent; import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.Timer; import java.awt.Color; import java.awt.Component; import java.awt.Font; +import java.awt.Image; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; @@ -78,10 +84,10 @@ import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; -import javax.swing.Timer; -import org.nanoboot.utils.timecalc.swing.progress.ProgressDot; -import org.nanoboot.utils.timecalc.utils.property.ReadOnlyProperty; import static org.nanoboot.utils.timecalc.app.Main.ONLY_ACTIVITIES_WINDOW_IS_ALLOWED; @@ -98,6 +104,8 @@ public class MainWindow extends TWindow { private static final String BACKUP = "_backup"; private static final String BASIC_FEATURE__ = "__only_basic_features__"; private static final String DASH = "-"; + public static final int HOUR_GLASS_ICON_HEIGHT = (int) (68d / 4d); + public static final int HOUR_GLASS_ICON_WIDTH = (int) (99d / 4d); private final TButton workDaysButton; private final TButton activitiesButton; private final TButton exitButton; @@ -134,6 +142,12 @@ public class MainWindow extends TWindow { private final ProgressRotation progressRotation; private final ProgressBar progressBar; private final ProgressColor progressColor; + private final JLabel hourGlassElapsedDayIcon; + private final JLabel hourGlassRemainsDayIcon; + private final JLabel hourGlassElapsedWeekIcon; + private final JLabel hourGlassRemainsWeekIcon; + private final JLabel hourGlassElapsedPauseIcon; + private final JLabel hourGlassRemainsPauseIcon; private HelpWindow helpWindow = null; private ConfigWindow configWindow = null; private ActivitiesWindow activitiesWindow = null; @@ -171,6 +185,13 @@ public class MainWindow extends TWindow { this.elapsedPauseTextField = new TTextField("", 80); this.remainingPauseTextField = new TTextField("", 80); this.endPauseTextField = new TTextField("", 50); + // + this.elapsedDayTextField.setAutoManageForeground(false); + this.remainingDayTextField.setAutoManageForeground(false); + this.elapsedWeekTextField.setAutoManageForeground(false); + this.remainingWeekTextField .setAutoManageForeground(false); + this.elapsedPauseTextField.setAutoManageForeground(false); + this.remainingPauseTextField.setAutoManageForeground(false); } public MainWindow(TimeCalcApp timeCalcApp) { @@ -270,6 +291,30 @@ public class MainWindow extends TWindow { this.jokeButton = new TButton("Joke", 60); this.aboutButton = new AboutButton(); + Function loadImageIcon = (p) -> + new ImageIcon(new javax.swing.ImageIcon(getClass() + .getResource(p)).getImage() + .getScaledInstance( + HOUR_GLASS_ICON_HEIGHT, HOUR_GLASS_ICON_WIDTH, Image.SCALE_SMOOTH)); + Supplier supplyHourglassElapsedImageIcon = () -> new JLabel(loadImageIcon.apply("/hourglass_elapsed.png")); + Supplier supplyHourglassRemainsImageIcon = () -> new JLabel(loadImageIcon.apply("/hourglass_remains.png")); + this.hourGlassElapsedDayIcon = supplyHourglassElapsedImageIcon.get(); + this.hourGlassRemainsDayIcon = supplyHourglassRemainsImageIcon.get(); + this.hourGlassElapsedWeekIcon = supplyHourglassElapsedImageIcon.get(); + this.hourGlassRemainsWeekIcon = supplyHourglassRemainsImageIcon.get(); + this.hourGlassElapsedPauseIcon = supplyHourglassElapsedImageIcon.get(); + this.hourGlassRemainsPauseIcon = supplyHourglassRemainsImageIcon.get(); + if(!allowOnlyBasicFeaturesProperty.getValue()) { + addAll( + hourGlassElapsedDayIcon, + hourGlassRemainsDayIcon, + hourGlassElapsedWeekIcon, + hourGlassRemainsWeekIcon, + hourGlassElapsedPauseIcon, + hourGlassRemainsPauseIcon + ); + } + //window.add(weatherButton); addAll(workDaysButton, activitiesButton, restartButton,focusButton); if(!allowOnlyBasicFeaturesProperty.getValue()) { @@ -668,7 +713,7 @@ public class MainWindow extends TWindow { - remainingDayTextField.setBoundsFromLeft(elapsedDayTextField); + remainingDayTextField.setBoundsFromLeftWithAdditionalX(elapsedDayTextField, 15); remainingDayTextField.setEditable(false); // @@ -706,7 +751,7 @@ public class MainWindow extends TWindow { elapsedWeekTextField.setEditable(false); // - remainingWeekTextField.setBoundsFromLeft(elapsedWeekTextField); + remainingWeekTextField.setBoundsFromLeftWithAdditionalX(elapsedWeekTextField, 15); remainingWeekTextField.setEditable(false); if(!allowOnlyBasicFeaturesProperty.getValue()) { add(weekLabel); @@ -728,7 +773,7 @@ public class MainWindow extends TWindow { elapsedPauseTextField.setBoundsFromLeft(pauseLabel); elapsedPauseTextField.setEditable(false); // - remainingPauseTextField.setBoundsFromLeft(elapsedPauseTextField); + remainingPauseTextField.setBoundsFromLeftWithAdditionalX(elapsedPauseTextField, 15); remainingPauseTextField.setEditable(false); // @@ -739,6 +784,16 @@ public class MainWindow extends TWindow { add(endPauseTextFieldLabel); add(endPauseTextField); } + + BiConsumer setBoundsForHourGlassIcon = (l, c) -> + l.setBounds(c.getX() - HOUR_GLASS_ICON_WIDTH,c.getY(), HOUR_GLASS_ICON_HEIGHT, HOUR_GLASS_ICON_WIDTH); + setBoundsForHourGlassIcon.accept(hourGlassElapsedDayIcon, elapsedDayTextField); + setBoundsForHourGlassIcon.accept(hourGlassRemainsDayIcon, remainingDayTextField); + setBoundsForHourGlassIcon.accept(hourGlassElapsedWeekIcon, elapsedWeekTextField); + setBoundsForHourGlassIcon.accept(hourGlassRemainsWeekIcon, remainingWeekTextField); + setBoundsForHourGlassIcon.accept(hourGlassElapsedPauseIcon, elapsedPauseTextField); + setBoundsForHourGlassIcon.accept(hourGlassRemainsPauseIcon, remainingPauseTextField); + //////// // @@ -946,7 +1001,7 @@ public class MainWindow extends TWindow { } ); setSize(progressSquare.getX() + progressSquare.getWidth() - + 4 * SwingUtils.MARGIN, + + 5 * SwingUtils.MARGIN, focusButton.getY() + focusButton.getHeight() + SwingUtils.MARGIN + focusButton.getHeight() + 2 * SwingUtils.MARGIN); @@ -1188,6 +1243,26 @@ public class MainWindow extends TWindow { break; } + boolean grey = Visibility + .valueOf(timeCalcApp.visibilityProperty.getValue()) + .isGray(); + if (grey) { +// remainingDayTextField.setForeground(Color.GRAY); +// elapsedDayTextField.setForeground(Color.GRAY); +// remainingWeekTextField.setForeground(Color.GRAY); +// elapsedWeekTextField.setForeground(Color.GRAY); +// remainingPauseTextField.setForeground(Color.GRAY); +// elapsedPauseTextField.setForeground(Color.GRAY); + } else { + remainingDayTextField.setForeground(Color.RED); + elapsedDayTextField.setForeground(Color.GREEN); + remainingWeekTextField.setForeground(Color.RED); + elapsedWeekTextField.setForeground(Color.GREEN); + remainingPauseTextField.setForeground(Color.RED); + elapsedPauseTextField.setForeground(Color.GREEN); + + } + if(allowOnlyBasicFeaturesProperty.getValue()) { if(timeCalcConfiguration.batteryDayVisibleProperty.isDisabled()) { timeCalcConfiguration.batteryDayVisibleProperty.enable(); diff --git a/modules/time-calc-app/src/main/resources/hourglass_elapsed.png b/modules/time-calc-app/src/main/resources/hourglass_elapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..713642820b92b75de0827fa109a06df0c61c06df GIT binary patch literal 879 zcmeAS@N?(olHy`uVBq!ia0vp^ErlNdZs{m;!wPZF&7<&d`N;(Gi4KNR%su7_`OQe{^aA24^AkEFx3>**G!C&(Yw0(l+~;6mPYSYo~*fkoo{E-=csLa z=j&b7?!5HnlW)hDR&9@q-;UYuKESUS?&Im{zngRB&Pv^&ephAV#Van&a#g(4nl>ru zGV^q;0*#bsQ?6XAn>9gl*7Zd%msX{?iCqnv?bT6opd%c?g<+EgRxaSs zj7u+G$#mAKYRQq$K9gH2%+?=W#ddw-M}eoh_kB7-R-`furWdSaTIOW)KEcIG=o#lm zy$>Ayn-94yTl&M}q@L3fwk)a5d#17Jg&y$jI6Al2&;5|8qFihBDUT9KN#Edmz1};x zCrVjo?RaJ#1~f;}$?ILk`4W{wLYFQDOzCm?KJliR^vxYC<)AQkXL}ID>eS-F`}Xgi zC*`&e_!#fBUb*vep61I*0=~(DXWu{6IW=!+F>59a_pYgR^r-vtarTwIf#NIQz5n3E@4|O zHLKO5wZiL@&17%U453TPvXbjJ&z{G-vHZu|vgrFq3-;f?ULL>2W2K*m3s)AWxRR{I z+`g8Qw6!97p$j5Tc)UCjvFwP7qHSslFsy|xZCX;iaPVwA7zJxO+~9Dw^6?Ed^#022WQ%mvv4FO#t~nb%y`| literal 0 HcmV?d00001 diff --git a/modules/time-calc-app/src/main/resources/hourglass_remains.png b/modules/time-calc-app/src/main/resources/hourglass_remains.png new file mode 100644 index 0000000000000000000000000000000000000000..024cc53a3c801af559af28505093dc219c3a480f GIT binary patch literal 899 zcmeAS@N?(olHy`uVBq!ia0vp^EUA9CZ2e%$jrj{=kNR`oy~1A z&b}$7@7uk<`YiIQsuWiGdq8r@lyAr4cONiUO!w(rw)||%nL9O_LH(;H&J3KgEiJI4 z5+{CVk=FF{}OXI^r={`%|Bn-O>Nwm(mQKZQf{mf|JH zOGj-pCr$)v=xRMPVbZk{l@QL0GB#YdX8F3MwM>b)xH{kyIn9sv z{L`G2+>RHA7{#n=SSfIRipvt^#CZa*nZAG6p`DWw6_m8Iy{|wp$ zmZ(_Ca$aw#5P7Gmd@(h}D=27lzD|L7kg=7mo9f}ETrC_Imn=!Q5=!LE%+&C5TlD+H z8sUxG!xuf^V{8*B+8HA!uY4i)M3ueEJ1$PWPz9HcD;KVPH$DHg!CMq)%IB`{KAzKC zrkIFb{3Eu`$!69kv8QS-S}~U=9F>gP5yB|0IBk7SiPs^aOP3nLKS$5t?$o*WST9&H zs8Ou7dfr}OP#6dcedKbx^Kh2HYYTOob1}(EM|PhOT9cI_rX>1E^WiVX4e-&LO6}ox4@BMVwIZTDW=KBOuAm-Izd9b^EO~kaPkM-q}n-pD*3*Q1W O4uhwwpUXO@geCx-z=OX4 literal 0 HcmV?d00001