Add fonts selector for #153

This commit is contained in:
Dmitry Isaenko 2023-10-29 06:15:43 +03:00
parent 9d4cac26e5
commit 3909371774
21 changed files with 416 additions and 86 deletions

View file

@ -8,7 +8,7 @@
<name>NS-USBloader</name>
<artifactId>ns-usbloader</artifactId>
<version>7.0</version> <!-- linked via script to NSIS system. Should have format of 2 blocks of numbers. May have end on '-SNAPSHOT' -->
<version>7.1-SNAPSHOT</version> <!-- linked via script to NSIS system. Should have format of 2 blocks of numbers. May have end on '-SNAPSHOT' -->
<url>https://redrise.ru</url>
<description>NS multi-tool</description>

View file

@ -18,6 +18,8 @@
*/
package nsusbloader;
import javafx.scene.text.Font;
import java.util.Locale;
import java.util.prefs.Preferences;
@ -28,6 +30,7 @@ public class AppPreferences {
private final Preferences preferences;
private final Locale locale;
public static final String[] goldleafSupportedVersions = {"v0.5", "v0.7.x", "v0.8-0.9", "v0.10"};
private static final Font DEFAULT_FONT = Font.getDefault();
private AppPreferences(){
this.preferences = Preferences.userRoot().node("NS-USBloader");
@ -152,4 +155,17 @@ public class AppPreferences {
public void setPatchesTabInvisible(boolean value){preferences.putBoolean("patches_tab_visible", value);}
public String getPatchPattern(String type, int moduleNumber, int offsetId){ return preferences.get(String.format("%s_%02x_%02x", type, moduleNumber, offsetId), ""); }
public void setPatchPattern(String fullTypeSpecifier, String offset){ preferences.put(fullTypeSpecifier, offset); }
public String getFontFamily(){ return preferences.get("font_family", DEFAULT_FONT.getFamily()); }
public double getFontSize(){ return preferences.getDouble("font_size", DEFAULT_FONT.getSize()); }
public String getFontStyle(){
final String fontFamily = preferences.get("font_family", DEFAULT_FONT.getFamily());
final double fontSize = preferences.getDouble("font_size", DEFAULT_FONT.getSize());
return String.format("-fx-font-family: \"%s\"; -fx-font-size: %.0f;", fontFamily, fontSize);
}
public void setFontStyle(String fontFamily, double size){
preferences.put("font_family", fontFamily);
preferences.putDouble("font_size", size);
}
}

View file

@ -87,6 +87,7 @@ public class FilesDropHandle {
Scene mainScene = new Scene(parentVBox, 310, 185);
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
parentVBox.setStyle(AppPreferences.getInstance().getFontStyle());
stage.setOnHidden(windowEvent -> filesDropHandleTask.cancel(true ) );

View file

@ -0,0 +1,56 @@
/*
Copyright 2019-2023 Dmitry Isaenko
This file is part of NS-USBloader.
NS-USBloader is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NS-USBloader is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NS-USBloader. If not, see <https://www.gnu.org/licenses/>.
*/
package nsusbloader.Controllers;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import nsusbloader.AppPreferences;
import java.util.ResourceBundle;
public class FontSelector {
public FontSelector(ResourceBundle resourceBundle) throws Exception{
Stage stage = new Stage();
stage.setMinWidth(800);
stage.setMinHeight(800);
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/FontSettings.fxml"));
fxmlLoader.setResources(resourceBundle);
stage.setTitle(resourceBundle.getString("tab2_Btn_ApplicationFont"));
stage.getIcons().addAll(
new Image("/res/app_icon32x32.png"),
new Image("/res/app_icon48x48.png"),
new Image("/res/app_icon64x64.png"),
new Image("/res/app_icon128x128.png"));
Parent parent = fxmlLoader.load();
Scene fontScene = new Scene(parent, 550, 600);
fontScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
parent.setStyle(AppPreferences.getInstance().getFontStyle());
stage.setAlwaysOnTop(true);
stage.setScene(fontScene);
stage.show();
}
}

View file

@ -0,0 +1,153 @@
/*
Copyright 2019-2023 Dmitry Isaenko
This file is part of NS-USBloader.
NS-USBloader is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NS-USBloader is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NS-USBloader. If not, see <https://www.gnu.org/licenses/>.
*/
package nsusbloader.Controllers;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import nsusbloader.AppPreferences;
import nsusbloader.MediatorControl;
import java.net.URL;
import java.util.ResourceBundle;
public class FontSettingsController implements Initializable {
private final AppPreferences preferences = AppPreferences.getInstance();
@FXML
private Button applyBtn, cancelBtn, resetBtn;
@FXML
private ListView<String> fontsLv;
@FXML
private Spinner<Double> fontSizeSpinner;
@FXML
private Text exampleText;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
applyBtn.setDefaultButton(true);
applyBtn.getStyleClass().add("buttonUp");
applyBtn.setOnAction(e -> applyChanges());
cancelBtn.setCancelButton(true);
cancelBtn.setOnAction(e -> closeWindow());
resetBtn.setOnAction(e -> reset());
fontsLv.setCellFactory(item -> getCellFactory());
fontsLv.setItems(getFonts());
fontsLv.getSelectionModel().select(preferences.getFontFamily());
fontsLv.getSelectionModel().selectedIndexProperty().addListener(
(observableValue, oldValueNumber, newValueNumber) -> setExampleTextFont());
fontsLv.setFixedCellSize(40.0);
fontSizeSpinner.setEditable(false);
fontSizeSpinner.setValueFactory(getValueFactory());
exampleText.setText(resourceBundle.getString("fontPreviewText"));
fontSizeSpinner.getValueFactory().setValue(preferences.getFontSize());
}
private ListCell<String> getCellFactory(){
return new ListCell<>(){
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null)
return;
Font font = Font.font(item);
Text itemText = new Text(item);
itemText.setFont(font);
setGraphic(itemText);
}
};
}
private ObservableList<String> getFonts(){
ObservableList<String> fonts = FXCollections.observableArrayList();
fonts.addAll(Font.getFamilies());
return fonts;
}
private SpinnerValueFactory<Double> getValueFactory(){
return new SpinnerValueFactory<>() {
@Override
public void decrement(int i) {
double value = getValue() - i;
if (value < 4)
return;
setValue(value);
setExampleTextFont(value);
}
@Override
public void increment(int i) {
double value = getValue() + i;
if (value > 100)
return;
setValue(value);
setExampleTextFont(value);
}
};
}
private void setExampleTextFont(){
setExampleTextFont(fontsLv.getSelectionModel().getSelectedItem(), fontSizeSpinner.getValue());
}
private void setExampleTextFont(double size){
setExampleTextFont(fontsLv.getSelectionModel().getSelectedItem(), size);
}
private void setExampleTextFont(String font, double size){
exampleText.setFont(Font.font(font, size));
}
private void reset(){
final Font defaultFont = Font.getDefault();
exampleText.setFont(defaultFont);
fontsLv.getSelectionModel().select(defaultFont.getFamily());
fontSizeSpinner.getValueFactory().setValue(defaultFont.getSize());
}
private void applyChanges(){
final String fontFamily = fontsLv.getSelectionModel().getSelectedItem();
final double fontSize = fontSizeSpinner.getValue().intValue();
preferences.setFontStyle(fontFamily, fontSize);
MediatorControl.getInstance().updateApplicationFont(fontFamily, fontSize);
closeWindow();
}
private void closeWindow(){
((Stage) cancelBtn.getScene().getWindow()).close();
}
}

View file

@ -43,6 +43,9 @@ import java.util.ResourceBundle;
public class SettingsBlockGenericController implements Initializable {
@FXML
private ChoiceBox<LocaleHolder> languagesChB;
@FXML
private Button fontSelectBtn;
@FXML
private Button submitLanguageBtn,
driversInstallBtn,
@ -81,6 +84,14 @@ public class SettingsBlockGenericController implements Initializable {
newVersionHyperlink.setOnAction(e-> hostServices.showDocument(newVersionHyperlink.getText()));
checkForUpdBtn.setOnAction(e->checkForUpdatesAction());
submitLanguageBtn.setOnAction(e->languageButtonAction());
fontSelectBtn.setOnAction(e -> openFontSettings());
}
private void openFontSettings() {
try {
new FontSelector(resourceBundle);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
private void setDriversInstallFeature(){

View file

@ -60,4 +60,8 @@ public class MediatorControl {
getPatchesController().notifyThreadStarted(isActive, appModuleType);
}
public synchronized boolean getTransferActive() { return this.isTransferActive.get(); }
public void updateApplicationFont(String fontFamily, double fontSize){
mainController.logArea.getScene().getRoot().setStyle(
String.format("-fx-font-family: \"%s\"; -fx-font-size: %.0f;", fontFamily, fontSize));
}
}

View file

@ -62,6 +62,7 @@ public class NSLMain extends Application {
);
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
root.setStyle(AppPreferences.getInstance().getFontStyle());
primaryStage.setScene(mainScene);
primaryStage.show();

View file

@ -44,7 +44,6 @@ public class ServiceWindow {
alertBox.getDialogPane().setMinWidth(Region.USE_PREF_SIZE);
alertBox.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alertBox.setResizable(true); // Java bug workaround for JDR11/OpenJFX. TODO: nothing. really.
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
Stage dialogStage = (Stage) alertBox.getDialogPane().getScene().getWindow();
dialogStage.setAlwaysOnTop(true);
@ -54,6 +53,9 @@ public class ServiceWindow {
new Image("/res/warn_ico64x64.png"),
new Image("/res/warn_ico128x128.png")
);
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
dialogStage.getScene().getRoot().setStyle(AppPreferences.getInstance().getFontStyle());
alertBox.show();
dialogStage.toFront();
}
@ -68,7 +70,6 @@ public class ServiceWindow {
alertBox.getDialogPane().setMinWidth(Region.USE_PREF_SIZE);
alertBox.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alertBox.setResizable(true); // Java bug workaround for JDR11/OpenJFX. TODO: nothing. really.
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
Stage dialogStage = (Stage) alertBox.getDialogPane().getScene().getWindow();
dialogStage.setAlwaysOnTop(true);
@ -78,6 +79,10 @@ public class ServiceWindow {
new Image("/res/ask_ico64x64.png"),
new Image("/res/ask_ico128x128.png")
);
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
dialogStage.getScene().getRoot().setStyle(AppPreferences.getInstance().getFontStyle());
dialogStage.toFront();
Optional<ButtonType> result = alertBox.showAndWait();

View file

@ -103,6 +103,7 @@ public class DriversInstall {
Scene mainScene = new Scene(parentVBox, 405, 155);
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
parentVBox.setStyle(AppPreferences.getInstance().getFontStyle());
stage.setOnHidden(windowEvent -> {
downloadTask.cancel(true );

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Spinner?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.FontSettingsController">
<children>
<VBox layoutX="344.0" layoutY="132.0" prefHeight="200.0" prefWidth="100.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<ListView fx:id="fontsLv" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
<Text fx:id="exampleText" strokeType="OUTSIDE" strokeWidth="0.0" />
<HBox alignment="CENTER_RIGHT" spacing="5.0">
<children>
<Label text="%fontSize" wrapText="true" />
<Spinner fx:id="fontSizeSpinner" minWidth="100.0" />
<Pane HBox.hgrow="ALWAYS" />
<Button fx:id="resetBtn" mnemonicParsing="false" text="%btn_ResetToDefaults">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</Button>
<Button fx:id="cancelBtn" mnemonicParsing="false" text="%btn_Cancel" wrapText="true" />
<Button fx:id="applyBtn" mnemonicParsing="false" styleClass="buttonUp" text="%btn_Select" wrapText="true" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
</children>
</AnchorPane>

View file

@ -12,21 +12,12 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<VBox spacing="15.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.NxdtController">
<VBox spacing="15.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.NxdtController">
<HBox alignment="CENTER">
<children>
<Label styleClass="nxdt" text="nx">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
<Label text="dumptool">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
<Label styleClass="nxdt" text="nx" />
<Label styleClass="bold-text" text="dumptool" />
</children>
</HBox>
<GridPane>

View file

@ -12,18 +12,13 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" onDragDropped="#handleDrop" onDragOver="#handleDragOver" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.PatchesController">
<VBox fx:id="patchesToolPane" spacing="15.0">
<Pane minHeight="-Infinity" prefHeight="10.0" style="-fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #2cd882 40%, transparent 45%);" />
<HBox alignment="CENTER">
<children>
<Label text="%tabPatches_Lbl_Title">
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label styleClass="bold-text" text="%tabPatches_Lbl_Title" />
</children>
</HBox>
<GridPane>
@ -55,11 +50,7 @@
</Button>
</children>
</HBox>
<Label fx:id="locationFirmwareLbl" disable="true" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="locationFirmwareLbl" disable="true" styleClass="italic-text" textOverrun="LEADING_WORD_ELLIPSIS" />
<HBox alignment="CENTER_LEFT" spacing="5.0">
<children>
<Label minHeight="-Infinity" minWidth="-Infinity" text="%tabPatches_Lbl_Atmo" wrapText="true" />
@ -72,11 +63,7 @@
</Button>
</children>
</HBox>
<Label fx:id="locationAtmosphereLbl" disable="true" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="locationAtmosphereLbl" disable="true" styleClass="italic-text" textOverrun="LEADING_WORD_ELLIPSIS" />
</children>
</VBox>
<Separator prefWidth="200.0" />
@ -94,10 +81,7 @@
</Button>
</children>
</HBox>
<Label fx:id="locationKeysLbl" disable="true" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="System Italic" size="13.0" />
</font></Label>
<Label fx:id="locationKeysLbl" disable="true" styleClass="italic-text" textOverrun="LEADING_WORD_ELLIPSIS" />
</children>
</VBox>
<VBox spacing="5.0">

View file

@ -14,18 +14,13 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.RcmController">
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.RcmController">
<VBox fx:id="rcmToolPane" spacing="15.0">
<Pane minHeight="-Infinity" prefHeight="10.0" style="-fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #ff1515 40%, transparent 45%);" />
<HBox alignment="CENTER">
<children>
<Label text="%tabRcm_Lbl_FuseeGelee">
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label styleClass="bold-text" text="%tabRcm_Lbl_FuseeGelee" />
</children>
</HBox>
<GridPane>
@ -57,11 +52,7 @@
<Label fx:id="payloadFNameLbl1" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl1" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl1" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn1" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -86,11 +77,7 @@
<Label fx:id="payloadFNameLbl2" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl2" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl2" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn2" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -115,11 +102,7 @@
<Label fx:id="payloadFNameLbl3" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl3" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl3" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn3" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -144,11 +127,7 @@
<Label fx:id="payloadFNameLbl4" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl4" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl4" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn4" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -173,11 +152,7 @@
<Label fx:id="payloadFNameLbl5" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl5" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl5" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn5" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">

View file

@ -10,7 +10,7 @@
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SettingsBlockGenericController">
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SettingsBlockGenericController">
<children>
<Label text="%tab2_Lbl_ApplicationSettings" />
<HBox alignment="CENTER_LEFT" spacing="5.0">
@ -28,6 +28,11 @@
<Insets left="5.0" />
</VBox.margin>
</HBox>
<Button fx:id="fontSelectBtn" mnemonicParsing="false" text="%tab2_Btn_ApplicationFont">
<VBox.margin>
<Insets left="5.0" />
</VBox.margin>
</Button>
<HBox>
<children>
<VBox>

View file

@ -12,19 +12,14 @@
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox fx:id="smToolPane" onDragDropped="#handleDrop" onDragOver="#handleDragOver" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SplitMergeController">
<VBox fx:id="smToolPane" onDragDropped="#handleDrop" onDragOver="#handleDragOver" spacing="20.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SplitMergeController">
<VBox spacing="15.0">
<children>
<Pane minHeight="-Infinity" prefHeight="10.0" style="-fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #00c8fc 40%, transparent 45%);" />
<HBox alignment="CENTER">
<children>
<Label text="%tabSplMrg_Lbl_SplitNMergeTitle">
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label styleClass="bold-text" text="%tabSplMrg_Lbl_SplitNMergeTitle" />
</children>
</HBox>
<GridPane>

View file

@ -91,3 +91,7 @@ tabPatches_Btn_MakeAtmo=Make Loader (Atmosphere)
tabPatches_Btn_MakeAll=Make all
tabPatches_ServiceWindowMessageEsFs=Both firmware and keys should be set to generate patches. Otherwise, it's not clear what to patch.
tabPatches_ServiceWindowMessageLoader=Atmosphere folder should be defined to generate 'Loader' patch.
tab2_Btn_ApplicationFont=Change application font
btn_ResetToDefaults=Reset to defaults
fontPreviewText=Text preview
fontSize=Font size:

View file

@ -23,7 +23,7 @@ tab2_Lbl_HostIP=IP \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430
tab1_Lbl_NSIP=NS IP:
tab2_Cb_ValidateNSHostName=\u0412\u0441\u0435\u0433\u0434\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u044C NS IP.
windowTitleBadIp=IP \u0430\u0434\u0440\u0435\u0441 NS \u043F\u043E\u0445\u043E\u0436\u0435 \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u044B\u0439
windowBodyBadIp=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B \u0447\u0442\u043E IP \u0430\u0434\u0440\u0435\u0441 NS \u0432\u0432\u0435\u0434\u0451\u043D \u0431\u0435\u0437 \u043E\u0448\u0438\u0431\u043E\u043A?
windowBodyBadIp=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E IP \u0430\u0434\u0440\u0435\u0441 NS \u0432\u0432\u0435\u0434\u0451\u043D \u0431\u0435\u0437 \u043E\u0448\u0438\u0431\u043E\u043A?
tab2_Cb_ExpertMode=\u0420\u0435\u0436\u0438\u043C \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u0430 (\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0435\u0442\u0438)
tab2_Lbl_HostPort=\u043F\u043E\u0440\u0442
tab2_Cb_AutoDetectIp=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C IP
@ -89,5 +89,9 @@ tabPatches_Lbl_Keys=\u041A\u043B\u044E\u0447\u0438:
tabPatches_Lbl_Title=\u041F\u0430\u0442\u0447\u0438
tabPatches_ServiceWindowMessageEsFs=\u0414\u043B\u044F \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043F\u0430\u0442\u0447\u0435\u0439 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u0430\u043A \u043F\u0443\u0442\u044C \u043A \u043F\u0440\u043E\u0448\u0438\u0432\u043A\u0435, \u0442\u0430\u043A \u0438 \u043F\u0443\u0442\u044C \u043A \u0444\u0430\u0439\u043B\u0443 \u043A\u043B\u044E\u0447\u0435\u0439. \u0418\u043D\u0430\u0447\u0435 \u043D\u0435 \u043F\u043E\u043D\u044F\u0442\u043D\u043E \u0447\u0442\u043E \u0436\u0435 \u043F\u0430\u0442\u0447\u0438\u0442\u044C.
tabPatches_ServiceWindowMessageLoader=\u0414\u043B\u044F \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043F\u0430\u0442\u0447\u0430 \u00ABLoader\u00BB \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u0443\u0442\u044C \u043A Atmosphere.
tab2_Btn_ApplicationFont=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F
btn_ResetToDefaults=\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
fontPreviewText=\u041F\u0440\u0438\u043C\u0435\u0440 \u0442\u0435\u043A\u0441\u0442\u0430
fontSize=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u043E\u0432:

View file

@ -89,4 +89,8 @@ tabPatches_Lbl_Keys=\u041A\u043B\u044E\u0447\u0456:
tabPatches_Lbl_Title=\u041F\u0430\u0442\u0447\u0438
tabPatches_ServiceWindowMessageEsFs=\u0414\u043B\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043F\u0430\u0442\u0447\u0456\u0432 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u043E \u0432\u043A\u0430\u0437\u0430\u0442\u0438 \u044F\u043A \u0448\u043B\u044F\u0445 \u0434\u043E \u043F\u0440\u043E\u0448\u0438\u0432\u043A\u0438, \u0442\u0430\u043A \u0456 \u0434\u043E \u0444\u0430\u0439\u043B\u0443 \u043A\u043B\u044E\u0447\u0456\u0432. \u0411\u043E \u0456\u043D\u0430\u043A\u0448\u0435 \u043D\u0435 \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u043E \u0449\u043E \u0436 \u0442\u0440\u0435\u0431\u0430 \u043F\u0430\u0442\u0447\u0438\u0442\u0438.
tabPatches_ServiceWindowMessageLoader=\u0414\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0456\u0457 "Loader"-\u043F\u0430\u0442\u0447\u0443 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u043E \u0432\u043A\u0430\u0437\u0430\u0442\u0438 \u0448\u043B\u044F\u0445 \u0434\u043E Atmosphere.
tab2_Btn_ApplicationFont=\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0448\u0440\u0438\u0444\u0442 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438
btn_ResetToDefaults=C\u043A\u0438\u043D\u0443\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F
fontPreviewText=\u041F\u0440\u0438\u043A\u043B\u0430\u0434 \u0442\u0435\u043A\u0441\u0442\u0443
fontSize=\u0420\u043E\u0437\u043C\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0456\u0432:

View file

@ -5,6 +5,18 @@
-fx-background: #2d2d2d;
}
Text {
-fx-fill: white;
}
.bold-text{
-fx-font-weight: bold;
}
.italic-text{
-fx-font-style: italic;
}
.button, .buttonUp, .buttonStop, .buttonSelect{
-fx-background-color: #4f4f4f;
-fx-border-color: #4f4f4f;
@ -235,21 +247,31 @@
-fx-border-width: 2;
}
.list-cell, .list-cell:selected, .list-cell:filled:selected{
.list-cell:even,
.list-cell:even:selected,
.list-cell:even:filled:selected{
-fx-background-color: -fx-table-cell-border-color, #424242;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #6d8484;
}
.list-cell:odd, .list-cell:odd:selected, .list-cell:odd:filled:selected{
.list-cell:odd,
.list-cell:odd:selected,
.list-cell:odd:filled:selected{
-fx-background-color: -fx-table-cell-border-color, #4f4f4f;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #6d8484;
}
.list-cell .text, .list-cell:odd .text{
.list-cell .text,
.list-cell:odd .text,
.list-cell Text,
.list-cell:odd Text{
-fx-fill: #f7fafa;
}
.list-cell:filled:selected .text, .list-cell:odd:filled:selected .text{
.list-cell:filled:selected .text,
.list-cell:odd:filled:selected .text,
.list-cell:filled:selected Text,
.list-cell:odd:filled:selected Text{
-fx-fill: #08f3ff;
}
/* -========================== Context menu =====================- */
@ -445,6 +467,7 @@
}
.nxdt.label .text {
-fx-fill: #cb0010;
-fx-font-weight: bold;
}
.regionWindows {
@ -468,7 +491,39 @@
-fx-min-height: -size;
-fx-min-width: 24;
}
//
/********************* Spinner **************************/
.spinner{
-fx-background-color: #4f4f4f;
-fx-border-radius: 3;
-fx-border-width: 1;
-fx-border-color: #4f4f4f;
-fx-mark-color: #eea11e;
-fx-effect: none;
}
.spinner .increment-arrow-button,
.spinner .decrement-arrow-button {
-fx-background-radius: 0;
-fx-background-color: #4f4f4f;
}
.spinner .increment-arrow-button:hover .increment-arrow,
.spinner .decrement-arrow-button:hover .decrement-arrow {
-fx-background-color: #ff8000;
}
.spinner .increment-arrow-button:hover:pressed .increment-arrow,
.spinner .decrement-arrow-button:hover:pressed .decrement-arrow,
.spinner .increment-arrow-button:pressed .increment-arrow,
.spinner .decrement-arrow-button:pressed .decrement-arrow {
-fx-background-color: #71e016;
}
.spinner .increment-arrow-button .increment-arrow,
.spinner .decrement-arrow-button .decrement-arrow {
-fx-background-color: #eea11e;
}
//.lineGradient {
// -fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #00c8fc 30%, transparent 45%);
//}

View file

@ -5,6 +5,18 @@
-fx-background: #ebebeb;
}
Text {
-fx-fill: black;
}
.bold-text{
-fx-font-weight: bold;
}
.italic-text{
-fx-font-style: italic;
}
.button, .buttonUp, .buttonStop, .buttonSelect{
-fx-background-color: #fefefe;
-fx-background-insets: 0 0 0 0, 0, 1, 2;
@ -253,23 +265,35 @@
-fx-border-width: 2;
}
.list-cell, .list-cell:selected, .list-cell:filled:selected{
.list-cell:even{
-fx-background-color: -fx-table-cell-border-color, #ebfffe;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #b0b0b0;
}
.list-cell:odd, .list-cell:odd:selected, .list-cell:odd:filled:selected{
.list-cell:odd{
-fx-background-color: -fx-table-cell-border-color, #fefefe;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #b0b0b0;
}
.list-cell .text, .list-cell:odd .text{
.list-cell:even:selected,
.list-cell:even:filled:selected,
.list-cell:odd:selected,
.list-cell:odd:filled:selected{
-fx-background-color: -fx-table-cell-border-color, #e4ffde;
}
.list-cell .text,
.list-cell:odd .text,
.list-cell Text,
.list-cell:odd Text{
-fx-fill: #2c2c2c;
}
.list-cell:filled:selected .text, .list-cell:odd:filled:selected .text{
.list-cell:filled:selected .text,
.list-cell:odd:filled:selected .text,
.list-cell:filled:selected Text,
.list-cell:odd:filled:selected Text{
-fx-fill: #2c2c2c;
-fx-font-weight: bold
}
/* -========================= Separator ===================- */
.separator *.line {
@ -363,6 +387,7 @@
}
.nxdt.label .text {
-fx-fill: #9d010e;
-fx-font-weight: bold;
}
.regionWindows {
-fx-shape: "M3,12V6.75L9,5.43V11.91L3,12M20,3V11.75L10,11.9V5.21L20,3M3,13L9,13.09V19.9L3,18.75V13M20,13.25V22L10,20.09V13.1L20,13.25Z";