From f02e1d6f7ec2286f68e663fb52c8bf4453bda3b6 Mon Sep 17 00:00:00 2001 From: Robert Vokac Date: Thu, 28 Mar 2024 13:10:13 +0100 Subject: [PATCH] Fuel Gauge was finished - icon was fixed --- .../swing/progress/FuelGaugeIcon.java | 41 --------------- .../swing/progress/ProgressFuelGauge.java | 49 ++++++++++-------- .../fuel_gauge/fuel_gauge_icon_dark_gray.png | Bin 0 -> 5406 bytes .../fuel_gauge/fuel_gauge_icon_orange.gif | Bin 4000 -> 0 bytes .../fuel_gauge/fuel_gauge_icon_orange.png | Bin 0 -> 6023 bytes .../fuel_gauge/fuel_gauge_icon_white.gif | Bin 3982 -> 0 bytes 6 files changed, 28 insertions(+), 62 deletions(-) delete mode 100644 modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/FuelGaugeIcon.java create mode 100644 modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_dark_gray.png delete mode 100644 modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_orange.gif create mode 100644 modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_orange.png delete mode 100644 modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_white.gif diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/FuelGaugeIcon.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/FuelGaugeIcon.java deleted file mode 100644 index 7adadb1..0000000 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/FuelGaugeIcon.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.nanoboot.utils.timecalc.swing.progress; - -import lombok.Getter; -import org.nanoboot.utils.timecalc.utils.common.ProgressSmiley; - -import javax.swing.ImageIcon; -import java.awt.Image; -import java.util.HashMap; -import java.util.Map; - -/** - * @author Robert Vokac - * @since 27.02.2024 - */ -public class FuelGaugeIcon extends ImageIcon { - - private static final Map cache - = new HashMap<>(); - @Getter - private boolean reserve; - @Getter - private final ImageIcon icon; - - private FuelGaugeIcon(boolean reserve) { - this.reserve = reserve; - java.net.URL iconUrl = getClass() - .getResource("/fuel_gauge/fuel_gauge_icon_" + (reserve - ? "orange" : "white") + ".gif"); - ImageIcon tmpIcon = new ImageIcon(iconUrl); - this.icon = new ImageIcon(tmpIcon.getImage() - .getScaledInstance(32, 32, Image.SCALE_SMOOTH)); - } - - public static FuelGaugeIcon getInstance(boolean reserve) { - if (!cache.containsKey(reserve)) { - cache.put(reserve, new FuelGaugeIcon(reserve)); - } - return cache.get(reserve); - } - -} diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java index fd49246..8d23bbd 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java @@ -10,9 +10,11 @@ import org.nanoboot.utils.timecalc.swing.common.Widget; import org.nanoboot.utils.timecalc.swing.progress.battery.Battery; import org.nanoboot.utils.timecalc.swing.windows.MainWindow; import org.nanoboot.utils.timecalc.utils.common.NumberFormats; +import org.nanoboot.utils.timecalc.utils.common.ProgressSmiley; import org.nanoboot.utils.timecalc.utils.property.BooleanProperty; import org.nanoboot.utils.timecalc.utils.property.Property; +import javax.imageio.ImageIO; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.Timer; @@ -21,7 +23,10 @@ import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Image; import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -35,15 +40,17 @@ public class ProgressFuelGauge extends Widget implements GetProperty { public static final Color BLACK2 = new Color(64, 64,64); public static final Color LIGHT_GRAY2 = new Color(160,160,160); - - - protected JLabel fuelIconOrange = null; - protected JLabel fuelIconWhite = null; + public static final String FUEL_GAUGE_FUEL_GAUGE_ICON_ORANGE_PNG = + "/fuel_gauge/fuel_gauge_icon_orange.png"; + public static final String FUEL_GAUGE_FUEL_GAUGE_ICON_DARK_GRAY_PNG = + "/fuel_gauge/fuel_gauge_icon_dark_gray.png"; public final BooleanProperty fuelIconVisibleProperty = new BooleanProperty(TimeCalcProperty.FUEL_ICON_VISIBLE.getKey()); private List menuItems = null; + private Image orangeIcon; + private Image darkGrayIcon; public ProgressFuelGauge() { @@ -53,15 +60,7 @@ public class ProgressFuelGauge extends Widget implements GetProperty { setForeground(Color.GRAY); setBackground(MainWindow.BACKGROUND_COLOR); - this.fuelIconOrange = new JLabel(FuelGaugeIcon.getInstance(true)); - this.fuelIconWhite = new JLabel(FuelGaugeIcon.getInstance(false)); - fuelIconOrange.setVisible(false); - fuelIconWhite.setVisible(false); - add(fuelIconOrange); - add(fuelIconWhite); this.setLayout(null); - fuelIconOrange.setBounds(1, 1, 40, 40); - fuelIconWhite.setBounds(fuelIconOrange.getBounds()); this.typeProperty.setValue(WidgetType.DAY.name().toLowerCase(Locale.ROOT)); @@ -178,16 +177,24 @@ public class ProgressFuelGauge extends Widget implements GetProperty { brush.setColor(Color.WHITE); if (fuelIconVisibleProperty.isEnabled()) { - if (donePercent() <= 0.15d) { - this.fuelIconOrange.setVisible(true); - this.fuelIconWhite.setVisible(false); - } else { - this.fuelIconOrange.setVisible(false); - this.fuelIconWhite.setVisible(true); + if(this.orangeIcon == null) { + try { + this.orangeIcon = ImageIO.read(getClass().getResource( + FUEL_GAUGE_FUEL_GAUGE_ICON_ORANGE_PNG)); + } catch (IOException e) { + e.printStackTrace(); + } } - } else { - this.fuelIconOrange.setVisible(false); - this.fuelIconWhite.setVisible(false); + if(this.darkGrayIcon == null) { + try { + this.darkGrayIcon = ImageIO.read(getClass().getResource( + FUEL_GAUGE_FUEL_GAUGE_ICON_DARK_GRAY_PNG)); + } catch (IOException e) { + e.printStackTrace(); + } + } + brush.drawImage(donePercent() <= 0.15d ? this.orangeIcon : this.darkGrayIcon, getWidth() - 32, getHeight() - 48, 32, 32, null); + } //tBrush.drawBorder(startX, startY, 10, length_ - 4 - 5, getAngle.apply(donePercent()), 3f, brush.getColor()); diff --git a/modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_dark_gray.png b/modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_dark_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..48bedcabe90f0d4c6b23d6eabd21775574128514 GIT binary patch literal 5406 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 diff --git a/modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_orange.png b/modules/time-calc-app/src/main/resources/fuel_gauge/fuel_gauge_icon_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..0e28b65e1c35f021593dbbf39f8b0dfc8d41608c GIT binary patch literal 6023 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