From 3f5a39ff8543017a55996bbd1f64142d1af65116 Mon Sep 17 00:00:00 2001 From: Robert Vokac Date: Tue, 30 Apr 2024 18:24:17 +0200 Subject: [PATCH] Added a web browser --- modules/time-calc-app/pom.xml | 11 + .../timecalc/app/TimeCalcConfiguration.java | 6 + .../timecalc/app/TimeCalcProperties.java | 8 + .../utils/timecalc/swing/common/Widget.java | 8 +- .../timecalc/swing/windows/MainWindow.java | 12 +- .../timecalc/swing/windows/WeatherWindow.java | 160 --------------- .../timecalc/swing/windows/WebBrowser.java | 192 ++++++++++++++++++ pom.xml | 6 +- 8 files changed, 233 insertions(+), 170 deletions(-) delete mode 100644 modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WeatherWindow.java create mode 100644 modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WebBrowser.java diff --git a/modules/time-calc-app/pom.xml b/modules/time-calc-app/pom.xml index a9c6b98..cd9e00d 100644 --- a/modules/time-calc-app/pom.xml +++ b/modules/time-calc-app/pom.xml @@ -72,6 +72,17 @@ flatlaf 3.4.1 + + + org.openjfx + javafx-controls + 21 + + + org.openjfx + javafx-web + 21 + \ No newline at end of file diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java index 0a241c8..2c92f8a 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcConfiguration.java @@ -426,6 +426,12 @@ public class TimeCalcConfiguration { } return mapOfProperties.get(timeCalcProperty); } + public String getProperty(String key) { + return timeCalcProperties.getString(key); + } + public void setProperty(String key, String value) { + timeCalcProperties.setString(key, value); + } public String print() { StringBuilder sb = new StringBuilder(); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperties.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperties.java index 9df9c57..d10ae99 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperties.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/app/TimeCalcProperties.java @@ -83,6 +83,14 @@ public class TimeCalcProperties { getDefaultStringValue(timeCalcProperty))); } + public String getString(String key) { + return (String) properties.get(key); + } + + public void setString(String key, String value) { + properties.put(key, value); + } + private String getDefaultStringValue(TimeCalcProperty timeCalcProperty) { if (!defaultProperties .containsKey(timeCalcProperty.getKey())) { 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 4182638..592530f 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 @@ -101,7 +101,11 @@ public class Widget extends JPanel implements private WidgetMenu widgetMenu = null; public Widget() { setBackground(BACKGROUND_COLOR); - new Timer(getTimerDelay(), e -> repaint()).start(); + int timerDelay = getTimerDelay(); +// if(timerDelay > 10) { +// timerDelay = 10; +// } + new Timer(timerDelay, e -> repaint()).start(); this.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseDragged(MouseEvent e) { @@ -208,7 +212,7 @@ public class Widget extends JPanel implements } public int getTimerDelay() { - return 100; + return 10; } // @Override 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 2fbb48c..472487e 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 @@ -104,7 +104,7 @@ public class MainWindow extends TWindow { private final TButton restartButton; private final TButton focusButton; private final TButton helpButton; - private final TButton weatherButton; + private final TButton webBrowserButton; private final TButton commandButton; private final TButton jokeButton; private final AboutButton aboutButton; @@ -254,7 +254,7 @@ public class MainWindow extends TWindow { this.exitButton = new TButton("Exit"); this.focusButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Focus"); this.helpButton = new TButton("Help"); - this.weatherButton = new TButton("Weather"); + this.webBrowserButton = new TButton("Browse"); this.commandButton = new TButton("Command"); this.jokeButton = new TButton("Joke"); this.aboutButton = new AboutButton(); @@ -360,7 +360,7 @@ public class MainWindow extends TWindow { add(walkingHumanProgress); walkingHumanProgress.visibleProperty .bindTo(timeCalcConfiguration.walkingHumanVisibleProperty); - weatherButton + webBrowserButton .setBounds(SwingUtils.MARGIN, walkingHumanProgress.getY() + walkingHumanProgress.getHeight()); @@ -631,6 +631,7 @@ public class MainWindow extends TWindow { add(elapsedTextField); add(remainingTextFieldLabel); add(remainingTextField); + add(webBrowserButton); } if(!allowOnlyBasicFeaturesProperty.getValue()) { add(saveButton); @@ -672,6 +673,7 @@ public class MainWindow extends TWindow { configButton.setBoundsFromTop(weekLabel); workDaysButton.setBoundsFromLeft(configButton); activitiesButton.setBoundsFromLeft(workDaysButton); + webBrowserButton.setBoundsFromLeft(activitiesButton); exitButton.setBounds(saveButton.getX() + saveButton.getWidth() - activitiesButton.getWidth(), workDaysButton.getY(), activitiesButton.getWidth(), activitiesButton.getHeight()); restartButton.setBounds(exitButton.getX() - SwingUtils.MARGIN - activitiesButton.getWidth(), activitiesButton.getY(), activitiesButton.getWidth(), activitiesButton.getHeight()); @@ -694,8 +696,8 @@ public class MainWindow extends TWindow { setTitle(getWindowTitle()); - weatherButton - .addActionListener(e -> new WeatherWindow().setVisible(true)); + webBrowserButton + .addActionListener(e -> WebBrowser.show(timeCalcConfiguration)); commandButton.addActionListener( new CommandActionListener(timeCalcApp, timeCalcConfiguration)); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WeatherWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WeatherWindow.java deleted file mode 100644 index c9e815c..0000000 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/WeatherWindow.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.nanoboot.utils.timecalc.swing.windows; - -import org.nanoboot.utils.timecalc.utils.common.Utils; - -import javax.swing.JEditorPane; -import javax.swing.JFrame; -import javax.swing.JScrollPane; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.io.StringWriter; -import java.net.HttpURLConnection; -import java.net.URL; - -/** - * @author Robert Vokac - * @since 16.02.2024 - */ -public class WeatherWindow extends JFrame { - - public WeatherWindow() { - this.setSize(400, 300); - - JEditorPane jep = new JEditorPane(); - jep.setEditable(false); - JScrollPane scrollPane = new JScrollPane(jep); - scrollPane.setBounds(10, 10, 750, 550); - getContentPane().add(scrollPane); - - // File proxyTxt = new File("proxy.txt"); - // if (!proxyTxt.exists()) { - // jep.setText("Sorry, file proxy.txt was not found."); - // return; - // } - // final HttpProxy httpProxy; - // try { - // httpProxy = new HttpProxy(proxyTxt); - // } catch (RuntimeException e) { - // jep.setContentType("text/html"); - // jep.setText(e.getMessage()); - // return; - // } - try { - String pocasiHtml = null; - File pocasiHtmlFile = new File("pocasi.html"); - try { - pocasiHtml = downloadFile("https://pocasi.seznam.cz/praha"); - pocasiHtml = prettyFormatXml(pocasiHtml, 4); - Utils.writeTextToFile(pocasiHtmlFile, pocasiHtml); - } catch (Exception e) { - e.printStackTrace(); - pocasiHtml = pocasiHtmlFile.exists() - ? Utils.readTextFromFile(pocasiHtmlFile) - : "Sorry, pocasi.html was not found."; - } - - { - StringBuilder sb = new StringBuilder(); - boolean ogm_detailed_forecast_Started = false; - for (String line : pocasiHtml.split("\\r?\\n|\\r")) { - - if (line.contains("ogm-detailed-forecast")) { - ogm_detailed_forecast_Started = true; - } - if (ogm_detailed_forecast_Started && line - .contains("