package AndroidDevToolbox; import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ToggleButton; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; import javafx.stage.Modality; import javafx.stage.Stage; import utils.AppConfig; import utils.FileHelper; import java.net.URL; import java.util.ResourceBundle; public class MainController implements Initializable { public interface BackgroundTaskExecutionListener { public void taskStart(); public void taskComplete(); } private static String[] SCREEN_TITLE_KEY = { "LeftMenuAppIconResize", "LeftMenuResize", "LeftMenuStatefulBtn", "LeftMenuDimenScale" }; private static String[] SCREEN_HELP_KEY = { "helpAppIconResize", "helpResize", "helpStatefulBtn", "helpDimenScale" }; private interface FxmlName { String APP_ICON_RESIZE_SCREEN = "AppIconResizeScreen.fxml"; String RESIZE_SCREEN = "ImageResizeScreen.fxml"; String STATEFUL_BTN_SCREEN = "StatefulButtonScreen.fxml"; String DIMEN_SCALE_SCREEN = "DimenValueScaleScreen.fxml"; } public ToggleButton leftMenuImageResizeBtn; public ToggleButton leftMenuStatefulBtn; public ToggleButton leftMenuIconResizeBtn; public ToggleButton leftMenuDimenScaleBtn; public GridPane contentPane; public Label titleBarLabel; public Label statusBarLabel; public VBox contentHeaderBox; public VBox leftMenuBox; private ResourceBundle resourceBundle; private Stage dialogStage; private BackgroundTaskExecutionListener taskExecutionListener = new BackgroundTaskExecutionListener() { @Override public void taskStart() { setLeftMenuEnable(false); } @Override public void taskComplete() { setLeftMenuEnable(true); } }; private enum Screen { APP_ICON_RESIZE, IMAGE_RESIZE, STATEFUL_BUTTON, DIMEN_SCALE } private Screen currentScreen; private ToggleButton lastSelectedButton; @Override public void initialize(URL url, ResourceBundle resourceBundle) { this.resourceBundle = resourceBundle; contentHeaderBox.setVisible(false); } private void setScreen(Screen screen) { contentHeaderBox.setVisible(true); this.currentScreen = screen; titleBarLabel.setText(resourceBundle.getString(SCREEN_TITLE_KEY[screen.ordinal()])); } public void showHelpDialog() { try { FXMLLoader fxmlLoader = new FXMLLoader(FileHelper.getFxmlUrl( getClass(), "HelpDialog.fxml"), resourceBundle); Parent root = (Parent) fxmlLoader.load(); dialogStage = new Stage(); dialogStage.initModality(Modality.APPLICATION_MODAL); Scene scene = new Scene(root); String cssURL = getClass().getClassLoader().getResource(AppConfig.APP_CSS_PATH).toExternalForm(); scene.getStylesheets().add(cssURL); dialogStage.setScene(scene); HelpDialogController controller = fxmlLoader.getController(); controller.setDialogMessage( resourceBundle.getString(SCREEN_HELP_KEY[currentScreen.ordinal()])); dialogStage.show(); } catch (Exception e) { e.printStackTrace(); } } public void updateContentScreen(MouseEvent mouseEvent) { statusBarLabel.setText(""); ToggleButton button = (ToggleButton) mouseEvent.getSource(); Screen screen = getScreenForButton(button); selectButton(button); if (this.currentScreen == screen) { return; } setScreen(screen); this.contentPane.getChildren().clear(); try { FXMLLoader fxmlLoader = new FXMLLoader( FileHelper.getFxmlUrl(getClass(), getFxmlNameForButton(button)), resourceBundle); this.contentPane.getChildren().add((Node)fxmlLoader.load()); BaseController controller = fxmlLoader.getController(); controller.setStatusBarLabel(statusBarLabel); controller.setBackgroundTaskExecutionListener(taskExecutionListener); } catch (Exception e) { e.printStackTrace(); } } private void deselectLastButton() { if (lastSelectedButton != null) { lastSelectedButton.setSelected(false); } } private void selectButton(ToggleButton selectedButton) { deselectLastButton(); lastSelectedButton = selectedButton; selectedButton.setSelected(true); } private Screen getScreenForButton(ToggleButton button) { Screen screen = Screen.IMAGE_RESIZE; if (button == leftMenuImageResizeBtn) { screen = Screen.IMAGE_RESIZE; } else if (button == leftMenuStatefulBtn) { screen = Screen.STATEFUL_BUTTON; } else if (button == leftMenuIconResizeBtn) { screen = Screen.APP_ICON_RESIZE; } else if (button == leftMenuDimenScaleBtn) { screen = Screen.DIMEN_SCALE; } return screen; } private String getFxmlNameForButton(ToggleButton button) { String fxmlName = ""; if (button == leftMenuImageResizeBtn) { fxmlName = FxmlName.RESIZE_SCREEN; } else if (button == leftMenuStatefulBtn) { fxmlName = FxmlName.STATEFUL_BTN_SCREEN; } else if (button == leftMenuIconResizeBtn) { fxmlName = FxmlName.APP_ICON_RESIZE_SCREEN; } else if (button == leftMenuDimenScaleBtn) { fxmlName = FxmlName.DIMEN_SCALE_SCREEN; } return fxmlName; } private void setLeftMenuEnable(boolean enable) { ObservableList<Node> childList = leftMenuBox.getChildren(); int numOfChild = childList.size(); for (int i=0; i<numOfChild; i++) { Node btn = childList.get(i); btn.setDisable(!enable); } } }