#17 melkein valmis, vaatii vielä testaamista

This commit is contained in:
2026-05-13 01:56:21 +03:00
parent 71b06ff075
commit 9cc55be771
8 changed files with 136 additions and 30 deletions
+7 -4
View File
@@ -26,8 +26,8 @@ public class App extends Application {
TabPane root = new TabPane(); TabPane root = new TabPane();
root.setSide(Side.LEFT); root.setSide(Side.LEFT);
root.setTabMinWidth(50); root.setTabMinWidth(50);
root.setTabMinHeight(35); root.setTabMinHeight(Double.parseDouble(Main.properties.getProperty("buttonFonttiKoko"))*2);
root.setTabMaxHeight(50); root.setTabMaxHeight(Double.parseDouble(Main.properties.getProperty("buttonFonttiKoko"))*2);
Tab asiakasHallinta, kierrostenHallinta, kuljetusListat, kuljetetut, asetukset; Tab asiakasHallinta, kierrostenHallinta, kuljetusListat, kuljetetut, asetukset;
asiakasHallinta = new Tab("Asiakashallinta", new Asiakashallinta()); asiakasHallinta = new Tab("Asiakashallinta", new Asiakashallinta());
@@ -49,7 +49,10 @@ public class App extends Application {
for (Tab tab : root.getTabs()) { for (Tab tab : root.getTabs()) {
tab.setClosable(false); tab.setClosable(false);
tab.setStyle("-fx-font-size: 18px; -fx-font-weight: bold; -fx-font-family: Open Sans"); tab.setStyle(
"-fx-font-size: " + Main.properties.getProperty("buttonFonttiKoko") + "px;" +
" -fx-font-weight: bold;" +
" -fx-font-family: " + Main.properties.getProperty("buttonFontti"));
} }
Scene scene = new Scene(root); Scene scene = new Scene(root);
@@ -65,6 +68,6 @@ public class App extends Application {
primaryStage.show(); primaryStage.show();
primaryStage.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg")))); primaryStage.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg"))));
if (!Main.properties.getProperty("version").equals(Main.properties.getProperty("viimeisinVersio"))) new MuutosIlmoitus(); if (!Main.properties.getProperty("version").equals(Main.properties.getProperty("viimeisinVersio", "0.0.0"))) new MuutosIlmoitus();
} }
} }
+89 -9
View File
@@ -1,14 +1,27 @@
package fi.lpam.gui; package fi.lpam.gui;
import fi.lpam.Main;
import fi.lpam.gui.elementit.TabPohja; import fi.lpam.gui.elementit.TabPohja;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.Spinner;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import java.util.Properties;
public class Asetukset extends TabPohja { public class Asetukset extends TabPohja {
private static final Properties prop = Main.properties;
private static final ObservableList<String> järjestelmäFontit = FXCollections.observableArrayList(Font.getFamilies());
public Asetukset() { public Asetukset() {
BorderPane root = new BorderPane(); BorderPane root = new BorderPane();
root.setPadding(oletusInsets); root.setPadding(oletusInsets);
@@ -16,23 +29,90 @@ public class Asetukset extends TabPohja {
HBox yläpalkki = new HBox(); HBox yläpalkki = new HBox();
yläpalkki.setSpacing(5); yläpalkki.setSpacing(5);
yläpalkki.setAlignment(Pos.CENTER_RIGHT); yläpalkki.setAlignment(Pos.CENTER_RIGHT);
Button btnTallenna = new Button("Tallenna"); Button btnNollaa = new Button("Palauta oletukset");
btnTallenna.setFont(buttonFont); btnNollaa.setFont(buttonFont);
btnTallenna.setOnAction(e -> tallennaAsetukset()); btnNollaa.setOnAction(_ -> palautaOletukset());
yläpalkki.getChildren().add(btnTallenna); yläpalkki.getChildren().add(btnNollaa);
root.setTop(yläpalkki); root.setTop(yläpalkki);
root.setLeft(getFonttiAsetukset());
root.setCenter(new Label("Asetukset")); Label asetukset = new Label("Asetukset");
asetukset.setFont(tekstiFont);
root.setRight(asetukset);
this.getChildren().add(root); this.getChildren().add(root);
} }
private void tallennaAsetukset() { private Spinner<Integer> tekstiFonttiKoko, buttonFonttiKoko, tulostusFonttiKoko, insets;
throw new RuntimeException("Not implemented"); private ComboBox<String> tekstiFontti, buttonFontti;
private int minFonttiKoko = 8;
private int maxFonttiKoko = 30;
private int stepFontti = 1;
/**
* Luo paneelin fonttien asetusten säätämiseen
* @return paneeli
*/
private GridPane getFonttiAsetukset() {
GridPane root = new GridPane();
root.setAlignment(Pos.CENTER);
root.setHgap(10);
root.setVgap(10);
root.setBorder(oletusBorder);
root.setPadding(oletusInsets);
int row = 0;
Label otsikko = new Label("Fonttien asetukset");
otsikko.setFont(tekstiFont);
root.addRow(row++, otsikko);
tekstiFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Double.parseDouble(prop.getProperty("tekstiFonttiKoko")), stepFontti);
tekstiFonttiKoko.setEditable(true);
tekstiFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("tekstiFonttiKoko", String.valueOf(tekstiFonttiKoko.getValue())));
Label tekstinKoko = new Label("Tekstin koko");
tekstinKoko.setFont(tekstiFont);
root.addRow(row++, tekstinKoko, tekstiFonttiKoko);
tekstiFontti = new ComboBox<>();
tekstiFontti.setItems(järjestelmäFontit);
tekstiFontti.getSelectionModel().select(prop.getProperty("tekstiFontti"));
tekstiFontti.valueProperty().addListener((_) -> prop.setProperty("tekstiFontti", tekstiFontti.getValue()));
Label tekstinFontti = new Label("Tekstin fontti");
tekstinFontti.setFont(tekstiFont);
root.addRow(row++, tekstinFontti, tekstiFontti);
buttonFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Double.parseDouble(prop.getProperty("buttonFonttiKoko")), stepFontti);
buttonFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("buttonFonttiKoko", String.valueOf(buttonFonttiKoko.getValue())));
Label nappiTekstinKoko = new Label("Painikkeiden koko");
nappiTekstinKoko.setFont(tekstiFont);
root.addRow(row++, nappiTekstinKoko, buttonFonttiKoko);
buttonFontti = new ComboBox<>();
buttonFontti.setItems(järjestelmäFontit);
buttonFontti.getSelectionModel().select(prop.getProperty("buttonFontti"));
buttonFontti.valueProperty().addListener((_) -> prop.setProperty("buttonFontti", buttonFontti.getValue()));
Label napinFontti = new Label("Painikkeiden fontti");
napinFontti.setFont(tekstiFont);
root.addRow(row++, napinFontti, buttonFontti);
tulostusFonttiKoko = new Spinner<>(minFonttiKoko, maxFonttiKoko, Double.parseDouble(prop.getProperty("tulostusFonttiKoko")), stepFontti);
tulostusFonttiKoko.valueProperty().addListener((_) -> prop.setProperty("tulostusFonttiKoko", String.valueOf(tulostusFonttiKoko.getValue())));
Label tulostusFontinKoko = new Label("Tulostusfontin koko");
tulostusFontinKoko.setFont(tekstiFont);
root.addRow(row++, tulostusFontinKoko, tulostusFonttiKoko);
insets = new Spinner<>(0, 10, Double.parseDouble(prop.getProperty("insets")), 1);
insets.valueProperty().addListener((_) -> prop.setProperty("insets", String.valueOf(insets.getValue())));
Label insetsi = new Label("Yleinen fyllinki");
insetsi.setFont(tekstiFont);
root.addRow(row++, insetsi, insets);
return root;
} }
private void näytäAsetukset() { private void palautaOletukset() {
throw new RuntimeException("Not implemented");
} }
} }
@@ -37,6 +37,7 @@ public class Asiakashallinta extends TabPohja {
HBox yläpalkinNapit = new HBox(); HBox yläpalkinNapit = new HBox();
yläpalkinNapit.setSpacing(5); yläpalkinNapit.setSpacing(5);
yläpalkinNapit.setPadding(oletusInsets);
yläpalkki.setRight(yläpalkinNapit); yläpalkki.setRight(yläpalkinNapit);
Button avaaVersioloki = new Button("VERSIOLOKI"); Button avaaVersioloki = new Button("VERSIOLOKI");
+10 -6
View File
@@ -4,7 +4,7 @@ import com.dlsc.gemsfx.MultiColumnListView;
import fi.lpam.dataluokat.Asiakas; import fi.lpam.dataluokat.Asiakas;
import fi.lpam.dataluokat.Kierros; import fi.lpam.dataluokat.Kierros;
import fi.lpam.gui.elementit.AsiakasListCell; import fi.lpam.gui.elementit.AsiakasMCLVListCell;
import fi.lpam.gui.elementit.TabPohja; import fi.lpam.gui.elementit.TabPohja;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
@@ -30,7 +30,7 @@ public class Kierroshallinta extends TabPohja {
root.setPadding(oletusInsets); root.setPadding(oletusInsets);
root.setCenter(mclv); root.setCenter(mclv);
mclv.setCellFactory(_ -> new AsiakasListCell(mclv)); mclv.setCellFactory(_ -> new AsiakasMCLVListCell(mclv));
mclv.setPlaceholderFrom(new Asiakas("")); mclv.setPlaceholderFrom(new Asiakas(""));
mclv.setPlaceholderTo(new Asiakas("")); mclv.setPlaceholderTo(new Asiakas(""));
rakennaSarakkeet(); rakennaSarakkeet();
@@ -51,11 +51,11 @@ public class Kierroshallinta extends TabPohja {
int uudenKierroksenNumero = mclv.getColumns().size(); int uudenKierroksenNumero = mclv.getColumns().size();
lisaaKierros(new Kierros(uudenKierroksenNumero, FXCollections.observableArrayList(new ArrayList<>()))); lisaaKierros(new Kierros(uudenKierroksenNumero, FXCollections.observableArrayList(new ArrayList<>())));
}); });
lisääKierros.setFont(TabPohja.buttonFont); lisääKierros.setFont(buttonFont);
yläpalkinNapit.getChildren().add(lisääKierros); yläpalkinNapit.getChildren().add(lisääKierros);
Button tallenna = new Button("Tallenna kierrokset"); Button tallenna = new Button("Tallenna kierrokset");
tallenna.setFont(TabPohja.buttonFont); tallenna.setFont(buttonFont);
tallenna.setOnAction(_ ->tallennaKierrokset()); tallenna.setOnAction(_ ->tallennaKierrokset());
yläpalkinNapit.getChildren().add(tallenna); yläpalkinNapit.getChildren().add(tallenna);
@@ -84,7 +84,9 @@ public class Kierroshallinta extends TabPohja {
} }
} }
MultiColumnListView.ListViewColumn<Asiakas> colEiKierroksella = new MultiColumnListView.ListViewColumn<>(); MultiColumnListView.ListViewColumn<Asiakas> colEiKierroksella = new MultiColumnListView.ListViewColumn<>();
colEiKierroksella.setHeader(new Label("Ei vielä kierroksella")); Label labelEiKierroksella = new Label("Ei vielä kierroksella");
labelEiKierroksella.setFont(tekstiFont);
colEiKierroksella.setHeader(labelEiKierroksella);
colEiKierroksella.setItems(FXCollections.observableArrayList(eiKierroksella)); colEiKierroksella.setItems(FXCollections.observableArrayList(eiKierroksella));
mclv.getColumns().add(colEiKierroksella); mclv.getColumns().add(colEiKierroksella);
} }
@@ -92,7 +94,9 @@ public class Kierroshallinta extends TabPohja {
private void lisaaKierros(Kierros kierros) { private void lisaaKierros(Kierros kierros) {
if (kierros.getId() == -1) kierrokset.add(kierros); if (kierros.getId() == -1) kierrokset.add(kierros);
MultiColumnListView.ListViewColumn<Asiakas> uusiSarake = new MultiColumnListView.ListViewColumn<>(); MultiColumnListView.ListViewColumn<Asiakas> uusiSarake = new MultiColumnListView.ListViewColumn<>();
uusiSarake.setHeader(new Label("Kierros " + kierros.getKierrosNumero())); Label label = new Label("Kierros " + kierros.getKierrosNumero());
label.setFont(tekstiFont);
uusiSarake.setHeader(label);
uusiSarake.setItems(kierros.getAsiakkaat()); uusiSarake.setItems(kierros.getAsiakkaat());
mclv.getColumns().add(kierros.getKierrosNumero()-1, uusiSarake); mclv.getColumns().add(kierros.getKierrosNumero()-1, uusiSarake);
} }
@@ -12,13 +12,13 @@ import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
public class AsiakasListCell extends MultiColumnListView.ColumnListCell<Asiakas> { public class AsiakasMCLVListCell extends MultiColumnListView.ColumnListCell<Asiakas> {
private final StackPane wrapper; private final StackPane wrapper;
public AsiakasListCell(MultiColumnListView<Asiakas> multiColumnListView) { public AsiakasMCLVListCell(MultiColumnListView<Asiakas> multiColumnListView) {
super(multiColumnListView); super(multiColumnListView);
this.setMinHeight(60); this.setMinHeight(TabPohja.tekstiFont.getSize()*4);
this.setMaxHeight(60); this.setMaxHeight(TabPohja.tekstiFont.getSize()*4);
VBox content = new VBox(); VBox content = new VBox();
content.visibleProperty().bind(placeholder.not().and(emptyProperty().not())); content.visibleProperty().bind(placeholder.not().and(emptyProperty().not()));
@@ -1,22 +1,30 @@
package fi.lpam.gui.elementit; package fi.lpam.gui.elementit;
import fi.lpam.Main;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import javafx.scene.text.FontWeight; import javafx.scene.text.FontWeight;
import java.util.Properties;
/** /**
* Käyttöliittymän pohja * Käyttöliittymän pohja
*/ */
public class TabPohja extends StackPane { public class TabPohja extends StackPane {
public static final Insets oletusInsets = new Insets(5); public static Insets oletusInsets;
public static final String oletusStyle = "-fx-background-color: lightgray;"; public static Border oletusBorder = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT));
public static final Font buttonFont = Font.font("Open Sans", FontWeight.BOLD, 16); public static String oletusStyle;
public static final Font tekstiFont = Font.font("Open Sans", FontWeight.NORMAL, 16); public static Font buttonFont;
public static final Border oletusBorder = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT)); public static Font tekstiFont;
public TabPohja() { public TabPohja() {
Properties prop = Main.properties;
oletusInsets = new Insets(Double.parseDouble(prop.getProperty("insets")));
oletusStyle = "-fx-background-color: " + prop.getProperty("taustaVari") + ";";
buttonFont = Font.font(prop.getProperty("buttonFontti"), FontWeight.BOLD, Double.parseDouble(prop.getProperty("buttonFonttiKoko")));
tekstiFont = Font.font(prop.getProperty("tekstiFontti"), FontWeight.NORMAL, Double.parseDouble(prop.getProperty("tekstiFonttiKoko")));
this.setStyle(oletusStyle); this.setStyle(oletusStyle);
this.setPadding(oletusInsets); this.setPadding(oletusInsets);
this.setBorder(oletusBorder); this.setBorder(oletusBorder);
@@ -1,5 +1,6 @@
package fi.lpam.tulostajat; package fi.lpam.tulostajat;
import fi.lpam.Main;
import fi.lpam.gui.virheDialogit.SiirtoVirhe; import fi.lpam.gui.virheDialogit.SiirtoVirhe;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
@@ -17,7 +18,7 @@ import java.io.IOException;
public abstract class Tulostaja { public abstract class Tulostaja {
final PDRectangle SIVUKOKO = PDRectangle.A4; final PDRectangle SIVUKOKO = PDRectangle.A4;
final PDFont FONTTI = new PDType1Font(Standard14Fonts.FontName.HELVETICA); final PDFont FONTTI = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
final float FONTTI_KOKO = 13; final float FONTTI_KOKO = Float.parseFloat(Main.properties.getProperty("tulostusFonttiKoko"));
final float MARGINAALI = 50; final float MARGINAALI = 50;
final float RIVI_KORKEUS = FONTTI_KOKO * 1.2F; final float RIVI_KORKEUS = FONTTI_KOKO * 1.2F;
+10 -1
View File
@@ -1,2 +1,11 @@
version=${project.version} version=${project.version}
viimeisinVersio=0.0.0
buttonFonttiKoko=16
buttonFontti=Open Sans
tekstiFonttiKoko=16
tekstiFontti=Open Sans
tulostusFonttiKoko=13
taustaVari=lightgray
insets=5