diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Widget.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Widget.java index d738f52..6068b93 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Widget.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Widget.java @@ -1,5 +1,6 @@ package org.nanoboot.utils.timecalc.swing.common; +import lombok.Getter; import org.nanoboot.utils.timecalc.app.GetProperty; import org.nanoboot.utils.timecalc.app.TimeCalcProperty; import org.nanoboot.utils.timecalc.entity.Progress; @@ -38,7 +39,7 @@ import java.util.function.Consumer; public class Widget extends JPanel implements GetProperty { - private static final int CLOSE_BUTTON_SIDE = 25; + private static final int CLOSE_OR_MINIMIZE_BUTTON_SIDE = 25; protected static final Color FOREGROUND_COLOR = new Color(220, 220, 220); protected static final Color FOREGROUND_COLOR2 = new Color(210, 210, 210); protected static final Color BACKGROUND_COLOR = new Color(238, 238, 238); @@ -49,8 +50,11 @@ public class Widget extends JPanel implements protected static final String LEGS = " /\\ "; public static final Color CLOSE_BUTTON_FOREGROUND_COLOR = new Color(127, 127, 127); - public static final Color CLOSE_BUTTON_BACKGROUND_COLOR = Color.LIGHT_GRAY; + public static final Color CLOSE_OR_MINIMIZE_BUTTON_BACKGROUND_COLOR = Color.LIGHT_GRAY; public static final Color CLOSE_BUTTON_BACKGROUND_COLOR_MOUSE_OVER_CLOSE_ICON = new Color(255, 153, 153); + public static final Color MINIMIZE_BUTTON_BACKGROUND_COLOR_MOUSE_OVER_CLOSE_ICON = new Color( + 126, 179, 227); + private static final Color VERY_LIGHT_GRAY = new Color(220, 220, 220); public final BooleanProperty visibilitySupportedColoredProperty = new BooleanProperty("visibilitySupportedColoredProperty", true); public final BooleanProperty visibleProperty @@ -72,12 +76,16 @@ public class Widget extends JPanel implements protected Progress progress = null; protected boolean mouseOver = false; private boolean mouseOverCloseButton = false; + private boolean mouseOverMinimizeButton = false; protected JLabel smileyIcon; protected JLabel smileyIcon2; private long lastUpdate = System.nanoTime(); private static final Color PURPLE_STRONGLY_COLORED = new Color(153,51,255); private static final Color PURPLE_WEAKLY_COLORED = new Color(204,153,255); + @Getter + private boolean hidden; + private WidgetMenu widgetMenu = null; public Widget() { setBackground(BACKGROUND_COLOR); @@ -93,35 +101,36 @@ public class Widget extends JPanel implements int x = e.getX(); int y = e.getY(); - mouseOverCloseButton = x >= getWidth() - CLOSE_BUTTON_SIDE - && y <= CLOSE_BUTTON_SIDE; + mouseOverCloseButton = x >= getWidth() - CLOSE_OR_MINIMIZE_BUTTON_SIDE + && y <= CLOSE_OR_MINIMIZE_BUTTON_SIDE; + mouseOverMinimizeButton = x < getWidth() - CLOSE_OR_MINIMIZE_BUTTON_SIDE + && x > getWidth() - 2 * CLOSE_OR_MINIMIZE_BUTTON_SIDE + && y <= CLOSE_OR_MINIMIZE_BUTTON_SIDE; } }); addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { + if(hidden) { + hidden = false; + } if (mouseOverCloseButton) { visibleProperty.setValue(false); return; } + if(mouseOverMinimizeButton) { + hidden = true; + return; + } + if (visibilitySupportedColoredProperty.isDisabled()) { //nothing to do return; } -// if (visibleProperty.isEnabled()) { -// Visibility visibility -// = Visibility.valueOf(visibilityProperty.getValue()); -// if (visibility.isStronglyColored()) { -// visibilityProperty -// .setValue(Visibility.WEAKLY_COLORED.name()); -// } else { -// visibilityProperty -// .setValue(Visibility.STRONGLY_COLORED.name()); -// } -// } + } @Override @@ -227,20 +236,29 @@ public class Widget extends JPanel implements @Override public final void paintComponent(Graphics brush) { super.paintComponent(brush); - setVisible(visibleProperty.isEnabled()); + Visibility visibility + = Visibility.valueOf(visibilityProperty.getValue()); - if (visibleProperty.isDisabled()) { + if (visibleProperty.isDisabled() || hidden) { + if(hidden) { + if (mouseOver) { + Color currentColor = brush.getColor(); + brush.setColor(VERY_LIGHT_GRAY); + brush.fillRect(1, 1, getWidth() - 2, getHeight() - 2); + brush.setColor(currentColor); + } + } //nothing to do return; } - Visibility visibility - = Visibility.valueOf(visibilityProperty.getValue()); + super.setVisible( visibility != Visibility.NONE && visibleProperty.isEnabled()); paintWidget(brush); paintCloseIcon(brush, getWidth(), mouseOver, mouseOverCloseButton); + paintMinimizeIcon(brush, getWidth(), mouseOver, mouseOverMinimizeButton); if (mouseOver) { Color currentColor = brush.getColor(); @@ -264,7 +282,8 @@ public class Widget extends JPanel implements // return; // } - brush.setColor(mouseOverCloseButton ? CLOSE_BUTTON_BACKGROUND_COLOR_MOUSE_OVER_CLOSE_ICON : CLOSE_BUTTON_BACKGROUND_COLOR); + brush.setColor(mouseOverCloseButton ? CLOSE_BUTTON_BACKGROUND_COLOR_MOUSE_OVER_CLOSE_ICON : + CLOSE_OR_MINIMIZE_BUTTON_BACKGROUND_COLOR); // if(!mouseOverCloseButton) { // brush.drawRect(width - CLOSE_BUTTON_SIDE - 1, 0 + 1, CLOSE_BUTTON_SIDE, @@ -273,18 +292,45 @@ public class Widget extends JPanel implements // CLOSE_BUTTON_SIDE - 2); // return; // } - brush.fillOval(width - CLOSE_BUTTON_SIDE - 1, 0 + 1, CLOSE_BUTTON_SIDE, - CLOSE_BUTTON_SIDE); + brush.fillOval(width - CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1, 0 + 1, + CLOSE_OR_MINIMIZE_BUTTON_SIDE, + CLOSE_OR_MINIMIZE_BUTTON_SIDE); brush.setColor(CLOSE_BUTTON_FOREGROUND_COLOR); Graphics2D brush2d = (Graphics2D) brush; brush2d.setStroke(new BasicStroke(2f)); int offset = 6; - brush.drawLine(width - CLOSE_BUTTON_SIDE - 1 + offset, 0 + 1 + offset, - width - 0 * CLOSE_BUTTON_SIDE - 1 - offset, - 0 + CLOSE_BUTTON_SIDE + 1 - offset); - brush.drawLine(width - CLOSE_BUTTON_SIDE - 1 + offset, - 0 + CLOSE_BUTTON_SIDE + 1 - offset, - width - 0 * CLOSE_BUTTON_SIDE - 1 - offset, 0 + 1 + offset); + brush.drawLine(width - CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 + offset, 0 + 1 + offset, + width - 0 * CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 - offset, + 0 + CLOSE_OR_MINIMIZE_BUTTON_SIDE + 1 - offset); + brush.drawLine(width - CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 + offset, + 0 + CLOSE_OR_MINIMIZE_BUTTON_SIDE + 1 - offset, + width - 0 * CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 - offset, 0 + 1 + offset); + } + + private static void paintMinimizeIcon(Graphics brush, int width, + boolean mouseOver, boolean mouseOverMinimizeButton) { + + if (!mouseOver) { + //nothing to do + return; + } + + brush.setColor(mouseOverMinimizeButton ? MINIMIZE_BUTTON_BACKGROUND_COLOR_MOUSE_OVER_CLOSE_ICON : + CLOSE_OR_MINIMIZE_BUTTON_BACKGROUND_COLOR); + + brush.fillOval(width - CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 - CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1, 0 + 1, + CLOSE_OR_MINIMIZE_BUTTON_SIDE, + CLOSE_OR_MINIMIZE_BUTTON_SIDE); + brush.setColor(CLOSE_BUTTON_FOREGROUND_COLOR); + Graphics2D brush2d = (Graphics2D) brush; + brush2d.setStroke(new BasicStroke(2f)); + int offset = 6; + int y = ((int)(0 + 1 + CLOSE_OR_MINIMIZE_BUTTON_SIDE / 2d)) + 2; + brush.drawLine(width - CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 - CLOSE_OR_MINIMIZE_BUTTON_SIDE + - 1 + offset, y, + width - 0 * CLOSE_OR_MINIMIZE_BUTTON_SIDE - 1 - offset - CLOSE_OR_MINIMIZE_BUTTON_SIDE + - 1, + y); } protected void paintWidget(Graphics g) { @@ -478,4 +524,8 @@ public class Widget extends JPanel implements //brush.setBackground(currentBackgroundColor); brush.setFont(currentFont); } + + public void hideWidget() { + this.hidden = true; + } } diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/WidgetMenu.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/WidgetMenu.java index e64fbd5..aa8d61b 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/WidgetMenu.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/WidgetMenu.java @@ -88,6 +88,12 @@ public class WidgetMenu extends JPopupMenu { //if(!aClass.getSimpleName().contains("Battery")) { add(typeMenuItem); //} + + JMenuItem hideMenuItem = new JMenuItem("Hide"); + add(hideMenuItem); + hideMenuItem.addActionListener(e -> { + this.widget.hideWidget(); + }); } public void markAsSelected(WidgetType widgetType) { this.typeMinuteMenuItem.setText(WidgetType.MINUTE.name()); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressMoney.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressMoney.java index effc580..786291d 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressMoney.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressMoney.java @@ -58,6 +58,10 @@ public class ProgressMoney extends Widget implements GetProperty { //nothing to do return; } else { + if(progress == null) { + //nothing to do + return; + } double workDaysInMonth = progress.getWorkDaysInMonth(); boolean isWeekend = progress.isWeekend(); double perDay = perMonth / workDaysInMonth;