-
Notifications
You must be signed in to change notification settings - Fork 534
Expand file tree
/
Copy pathRecafApplication.java
More file actions
87 lines (75 loc) · 2.99 KB
/
Copy pathRecafApplication.java
File metadata and controls
87 lines (75 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package software.coley.recaf;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import software.coley.recaf.cdi.UiInitializationEvent;
import software.coley.recaf.services.navigation.NavigationManager;
import software.coley.recaf.services.window.WindowManager;
import software.coley.recaf.services.workspace.WorkspaceManager;
import software.coley.recaf.ui.RecafTheme;
import software.coley.recaf.ui.config.KeybindingConfig;
import software.coley.recaf.ui.menubar.MainMenu;
import software.coley.recaf.ui.pane.LoggingPane;
import software.coley.recaf.ui.docking.DockingManager;
import software.coley.recaf.ui.window.RecafScene;
import software.coley.recaf.util.FxThreadUtil;
import software.coley.recaf.util.Icons;
import software.coley.recaf.workspace.PathExportingManager;
/**
* JavaFX application entry point.
*
* @author Matt Coley
*/
public class RecafApplication extends Application {
private final Recaf recaf = Bootstrap.get();
@Override
public void start(Stage stage) {
// Notify the thread util that FX has been initialized
FxThreadUtil.onInitialize();
// Setup global style
setUserAgentStylesheet(new RecafTheme().getUserAgentStylesheet());
// Initialize the navigation manager before we get the services below.
// We want it to get a head start on initalization.
recaf.get(NavigationManager.class).requestFocus();
// Get services
DockingManager dockingManager = recaf.get(DockingManager.class);
KeybindingConfig keybindingConfig = recaf.get(KeybindingConfig.class);
WindowManager windowManager = recaf.get(WindowManager.class);
WorkspaceManager workspaceManager = recaf.get(WorkspaceManager.class);
// Get components
MainMenu menu = recaf.get(MainMenu.class);
LoggingPane logging = recaf.get(LoggingPane.class);
// Layout
BorderPane wrapper = new BorderPane();
wrapper.setTop(menu);
wrapper.setCenter(dockingManager.getRoot().asRegion());
wrapper.getStyleClass().addAll("padded", "bg-inset");
// Display
Scene scene = new RecafScene(wrapper);
scene.addEventFilter(KeyEvent.KEY_PRESSED, (KeyEvent event) -> {
// Global keybind handling
if (keybindingConfig.getQuickNav().match(event)) {
Stage quickNav = windowManager.getQuickNav();
quickNav.show();
quickNav.requestFocus();
} else if (keybindingConfig.getExport().match(event) && workspaceManager.hasCurrentWorkspace()) {
recaf.get(PathExportingManager.class).export(workspaceManager.getCurrent());
}
});
stage.setMinWidth(450);
stage.setMinHeight(200);
stage.setWidth(900);
stage.setHeight(620);
stage.setScene(scene);
stage.getIcons().add(Icons.getImage(Icons.LOGO));
stage.setTitle("Recaf");
stage.setOnCloseRequest(e -> ExitDebugLoggingHook.exit(0));
// Register main window
windowManager.register(WindowManager.WIN_MAIN, stage);
stage.show();
// Publish UI init event
recaf.getContainer().getBeanContainer().getEvent().fire(new UiInitializationEvent());
}
}