package rdiger36.StudioBridge.gui; import java.awt.Color; import java.awt.Cursor; import java.awt.Desktop; import java.awt.Dialog.ModalExclusionType; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URI; import javax.swing.GroupLayout; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JSeparator; import javax.swing.LayoutStyle; import javax.swing.SwingConstants; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import rdiger36.StudioBridge.functions.Resize; /** * A dialog displaying information about the StudioBridge application. *

* This class creates a modal dialog that presents the developer's information, * GitHub link, and icon source. *

*/ public class ToolInfo { /** * Constructs a ToolInfo dialog. * * @param frmBambuConnect The parent JFrame for positioning the dialog. */ public ToolInfo(JFrame frmBambuConnect) { JDialog dialInfo = new JDialog(); dialInfo.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE); dialInfo.setModal(true); dialInfo.setAlwaysOnTop(true); dialInfo.setTitle("StudioBridge Info"); dialInfo.setResizable(false); dialInfo.setIconImage(Toolkit.getDefaultToolkit().getImage(ToolInfo.class.getResource("/icon.png"))); dialInfo.setBounds(100, 100, 386, 250); dialInfo.toFront(); dialInfo.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dialInfo.dispose(); } }); JEditorPane dtrpnDeveloper = new JEditorPane("text/html", "\r\n" + "Developer: Niklas (Rdiger-36)
\r\n" + "GitHub: StudioBridge Repo
\r\n" + "
\r\n" + "Icon Source: Freepik - Flaticon\r\n" + "
\r\n" + "
\r\n" + ""); dtrpnDeveloper.setEditable(false); dtrpnDeveloper.setOpaque(false); dtrpnDeveloper.setBorder(null); dtrpnDeveloper.setFont(new Font("Segoe UI", Font.PLAIN, 14)); dtrpnDeveloper.setCaretColor(dtrpnDeveloper.getBackground()); // Hyperlink listener for handling clicks on links in the JEditorPane dtrpnDeveloper.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) { dtrpnDeveloper.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) { dtrpnDeveloper.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } else if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { try { String clickedText = dtrpnDeveloper.getDocument().getText( e.getSourceElement().getStartOffset(), e.getSourceElement().getEndOffset() - e.getSourceElement().getStartOffset()); if (clickedText.equals("StudioBridge Repo")) { clickedText = "https://github.com/Rdiger-36/StudioBridge"; } else if (clickedText.equals("Freepik - Flaticon")) { clickedText = "https://www.flaticon.com/de/kostenlose-icons/3d-drucker"; } Desktop.getDesktop().browse(new URI(clickedText)); } catch (Exception e1) { e1.printStackTrace(); } } } }); JLabel lbueberschrift = new JLabel("StudioBridge v" + MainMenu.version.substring(0, 1) + "." + MainMenu.version.substring(1, 2) + "." + MainMenu.version.substring(2, 3)); lbueberschrift.setHorizontalAlignment(SwingConstants.CENTER); lbueberschrift.setIconTextGap(25); lbueberschrift.setForeground(new Color(229, 152, 67)); lbueberschrift.setFont(new Font("Segoe UI", Font.BOLD, 16)); ImageIcon icon = Resize.setNewImageIconSize(new ImageIcon(ToolInfo.class.getResource("/icon.png")), 64, 64); lbueberschrift.setIcon(icon); JSeparator separator = new JSeparator(); GroupLayout groupLayout = new GroupLayout(dialInfo.getContentPane()); groupLayout.setHorizontalGroup( groupLayout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addGroup(groupLayout.createSequentialGroup() .addContainerGap() .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(lbueberschrift, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE) .addComponent(separator, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE) .addGroup(groupLayout.createSequentialGroup() .addGap(10) .addComponent(dtrpnDeveloper, GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE))) .addContainerGap()) ); groupLayout.setVerticalGroup( groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addContainerGap() .addComponent(lbueberschrift, GroupLayout.PREFERRED_SIZE, 91, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(separator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(dtrpnDeveloper) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)) ); dialInfo.requestFocus(); dialInfo.getContentPane().setLayout(groupLayout); dialInfo.pack(); dialInfo.setLocationRelativeTo(frmBambuConnect); dialInfo.setVisible(true); } }