From 3cb41007eb2b13ece6085feb10d0159b228c9c8e Mon Sep 17 00:00:00 2001 From: Niklas <130296075+Rdiger-36@users.noreply.github.com> Date: Wed, 5 Feb 2025 00:13:40 +0100 Subject: [PATCH] Update Version 1.0.5 --- .../java/rdiger36/StudioBridge/MainMenu.java | 49 ++- .../StudioBridge/MultiPrinterSetup.java | 292 ++++++++++++++++++ .../rdiger36/StudioBridge/UDPPackage.java | 92 +++--- src/main/java/rdiger36/StudioBridge/UI.java | 17 +- .../rdiger36/StudioBridge/pom.properties | 4 +- .../rdiger36/StudioBridge/MainMenu$10.class | Bin 1375 -> 3886 bytes .../rdiger36/StudioBridge/MainMenu$11.class | Bin 0 -> 1375 bytes .../rdiger36/StudioBridge/MainMenu$5.class | Bin 894 -> 906 bytes .../rdiger36/StudioBridge/MainMenu$6.class | Bin 3524 -> 894 bytes .../rdiger36/StudioBridge/MainMenu$7.class | Bin 3095 -> 3691 bytes .../rdiger36/StudioBridge/MainMenu$8.class | Bin 2930 -> 3095 bytes .../rdiger36/StudioBridge/MainMenu$9.class | Bin 3838 -> 2927 bytes .../rdiger36/StudioBridge/MainMenu.class | Bin 13057 -> 13064 bytes .../StudioBridge/MultiPrinterSetup$1.class | Bin 0 -> 966 bytes .../StudioBridge/MultiPrinterSetup$2.class | Bin 0 -> 1147 bytes .../StudioBridge/MultiPrinterSetup.class | Bin 0 -> 13300 bytes .../rdiger36/StudioBridge/UDPPackage.class | Bin 5193 -> 5110 bytes target/classes/rdiger36/StudioBridge/UI.class | Bin 1123 -> 1096 bytes 18 files changed, 387 insertions(+), 67 deletions(-) create mode 100644 src/main/java/rdiger36/StudioBridge/MultiPrinterSetup.java create mode 100644 target/classes/rdiger36/StudioBridge/MainMenu$11.class create mode 100644 target/classes/rdiger36/StudioBridge/MultiPrinterSetup$1.class create mode 100644 target/classes/rdiger36/StudioBridge/MultiPrinterSetup$2.class create mode 100644 target/classes/rdiger36/StudioBridge/MultiPrinterSetup.class diff --git a/src/main/java/rdiger36/StudioBridge/MainMenu.java b/src/main/java/rdiger36/StudioBridge/MainMenu.java index 251c71a..1bec839 100644 --- a/src/main/java/rdiger36/StudioBridge/MainMenu.java +++ b/src/main/java/rdiger36/StudioBridge/MainMenu.java @@ -47,7 +47,7 @@ public class MainMenu { static String PrinterIP, PrinterName, PrinterSerial, PrinterType; // Application version - static String version = "102"; + static String version = "105"; // Set boolean for checking updates on startup static boolean checkForUpdate = true; @@ -245,6 +245,18 @@ public void actionPerformed(ActionEvent e) { } }); + JMenuItem mntmMultiPrinterSetup = new JMenuItem("Multiple Printer Setup"); + mnSettings.add(mntmMultiPrinterSetup); + + mntmMultiPrinterSetup.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + new MultiPrinterSetup(frmStudioBridge); + + } + }); + // Action listener for copyright button btnCopy.addActionListener(new ActionListener() { @Override @@ -284,7 +296,17 @@ public void actionPerformed(ActionEvent e) { } } - UDPPackage.send(frmStudioBridge, txtIP.getText(), txtSerial.getText(), getModel(cbxModel.getSelectedItem().toString()), txtName.getText()); + // Determine which UDP port (2021 or 1990) is in use, or set to 0 if none is available + int remoteUdpPort = UDPPackage.getAvailableUDPPort(); + + // Check if a valid port was assigned to remoteUdpPort + if (remoteUdpPort > 0) { + + UDPPackage.send(frmStudioBridge, txtIP.getText(), txtSerial.getText(), getModel(cbxModel.getSelectedItem().toString()), txtName.getText(), remoteUdpPort, false); + } else { + // Show a warning if Bambu Studio is not running + new DialogOneButton(frmStudioBridge, null, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Bambu Studio is not running!", "Ok").showDialog(); + } } }); @@ -326,7 +348,7 @@ public void actionPerformed(ActionEvent e) { String profile = cbxProfile.getSelectedItem().toString(); - if (!profile.equals("New profile") || !profile.equals("Import profile") || !profile.equals("---")) { + if (!profile.equals("New profile") && !profile.equals("Import profile") && !profile.equals("---")) { int response = new DialogTwoButtons(frmStudioBridge, null,new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Attention! Do you want to delete the profile: \"" + cbxProfile.getSelectedItem() + "\"?", "Yes", "No").showDialog(); @@ -370,15 +392,24 @@ public void actionPerformed(ActionEvent e) { setProfile(profilePath); cbxProfile.addItem(profileName); cbxProfile.setSelectedItem(profileName); + } else { + cbxProfile.setSelectedItem("New profile"); } } else if (cbxProfile.getSelectedItem().toString().equals("---")) { - if (!MainMenu.lastUsedProfile.equals("New profile") && !MainMenu.lastUsedProfile.equals("Import profile") && !MainMenu.lastUsedProfile.equals("---")) { - cbxProfile.setSelectedItem(MainMenu.lastUsedProfile); - } else { - cbxProfile.setSelectedItem("New profile"); - } + if (MainMenu.lastUsedProfile != null) { + + if (!MainMenu.lastUsedProfile.equals("New profile") && !MainMenu.lastUsedProfile.equals("Import profile") && !MainMenu.lastUsedProfile.equals("---")) { + cbxProfile.setSelectedItem(MainMenu.lastUsedProfile); + } else { + cbxProfile.setSelectedItem("New profile"); + } + + } else { + cbxProfile.setSelectedItem("New profile"); + } + } else { // Construct the path to the profile configuration file. @@ -465,7 +496,7 @@ private void getAllProfiles(JComboBox comboBox) { * @param model The model name as selected by the user. * @return The formatted model name. */ - private String getModel(String model) { + public static String getModel(String model) { switch (model) { case "A1": model = "N2S"; break; case "A1 Mini": model = "N1"; break; diff --git a/src/main/java/rdiger36/StudioBridge/MultiPrinterSetup.java b/src/main/java/rdiger36/StudioBridge/MultiPrinterSetup.java new file mode 100644 index 0000000..e0149d9 --- /dev/null +++ b/src/main/java/rdiger36/StudioBridge/MultiPrinterSetup.java @@ -0,0 +1,292 @@ +package rdiger36.StudioBridge; + +import java.awt.Dialog.ModalExclusionType; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.SwingUtilities; +import javax.swing.table.DefaultTableModel; +import net.miginfocom.swing.MigLayout; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JProgressBar; + +/** + * Class responsible for managing the setup of multiple printers within a GUI. + * Provides functionality to import printers, select/deselect them, and send configuration packages. + */ +public class MultiPrinterSetup { + private JTable table; + + private volatile boolean stopThread = false; + private volatile boolean printerSelected = false; + + private static ArrayList errors = new ArrayList<>(); + + /** + * Constructor that initializes the MultiPrinterSetup dialog. + * + * @param frmStudioBridge The parent JFrame for positioning the dialog. + */ + @SuppressWarnings("serial") + public MultiPrinterSetup(JFrame frmStudioBridge) { + JDialog dialInfo = new JDialog(); + dialInfo.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE); + dialInfo.setModal(true); + dialInfo.setAlwaysOnTop(true); + dialInfo.setTitle("Multiple Printer Setup"); + dialInfo.setIconImage(Toolkit.getDefaultToolkit().getImage(MultiPrinterSetup.class.getResource("/icon.png"))); + dialInfo.setBounds(100, 100, 602, 482); + dialInfo.toFront(); + dialInfo.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + stopThread = true; + dialInfo.dispose(); + } + }); + + JScrollPane scrollPane = new JScrollPane(); + + table = new JTable(); + table.setFocusTraversalKeysEnabled(false); + table.setFocusable(false); + table.setModel(new DefaultTableModel( + new Object[][] {}, + new String[] { "Name", "IP-Address", "Serial", "Model", "Send Package" } + ) { + Class[] columnTypes = new Class[] { + Object.class, Object.class, Object.class, Object.class, Boolean.class + }; + + public Class getColumnClass(int columnIndex) { + return columnTypes[columnIndex]; + } + }); + + // Set preferred column widths + table.getColumnModel().getColumn(0).setPreferredWidth(110); + table.getColumnModel().getColumn(1).setPreferredWidth(164); + table.getColumnModel().getColumn(2).setPreferredWidth(159); + table.getColumnModel().getColumn(3).setPreferredWidth(108); + table.getColumnModel().getColumn(4).setPreferredWidth(93); + scrollPane.setViewportView(table); + + dialInfo.getContentPane().setLayout(new MigLayout("", "[188.00,grow][223.00,grow][390.00][]", "[grow][bottom][]")); + dialInfo.getContentPane().add(scrollPane, "cell 0 0 4 1,grow"); + + importPrinters(table); + + // Adjust scroll pane size based on content + int maxVisibleRows = 10; + int rowHeight = table.getRowHeight(); + int tableHeaderHeight = table.getTableHeader().getPreferredSize().height; + int visibleRows = Math.min(table.getRowCount(), maxVisibleRows); + int preferredHeight = (rowHeight * visibleRows) + tableHeaderHeight + 5; + int totalColumnWidth = 0; + + for (int col = 0; col < table.getColumnCount(); col++) { + totalColumnWidth += table.getColumnModel().getColumn(col).getPreferredWidth(); + } + + int padding = 30; + scrollPane.setPreferredSize(new Dimension(totalColumnWidth + padding, preferredHeight)); + + JProgressBar progressBar = new JProgressBar(); + progressBar.setIndeterminate(true); + progressBar.setVisible(false); + progressBar.setStringPainted(true); + dialInfo.getContentPane().add(progressBar, "cell 1 1,grow"); + + JButton btnSendPrinters = new JButton("Send selected Printers"); + btnSendPrinters.addActionListener(e -> sendSelectedPrinters(frmStudioBridge, dialInfo, progressBar)); + dialInfo.getContentPane().add(btnSendPrinters, "cell 0 1,grow"); + + JButton btnSelAll = new JButton("Select All"); + btnSelAll.addActionListener(e -> setAllBooleans(true)); + dialInfo.getContentPane().add(btnSelAll, "cell 2 1,alignx right"); + + JButton btnDeSelAll = new JButton("Deselect All"); + btnDeSelAll.addActionListener(e -> setAllBooleans(false)); + dialInfo.getContentPane().add(btnDeSelAll, "cell 3 1,alignx left"); + + dialInfo.requestFocus(); + dialInfo.pack(); + dialInfo.setLocationRelativeTo(frmStudioBridge); + dialInfo.setVisible(true); + } + + /** + * Imports printer configurations from files and populates the JTable. + * + * @param table The JTable to populate with printer data. + */ + private void importPrinters(JTable table) { + DefaultTableModel model = (DefaultTableModel) table.getModel(); + File folder = new File(MainMenu.ProfilesDir); + + if (folder.isDirectory()) { + File[] files = folder.listFiles(); + + if (files != null) { + for (File file : files) { + if (file.isFile() && file.toString().endsWith("sbp")) { + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line, ipAddress = "", printerSN = "", printerType = "", printerName = ""; + + while ((line = br.readLine()) != null) { + String[] parts = line.split("=", 2); + if (parts.length == 2) { + switch (parts[0].trim()) { + case "IP-Address": ipAddress = parts[1].trim(); break; + case "PrinterSN": printerSN = parts[1].trim(); break; + case "PrinterType": printerType = getModel(parts[1].trim()); break; + case "PrinterName": printerName = parts[1].trim(); break; + } + } + } + model.addRow(new Object[]{printerName, ipAddress, printerSN, printerType, false}); + + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + } + } + + /** + * Selects or deselects all printers in the table. + * + * @param value true to select all, false to deselect all. + */ + private void setAllBooleans(boolean value) { + DefaultTableModel model = (DefaultTableModel) table.getModel(); + for (int i = 0; i < model.getRowCount(); i++) { + model.setValueAt(value, i, 4); + } + } + + /** + * Maps model codes to model names. + * + * @param model The model code as a string. + * @return The corresponding model name. + */ + private String getModel(String model) { + switch (model) { + case "0": return "A1"; + case "1": return "A1 Mini"; + case "2": return "P1P"; + case "3": return "P1S"; + case "4": return "X1"; + case "5": return "X1C"; + case "6": return "X1E"; + default: return model; + } + } + + /** + * Handles the process of sending selected printers' data. + * + * @param frmStudioBridge The parent JFrame. + * @param dialInfo The dialog interface. + * @param progressBar The progress bar to indicate sending status. + */ + private void sendSelectedPrinters(JFrame frmStudioBridge, JDialog dialInfo, JProgressBar progressBar) { + // This method handles the sending logic for selected printers. + + stopThread = false; + errors.clear(); + Thread sendingThread = new Thread(() -> { + progressBar.setString("Check Printers..."); + progressBar.setVisible(true); + + printerSelected = false; + + // Determine which UDP port (2021 or 1990) is in use, or set to 0 if none is available + int remoteUdpPort = UDPPackage.getAvailableUDPPort(); + + // Check if a valid port was assigned to remoteUdpPort + if (remoteUdpPort > 0) { + + DefaultTableModel model = (DefaultTableModel) table.getModel(); + int rowCount = model.getRowCount(); + + for (int i = 0; i < rowCount && !stopThread; i++) { + Boolean shouldSend = (Boolean) model.getValueAt(i, 4); + if (shouldSend != null && shouldSend) { + + printerSelected = true; + + String NAME = (String) model.getValueAt(i, 0); + String IP_ADRESS = (String) model.getValueAt(i, 1); + String SERIAL = (String) model.getValueAt(i, 2); + String MODEL = (String) model.getValueAt(i, 3); + + SwingUtilities.invokeLater(() -> progressBar.setString("Send Package for " + NAME)); + + if (!UDPPackage.send(frmStudioBridge, IP_ADRESS, SERIAL, MainMenu.getModel(MODEL), NAME, remoteUdpPort, true)) { + errors.add(NAME + " - " + IP_ADRESS + " - " + MODEL); + } + + try { + Thread.sleep(1000); // Simulierte Verzögerung + } catch (InterruptedException e) { + // Thread wurde unterbrochen, daher beenden wir den Prozess + Thread.currentThread().interrupt(); + break; + } + } + } + + SwingUtilities.invokeLater(() -> { + progressBar.setVisible(false); + if (!stopThread) { + dialInfo.setModal(false); + if (printerSelected) { + if (!errors.isEmpty()) { + String errorsOn = ""; + + for (String error : errors) { + errorsOn = errorsOn + error + "
"; + } + + new DialogOneButton(null, dialInfo, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Attention! Following printers could not send to Bambu Studio:
" + errorsOn + "", "Ok").showDialog(); + } else { + new DialogOneButton(null, dialInfo, new ImageIcon(MainMenu.class.getResource("/success.png")), "Packages sent to Bambu Studio", "Ok").showDialog(); + } + } else { + new DialogOneButton(null, dialInfo, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Attention! Please select at least one printer!", "Back").showDialog(); + } + dialInfo.setModal(true); + } + }); + + + + } else { + SwingUtilities.invokeLater(() -> { + progressBar.setVisible(false); + if (!stopThread) { + dialInfo.setModal(false); + new DialogOneButton(null, dialInfo, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Bambu Studio is not running!", "Ok").showDialog(); + dialInfo.setModal(true); + } + }); + } + }); + + sendingThread.start(); + } +} \ No newline at end of file diff --git a/src/main/java/rdiger36/StudioBridge/UDPPackage.java b/src/main/java/rdiger36/StudioBridge/UDPPackage.java index c7d9954..e029390 100644 --- a/src/main/java/rdiger36/StudioBridge/UDPPackage.java +++ b/src/main/java/rdiger36/StudioBridge/UDPPackage.java @@ -9,7 +9,6 @@ import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; - import javax.swing.ImageIcon; import javax.swing.JFrame; @@ -29,7 +28,7 @@ * */ public class UDPPackage { - + /** * Sends a specific UDP data packet to the local Bambu Studio instance. * @@ -39,63 +38,58 @@ public class UDPPackage { * @param PrinterModel The model of the 3D printer. * @param PrinterName The display name of the 3D printer. */ - public static void send(JFrame mainFrame, String printerIP, String PrinterSN, String PrinterModel, String PrinterName) { + public static boolean send(JFrame mainFrame, String printerIP, String PrinterSN, String PrinterModel, String PrinterName, int remoteUdpPort, boolean multiMode) { String localhost = "127.0.0.1"; // IP address of the local PC String PrinterSignal = "-44"; // WiFi signal quality String PrinterConnection = "lan"; // Connection mode (LAN) String PrinterBindCloud = "free"; // Cloud status (not connected) - - // Determine which UDP port (2021 or 1990) is in use, or set to 0 if none is available - int remoteUdpPort = getAvailableUDPPort(); - int sourceUdpPort = 0; // Source port (0 = system assigned) - // Check if a valid port was assigned to remoteUdpPort - if (remoteUdpPort > 0) { - try { - // Current date for HTTP headers - String date = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z").format(new Date()); - - // Create the message to be sent - String message = "HTTP/1.1 200 OK\r\n" + - "Server: Buildroot/2018.02-rc3 UPnP/1.0 ssdpd/1.8\r\n" + - "Date: " + date + "\r\n" + - "Location: " + printerIP + "\r\n" + - "ST: urn:bambulab-com:device:3dprinter:1\r\n" + - "EXT:\r\n" + - "USN: " + PrinterSN + "\r\n" + - "Cache-Control: max-age=1800\r\n" + - "DevModel.bambu.com: " + PrinterModel + "\r\n" + - "DevName.bambu.com: " + PrinterName + "\r\n" + - "DevSignal.bambu.com: " + PrinterSignal + "\r\n" + - "DevConnect.bambu.com: " + PrinterConnection + "\r\n" + - "DevBind.bambu.com: " + PrinterBindCloud + "\r\n\r\n"; + boolean success = false; + + try { + // Current date for HTTP headers + String date = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z").format(new Date()); - // Initialize the UDP client - DatagramSocket udpClient = new DatagramSocket(sourceUdpPort); - byte[] byteBuffer = message.getBytes(StandardCharsets.US_ASCII); - InetAddress remoteIp = InetAddress.getByName(localhost); + // Create the message to be sent + String message = "HTTP/1.1 200 OK\r\n" + + "Server: Buildroot/2018.02-rc3 UPnP/1.0 ssdpd/1.8\r\n" + + "Date: " + date + "\r\n" + + "Location: " + printerIP + "\r\n" + + "ST: urn:bambulab-com:device:3dprinter:1\r\n" + + "EXT:\r\n" + + "USN: " + PrinterSN + "\r\n" + + "Cache-Control: max-age=1800\r\n" + + "DevModel.bambu.com: " + PrinterModel + "\r\n" + + "DevName.bambu.com: " + PrinterName + "\r\n" + + "DevSignal.bambu.com: " + PrinterSignal + "\r\n" + + "DevConnect.bambu.com: " + PrinterConnection + "\r\n" + + "DevBind.bambu.com: " + PrinterBindCloud + "\r\n\r\n"; - // Send the UDP message - DatagramPacket packet = new DatagramPacket(byteBuffer, byteBuffer.length, remoteIp, remoteUdpPort); - udpClient.send(packet); + // Initialize the UDP client + DatagramSocket udpClient = new DatagramSocket(0); + byte[] byteBuffer = message.getBytes(StandardCharsets.US_ASCII); + InetAddress remoteIp = InetAddress.getByName(localhost); - // Confirmation of sent bytes - if (packet.getLength() != byteBuffer.length) { - new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Failed to send the package to Bambu Studio!", "Ok").showDialog(); - } else { - new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/success.png")), "Package sent successfully to Bambu Studio", "Ok").showDialog(); - } + // Send the UDP message + DatagramPacket packet = new DatagramPacket(byteBuffer, byteBuffer.length, remoteIp, remoteUdpPort); + udpClient.send(packet); - // Close the UDP client - udpClient.close(); - } catch (Exception e) { - // Show a warning that the package could not be sent to Bambu Studio - new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Failed to send the package to Bambu Studio!", "Ok").showDialog(); + // Confirmation of sent bytes + if (packet.getLength() != byteBuffer.length) { + if (!multiMode) new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Failed to send the package to Bambu Studio!", "Ok").showDialog(); + } else { + if (!multiMode) new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/success.png")), "Package sent successfully to Bambu Studio", "Ok").showDialog(); + success = true; } - } else { - // Show a warning if Bambu Studio is not running - new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Bambu Studio is not running!", "Ok").showDialog(); + + + // Close the UDP client + udpClient.close(); + } catch (Exception e) { + // Show a warning that the package could not be sent to Bambu Studio + if (!multiMode) new DialogOneButton(mainFrame, null, new ImageIcon(MainMenu.class.getResource("/achtung.png")), "Warning! Failed to send the package to Bambu Studio!", "Ok").showDialog(); } + return success; } /** @@ -104,7 +98,7 @@ public static void send(JFrame mainFrame, String printerIP, String PrinterSN, St * * @return the port number if available, or 0 if none are available. */ - private static int getAvailableUDPPort() { + static int getAvailableUDPPort() { int[] portsToCheck = {2021, 1990}; String os = System.getProperty("os.name").toLowerCase(); diff --git a/src/main/java/rdiger36/StudioBridge/UI.java b/src/main/java/rdiger36/StudioBridge/UI.java index 5451a3a..6acbae6 100644 --- a/src/main/java/rdiger36/StudioBridge/UI.java +++ b/src/main/java/rdiger36/StudioBridge/UI.java @@ -22,16 +22,19 @@ public static void changeLAF(boolean mode) { if (mode) { // Set the Look and Feel to a dark theme using FlatLaf UIManager.setLookAndFeel("com.formdev.flatlaf.FlatDarkLaf"); - // Configure additional UI properties for the dark theme - UIManager.put("TitlePane.menuBarEmbedded", true); - UIManager.put("TitlePane.unifiedBackground", true); - UIManager.put("MenuItem.selectionType", "underline"); - FlatLaf.setUseNativeWindowDecorations(true); // Use native decorations for windows - FlatLaf.updateUI(); // Refresh the UI to apply changes + } else { // Revert to the system's default Look and Feel - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + UIManager.setLookAndFeel("com.formdev.flatlaf.FlatLightLaf"); } + + // Configure additional UI properties for the dark theme + UIManager.put("TitlePane.menuBarEmbedded", true); + UIManager.put("TitlePane.unifiedBackground", true); + UIManager.put("MenuItem.selectionType", "underline"); + FlatLaf.setUseNativeWindowDecorations(true); // Use native decorations for windows + FlatLaf.updateUI(); // Refresh the UI to apply changes + } catch (Exception e1) { // Print stack trace if an exception occurs during Look and Feel change e1.printStackTrace(); diff --git a/target/classes/META-INF/maven/rdiger36/StudioBridge/pom.properties b/target/classes/META-INF/maven/rdiger36/StudioBridge/pom.properties index cfce2b6..c9281b4 100644 --- a/target/classes/META-INF/maven/rdiger36/StudioBridge/pom.properties +++ b/target/classes/META-INF/maven/rdiger36/StudioBridge/pom.properties @@ -1,7 +1,7 @@ #Generated by Maven Integration for Eclipse -#Tue Nov 26 18:42:10 CET 2024 +#Tue Feb 04 23:49:14 CET 2025 artifactId=StudioBridge groupId=rdiger36 -m2e.projectLocation=/Users/niklas/Downloads/StudioBridge-main +m2e.projectLocation=/Users/niklas/eclipse-workspace/Workspace/StudioBridge-main m2e.projectName=StudioBridge version=0.0.1-SNAPSHOT diff --git a/target/classes/rdiger36/StudioBridge/MainMenu$10.class b/target/classes/rdiger36/StudioBridge/MainMenu$10.class index 7b1f777d9bb370f5582c455a58a704ad73ea9351..b65ed7627c7f51735d31c9541d9ef215da3275c9 100644 GIT binary patch literal 3886 zcmcImYgAlU75)wk++jF0IB8-?37tloFvDZgq@@aJT0%%l3V}G32-e4C<^VSi_fGHJ z;Zgg3q-hhau@4QJ+Ny1}FI!RuY_wV*QR`cO`P;Sp>stQn>RQ#k@4W*vk&6D1#htV7 zzWeO6&)(mDyz~B>ZvnU#f7VbYaFv}hCX~IWJ)UrKDZ|=t8>tBu@7E2pUzxeaYj$Y} z2-F_er}cPRHz(o)W5-p}(NHO{&E@JdPFzhZ(}{N_9m6vFjI5(fWeZd~lSa02mq4WN zKOfU6aM`q;ZcL8N4%*hZkyZj9?qlt<@$8I2rylOMrpB!O)+~uuvFNz1Pm$E+rBVl( zOClRRk*VTK2}u8pek-NYz8+`R=^Yf31u5PZL9X*kGKX@ z?lnxq*(dOJ(|VUIJ!0iTrEKp8>+?Qf`>NrkD%R&mhXn%NqjI$y6Cbmo&oI@I+|-z| zhx9QHcDT<<>gi#fJWTICGr;g6ee3v@FiKI{pu6B3RQ9-KPpOo^l})Y-;+NvHhq2lj z9S&g^c5ApsVAGmNlh}i6N%4fD(5DIWD%I<#DZ*S+)YDv)51o9=c8TlpQGuXiB^;Yz zd#S9)?F^!W0N*>6v1})j@c^hr)yR#w?@J!8ZVoBBawb$hH3y0EhfJvgM{pumoGH#Bm#NZgEGfeKbc7LWn! zo#SpJuXN!Si9YlTXj$d3E`jF%dVh2{hyeneXMDj|k*q$gA}PbBpjh@CA97UU<4BO} z>5w7AVN8{{$@e@*y$iQW4C5GuAUkQz3}lpffD+qsqqPc|V}_ZsW;&yzykkUS6rU^w z1N(xaRRDuw#hF7_{uDl=;nP%Z-16x2B|gj0U^I1&Wvz71QG>cO$bB?8W^W+F2+RR zuK#{w2&eHB$0rfQS1Ap~3Ab%omC5A#C^7w|(3 zKM>el5}B3RL*lJMonszj`^OS*Gq$S+sb4zE?j2WZY(RmgRUqIK$61w|a7H}Ys!!6+>c?`CY+}1pX_H8?hk(N9@ zk;iQv0guqbsqlCnlN}WokRBny`mhMn7B)L7=uS(R*0)9z>sEn(Sk%9&|SkEa1dN+(5r9(m9VEOtQuExPnO*n@25gq*qtVEkzn{ zETZ>Z!0C|%d~q3PmhfcwE6X^W$2V4wq?d4te)9NMf2_qbw?2<=v$xA#Z%<;yH1hc;1cf&4fLQpdVeP zzKa(rzKxi}OL&>^&_M&oD|nS`J%q#f9!?>EW5j)ps0tA!3^1<@e4neK{gXCUY7iP0 zG<4Cjm;QlwvGrY4zlWac>Np8gJN7_CO`?+CfurQH`eyoRpeI7lc6u6@@dm%<@#cB_ zh#4;R6aMT{KPRfe3+;LQl3x5cpT~(+G&i_+d=Xp3OV}=6MvHg_?c!B*i`OtHUU&Vl t*)yWx2OPz(=~kShzaitw@LT+j)&NzH-{X%&g^AZg!``26sv{})?_X+=HM9T# literal 1375 zcmcgsT~8BH5IvWcE|goSpg^Tskg8=VEQsO<#snHjFfAd0)Wo-K_X5{!cgc1O{S!W$ z=x^}Bq#KP7{s4cJaqhN=s|0+qNjv9GXU^Q2IlJF~eEkOCA)aaIW0>(Qc__SC`q;)8aiYc9na9a80B@J>KmMG|W@q5GTU%jaSmK+|zZ-JobghknoRWGrzwDSjEt(WHIR_P3<4Ey_yu!uEtGO-dW;op-1{_4Qmj(tpA5 zv2aym(GuPJM}5EU`cLljOGd-5_Rm!r;w75GAZV@}{YWS@&Y@vIp-GNGBo(^JG1Ns_ z4vv)a-R2nXqG^s1q>_l?4o4cZ46%YDA1O;m?6ev+;q99>wUyDbTQ}{hNi(E#&ly*u zV3@sPawIXe2iiL+s${!O5&%Q45Vrl7K$V55P65FJ4Do|SSIEe9uQ|AR_OH!#PJA^@sv=K{!=%h&rhPvVuSzy diff --git a/target/classes/rdiger36/StudioBridge/MainMenu$11.class b/target/classes/rdiger36/StudioBridge/MainMenu$11.class new file mode 100644 index 0000000000000000000000000000000000000000..82fefa6161b5b5ac3007fa26ceca4e625d0febb0 GIT binary patch literal 1375 zcmcgsT~8BH5IvWcE|goSpg^SxNY%0w7DVv_V*(8%n3j-0YU10rdx2}VyJWkC{t17I z4<=ndc<=}Kql|O6MO-D+C!4f$?sVqNotd-y{m1z?0FUuPLm$JeXUQYst*#mSe$$ff zrYEfGi2YHr>0?^`Gz31d^yut}h3kn`q!L@2@&vOr@Ef^-EaYeUYbvNA> zh4OA_*|mhtFsP1x%iq~!n2aVJh?c)Cg>6w*svEX1JZVzeQ1`q`^{KCy(vkivh7b8( zjYUgz?jQC2y6Zo=FE1Gl@9m$jFvN>Ag+b6dixIsLlger8VY!vi`0AqR~z%6|-z=WQO2gvA|{s2>YCK2F{p3wqK z>z^_EF=WZnZ-Q9BKH)xLt}qICfQMum@|f?|IG{LHHLJIYy-nn8qHYs$n`qmZ{sR4y vGpSELP;zN*bY*f=Wps6LliL9%2n1nrXD|T(9Fv&= Y9Frmf)B*dG_X0u%{{RXB0h2xhK>7p~kN^Mx delta 47 zcmeBT|Hrmr598z{CUK6C{QMlxytMquPZ-sh7*i+nGks?KIhmQ+iS-Wy7sKDlUd#>v Dj&={- diff --git a/target/classes/rdiger36/StudioBridge/MainMenu$6.class b/target/classes/rdiger36/StudioBridge/MainMenu$6.class index 0b14775de1b05e9f134a163ad2ff78cfffe251af..8bb772ab2762b2b5df4b3bfde86671cc68c7a3b6 100644 GIT binary patch delta 367 zcmXYry-EX75QWd|uAA)5>Rw|uKW>c1zul~+6Gaf4RDy+tSXiqNkZfZk7UBb>SniVu zhJb>Vl~wEopTQRh&b_9%cg`?pzB3=u)D@r8*LMJWNOLjFzq`JB)F1TkjtK|JX)asp zo&q%?H||^zoL+Wy?ST;ZD4?j-q7M&3z{Zk~5-RG!8rlUk)sNi>&$I0IWN?!SL}=;p zDxsz(PN;spSnZ20JGa@{7J8Tv>dB@0aw_UcG#@P~bqFBKI)ab1_?6&u>O8AM?rp9? zx--H;x;uhQ$0$D=W5~bDM$jCpto0IGQA3?8p@HQYrpFiqenXVLK#s9u5NFT~p=VTt jAkT2B|K1r#pRnSlg#oD&^9gE literal 3524 zcmc&$-E$LF6#rfNv1z)cC56(KQqmf*4Q<1h^`ixB3zgQiMEZeL1h>g;vXJbSWYZRu zDvF{g;26sH9hIxE5aL3J$h_h@78A)m75Uf7-aj{fF9zcKyjz4sm4BrpPL?K zWUlxJR{cA=WlpY)jOw}Mhq5-0G8FcZQ6(T($dKR=s~Q<4aEjF?8Ku^0vkcire;f|nFm8goY2|fKsy7RcnZ%*cseIjEDjkR=p>x*Gf5>%=4`O_ z%1Wk=<}nEbp{@C|{ghCeli+mWj9N3YQ3>lwUWUIE>)+~>*fXiNt z$~cM_8JvlTK5Yp#AwA~A7>-MLX-QoA7xPfY%Q!*qB|i@FD3wnh>N9w3DWt5@O5Q8L zD>4*;K8K-ON;wduKn(I}_oP*?oZtvcm|&>OAMhSsn^40tB2Y=MgfhiPH1QuIA(@(Y zV-@aOv?AAm8RM3a|9M@@lU>5Gr)5MzzLJ!X?X|oqL=oc9WlZ7>IZ7CsG4kfhMlO$g z21);!*(Q7_*9>80c_J4hPE27&!Zg*$?3C{}aW3PmsH%mNloTcC!mBb~!+Cm415}#~ z9v6?PYdM+)>+3S!5Uiy(t9U>K{Y@Ef33{1Lw;o#Y z5X-p!%F3?)UmV?q4`f`yhm=`LFvt@L4?O_At9!b0u#y+7AK?=TAFtR{jT{IBC{k3c zWqgXyC~yg`(NlGDWhdp_xjd4qp@>M(y zf3Mjnl`Xy{Z32>n*@Idzswe0<9Na zgyvn|?I~1wTT-a@wx&?)ttm{Q&RbKILcO=9I0d)2MoOX4TjNN<>lmlI^x2)pu{2J)#!2KHE)%6uP-%E*RMV)X zQFj-iffoDTKZ)RON#hjF^(|sUV+pr*)MkncrZkc?3Dp;Hj#fg=1>1~G diff --git a/target/classes/rdiger36/StudioBridge/MainMenu$7.class b/target/classes/rdiger36/StudioBridge/MainMenu$7.class index 105f8407f03de3adb00519966d32ab5794dfed23..fab8cbb2b7ae1cd583b413663e6e29c7c59f19bc 100644 GIT binary patch literal 3691 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 Tb6P#v*o!l8fyoqs(Mr!hAl-b! diff --git a/target/classes/rdiger36/StudioBridge/MainMenu$9.class b/target/classes/rdiger36/StudioBridge/MainMenu$9.class index b6cb642cf23623fa0b285153b6cf2cfc50df7a75..10d83f079f8d372b8b6a04d4a002686e95b94350 100644 GIT binary patch literal 2927 zcmbtW>vK~@6#s1-ded|ZC4f+&5^BXZv<-@)Py}g9HQ1I)N+ngq+hm*GlH42a-SnY? z@AvyH_i72L!CRTkIRS{6Q+#pOi05ryA4MQQ`ig@a>Q^NHd2!Af6vm!uy{;QHzbB8`fO|1 zNDGFQ-75M-#2Ggz>+TLKGi0?}6Xd!~xenWz;({5Lm-=_vdPb0QrE-=NGTO(ms??=l zOvo-nq?6=URdDO2RSeaIr9kjC z>D-0l{@?su%BBGZUk7cV5)7AdXz(j*6-Olk%DSAR3S3!hII6K&Syyl@@vIO>jc3(! zEJYxIax`!RaTP;(qYA#H+b~6ME;A(Tetk$CVX)gu=;;BSK&0owq)(B8q5cxcHEf|% zS)#j)>J#>`WoJZ^VQr%eM`S+fb}0h3H4OyNf{2Dzh7}9ahhrnIp};92VgK->lysgibqEW9H4`n?H2e1Wg8n%|)9?zL$ z8*U;ViNiTPO<=4j?5a3-)1V(a=w3uKS<9BQLH*cCc(=5)Xy{;Azwou{B+^=`{&A~4 zC#7XN8g|XYBbw1uBAT#F4Y$xKFC1o81N?~66^Q7G5t%bntywb_z-{Q!&`m&I5QdJl z?l>I1*h4rFzI%mZL{J8`?B(_V(91^3x^O#>SGNf0ii z@?x~-jC4}ieh~R0J0*#ZlAm>`euoOBt58GpBFrW$VqR$k zwQ`dmgkgDHIDQcM%6hE;+F_{TM;Ru)isp23AuaLv&{iTOa}4mNJ#8=4b5S`9_^7Ma zjx-U0QYk_v5IBBc+#dk~&p};{iPAQI^We3R_Oj zOZAV(M5!JoRc&>KvH@7wuYMlmcpOg?@j!BBqqh|~4BoK2&Mlpsv)x>zzq`xk%lnDnRYJuhST?DPBMs-Y} zCaC(QJ5slFN9vXCNS)FhsZY8ibxHc8RYu<+mQj@DWDU?WML~0T!xUD8o2Rfc+%kpQ zaIJ3&tHZU6rcf8It(d~vaIH3lb>V4T`K=peJ^fZt6tFn1CYvi8&1ggujSOLI@N%#b z%HX59Kf>Q(Wgg9WT-(ze+?>aa$MI`(aJy^#)EvCoHO|eTJx-prYzCe2U{~rJxOy4G7{t@Ac>2Jg~CZ5|&eWXhqC z*-Zafzz(2_9mIO3Bf%0RmPs6A0w>roP7x~KGXp=eQT)OV;dhq7d6spN40~u5kR;sj zDNYcURrn2`LDGpOa1@{83(EB+CoqI D3}7A( literal 3838 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 delta 2752 zcmZuz3wTrY6+h?P+uSt0C2iA3(n6c24`@UBvQ(f$fdYbq4n-aXgoQSxfzs3@2yS%& z)(!U%Wp{Hc-@Y+G2smJr_}vy_5yUYE3Y#K|Fu{p9(6OKKM=9J@K96SU7)${`e2q9PVrssB-#R;ooS7}t5q~JE~zKo)zt+-u<;kX0g zUah~NT#ICyEG2U+a0xdnxJz4yOz0zH7>2)o`b!H=44hficACEkxaK?A8)s79gal#5JEoJ zn`f=8uwWk^7DpdJ5a~sMZcaUhkGHF$&;TA)@m2hl)|Nfa^lKGg!{2D#*;S)YsQ5Zm zBPdIK;YWO{!-;@+QiVh?3GTNlSO&N^RY(Gp1y12<72n1)T24+?>RA<3R^mDQy@KZv zhH^QXNweFVykVb;@8bn6lH zEMF@(g}V9?>@Dw+@?1b5xouCS?h=1XfM* zds_obEs#wOD$UojUGs_;i2y`W*#$`Dl;*(>OGTY2K{YeU(hp;O)ItQE<3K$ECoL_J*m<+D55=I zFv7G}rFG=f-Yf`82vc~^i?wy=8iw>e9wOv&Dc;6LUno>qW#JibQ0WQ!npR)<3?|0j zFSKK#hj%y|K)xF5FDjNJj+#(;vt?~)nCZECW z@I!+xmkq0|{8bxPX=W+s_)1>Xf5m^iv%J(HpJo?|e_(=b*!RAZ8A5~48C zp=2afjg=j;PR=f<5VXKX#X61X0@t7v;n1>8knX;1P1~zerB0(d6EGto!?dNpZ$H#^ zffsveOpI#XI*mIFZ|$dAohHy`nC3Rv$x*mJPE#8Yn`aNDS!pE^|9Xl4&RtVd|}T&b7l-Pulf5Yo8+ZpJtUY4{>!AqQhGl;Qy>!-Fu9 zk7&l1U={Og@d&KPS6~Akh0XXX?7-Jx7titoJPsf6*A=fRRP(Cw9B;2FT&4xQE&K%l z=V&2C9%bB0p@SCDV&2nN7Gx=8?S}#|GoA{ZVo4#d zfR>+7OZ~ji^8c9NCJe7-X!+*hJObXSe5%B`&zRf|Gjv*_Ev}dt8EHeOPR*NOK@`@p zkZTAJL}4Wh3>#bKM4^QRmm$4qgqkQ!V4>6yDxy$rqh-^h;IUCF zlVTgSG0C%0I}^K&f=p6v3n4> z%lIA~!*lQko`=(T!I-vq4Y;j4(>_D1c^s%cR+*p7ckG=l|GKuhGAq(?7@WLO&0UZn z@9rcV$`!BK(*Lovo0Axq6~9*uAKxJf_z9%rr;y2fKEKccTBk9?0s~MMp@6)Xlf7*hn(^7byYv8Aoz= z9P<=?=l{gecg4)^jyZi-%=fu_1N{G*=K`u*c4fX7(ZQDW#MfgFltbIa{#c_8DLi42Cq zJ;=jMzD;D5iKH*Gd}MFv&=^{u_?WwVlDT3mqRf3SqadE_1bjq}43+FiruHL(_2$Ig zW-!J)v;)b*{pe%Nu$6msZ1rbACv>!zx>4iK^MM_DNeAMP8%ToFRRzs<)ZfI6fqxXws zJ)^VoGo9`U3}^iWb>|e;m%?$0)(SZSo48D?QP?Jy(WDb4gOwSKM=%Q5a=yaQzT+zG z^>0}Hhf^=YJfRe}VB%?k*PQ;D;n8o{xJQU(+$XFO*3hP1Bh5SLlBJSX+0gg{+LZ6l literal 0 HcmV?d00001 diff --git a/target/classes/rdiger36/StudioBridge/MultiPrinterSetup$2.class b/target/classes/rdiger36/StudioBridge/MultiPrinterSetup$2.class new file mode 100644 index 0000000000000000000000000000000000000000..196561530c27ed898370abae9ce23890f1df198b GIT binary patch literal 1147 zcma)5TTc@~6#k}Ny7VHJ0xlG2q^_7p4`2ec|qSqCenf zCv*bw&J!}=p2dUkv{=`nF+4i4KiKD{e4D7DM&0YT9rs#d8blg677}7o035Rn3 z;*|RgxudqqG98<8nvU)J4Thv82GR~fk25S?3)nQaC?*jc3%|HQAlp--R7smcieQVu zDover^f!RF-4osm8WT+A0|u>0S4@K8W(G;5Qix+dgEVpsMrrCgIu@zIe_hd$XUJX| zM?iGkVwk_O?zpbQZK)vK&R_-!D%2K|zX^w3?nP6embcxW?Ht&iP*WKjHPudr%Cv1M z)~TK8qAgu{F?2(p2C+ElhW`XTWmuTdI)=Fc51J7zA_`EgQmZ_H7=;Pu5go>?YRNu7 zXJ9Rcl;wtAkM9YGSd_oU*>%-5YR^mAb6lSo+u^~n+t*QLSeuejYPRbPg;E6dH}hZb zdG?Su6d^J#DY+NjiThZkvBc?l#ptKmkful4Y&NUtGWMjAA=0NGPG_3f3i-KSgC$NamvCZNk{3{VuB5#vQV+Mj&dqi+iL| zdE6(P0#(BUJR~nYWfaLWg7-KA(;!{N=*DL(uhc)%HU@Q!x(DzoDxDvN{3)&D3D(FT WM=6Rg!=P0|g^n_5mm;6artcS?svW=p literal 0 HcmV?d00001 diff --git a/target/classes/rdiger36/StudioBridge/MultiPrinterSetup.class b/target/classes/rdiger36/StudioBridge/MultiPrinterSetup.class new file mode 100644 index 0000000000000000000000000000000000000000..4366ed03c8aa34b86ebe3e79ff20b0c03ead6bb0 GIT binary patch literal 13300 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 literal 0 HcmV?d00001 diff --git a/target/classes/rdiger36/StudioBridge/UDPPackage.class b/target/classes/rdiger36/StudioBridge/UDPPackage.class index 16646ac143be9386325ab8f8f43c9ada24fc3ea9..a321c83ec2adbf30ec34012e59fb4cbac3fee6db 100644 GIT binary patch delta 2764 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 Zi2M#}UuGW9r|B_eRMO~#=mC&}{2uRCo1Opw diff --git a/target/classes/rdiger36/StudioBridge/UI.class b/target/classes/rdiger36/StudioBridge/UI.class index b5b8ae4fe78249fafaec6c81027af14749011d36..26c6a3c8fe14b35f08b5d80499817f14b3e5e000 100644 GIT binary patch delta 418 zcmYLFO)mps5PsgZ(d~8*tPt9wKKh|$tF>4kMF@$c2NB}@>b_em+g)k4;^s%}N#gF@ zi!=@rH}NYZj{buf4qWD$=gG`GGxMRmD(c(U(=z}QJ6*NNc%~7w3@2!}Y;kQk9uGb4 z7zc!Pw|NoPxuYP(Fm~dGo;c#ZFj~Uz?DF=0>s;8juvLs>GKL9;!ApM4%O3Ze<=r6g z1ot&$Fck$X-#?>a7TM^Y?Xi6H&N6H+Vp3|j#1QZJwrG27j~ctj4gyF!b-Yf71|Gp&O8+6@5xCx3%OQ68b<7`U4bwlu%E~ zJ*0b>KGSo5SwS!UD8%P`s8DIW^a!&H_WPh!vg(6Mc@-MP5y%)t97$qn4AOBaOd*SD xT6_i-y3j-p77DO7QAFamMWR^48rBId8nA&)8ebz8hpfpWhGm(AEfOSbe*?ZORPX=* delta 453 zcmYLF%TB^j6r5WKl-fish7d#n6?rN3g@Oo*Mk5KjK||uMksE^6mOwGO@*^4-et~N@ z+PHAx%J>Ox{SV{8g>2@Yx#u-!KE!WP`uur)1F(kOCn?SBGZv0aV#S^9a1kj6 zU*Bl*uHH7dgbWtFSg;#Hlx6K3VeT%2B^k@`Fo^w5Q?vMKRe~R@GRev@OtrXGzwOcB znrU8EjOGF7`kt=!ddJ!oXP8K)YD1}YtJ^kOMF|@yc#&uD4|DrB=e#q}C1Z22ZnQ(S zmi;BX+?7KQ$SPwF6eZ|(5ONT0D0BbOypkOJ5KlW$A2IG=g=!xm)-umne*z;DbI8+H z7bJ>TAQJ}QMi4%P=p3>YVZ;ejWa9!NP!Xe^Srib@ql5%T{#pdWGK$!uw?G3*#2B`T RiEychUTnCD?+_PI`32&+UN`^%