Added new improvements

This commit is contained in:
Robert Vokac 2024-02-11 11:45:23 +00:00
parent 1ad3ad3e6a
commit b08a45a5b9
No known key found for this signature in database
GPG Key ID: 693D30BEE3329055
6 changed files with 149 additions and 127 deletions

View File

@ -0,0 +1,85 @@
package org.nanoboot.utils.timecalc.app;
import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.swing.common.Toaster;
import org.nanoboot.utils.timecalc.utils.common.Utils;
import javax.swing.JOptionPane;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Robert
* @since 26.02.2024
*/
public class CommandActionListener
implements ActionListener {
private final TimeCalcApp timeCalcApp;
private final TimeCalcConfiguration timeCalcConfiguration;
public CommandActionListener(TimeCalcApp timeCalcApp, TimeCalcConfiguration timeCalcConfiguration) {
this.timeCalcApp = timeCalcApp;
this.timeCalcConfiguration = timeCalcConfiguration;
}
@Override
public void actionPerformed(ActionEvent e) {
String commands = (String) JOptionPane.showInputDialog(
null,
"Run a command:",
"Command launching",
JOptionPane.PLAIN_MESSAGE,
null,
null,
"test"
);
String[] commandsAsArray = commands.split(" ");
switch (commandsAsArray[0]) {
case "test":
JOptionPane.showMessageDialog(null, "Test");
break;
case "color":
timeCalcApp.visibilityProperty.setValue(
commandsAsArray[1].equals("1") ?
Visibility.STRONGLY_COLORED.name() :
Visibility.WEAKLY_COLORED.name());
break;
case "gray":
timeCalcApp.visibilityProperty.setValue(
commandsAsArray[1].equals("1") ?
Visibility.GRAY.name() :
Visibility.WEAKLY_COLORED.name());
break;
case "waves":
timeCalcConfiguration.batteryWavesEnabledProperty
.setValue(commandsAsArray[1].equals("1"));
break;
case "uptime":
JOptionPane.showMessageDialog(null,
timeCalcApp
.getCountOfMinutesSinceAppStarted()
+ " minutes");
break;
case "toast":
Toaster t = new Toaster();
t.setToasterWidth(800);
t.setToasterHeight(800);
t.setDisplayTime(60000 * 5);
t.setToasterColor(Color.GRAY);
Font font = new Font("sans", Font.PLAIN, 12);
t.setToasterMessageFont(font);
t.setDisplayTime(5000);
t.showToaster(commands.substring(6));
break;
case "toasts":
Utils.toastsAreEnabled
.setValue(commandsAsArray[1].equals("1"));
break;
default:
JOptionPane.showMessageDialog(null,
"Unknown command: " + commandsAsArray[0]);
}
}
}

View File

@ -0,0 +1,11 @@
package org.nanoboot.utils.timecalc.app;
import org.nanoboot.utils.timecalc.utils.property.Property;
/**
* @author Robert
* @since 26.02.2024
*/
public interface GetProperty<T> {
Property<T> getProperty();
}

View File

@ -25,10 +25,8 @@ import org.nanoboot.utils.timecalc.utils.common.TimeHM;
import org.nanoboot.utils.timecalc.utils.common.Utils; import org.nanoboot.utils.timecalc.utils.common.Utils;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JOptionPane;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Font;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -135,65 +133,7 @@ public class TimeCalcManager {
weatherButton weatherButton
.addActionListener(e -> new WeatherWindow().setVisible(true)); .addActionListener(e -> new WeatherWindow().setVisible(true));
commandButton commandButton.addActionListener(new CommandActionListener(timeCalcApp, timeCalcConfiguration));
.addActionListener(e ->
{
String commands = (String) JOptionPane.showInputDialog(
null,
"Run a command:",
"Command launching",
JOptionPane.PLAIN_MESSAGE,
null,
null,
"test"
);
String[] commandsAsArray = commands.split(" ");
switch (commandsAsArray[0]) {
case "test":
JOptionPane.showMessageDialog(null, "Test");
break;
case "color":
timeCalcApp.visibilityProperty.setValue(
commandsAsArray[1].equals("1") ?
Visibility.STRONGLY_COLORED.name() :
Visibility.WEAKLY_COLORED.name());
break;
case "gray":
timeCalcApp.visibilityProperty.setValue(
commandsAsArray[1].equals("1") ?
Visibility.GRAY.name() :
Visibility.WEAKLY_COLORED.name());
break;
case "waves":
timeCalcConfiguration.batteryWavesEnabledProperty
.setValue(commandsAsArray[1].equals("1"));
break;
case "uptime":
JOptionPane.showMessageDialog(null,
timeCalcApp
.getCountOfMinutesSinceAppStarted()
+ " minutes");
break;
case "toast":
Toaster t = new Toaster();
t.setToasterWidth(800);
t.setToasterHeight(800);
t.setDisplayTime(60000 * 5);
t.setToasterColor(Color.GRAY);
Font font = new Font("sans", Font.PLAIN, 12);
t.setToasterMessageFont(font);
t.setDisplayTime(5000);
t.showToaster(commands.substring(6));
break;
case "toasts":
Utils.toastsAreEnabled
.setValue(commandsAsArray[1].equals("1"));
break;
default:
JOptionPane.showMessageDialog(null,
"Unknown command: " + commandsAsArray[0]);
}
});
jokeButton.addActionListener(e -> { jokeButton.addActionListener(e -> {
for (int i = 1; i <= 1; i++) { for (int i = 1; i <= 1; i++) {
@ -345,15 +285,6 @@ public class TimeCalcManager {
weekBattery.getY(), 140); weekBattery.getY(), 140);
window.add(monthBattery); window.add(monthBattery);
hourBattery.wavesProperty
.bindTo(timeCalcConfiguration.batteryWavesEnabledProperty);
dayBattery.wavesProperty
.bindTo(timeCalcConfiguration.batteryWavesEnabledProperty);
weekBattery.wavesProperty
.bindTo(timeCalcConfiguration.batteryWavesEnabledProperty);
monthBattery.wavesProperty
.bindTo(timeCalcConfiguration.batteryWavesEnabledProperty);
ComponentRegistry<JComponent> componentRegistry = new ComponentRegistry(); ComponentRegistry<JComponent> componentRegistry = new ComponentRegistry();
componentRegistry.addAll( componentRegistry.addAll(
walkingHumanProgressAsciiArt, walkingHumanProgressAsciiArt,
@ -371,75 +302,36 @@ public class TimeCalcManager {
exitButton exitButton
); );
ComponentRegistry<TimeCalcButton> buttonRegistry = new ComponentRegistry(); ComponentRegistry<TimeCalcButton> buttonRegistry = new ComponentRegistry();
for(Component c:componentRegistry.getSet()) { componentRegistry.getSet().stream().filter(c-> c instanceof TimeCalcButton).forEach(c->
if(c instanceof TimeCalcButton) { buttonRegistry.add((TimeCalcButton)c));
buttonRegistry.add((TimeCalcButton)c); componentRegistry.getSet().stream().filter(c ->
} GetProperty.class.isAssignableFrom(c.getClass())).forEach(c->
} ((GetProperty<String>)c).getProperty().bindTo(timeCalcApp.visibilityProperty));
walkingHumanProgressAsciiArt.visibilityProperty
.bindTo(timeCalcApp.visibilityProperty); componentRegistry.getSet().stream().filter(c-> c instanceof Battery).forEach(c ->
progressSquare.visibilityProperty ((Battery)c).wavesProperty.bindTo(timeCalcConfiguration.batteryWavesEnabledProperty));
.bindTo(timeCalcApp.visibilityProperty);
progressCircle.visibilityProperty
.bindTo(timeCalcApp.visibilityProperty);
analogClock.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
dayBattery.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
weekBattery.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
monthBattery.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
hourBattery.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
configButton.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
jokeButton.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
commandButton.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
restartButton.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
exitButton.visibilityProperty.bindTo(timeCalcApp.visibilityProperty);
window.setSize(dayBattery.getX() + dayBattery.getWidth() + 3 * SwingUtils.MARGIN, window.setSize(dayBattery.getX() + dayBattery.getWidth() + 3 * SwingUtils.MARGIN,
exitButton.getY() + 3 * exitButton.getHeight() + SwingUtils.MARGIN); exitButton.getY() + 3 * exitButton.getHeight() + SwingUtils.MARGIN);
while (true) { while (true) {
Visibility visibility = Visibility Visibility currentVisibility = Visibility
.valueOf(timeCalcApp.visibilityProperty.getValue()); .valueOf(timeCalcApp.visibilityProperty.getValue());
if(timeCalcConfiguration.visibilityOnlyGreyOrNoneEnabledProperty.isEnabled() && visibility.isColored() ){ if(timeCalcConfiguration.visibilityOnlyGreyOrNoneEnabledProperty.isEnabled() && currentVisibility.isColored() ){
timeCalcApp.visibilityProperty.setValue(Visibility.GRAY.name()); timeCalcApp.visibilityProperty.setValue(Visibility.GRAY.name());
} }
//time.writeString();
if (stopBeforeEnd) { if (stopBeforeEnd) {
window.setVisible(false); window.setVisible(false);
window.dispose(); window.dispose();
break; break;
} }
componentRegistry.setVisible(currentVisibility.isNotNone());
componentRegistry.setVisible(visibility.isNotNone());
if (!visibility.isStronglyColored() || visibility.isGray()) {
configButton.setBackground(BACKGROUND_COLOR);
jokeButton.setBackground(BACKGROUND_COLOR);
commandButton.setBackground(BACKGROUND_COLOR);
restartButton.setBackground(BACKGROUND_COLOR);
exitButton.setBackground(BACKGROUND_COLOR);
configButton.setForeground(FOREGROUND_COLOR);
jokeButton.setForeground(FOREGROUND_COLOR);
commandButton.setForeground(FOREGROUND_COLOR);
restartButton.setForeground(FOREGROUND_COLOR);
exitButton.setForeground(FOREGROUND_COLOR);
} else {
configButton.setOriginalBackground();
jokeButton.setOriginalBackground();
commandButton.setOriginalBackground();
restartButton.setOriginalBackground();
exitButton.setOriginalBackground();
//
configButton.setOriginalForeground();
jokeButton.setOriginalForeground();
commandButton.setOriginalForeground();
restartButton.setOriginalForeground();
exitButton.setOriginalForeground();
}
jokeButton.setVisible( jokeButton.setVisible(
TimeCalcProperties.getInstance().areJokesEnabled() TimeCalcProperties.getInstance().areJokesEnabled()
&& !visibility.isNone()); && !currentVisibility.isNone());
window.setTitle(visibility.isNone() ? "" : windowTitle); window.setTitle(currentVisibility.isNone() ? "" : windowTitle);
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String nowString = String nowString =
@ -546,7 +438,7 @@ public class TimeCalcManager {
} }
walkingHumanProgressAsciiArt.setForeground( walkingHumanProgressAsciiArt.setForeground(
visibility.isStronglyColored() currentVisibility.isStronglyColored()
|| walkingHumanProgressAsciiArt || walkingHumanProgressAsciiArt
.getClientProperty("mouseEntered").equals("true") ? .getClientProperty("mouseEntered").equals("true") ?
Color.BLACK : Color.LIGHT_GRAY); Color.BLACK : Color.LIGHT_GRAY);

View File

@ -1,6 +1,9 @@
package org.nanoboot.utils.timecalc.swing.common; package org.nanoboot.utils.timecalc.swing.common;
import org.nanoboot.utils.timecalc.app.GetProperty;
import org.nanoboot.utils.timecalc.app.TimeCalcManager;
import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.utils.property.Property;
import org.nanoboot.utils.timecalc.utils.property.StringProperty; import org.nanoboot.utils.timecalc.utils.property.StringProperty;
import javax.swing.JButton; import javax.swing.JButton;
@ -12,7 +15,7 @@ import java.awt.Color;
* @author Robert Vokac * @author Robert Vokac
* @since 21.02.2024 * @since 21.02.2024
*/ */
public class TimeCalcButton extends JButton { public class TimeCalcButton extends JButton implements GetProperty {
private static final int BUTTON_WIDTH = 100; private static final int BUTTON_WIDTH = 100;
private static final int BUTTON_HEIGHT = 30; private static final int BUTTON_HEIGHT = 30;
public StringProperty visibilityProperty = public StringProperty visibilityProperty =
@ -23,7 +26,18 @@ public class TimeCalcButton extends JButton {
public TimeCalcButton(String label) { public TimeCalcButton(String label) {
super(label); super(label);
new Timer(100, e -> setVisible(Visibility.valueOf(visibilityProperty.getValue()).isNotNone())).start(); new Timer(100, e -> {
Visibility visibility =
Visibility.valueOf(visibilityProperty.getValue());
setVisible(visibility.isNotNone());
if (!visibility.isStronglyColored() || visibility.isGray()) {
setBackground(TimeCalcManager.BACKGROUND_COLOR);
setForeground(TimeCalcManager.FOREGROUND_COLOR);
} else {
setOriginalBackground();
setOriginalForeground();
}
}).start();
} }
public void setBounds(int x, int y) { public void setBounds(int x, int y) {
@ -48,4 +62,9 @@ public class TimeCalcButton extends JButton {
+ jComponent.getHeight() + jComponent.getHeight()
+ SwingUtils.MARGIN); + SwingUtils.MARGIN);
} }
@Override
public Property getProperty() {
return visibilityProperty;
}
} }

View File

@ -1,6 +1,8 @@
package org.nanoboot.utils.timecalc.swing.common; package org.nanoboot.utils.timecalc.swing.common;
import org.nanoboot.utils.timecalc.app.GetProperty;
import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.utils.property.Property;
import org.nanoboot.utils.timecalc.utils.property.StringProperty; import org.nanoboot.utils.timecalc.utils.property.StringProperty;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -15,7 +17,8 @@ import java.awt.event.MouseListener;
* @author Robert Vokac * @author Robert Vokac
* @since 20.02.2024 * @since 20.02.2024
*/ */
public class Widget extends JPanel { public class Widget extends JPanel implements
GetProperty {
protected static final Color FOREGROUND_COLOR = new Color(220, 220, 220); 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 FOREGROUND_COLOR2 = new Color(210, 210, 210);
protected static final Color BACKGROUND_COLOR = new Color(238, 238, 238); protected static final Color BACKGROUND_COLOR = new Color(238, 238, 238);
@ -98,4 +101,9 @@ public class Widget extends JPanel {
protected void paintWidget(Graphics g) { protected void paintWidget(Graphics g) {
} }
@Override
public Property getProperty() {
return visibilityProperty;
}
} }

View File

@ -1,5 +1,6 @@
package org.nanoboot.utils.timecalc.swing.progress; package org.nanoboot.utils.timecalc.swing.progress;
import org.nanoboot.utils.timecalc.app.GetProperty;
import org.nanoboot.utils.timecalc.app.TimeCalcManager; import org.nanoboot.utils.timecalc.app.TimeCalcManager;
import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.entity.Visibility;
import org.nanoboot.utils.timecalc.swing.common.Toaster; import org.nanoboot.utils.timecalc.swing.common.Toaster;
@ -7,6 +8,7 @@ import org.nanoboot.utils.timecalc.utils.common.Constants;
import org.nanoboot.utils.timecalc.utils.common.NumberFormats; import org.nanoboot.utils.timecalc.utils.common.NumberFormats;
import org.nanoboot.utils.timecalc.utils.common.TimeHM; import org.nanoboot.utils.timecalc.utils.common.TimeHM;
import org.nanoboot.utils.timecalc.utils.common.Utils; import org.nanoboot.utils.timecalc.utils.common.Utils;
import org.nanoboot.utils.timecalc.utils.property.Property;
import org.nanoboot.utils.timecalc.utils.property.StringProperty; import org.nanoboot.utils.timecalc.utils.property.StringProperty;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@ -25,7 +27,8 @@ import java.util.Set;
* @author Robert Vokac * @author Robert Vokac
* @since 21.02.2024 * @since 21.02.2024
*/ */
public class WalkingHumanProgressAsciiArt extends JTextPane { public class WalkingHumanProgressAsciiArt extends JTextPane implements
GetProperty {
private static final String WALL = "||"; private static final String WALL = "||";
private final Set<Integer> alreadyShownPercents = new HashSet<>(); private final Set<Integer> alreadyShownPercents = new HashSet<>();
public StringProperty visibilityProperty = public StringProperty visibilityProperty =
@ -184,4 +187,8 @@ public class WalkingHumanProgressAsciiArt extends JTextPane {
return msg; return msg;
} }
@Override
public Property getProperty() {
return visibilityProperty;
}
} }