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 0000000..7136428 Binary files /dev/null and b/modules/time-calc-app/src/main/resources/hourglass_elapsed.png differ 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 0000000..024cc53 Binary files /dev/null and b/modules/time-calc-app/src/main/resources/hourglass_remains.png differ