feat(qr): merge into interface
This commit is contained in:
parent
753970cfc1
commit
afe0320d6b
4 changed files with 58 additions and 72 deletions
|
@ -6,12 +6,16 @@ import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import xyz.ineanto.qodos.alert.AlertDisplay;
|
import xyz.ineanto.qodos.alert.AlertDisplay;
|
||||||
|
import xyz.ineanto.qodos.generator.QRCodeUtils;
|
||||||
|
import xyz.ineanto.qodos.generator.QRGenerator;
|
||||||
import xyz.ineanto.qodos.generator.QRURLGenerator;
|
import xyz.ineanto.qodos.generator.QRURLGenerator;
|
||||||
import xyz.ineanto.qodos.generator.QRVCardGenerator;
|
import xyz.ineanto.qodos.generator.QRVCardGenerator;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MainController {
|
public class MainController {
|
||||||
// NODES
|
// NODES
|
||||||
|
@ -75,9 +79,9 @@ public class MainController {
|
||||||
@FXML
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
exitButton.setOnAction(_ -> System.exit(0));
|
exitButton.setOnAction(_ -> System.exit(0));
|
||||||
|
aboutButton.setOnAction(_ -> AlertDisplay.info("Qodos",
|
||||||
aboutButton.setOnAction(_ -> AlertDisplay.info("Qodos", "Générateur de QR Code (URL, VCard)\n" +
|
"Générateur de QR Code (URL, VCard, Carte Bleue)\n" +
|
||||||
"Version 0.0.2"));
|
"Version 0.1.0"));
|
||||||
|
|
||||||
genderWomenButton.setToggleGroup(toggleGroup);
|
genderWomenButton.setToggleGroup(toggleGroup);
|
||||||
genderMenButton.setToggleGroup(toggleGroup);
|
genderMenButton.setToggleGroup(toggleGroup);
|
||||||
|
@ -93,11 +97,12 @@ public class MainController {
|
||||||
@FXML
|
@FXML
|
||||||
protected void onGenerateButtonClicked() {
|
protected void onGenerateButtonClicked() {
|
||||||
try {
|
try {
|
||||||
|
QRGenerator generator;
|
||||||
|
|
||||||
if (tabPane.getSelectionModel().getSelectedIndex() == 0) {
|
if (tabPane.getSelectionModel().getSelectedIndex() == 0) {
|
||||||
new QRURLGenerator(urlTextField.getText(), logoFile == null ? null : ImageIO.read(logoFile))
|
generator = new QRURLGenerator(urlTextField.getText(), logoFile == null ? null : ImageIO.read(logoFile));
|
||||||
.generate(rootPane);
|
|
||||||
} else {
|
} else {
|
||||||
new QRVCardGenerator(
|
generator = new QRVCardGenerator(
|
||||||
toggleGroup.getToggles().indexOf(toggleGroup.getSelectedToggle()),
|
toggleGroup.getToggles().indexOf(toggleGroup.getSelectedToggle()),
|
||||||
familyField.getText(),
|
familyField.getText(),
|
||||||
nameField.getText(),
|
nameField.getText(),
|
||||||
|
@ -106,8 +111,32 @@ public class MainController {
|
||||||
addressField.getText().isBlank() ? null : addressField.getText(),
|
addressField.getText().isBlank() ? null : addressField.getText(),
|
||||||
mailField.getText().isBlank() ? null : mailField.getText(),
|
mailField.getText().isBlank() ? null : mailField.getText(),
|
||||||
logoFile == null ? null : ImageIO.read(logoFile)
|
logoFile == null ? null : ImageIO.read(logoFile)
|
||||||
).generate(rootPane);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final BufferedImage image = generator.generate(rootPane);
|
||||||
|
if (image == null) { return; }
|
||||||
|
|
||||||
|
try {
|
||||||
|
final FileChooser chooser = new FileChooser();
|
||||||
|
chooser.setTitle("Sélectionner la destination...");
|
||||||
|
chooser.setInitialFileName("qr");
|
||||||
|
chooser.setSelectedExtensionFilter(
|
||||||
|
new FileChooser.ExtensionFilter("Image Files",
|
||||||
|
List.of("*.png", "*.jpeg", "*.jpg")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
final File file = chooser.showSaveDialog(rootPane.getScene().getWindow());
|
||||||
|
|
||||||
|
if (file != null) {
|
||||||
|
QRCodeUtils.writePNG(image, file.getPath());
|
||||||
|
} else {
|
||||||
|
AlertDisplay.error("Veuillez sélectionner un emplacement valide !");
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
AlertDisplay.error("Oops! Une erreur est survenue : " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
AlertDisplay.error("Impossible de générer le QR Code avec ce logo !");
|
AlertDisplay.error("Impossible de générer le QR Code avec ce logo !");
|
||||||
}
|
}
|
||||||
|
@ -126,8 +155,6 @@ public class MainController {
|
||||||
|
|
||||||
toggleGroup.getToggles().forEach(toggle -> toggle.setSelected(false));
|
toggleGroup.getToggles().forEach(toggle -> toggle.setSelected(false));
|
||||||
logoFile = null;
|
logoFile = null;
|
||||||
|
|
||||||
AlertDisplay.info("Information", "Champs et logo réinitialisés.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -142,11 +169,10 @@ public class MainController {
|
||||||
extension.equals("jpg") ||
|
extension.equals("jpg") ||
|
||||||
extension.equals("jpeg")) {
|
extension.equals("jpeg")) {
|
||||||
logoFile = file;
|
logoFile = file;
|
||||||
AlertDisplay.success("Logo défini !");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AlertDisplay.error("Hmm... ce fichier n'est pas valide (.png/.jpg/.jpeg uniquement acceptés).");
|
AlertDisplay.error("Ce type de fichier n'est pas valide (.png/.jpg/.jpeg uniquement acceptés).");
|
||||||
logoFile = null;
|
logoFile = null;
|
||||||
} else {
|
} else {
|
||||||
AlertDisplay.error("Veuillez sélectionner un fichier !");
|
AlertDisplay.error("Veuillez sélectionner un fichier !");
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
package xyz.ineanto.qodos.generator;
|
||||||
|
|
||||||
|
import javafx.scene.Node;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
public interface QRGenerator {
|
||||||
|
BufferedImage generate(Node node);
|
||||||
|
}
|
|
@ -2,34 +2,31 @@ package xyz.ineanto.qodos.generator;
|
||||||
|
|
||||||
import io.github.simonscholz.qrcode.*;
|
import io.github.simonscholz.qrcode.*;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.stage.FileChooser;
|
|
||||||
import xyz.ineanto.qodos.alert.AlertDisplay;
|
import xyz.ineanto.qodos.alert.AlertDisplay;
|
||||||
import xyz.ineanto.qodos.url.URLValidator;
|
import xyz.ineanto.qodos.url.URLValidator;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.nio.Buffer;
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public record QRURLGenerator(
|
public record QRURLGenerator(
|
||||||
String url,
|
String url,
|
||||||
BufferedImage logo
|
BufferedImage logo
|
||||||
) {
|
) implements QRGenerator {
|
||||||
public void generate(Node node) {
|
public BufferedImage generate(Node node) {
|
||||||
System.out.println("Generating QR Code for URL...");
|
System.out.println("Generating QR Code for URL...");
|
||||||
|
|
||||||
if (url.isBlank()) {
|
if (url.isBlank()) {
|
||||||
AlertDisplay.error("Veuillez spécifier une URL.");
|
AlertDisplay.error("Veuillez spécifier une URL.");
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!URLValidator.isValid(url)) {
|
if (!URLValidator.isValid(url)) {
|
||||||
AlertDisplay.error("URL invalide.");
|
AlertDisplay.error("URL invalide.");
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final QrCodeApi api = QrCodeFactory.createQrCodeApi();
|
final QrCodeApi api = QrCodeFactory.createQrCodeApi();
|
||||||
final BufferedImage image = api.createQrCodeImage(
|
return api.createQrCodeImage(
|
||||||
logo == null ?
|
logo == null ?
|
||||||
new QrCodeConfig(
|
new QrCodeConfig(
|
||||||
url,
|
url,
|
||||||
|
@ -40,26 +37,5 @@ public record QRURLGenerator(
|
||||||
new QrLogoConfig(logo)
|
new QrLogoConfig(logo)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
try {
|
|
||||||
final FileChooser chooser = new FileChooser();
|
|
||||||
chooser.setInitialFileName("qr");
|
|
||||||
chooser.setSelectedExtensionFilter(
|
|
||||||
new FileChooser.ExtensionFilter("Image Files",
|
|
||||||
List.of("*.png", "*.jpeg", "*.jpg")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
chooser.setTitle("Sélectionner la destination...");
|
|
||||||
final File file = chooser.showSaveDialog(node.getScene().getWindow());
|
|
||||||
|
|
||||||
if (file != null) {
|
|
||||||
QRCodeUtils.writePNG(image, file.getPath());
|
|
||||||
AlertDisplay.success("QR Code généré sous " + file.getAbsolutePath() + ".");
|
|
||||||
} else {
|
|
||||||
AlertDisplay.error("Veuillez sélectionner un emplacement valide !");
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,14 +3,10 @@ package xyz.ineanto.qodos.generator;
|
||||||
import io.github.simonscholz.qrcode.*;
|
import io.github.simonscholz.qrcode.*;
|
||||||
import io.github.simonscholz.qrcode.types.VCard;
|
import io.github.simonscholz.qrcode.types.VCard;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.stage.FileChooser;
|
|
||||||
import xyz.ineanto.qodos.alert.AlertDisplay;
|
import xyz.ineanto.qodos.alert.AlertDisplay;
|
||||||
import xyz.ineanto.qodos.url.URLValidator;
|
import xyz.ineanto.qodos.url.URLValidator;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public record QRVCardGenerator(
|
public record QRVCardGenerator(
|
||||||
int gender,
|
int gender,
|
||||||
|
@ -21,18 +17,18 @@ public record QRVCardGenerator(
|
||||||
String address,
|
String address,
|
||||||
String email,
|
String email,
|
||||||
BufferedImage logo
|
BufferedImage logo
|
||||||
) {
|
) implements QRGenerator {
|
||||||
public void generate(Node node) {
|
public BufferedImage generate(Node node) {
|
||||||
System.out.println("Generating QR Code for VCard...");
|
System.out.println("Generating QR Code for VCard...");
|
||||||
|
|
||||||
if (family.isBlank() || name.isBlank()) {
|
if (family.isBlank() || name.isBlank()) {
|
||||||
AlertDisplay.error("Veuillez spécifier un prénom et un nom.");
|
AlertDisplay.error("Veuillez spécifier un prénom et un nom.");
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gender == -1) {
|
if (gender == -1) {
|
||||||
AlertDisplay.error("Veuillez sélectionner un genre.");
|
AlertDisplay.error("Veuillez sélectionner un genre.");
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String[] genders = new String[]{"Mme.", "Mr.", ""};
|
final String[] genders = new String[]{"Mme.", "Mr.", ""};
|
||||||
|
@ -42,7 +38,7 @@ public record QRVCardGenerator(
|
||||||
if (url != null && !url.isBlank()) {
|
if (url != null && !url.isBlank()) {
|
||||||
if (!URLValidator.isValid(url)) {
|
if (!URLValidator.isValid(url)) {
|
||||||
AlertDisplay.error("URL invalide !");
|
AlertDisplay.error("URL invalide !");
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
vCard.website(url);
|
vCard.website(url);
|
||||||
|
@ -53,7 +49,7 @@ public record QRVCardGenerator(
|
||||||
if (email != null) { vCard.email(email); }
|
if (email != null) { vCard.email(email); }
|
||||||
|
|
||||||
final QrCodeApi api = QrCodeFactory.createQrCodeApi();
|
final QrCodeApi api = QrCodeFactory.createQrCodeApi();
|
||||||
final BufferedImage image = api.createQrCodeImage(
|
return api.createQrCodeImage(
|
||||||
logo == null ?
|
logo == null ?
|
||||||
new QrCodeConfig(
|
new QrCodeConfig(
|
||||||
vCard.toVCardQrCodeText(),
|
vCard.toVCardQrCodeText(),
|
||||||
|
@ -64,26 +60,5 @@ public record QRVCardGenerator(
|
||||||
new QrLogoConfig(logo)
|
new QrLogoConfig(logo)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
try {
|
|
||||||
final FileChooser chooser = new FileChooser();
|
|
||||||
chooser.setTitle("Sélectionner la destination...");
|
|
||||||
chooser.setInitialFileName("qr");
|
|
||||||
chooser.setSelectedExtensionFilter(
|
|
||||||
new FileChooser.ExtensionFilter("Image Files",
|
|
||||||
List.of("*.png", "*.jpeg", "*.jpg")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
final File file = chooser.showSaveDialog(node.getScene().getWindow());
|
|
||||||
|
|
||||||
if (file != null) {
|
|
||||||
QRCodeUtils.writePNG(image, file.getPath());
|
|
||||||
AlertDisplay.success("VCard générée sous " + file.getAbsolutePath() + ".");
|
|
||||||
} else {
|
|
||||||
AlertDisplay.error("Veuillez sélectionner un emplacement valide !");
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
AlertDisplay.error("Oops! Une erreur est survenue : " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue