2024-01-14 14:27:59 +00:00
|
|
|
package rvc.timecalc;
|
|
|
|
|
2024-01-14 16:01:43 +00:00
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
import javax.swing.ImageIcon;
|
2024-01-14 14:27:59 +00:00
|
|
|
import javax.swing.JButton;
|
|
|
|
import javax.swing.JFrame;
|
|
|
|
import javax.swing.JTextPane;
|
|
|
|
import java.awt.Color;
|
|
|
|
import java.awt.Font;
|
2024-01-28 14:57:31 +00:00
|
|
|
import java.awt.event.KeyAdapter;
|
|
|
|
import java.awt.event.KeyEvent;
|
2024-01-28 14:30:03 +00:00
|
|
|
import java.awt.event.MouseEvent;
|
|
|
|
import java.awt.event.MouseListener;
|
2024-01-14 16:01:43 +00:00
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
import java.io.ByteArrayInputStream;
|
2024-01-14 14:27:59 +00:00
|
|
|
import java.text.DecimalFormat;
|
|
|
|
import java.text.NumberFormat;
|
2024-01-28 15:21:23 +00:00
|
|
|
import java.time.DayOfWeek;
|
|
|
|
import java.time.LocalDate;
|
2024-01-14 14:27:59 +00:00
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.format.DateTimeFormatter;
|
2024-01-14 16:01:43 +00:00
|
|
|
import java.util.Base64;
|
2024-01-27 17:41:31 +00:00
|
|
|
import java.util.Calendar;
|
|
|
|
import java.util.Date;
|
2024-01-14 14:27:59 +00:00
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
/**
|
2024-01-20 17:52:25 +00:00
|
|
|
* @author pc00289
|
2024-01-14 14:27:59 +00:00
|
|
|
* @since 08.02.2024
|
|
|
|
*/
|
2024-01-20 17:52:25 +00:00
|
|
|
public class TimeCalcWindow {
|
2024-01-21 09:14:47 +00:00
|
|
|
public static final String WALL = "||";
|
2024-01-14 14:27:59 +00:00
|
|
|
private static final String DEFAULT_OVERTIME = "0:00";
|
|
|
|
private static final int WORKING_HOURS_LENGTH = 8;
|
|
|
|
private static final int WORKING_MINUTES_LENGTH = 30;
|
|
|
|
private static final String NEW_LINE = "\n";
|
2024-01-21 09:14:47 +00:00
|
|
|
private final static DateTimeFormatter DATE_TIME_FORMATTER =
|
|
|
|
DateTimeFormatter.ofPattern("HH:mm:ss:SSS");
|
2024-01-14 14:27:59 +00:00
|
|
|
private final String startTime;
|
2024-01-28 14:17:30 +00:00
|
|
|
private String overTime;
|
2024-01-14 14:27:59 +00:00
|
|
|
private final int startHour;
|
|
|
|
private final int startMinute;
|
|
|
|
private final int overtimeHour;
|
|
|
|
private final int overtimeMinute;
|
|
|
|
private final int totalMinutes;
|
|
|
|
private final Set<String> alreadyShownTimes = new HashSet<>();
|
2024-01-14 16:01:43 +00:00
|
|
|
private final Set<Integer> alreadyShownPercents = new HashSet<>();
|
2024-01-21 09:14:47 +00:00
|
|
|
private int endHour;
|
|
|
|
private int endMinute;
|
2024-01-14 14:27:59 +00:00
|
|
|
private boolean stopBeforeEnd = false;
|
2024-01-20 18:23:40 +00:00
|
|
|
private boolean vtipyShown = false;
|
2024-01-28 14:57:31 +00:00
|
|
|
private boolean everythingHidden = false;
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-20 17:52:25 +00:00
|
|
|
public TimeCalcWindow(String startTimeIn, String overTimeIn) {
|
2024-01-28 15:21:23 +00:00
|
|
|
everythingHidden = TimeCalcConf.getInstance().isEverythingHidden();
|
2024-01-14 14:27:59 +00:00
|
|
|
this.startTime = startTimeIn;
|
2024-01-21 09:14:47 +00:00
|
|
|
this.overTime = (overTimeIn == null || overTimeIn.isEmpty()) ?
|
|
|
|
DEFAULT_OVERTIME : overTimeIn;
|
2024-01-14 14:27:59 +00:00
|
|
|
|
|
|
|
this.startHour = Integer.valueOf(startTime.split(":")[0]);
|
|
|
|
this.startMinute = Integer.valueOf(startTime.split(":")[1]);
|
|
|
|
|
2024-01-28 14:17:30 +00:00
|
|
|
boolean overtimeIsNegative = overTime.startsWith("-");
|
|
|
|
if(overtimeIsNegative) {overTime = overTime.replace("-","");}
|
|
|
|
this.overtimeHour =(overtimeIsNegative ? (-1) : 1) * Integer.valueOf(overTime.split(":")[0]);
|
|
|
|
this.overtimeMinute = (overtimeIsNegative ? (-1) : 1) * Integer.valueOf(overTime.split(":")[1]);
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-28 14:17:30 +00:00
|
|
|
this.endHour = startHour + WORKING_HOURS_LENGTH + overtimeHour;
|
|
|
|
this.endMinute = startMinute + WORKING_MINUTES_LENGTH + overtimeMinute;
|
2024-01-14 14:27:59 +00:00
|
|
|
while (endMinute >= 60) {
|
|
|
|
endMinute = endMinute - 60;
|
|
|
|
endHour = endHour + 1;
|
|
|
|
}
|
2024-01-21 09:14:47 +00:00
|
|
|
this.totalMinutes =
|
|
|
|
(endHour * 60 + endMinute) - (startHour * 60 + startMinute);
|
2024-01-20 16:43:32 +00:00
|
|
|
int totalSeconds = totalMinutes * 60;
|
2024-01-20 16:58:32 +00:00
|
|
|
int totalMilliseconds = totalSeconds * 1000;
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-27 14:07:04 +00:00
|
|
|
NumberFormat formatter5 = new DecimalFormat("#0.00000");
|
|
|
|
NumberFormat formatter3 = new DecimalFormat("#0.000");
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-21 09:14:47 +00:00
|
|
|
JFrame window = new JFrame();
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-27 20:28:21 +00:00
|
|
|
JButton weatherButton = new JButton("Weather");
|
2024-01-21 12:33:07 +00:00
|
|
|
JButton jokeButton = new JButton("Joke");
|
2024-01-21 09:14:47 +00:00
|
|
|
JButton restartButton = new JButton("Restart");
|
|
|
|
JButton exitButton = new JButton("Exit");
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-27 20:28:21 +00:00
|
|
|
//window.add(weatherButton);
|
2024-01-27 21:09:21 +00:00
|
|
|
|
2024-01-21 12:33:07 +00:00
|
|
|
window.add(jokeButton);
|
2024-01-14 14:27:59 +00:00
|
|
|
window.add(restartButton);
|
|
|
|
window.add(exitButton);
|
2024-01-28 14:57:31 +00:00
|
|
|
window.setFocusable(true);
|
|
|
|
window.addKeyListener(new KeyAdapter() {
|
|
|
|
// Key Pressed method
|
|
|
|
public void keyPressed(KeyEvent e) {
|
|
|
|
if(e.getKeyCode() == KeyEvent.VK_UP){
|
|
|
|
everythingHidden = false;
|
|
|
|
}
|
|
|
|
if(e.getKeyCode() == KeyEvent.VK_DOWN){
|
|
|
|
everythingHidden = true;
|
|
|
|
}
|
|
|
|
window.repaint();
|
|
|
|
}
|
|
|
|
});
|
2024-01-21 09:14:47 +00:00
|
|
|
JTextPane text = new JTextPane();
|
2024-01-28 15:21:23 +00:00
|
|
|
text.setBounds(10, 10 + 210 + 10, 500, 250);
|
2024-01-14 14:27:59 +00:00
|
|
|
text.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
|
|
|
|
text.setForeground(Color.GRAY);
|
2024-01-21 09:14:47 +00:00
|
|
|
text.setBackground(new Color(238, 238, 238));
|
2024-01-28 14:30:03 +00:00
|
|
|
text.putClientProperty("mouseEntered", "false");
|
2024-01-28 15:09:21 +00:00
|
|
|
text.setFocusable(false);
|
2024-01-28 14:30:03 +00:00
|
|
|
|
|
|
|
text.addMouseListener(new MouseListener() {
|
|
|
|
@Override
|
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
|
Utils.highlighted.flip();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void mouseReleased(MouseEvent e) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void mouseEntered(MouseEvent e) {
|
|
|
|
text.putClientProperty("mouseEntered", "true");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void mouseExited(MouseEvent e) {
|
|
|
|
text.putClientProperty("mouseEntered", "false");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-01-14 14:27:59 +00:00
|
|
|
window.add(text);
|
2024-01-27 23:41:48 +00:00
|
|
|
weatherButton
|
|
|
|
.setBounds(20, text.getY() + text.getHeight() + 10, 100, 30);
|
2024-01-27 20:28:21 +00:00
|
|
|
jokeButton.setBounds(140, text.getY() + text.getHeight() + 10, 100, 30);
|
2024-01-27 23:41:48 +00:00
|
|
|
restartButton
|
|
|
|
.setBounds(280, text.getY() + text.getHeight() + 10, 100, 30);
|
2024-01-21 11:15:46 +00:00
|
|
|
exitButton.setBounds(390, text.getY() + text.getHeight() + 10, 100, 30);
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-27 17:41:31 +00:00
|
|
|
window.setSize(520 + 20 + 100, 580);
|
2024-01-14 14:27:59 +00:00
|
|
|
window.setLayout(null);
|
|
|
|
window.setVisible(true);
|
|
|
|
window.setTitle("Time Calc");
|
|
|
|
window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
|
|
|
|
|
|
|
window.addWindowListener(new java.awt.event.WindowAdapter() {
|
|
|
|
@Override
|
|
|
|
public void windowClosing(java.awt.event.WindowEvent e) {
|
|
|
|
System.exit(0);
|
|
|
|
}
|
|
|
|
});
|
2024-01-27 23:41:48 +00:00
|
|
|
weatherButton
|
|
|
|
.addActionListener(e -> new WeatherWindow().setVisible(true));
|
|
|
|
jokeButton.addActionListener(e -> {
|
|
|
|
for (int i = 1; i <= 1; i++) {
|
|
|
|
Vtipy.showRandom();
|
|
|
|
}
|
|
|
|
});
|
2024-01-14 14:27:59 +00:00
|
|
|
exitButton.addActionListener(e -> System.exit(0));
|
2024-01-21 09:14:47 +00:00
|
|
|
restartButton.addActionListener(e -> {
|
|
|
|
window.setVisible(false);
|
|
|
|
stopBeforeEnd = true;
|
|
|
|
});
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-20 14:30:23 +00:00
|
|
|
AnalogClock analogClock = new AnalogClock();
|
2024-01-21 11:15:46 +00:00
|
|
|
analogClock.setBounds(10, 10, 200, 200);
|
2024-01-20 14:30:23 +00:00
|
|
|
window.add(analogClock);
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-20 17:52:25 +00:00
|
|
|
ProgressSquare progressSquare = new ProgressSquare();
|
2024-01-27 23:41:48 +00:00
|
|
|
progressSquare
|
|
|
|
.setBounds(10 + analogClock.getWidth() + 10, 10, 200, 200);
|
2024-01-20 17:52:25 +00:00
|
|
|
window.add(progressSquare);
|
|
|
|
|
2024-01-27 16:07:03 +00:00
|
|
|
ProgressCircle progressCircle = new ProgressCircle();
|
|
|
|
progressCircle
|
2024-01-27 23:41:48 +00:00
|
|
|
.setBounds(10 + progressSquare.getBounds().x + progressSquare
|
|
|
|
.getWidth() + 10, 10, 80, 80);
|
2024-01-27 16:07:03 +00:00
|
|
|
window.add(progressCircle);
|
|
|
|
|
2024-01-27 16:50:19 +00:00
|
|
|
Battery battery = new Battery();
|
2024-01-27 23:41:48 +00:00
|
|
|
battery.setBounds(progressCircle.getBounds().x,
|
|
|
|
progressCircle.getY() + 10 + progressCircle.getHeight(), 90,
|
|
|
|
140);
|
2024-01-27 16:50:19 +00:00
|
|
|
window.add(battery);
|
|
|
|
|
2024-01-27 17:41:31 +00:00
|
|
|
Battery batteryForWeek = new Battery();
|
2024-01-27 23:41:48 +00:00
|
|
|
batteryForWeek.setBounds(battery.getBounds().x + battery.getWidth(),
|
|
|
|
battery.getY(), 90, 140);
|
2024-01-27 17:41:31 +00:00
|
|
|
window.add(batteryForWeek);
|
|
|
|
|
2024-01-28 15:21:23 +00:00
|
|
|
Calendar calNow = Calendar.getInstance();
|
|
|
|
calNow.setTime(new Date());
|
|
|
|
LocalDate ld = LocalDate.of(calNow.get(Calendar.YEAR),calNow.get(Calendar.MONTH) + 1,1);
|
|
|
|
DayOfWeek firstDayOfMonth = ld.getDayOfWeek();
|
|
|
|
System.out.println("dow=" + firstDayOfMonth);
|
|
|
|
int currentDayOfMonth = calNow.get(Calendar.DAY_OF_MONTH);
|
|
|
|
|
|
|
|
int workDaysDone = 0;
|
|
|
|
int workDaysTodo = 0;
|
|
|
|
int workDaysTotal;
|
|
|
|
for(int dayOfMonth=1; dayOfMonth <= calNow.getActualMaximum(Calendar.DAY_OF_MONTH); dayOfMonth++) {
|
|
|
|
DayOfWeek dayOfWeek = LocalDate.of(calNow.get(Calendar.YEAR), calNow.get(Calendar.MONTH) + 1, dayOfMonth).getDayOfWeek();
|
|
|
|
boolean weekend = dayOfWeek.toString().equals("SATURDAY") || dayOfWeek.toString().equals("SUNDAY");
|
|
|
|
if(dayOfMonth < currentDayOfMonth && !weekend) {
|
|
|
|
++workDaysDone;
|
|
|
|
}
|
|
|
|
if(dayOfMonth > currentDayOfMonth && !weekend) {
|
|
|
|
++workDaysTodo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
String currentDayOfWeekAsString = LocalDate.of(calNow.get(Calendar.YEAR), calNow.get(Calendar.MONTH) + 1, currentDayOfMonth).getDayOfWeek().toString();
|
|
|
|
boolean nowIsWeekend = currentDayOfWeekAsString.equals("SATURDAY") || currentDayOfWeekAsString.equals("SUNDAY");
|
|
|
|
workDaysTotal = workDaysDone + (nowIsWeekend ? 0 : 1) + workDaysTodo;
|
|
|
|
|
|
|
|
System.out.println("workDaysDone" + workDaysDone);
|
|
|
|
System.out.println("workDaysTodo" + workDaysTodo);
|
|
|
|
System.out.println("currentDayOfMonth" + currentDayOfMonth);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Battery batteryForMonth = new Battery();
|
|
|
|
batteryForMonth.setBounds(battery.getBounds().x + battery.getWidth(),
|
|
|
|
battery.getY() + batteryForWeek.getHeight() + 10, 90, 140);
|
|
|
|
window.add(batteryForMonth);
|
|
|
|
|
2024-01-14 14:27:59 +00:00
|
|
|
StringBuilder sb = null;
|
|
|
|
while (true) {
|
2024-01-21 09:14:47 +00:00
|
|
|
if (stopBeforeEnd) {
|
2024-01-14 14:27:59 +00:00
|
|
|
window.setVisible(false);
|
|
|
|
window.dispose();
|
|
|
|
break;
|
|
|
|
}
|
2024-01-28 14:57:31 +00:00
|
|
|
text.setVisible(!everythingHidden);
|
|
|
|
progressSquare.setVisible(!everythingHidden);
|
|
|
|
progressCircle.setVisible(!everythingHidden);
|
|
|
|
analogClock.setVisible(!everythingHidden);
|
|
|
|
battery.setVisible(!everythingHidden);
|
|
|
|
batteryForWeek.setVisible(!everythingHidden);
|
2024-01-28 15:21:23 +00:00
|
|
|
batteryForMonth.setVisible(!everythingHidden);
|
2024-01-28 14:57:31 +00:00
|
|
|
jokeButton.setVisible(!TimeCalcConf.getInstance().isJokeVisible()? false : !everythingHidden);
|
|
|
|
restartButton.setVisible(!everythingHidden);
|
|
|
|
exitButton.setVisible(!everythingHidden);
|
|
|
|
window.setTitle(everythingHidden ? "" : "Time Calc");
|
2024-01-14 14:27:59 +00:00
|
|
|
sb = new StringBuilder();
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
String nowString = DATE_TIME_FORMATTER.format(now);
|
2024-01-21 09:14:47 +00:00
|
|
|
// if (alreadyShownTimes.contains(nowString)) {
|
|
|
|
// //nothing to do
|
|
|
|
// try {
|
|
|
|
// Thread.sleep(100);
|
|
|
|
// } catch (InterruptedException e) {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// continue;
|
|
|
|
// } else {
|
|
|
|
// alreadyShownTimes.add(nowString);
|
|
|
|
// }
|
2024-01-14 14:27:59 +00:00
|
|
|
int hourNow = Integer.parseInt(nowString.split(":")[0]);
|
|
|
|
int minuteNow = Integer.parseInt(nowString.split(":")[1]);
|
2024-01-20 16:43:32 +00:00
|
|
|
int secondNow = Integer.parseInt(nowString.split(":")[2]);
|
2024-01-20 16:58:32 +00:00
|
|
|
int millisecondNow = Integer.parseInt(nowString.split(":")[3]);
|
2024-01-14 14:27:59 +00:00
|
|
|
int hourRemains = endHour - hourNow;
|
|
|
|
int minuteRemains = endMinute - minuteNow;
|
|
|
|
if (minuteRemains < 0) {
|
|
|
|
minuteRemains = minuteRemains + 60;
|
|
|
|
hourRemains = hourRemains - 1;
|
|
|
|
}
|
2024-01-20 16:43:32 +00:00
|
|
|
int secondsRemains = 60 - secondNow;
|
2024-01-20 16:58:32 +00:00
|
|
|
int millisecondsRemains = 1000 - millisecondNow;
|
2024-01-20 16:43:32 +00:00
|
|
|
|
2024-01-28 14:17:30 +00:00
|
|
|
int hourDone = WORKING_HOURS_LENGTH + overtimeHour - hourRemains;
|
|
|
|
int minutesDone = 30 + overtimeMinute - minuteRemains;
|
2024-01-20 16:43:32 +00:00
|
|
|
int secondsDone = secondNow;
|
2024-01-20 16:58:32 +00:00
|
|
|
int millisecondsDone = millisecondNow;
|
2024-01-20 16:43:32 +00:00
|
|
|
|
2024-01-14 14:27:59 +00:00
|
|
|
int totalMinutesDone = hourDone * 60 + minutesDone;
|
2024-01-20 16:43:32 +00:00
|
|
|
int totalSecondsDone = totalMinutesDone * 60 + secondsDone;
|
2024-01-21 09:14:47 +00:00
|
|
|
int totalMillisecondsDone =
|
|
|
|
totalSecondsDone * 1000 + millisecondsDone;
|
|
|
|
|
|
|
|
// System.out.println(hourNow + " " + minuteNow + " " + secondNow + " " + millisecondNow);
|
|
|
|
// System.out.println(hourRemains + " " + minuteRemains + " " + secondsRemains + " " + millisecondsRemains);
|
|
|
|
// System.out.println(hourDone + " " + minutesDone + " " + secondsDone + " " + totalMillisecondsDone + "\n");
|
|
|
|
// System.out.println("totalSecondsDone=" + totalSecondsDone);
|
|
|
|
// System.out.println("totalMillisecondsDone=" + totalMillisecondsDone);
|
|
|
|
|
|
|
|
// double done = ((double)totalMinutesDone)/((double)totalMinutes);
|
|
|
|
double done = ((double) totalMillisecondsDone)
|
|
|
|
/ ((double) totalMilliseconds);
|
|
|
|
progressSquare.setDonePercent(done);
|
2024-01-27 16:07:03 +00:00
|
|
|
progressCircle.setDonePercent(done);
|
2024-01-27 16:50:19 +00:00
|
|
|
battery.setDonePercent(done);
|
2024-01-21 09:14:47 +00:00
|
|
|
|
2024-01-28 15:21:23 +00:00
|
|
|
int weekDayWhenMondayIsOne = calNow.get(Calendar.DAY_OF_WEEK) - 1;
|
2024-01-27 23:41:48 +00:00
|
|
|
batteryForWeek.setDonePercent((weekDayWhenMondayIsOne == 0
|
2024-01-28 14:17:30 +00:00
|
|
|
|| weekDayWhenMondayIsOne == 6) ?
|
2024-01-27 23:41:48 +00:00
|
|
|
100 : ((weekDayWhenMondayIsOne - 1) * 0.20 + done * 0.20));
|
|
|
|
|
2024-01-28 15:21:23 +00:00
|
|
|
batteryForMonth.setDonePercent(weekDayWhenMondayIsOne == 0
|
|
|
|
|| weekDayWhenMondayIsOne == 6 ? workDaysDone/workDaysTotal : (workDaysDone + done) / workDaysTotal);
|
|
|
|
|
2024-01-27 23:41:48 +00:00
|
|
|
int totalSecondsRemains =
|
|
|
|
(hourRemains * 60 * 60 + minuteRemains * 60
|
|
|
|
+ secondsRemains);
|
|
|
|
int totalMillisecondsRemains =
|
|
|
|
totalSecondsRemains * 1000 + millisecondsRemains;
|
|
|
|
double totalSecondsRemainsDouble =
|
|
|
|
((double) totalMillisecondsRemains) / 1000;
|
2024-01-27 14:07:04 +00:00
|
|
|
String msg = "Done=" + formatter5.format(done * 100) + "% Remains="
|
2024-01-21 09:14:47 +00:00
|
|
|
+ String.format("%02d", hourRemains) + ":" + String
|
2024-01-27 23:41:48 +00:00
|
|
|
.format("%02d", minuteRemains)
|
|
|
|
+ /*":" + String.format("%02d", secondsRemains)+ */ " ("
|
|
|
|
+ formatter3
|
2024-01-27 14:51:58 +00:00
|
|
|
.format(totalSecondsRemainsDouble - 60)
|
2024-01-27 14:07:04 +00:00
|
|
|
+ " s" + ")" + " End=" + String
|
2024-01-14 14:27:59 +00:00
|
|
|
.format("%02d", endHour) + ":" + String
|
|
|
|
.format("%02d", endMinute);
|
|
|
|
|
|
|
|
//if(System.getProperty("progress")!=null) {
|
2024-01-21 09:14:47 +00:00
|
|
|
printPercentToAscii(done, msg, sb);
|
|
|
|
// } else {
|
|
|
|
// sb.append(msg);
|
|
|
|
// }
|
|
|
|
if (hourRemains == 0 && minuteRemains == 1 && !vtipyShown) {
|
2024-01-20 18:23:40 +00:00
|
|
|
vtipyShown = true;
|
2024-01-20 13:13:59 +00:00
|
|
|
Vtipy.showRandom();
|
|
|
|
}
|
2024-01-21 09:14:47 +00:00
|
|
|
if (hourRemains == 0 && minuteRemains <= 3) {
|
2024-01-27 19:40:45 +00:00
|
|
|
Utils.highlighted.set(true);
|
2024-01-20 16:13:23 +00:00
|
|
|
text.setForeground(Color.BLUE);
|
|
|
|
}
|
|
|
|
|
2024-01-21 09:14:47 +00:00
|
|
|
if (hourRemains <= 0 && minuteRemains <= 0) {
|
2024-01-14 14:27:59 +00:00
|
|
|
sb.append("\nCongratulation :-) It is the time to go home.");
|
2024-01-14 16:01:43 +00:00
|
|
|
Toaster toasterManager = new Toaster();
|
2024-01-14 18:06:23 +00:00
|
|
|
toasterManager.setDisplayTime(30000);
|
2024-01-21 09:14:47 +00:00
|
|
|
toasterManager.showToaster(
|
|
|
|
"Congratulation :-) It is the time to go home.");
|
2024-01-14 14:27:59 +00:00
|
|
|
//System.out.println(sb.toString());
|
|
|
|
text.setText(sb.toString());
|
|
|
|
try {
|
|
|
|
Thread.sleep(10000);
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
}
|
2024-01-21 09:14:47 +00:00
|
|
|
while (!stopBeforeEnd) {
|
|
|
|
try {
|
|
|
|
Thread.sleep(1000);
|
|
|
|
} catch (InterruptedException e) {
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-21 09:14:47 +00:00
|
|
|
}
|
2024-01-14 14:27:59 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
//System.out.println(sb.toString());
|
|
|
|
text.setText(sb.toString());
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
2024-01-20 16:43:32 +00:00
|
|
|
Thread.sleep(100);
|
2024-01-14 14:27:59 +00:00
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
}
|
2024-01-27 13:40:23 +00:00
|
|
|
|
2024-01-27 23:41:48 +00:00
|
|
|
text.setForeground(
|
2024-01-28 14:30:03 +00:00
|
|
|
Utils.highlighted.get() || text.getClientProperty("mouseEntered").equals("true") ? Color.BLACK : Color.LIGHT_GRAY);
|
2024-01-14 14:27:59 +00:00
|
|
|
}
|
|
|
|
window.setVisible(false);
|
|
|
|
window.dispose();
|
|
|
|
}
|
2024-01-21 09:14:47 +00:00
|
|
|
|
|
|
|
private static final String createSpaces(int spaceCount) {
|
|
|
|
return create(spaceCount, ' ');
|
|
|
|
}
|
|
|
|
|
|
|
|
private static final String create(int count, char ch) {
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
for (int i = 1; i <= count; i++) {
|
|
|
|
sb.append(ch);
|
|
|
|
}
|
|
|
|
return sb.toString();
|
|
|
|
}
|
|
|
|
|
2024-01-14 16:01:43 +00:00
|
|
|
private void printPercentToAscii(double percent,
|
2024-01-14 14:27:59 +00:00
|
|
|
String msg, StringBuilder sb) {
|
|
|
|
NumberFormat formatter = new DecimalFormat("#00.00");
|
2024-01-14 16:01:43 +00:00
|
|
|
NumberFormat formatter2 = new DecimalFormat("##.##");
|
2024-01-14 14:27:59 +00:00
|
|
|
String s = formatter.format(percent * 100);
|
2024-01-21 09:14:47 +00:00
|
|
|
s = s.replace(",", "");
|
2024-01-14 14:27:59 +00:00
|
|
|
|
2024-01-21 09:14:47 +00:00
|
|
|
int percentInt = (int) (percent * 100);
|
|
|
|
if (!alreadyShownPercents.contains((int) (percent * 100))) {
|
|
|
|
alreadyShownPercents.add((int) (percent * 100));
|
2024-01-14 16:01:43 +00:00
|
|
|
Toaster toasterManager = new Toaster();
|
2024-01-27 16:50:19 +00:00
|
|
|
Font font = new Font("sans", Font.PLAIN, 16);
|
2024-01-14 16:25:05 +00:00
|
|
|
toasterManager.setToasterMessageFont(font);
|
2024-01-14 16:02:37 +00:00
|
|
|
toasterManager.setDisplayTime(10000);
|
2024-01-14 18:06:23 +00:00
|
|
|
toasterManager.setToasterWidth(600);
|
|
|
|
toasterManager.setToasterHeight(400);
|
2024-01-27 23:41:48 +00:00
|
|
|
toasterManager.setToasterColor(new Color(255, 255, 204));
|
2024-01-14 16:01:43 +00:00
|
|
|
Base64.Decoder base64Decoder = Base64.getDecoder();
|
|
|
|
|
2024-01-21 09:14:47 +00:00
|
|
|
byte[] btDataFile = base64Decoder
|
|
|
|
.decode("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
|
|
|
|
.getBytes());
|
2024-01-14 16:01:43 +00:00
|
|
|
BufferedImage image = null;
|
|
|
|
try {
|
2024-01-21 09:14:47 +00:00
|
|
|
image = percentInt == 100 ?
|
|
|
|
ImageIO.read(new ByteArrayInputStream(btDataFile)) :
|
|
|
|
null;
|
2024-01-14 16:01:43 +00:00
|
|
|
} catch (Exception e) {
|
|
|
|
System.out.println(e);
|
|
|
|
}
|
2024-01-21 09:14:47 +00:00
|
|
|
if (image != null) {
|
|
|
|
// toasterManager.setToasterWidth(600);
|
|
|
|
// toasterManager.setToasterHeight(400);
|
|
|
|
toasterManager.showToaster(new ImageIcon(image),
|
|
|
|
"Progress: " + (percentInt) + "%");
|
2024-01-14 16:01:43 +00:00
|
|
|
} else {
|
2024-01-21 09:14:47 +00:00
|
|
|
toasterManager.showToaster("Progress: " + (percentInt) + "%");
|
2024-01-14 16:01:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-01-27 23:41:48 +00:00
|
|
|
sb.append("\n" + msg + "\n\n");
|
2024-01-14 14:27:59 +00:00
|
|
|
|
|
|
|
int spacesTotal = 52;
|
2024-01-27 14:07:04 +00:00
|
|
|
int spacesDone = (int) (percent * spacesTotal);
|
2024-01-14 14:42:52 +00:00
|
|
|
int spacesTodo = spacesTotal - (spacesDone < 0 ? 0 : spacesDone);
|
2024-01-27 14:07:04 +00:00
|
|
|
|
2024-01-27 23:41:48 +00:00
|
|
|
sb.append("||" + createSpaces(58 - 2) + (spacesTodo == 0 ?
|
|
|
|
" \n" : "||======||\n"));
|
|
|
|
sb.append("||").append(createSpaces(spacesTotal + 4))
|
|
|
|
.append(spacesTodo == 0 ? "" : "| |").append("\n");
|
2024-01-21 09:23:30 +00:00
|
|
|
|
2024-01-27 14:02:25 +00:00
|
|
|
NumberFormat formatter3 = new DecimalFormat("#0.00000");
|
2024-01-14 14:27:59 +00:00
|
|
|
sb.append(
|
2024-01-21 09:14:47 +00:00
|
|
|
WALL + createSpaces(spacesDone) + " () " + createSpaces(
|
2024-01-27 23:41:48 +00:00
|
|
|
spacesTodo) + /*WALL +*/ (spacesTodo == 0 ?
|
|
|
|
" \\☼☼☼☼/ " :
|
2024-01-21 09:23:30 +00:00
|
|
|
"| _ |") + /*WALL +*/ NEW_LINE +
|
2024-01-21 09:14:47 +00:00
|
|
|
WALL + createSpaces(spacesDone) + "/||\\" + createSpaces(
|
2024-01-27 23:41:48 +00:00
|
|
|
spacesTodo) + /*WALL +*/ (spacesTodo == 0 ?
|
|
|
|
" ☼☼☼☼☼☼ " :
|
2024-01-21 09:23:30 +00:00
|
|
|
"| | |") + /*WALL +*/ NEW_LINE +
|
2024-01-21 09:14:47 +00:00
|
|
|
WALL + createSpaces(spacesDone) + " /\\ " + createSpaces(
|
2024-01-27 23:41:48 +00:00
|
|
|
spacesTodo) + /*WALL +*/ (spacesTodo == 0 ?
|
|
|
|
" /☼☼☼☼\\ " :
|
2024-01-21 09:23:30 +00:00
|
|
|
"| |") + /*WALL +*/ NEW_LINE +
|
2024-01-21 09:14:47 +00:00
|
|
|
"===================================================================="
|
2024-01-27 23:41:48 +00:00
|
|
|
+ NEW_LINE + "Steps: " + formatter3
|
|
|
|
.format(percent * ((double) 52)) + "/" + spacesTotal
|
2024-01-14 14:27:59 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|