diff --git a/gui/pom.xml b/gui/pom.xml
index 4c52bf9..b0c4486 100644
--- a/gui/pom.xml
+++ b/gui/pom.xml
@@ -82,8 +82,10 @@
**/*.fxml
**/*.css
-
+
**/*.png
+ **/*.jpg
+ **/*.jpeg
false
diff --git a/gui/src/main/java/module-info.java b/gui/src/main/java/module-info.java
index 0e5fb9d..81c3810 100644
--- a/gui/src/main/java/module-info.java
+++ b/gui/src/main/java/module-info.java
@@ -11,6 +11,7 @@
// Allow @FXML injection to private fields.
opens pl.marcinchwedczuk.elfviewer.gui.mainwindow;
- exports pl.marcinchwedczuk.elfviewer.gui.mainwindow.renderer.dto;
+ opens pl.marcinchwedczuk.elfviewer.gui.aboutdialog;
opens pl.marcinchwedczuk.elfviewer.gui.mainwindow.renderer.dto;
+ exports pl.marcinchwedczuk.elfviewer.gui.mainwindow.renderer.dto;
}
\ No newline at end of file
diff --git a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/App.java b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/App.java
index 23f16ce..50b454c 100644
--- a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/App.java
+++ b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/App.java
@@ -1,6 +1,7 @@
package pl.marcinchwedczuk.elfviewer.gui;
import javafx.application.Application;
+import javafx.application.HostServices;
import javafx.stage.Stage;
import pl.marcinchwedczuk.elfviewer.gui.mainwindow.MainWindow;
@@ -8,6 +9,14 @@
* JavaFX App
*/
public class App extends Application {
+ private static HostServices hostServices = null;
+ public static HostServices hostServices() {
+ if (hostServices == null) {
+ throw new IllegalStateException();
+ }
+ return hostServices;
+ }
+
@Override
public void start(Stage stage) {
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
@@ -15,6 +24,7 @@ public void start(Stage stage) {
showExceptionDialog(e);
});
+ hostServices = this.getHostServices();
MainWindow.showOn(stage);
}
diff --git a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/AboutDialog.fxml b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/AboutDialog.fxml
new file mode 100644
index 0000000..569b9fe
--- /dev/null
+++ b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/AboutDialog.fxml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/AboutDialog.java b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/AboutDialog.java
new file mode 100644
index 0000000..f9ff801
--- /dev/null
+++ b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/AboutDialog.java
@@ -0,0 +1,60 @@
+package pl.marcinchwedczuk.elfviewer.gui.aboutdialog;
+
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.GridPane;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+import javafx.stage.StageStyle;
+import javafx.stage.Window;
+import pl.marcinchwedczuk.elfviewer.gui.App;
+
+import java.io.IOException;
+
+public class AboutDialog {
+ public static AboutDialog show(Window owner) {
+ try {
+ FXMLLoader loader = new FXMLLoader(
+ AboutDialog.class.getResource("AboutDialog.fxml"));
+
+ Stage childWindow = new Stage();
+ childWindow.initOwner(owner);
+ childWindow.initModality(Modality.WINDOW_MODAL);
+ childWindow.initStyle(StageStyle.UTILITY);
+ childWindow.setTitle("About...");
+ childWindow.setScene(new Scene(loader.load()));
+ childWindow.setResizable(false);
+ childWindow.sizeToScene();
+
+ AboutDialog controller = loader.getController();
+ childWindow.show();
+ return controller;
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @FXML
+ private GridPane rootElement;
+
+ @FXML
+ private void guiClose() {
+ ((Stage)rootElement.getScene().getWindow()).close();
+ }
+
+ @FXML
+ private void linkIcons8() {
+ App.hostServices().showDocument("https://icons8.com/");
+ }
+
+ @FXML
+ private void linkSourceCode() {
+ App.hostServices().showDocument("https://github.com/marcin-chwedczuk/elf-viewer");
+ }
+
+ @FXML
+ private void linkBugReport() {
+ App.hostServices().showDocument("https://github.com/marcin-chwedczuk/elf-viewer/issues");
+ }
+}
diff --git a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/about-icon.png b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/about-icon.png
new file mode 100755
index 0000000..cb6bda8
Binary files /dev/null and b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/about-icon.png differ
diff --git a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/about-panache.jpg b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/about-panache.jpg
new file mode 100644
index 0000000..532b613
Binary files /dev/null and b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/aboutdialog/about-panache.jpg differ
diff --git a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/mainwindow/MainWindow.java b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/mainwindow/MainWindow.java
index 9ee38d5..e806f16 100644
--- a/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/mainwindow/MainWindow.java
+++ b/gui/src/main/java/pl/marcinchwedczuk/elfviewer/gui/mainwindow/MainWindow.java
@@ -18,6 +18,7 @@
import pl.marcinchwedczuk.elfviewer.elfreader.elf.arch.LongNativeWord;
import pl.marcinchwedczuk.elfviewer.elfreader.elf.shared.ElfFile;
import pl.marcinchwedczuk.elfviewer.elfreader.io.FileSystemFile;
+import pl.marcinchwedczuk.elfviewer.gui.aboutdialog.AboutDialog;
import pl.marcinchwedczuk.elfviewer.gui.mainwindow.renderer.NothingRenderer;
import java.io.File;
@@ -43,7 +44,7 @@ public static MainWindow showOn(Stage window) {
}
});
- controller.window = window;
+ controller.thisWindow = window;
window.show();
@@ -53,7 +54,7 @@ public static MainWindow showOn(Stage window) {
}
}
- private Window window;
+ private Window thisWindow;
@FXML
private TextField filterText;
@@ -161,7 +162,7 @@ private void tableViewKeyPressed(KeyEvent event) {
@FXML
private void guiOpen() {
- File f = openFileChooser.showOpenDialog(window);
+ File f = openFileChooser.showOpenDialog(thisWindow);
if (f != null) {
loadElfFile(f);
}
@@ -174,7 +175,7 @@ private void guiExit() {
@FXML
private void guiAbout() {
-
+ AboutDialog.show(thisWindow);
}
@FXML