Skip to content

Commit 64d8cda

Browse files
committed
fix bugs; improve UI
1 parent eb685a1 commit 64d8cda

14 files changed

Lines changed: 112 additions & 30 deletions

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ plugins {
1515
}
1616

1717
group 'org.glavo'
18-
version '3.6'
18+
version '3.7'
1919

2020
modularity.mixedJavaRelease 8
2121

@@ -43,22 +43,22 @@ dependencies {
4343
jar {
4444
manifest {
4545
attributes 'Implementation-Version': '1.2',
46-
'Main-Class': 'org.glavo.viewer.gui.Viewer'
46+
'Main-Class': 'org.glavo.viewer.Main'
4747
}
4848
}
4949

5050
compileJava.options.encoding = "UTF-8"
5151
compileTestJava.options.encoding = "UTF-8"
5252
javadoc.options.encoding = "UTF-8"
5353

54-
mainClassName = 'org.glavo.viewer/org.glavo.viewer.gui.Viewer'
54+
mainClassName = 'org.glavo.viewer/org.glavo.viewer.Main'
5555

56+
//jlink --strip-debug --no-header-files --no-man-pages --module-path ClassViewer-3.6.jar --add-modules org.glavo.viewer --output ClassViewer --vm=server --launcher ClassViewer=org.glavo.viewer/org.glavo.viewer.gui.Viewer
5657
jlink {
5758
moduleName = 'org.glavo.viewer'
5859
imageDir = file("$buildDir/ClassViewer")
5960
imageZip = file("$buildDir/ClassViewer-$version-${jforeign.Platform.PLATFORM}.zip")
6061
addOptions '--strip-debug',
61-
'--compress', '1',
6262
'--no-header-files',
6363
'--no-man-pages'
6464
if (jforeign.Platform.isWindows()) {

src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module org.glavo.viewer {
2+
exports org.glavo.viewer;
23
exports org.glavo.viewer.gui;
34
exports org.glavo.viewer.gui.filetypes;
45

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.glavo.viewer;
2+
3+
import javafx.application.Application;
4+
import org.glavo.viewer.gui.Options;
5+
import org.glavo.viewer.gui.Viewer;
6+
import org.glavo.viewer.util.Log;
7+
8+
public final class Main {
9+
public static void main(String[] args) {
10+
Options.init();
11+
Log.info("launch application");
12+
Application.launch(Viewer.class, args);
13+
}
14+
}

src/main/java/org/glavo/viewer/gui/OpenFilesTask.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.glavo.viewer.gui;
22

3-
import javafx.scene.control.Tab;
43
import org.glavo.viewer.gui.filetypes.FileType;
54

65
import java.net.URL;

src/main/java/org/glavo/viewer/gui/Options.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public static void init() {
4848
init(System.getProperties());
4949
}
5050

51-
RecentFiles.init();
5251
Log.info("loading finished");
5352
}
5453

src/main/java/org/glavo/viewer/gui/RecentFiles.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ public final class RecentFiles {
1919
public static RecentFiles Instance = null;
2020

2121
public static void init() {
22-
Instance = new RecentFiles();
22+
if (Instance == null) {
23+
synchronized (RecentFiles.class) {
24+
if (Instance == null) {
25+
Instance = new RecentFiles();
26+
}
27+
}
28+
}
2329
}
2430

2531
private final List<RecentFile> list = Collections.synchronizedList(new LinkedList<>());

src/main/java/org/glavo/viewer/gui/Viewer.java

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package org.glavo.viewer.gui;
22

33
import javafx.application.Application;
4+
import javafx.beans.binding.Bindings;
5+
import javafx.geometry.Pos;
46
import javafx.scene.Scene;
7+
import javafx.scene.control.Hyperlink;
58
import javafx.scene.control.Tab;
69
import javafx.scene.input.*;
710
import javafx.scene.layout.*;
11+
import javafx.scene.paint.Color;
12+
import javafx.scene.text.Text;
13+
import javafx.scene.text.TextAlignment;
14+
import javafx.scene.text.TextFlow;
815
import javafx.stage.Stage;
916
import javafx.stage.StageStyle;
1017
import org.glavo.viewer.gui.filetypes.FileType;
@@ -19,20 +26,17 @@
1926

2027
public final class Viewer extends Application {
2128
public static final String TITLE = "ClassViewer";
29+
public static final ResourceBundle resource = ResourceBundle.getBundle("org.glavo.viewer.gui.ViewerResources");
2230

2331
public static final int DEFAULT_WIDTH = 1080;
2432
public static final int DEFAULT_HEIGHT = 608;
2533

26-
public static void main(String[] args) {
27-
Options.init();
28-
Log.info("launch application");
29-
Application.launch(Viewer.class, args);
30-
}
31-
3234
private Stage stage;
3335
private Scene scene;
3436
private BorderPane pane;
3537

38+
private Pane defaultText;
39+
3640
private ViewerTopBar topBar;
3741
private ViewerTabPane tabPane;
3842

@@ -48,9 +52,16 @@ public void start(Stage stage) {
4852
this.pane = new BorderPane();
4953
this.topBar = new ViewerTopBar(this);
5054
this.tabPane = new ViewerTabPane(this);
55+
this.defaultText = this.createDefaultText();
5156

5257
pane.setTop(topBar);
53-
pane.setCenter(tabPane);
58+
pane.setCenter(defaultText);
59+
pane.centerProperty().bind(Bindings.createObjectBinding(() -> {
60+
if (tabPane.getTabs().isEmpty()) {
61+
return defaultText;
62+
}
63+
return tabPane;
64+
}, tabPane.getTabs()));
5465
FontUtils.setUIFont(tabPane);
5566

5667
this.scene = new Scene(pane, DEFAULT_WIDTH, DEFAULT_HEIGHT);
@@ -226,4 +237,28 @@ public ViewerTopBar getTopBar() {
226237
public ViewerTabPane getTabPane() {
227238
return tabPane;
228239
}
240+
241+
private Pane createDefaultText() {
242+
VBox pane = new VBox();
243+
pane.setAlignment(Pos.CENTER);
244+
245+
Text openFileText = new Text(resource.getString("defaultText.openFile"));
246+
openFileText.setFill(Color.GRAY);
247+
Hyperlink openFileLink = new Hyperlink(topBar.getMenuBar().fileMenu.openFileItem.getAccelerator().getDisplayText());
248+
openFileLink.setOnAction(event -> openFile());
249+
250+
Text openFolderText = new Text(resource.getString("defaultText.openFolder"));
251+
openFolderText.setFill(Color.GRAY);
252+
Hyperlink openFolderLink = new Hyperlink(topBar.getMenuBar().fileMenu.openFolderItem.getAccelerator().getDisplayText());
253+
openFolderLink.setOnAction(event -> openFolder());
254+
255+
TextFlow text = new TextFlow(
256+
openFileText, new Text(" "), openFileLink, new Text("\n"),
257+
openFolderText, new Text(" "), openFolderLink
258+
);
259+
text.setTextAlignment(TextAlignment.CENTER);
260+
261+
pane.getChildren().add(text);
262+
return pane;
263+
}
229264
}

src/main/java/org/glavo/viewer/gui/ViewerMenuBar.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,23 @@
44
import javafx.scene.control.MenuBar;
55
import javafx.scene.control.MenuItem;
66
import javafx.scene.image.ImageView;
7+
import javafx.scene.input.KeyCode;
8+
import javafx.scene.input.KeyCodeCombination;
9+
import javafx.scene.input.KeyCombination;
710
import javafx.stage.Stage;
811
import org.glavo.viewer.util.ImageUtils;
912

10-
import java.util.ResourceBundle;
13+
import static org.glavo.viewer.gui.Viewer.resource;
1114

1215
import static org.glavo.viewer.util.FontUtils.setUIFont;
1316

1417
public final class ViewerMenuBar extends MenuBar {
1518

16-
public static final ResourceBundle resource = ResourceBundle.getBundle("org.glavo.viewer.gui.ViewerMenuBarResources");
1719

1820
public class FileMenu extends Menu {
19-
private MenuItem openFileItem = new MenuItem(resource.getString("fileMenu.openFileItem.text"));
20-
private MenuItem openFolderItem = new MenuItem(resource.getString("fileMenu.openFolderItem.text"));
21-
private Menu openRecentMenu = new Menu(resource.getString("fileMenu.openRecentMenu.text"));
21+
MenuItem openFileItem = new MenuItem(resource.getString("fileMenu.openFileItem.text"));
22+
MenuItem openFolderItem = new MenuItem(resource.getString("fileMenu.openFolderItem.text"));
23+
Menu openRecentMenu = new Menu(resource.getString("fileMenu.openRecentMenu.text"));
2224

2325
public FileMenu() {
2426
super(resource.getString("fileMenu.text"));
@@ -34,6 +36,9 @@ public FileMenu() {
3436
openFolderItem.setMnemonicParsing(true);
3537
openRecentMenu.setMnemonicParsing(true);
3638

39+
openFileItem.setAccelerator(new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN));
40+
openFolderItem.setAccelerator(new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN, KeyCodeCombination.SHIFT_DOWN));
41+
3742
this.getItems().addAll(openFileItem, openFolderItem, openRecentMenu);
3843
}
3944
}
@@ -81,6 +86,7 @@ public ViewerMenuBar(Viewer viewer) {
8186
}
8287

8388
public void updateRecentFiles() {
89+
RecentFiles.init();
8490
this.fileMenu.openRecentMenu.getItems().clear();
8591
for (RecentFile file : RecentFiles.Instance.getAll()) {
8692
MenuItem item = new MenuItem(file.url.toString(), new ImageView(file.type.icon));

src/main/java/org/glavo/viewer/gui/ViewerMenuBarResources_zh.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/main/java/org/glavo/viewer/gui/ViewerMenuBarResources.java renamed to src/main/java/org/glavo/viewer/gui/ViewerResources.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
import java.util.Properties;
77
import java.util.ResourceBundle;
88

9-
public class ViewerMenuBarResources extends ResourceBundle {
9+
public class ViewerResources extends ResourceBundle {
1010
private final Properties properties = new Properties();
1111

12-
public ViewerMenuBarResources() {
12+
public ViewerResources() {
1313
try (Reader in = new BufferedReader(
1414
new InputStreamReader(
1515
this.getClass().getResourceAsStream(

0 commit comments

Comments
 (0)