View Javadoc
1   package io.github.magwas.inez.ui;
2   
3   import java.io.IOException;
4   import javafx.geometry.Insets;
5   import javafx.geometry.Orientation;
6   import javafx.scene.control.MenuBar;
7   import javafx.scene.control.SplitPane;
8   import javafx.scene.control.TabPane;
9   import javafx.scene.control.ToolBar;
10  import javafx.scene.layout.HBox;
11  import javafx.scene.layout.Priority;
12  import javafx.scene.layout.VBox;
13  
14  import org.springframework.beans.factory.annotation.Autowired;
15  import org.springframework.stereotype.Service;
16  
17  @Service
18  public class CreateMainSceneService implements UIConstants {
19  
20  	@Autowired
21  	UIState uiState;
22  
23  	@Autowired
24  	ToggleFullscreenService toggleFullscreen;
25  
26  	VBox apply() throws IOException {
27  
28  		uiState.menuBar = new MenuBar();
29  		uiState.toolBar = new ToolBar();
30  		uiState.mainArea = createMainArea();
31  		uiState.statusBar = createStatusBar();
32  
33  		VBox topContainer = new VBox(uiState.menuBar, uiState.toolBar);
34  		VBox content = new VBox();
35  		content.getChildren().addAll(topContainer, uiState.mainArea, uiState.statusBar);
36  		VBox.setVgrow(uiState.mainArea, Priority.ALWAYS);
37  		return content;
38  	}
39  
40  	private SplitPane createMainArea() {
41  		SplitPane horizontalSplit = new SplitPane();
42  		horizontalSplit.setOrientation(Orientation.HORIZONTAL);
43  		horizontalSplit.getItems().addAll(createTabPane(), createTabPane(), createTabPane());
44  		horizontalSplit.setDividerPositions(LEFT_PANE_RATIO, RIGHT_PANE_RATIO);
45  		return horizontalSplit;
46  	}
47  
48  	private HBox createStatusBar() {
49  		HBox statusBar = new HBox(PADDING);
50  		statusBar.setPadding(new Insets(SMALL_PADDING, PADDING, SMALL_PADDING, PADDING));
51  		statusBar.setStyle(STATUSBAR_STYLE);
52  		return statusBar;
53  	}
54  
55  	private TabPane createTabPane() {
56  		TabPane tabPane = new TabPane();
57  		tabPane.setOnMouseClicked(event -> {
58  			if (UIUtil.isDoubleClick(event)) {
59  				toggleFullscreen.apply(tabPane);
60  			}
61  		});
62  		return tabPane;
63  	}
64  }