package com.baselet.gui; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager.LookAndFeelInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.baselet.control.Main; import com.baselet.control.config.Config; import com.baselet.control.config.SharedConfig; import com.baselet.control.constants.Constants; import com.baselet.control.enums.Program; import com.baselet.control.enums.RuntimeType; import com.baselet.diagram.DiagramHandler; @SuppressWarnings("serial") public class OptionPanel extends JPanel implements ActionListener { private final Logger log = LoggerFactory.getLogger(OptionPanel.class); private static OptionPanel optionpanel; public static OptionPanel getInstance() { if (optionpanel == null) { optionpanel = new OptionPanel(); } return optionpanel; } private final JFrame optionframe; private final JCheckBox show_stickingpolygon = new JCheckBox(); private final JCheckBox show_grid = new JCheckBox(); private final JCheckBox enable_custom_elements = new JCheckBox(); private final JCheckBox checkForUpdates = new JCheckBox(); private final JCheckBox developerMode = new JCheckBox(); private final JTextField pdfFont = new HintTextField("Path to font e.g.; c:/windows/fonts/msgothic.ttc,1"); private final JTextField pdfFontBold = new HintTextField("same as above but used for bold text"); private final JTextField pdfFontItalic = new HintTextField("same as above but used for italic text"); private final JTextField pdfFontBoldItalic = new HintTextField("same as above but used for bold+italic text"); private final JComboBox ui_manager; private final JComboBox default_fontsize = new JComboBox(new Integer[] { 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }); private final JComboBox propertiesPanelFontsize = new JComboBox(new Integer[] { 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }); private final JComboBox default_fontfamily = new JComboBox(Constants.fontFamilyList.toArray(new String[Constants.fontFamilyList.size()])); private final Vector<String> uis_technicalNames = new Vector<String>(); private OptionPanel() { setLayout(new GridLayout(0, 2, 4, 4)); setAlignmentX(Component.LEFT_ALIGNMENT); Vector<String> uis_humanReadableNameVector = new Vector<String>(); LookAndFeelInfo[] lookAndFeelInfoArray = Constants.lookAndFeels.toArray(new LookAndFeelInfo[Constants.lookAndFeels.size()]); for (LookAndFeelInfo info : lookAndFeelInfoArray) { uis_technicalNames.add(info.getClassName()); uis_humanReadableNameVector.add(info.getName()); } ui_manager = new JComboBox(uis_humanReadableNameVector); this.add(new JLabel("Show sticking polygon")); this.add(show_stickingpolygon); this.add(new JLabel("Show grid")); this.add(show_grid); this.add(new JLabel("Enable Custom Elements")); this.add(enable_custom_elements); this.add(new JLabel("Check for " + Program.getInstance().getProgramName() + " updates")); this.add(checkForUpdates); if (Program.getInstance().getRuntimeType() == RuntimeType.STANDALONE) { this.add(new JLabel(Program.getInstance().getProgramName() + " style")); this.add(ui_manager); } this.add(new JLabel("Default fontsize")); this.add(default_fontsize); this.add(new JLabel("Properties panel fontsize (requires restart)")); this.add(propertiesPanelFontsize); this.add(new JLabel("Default fontfamily")); this.add(default_fontfamily); this.add(new JLabel("Developer Mode (show extended Element Info)")); this.add(developerMode); this.add(new JLabel("Optional font to embedd in PDF - normal text")); this.add(pdfFont); this.add(new JLabel("Optional font to embedd in PDF - bold text")); this.add(pdfFontBold); this.add(new JLabel("Optional font to embedd in PDF - italic text")); this.add(pdfFontItalic); this.add(new JLabel("Optional font to embedd in PDF - bold+italic")); this.add(pdfFontBoldItalic); JButton button_ok = new JButton("Ok"); button_ok.setActionCommand("Ok"); button_ok.addActionListener(this); JButton button_cancel = new JButton("Cancel"); button_cancel.setActionCommand("Cancel"); button_cancel.addActionListener(this); JPanel button_panel = new JPanel(); button_panel.setLayout(new BoxLayout(button_panel, BoxLayout.X_AXIS)); button_panel.add(Box.createHorizontalGlue()); button_panel.add(button_cancel); button_panel.add(Box.createRigidArea(new Dimension(20, 0))); button_panel.add(button_ok); button_panel.add(Box.createHorizontalGlue()); button_panel.setAlignmentX(Component.LEFT_ALIGNMENT); JPanel parent = new JPanel(); parent.setLayout(new BoxLayout(parent, BoxLayout.Y_AXIS)); parent.add(Box.createRigidArea(new Dimension(10, 10))); parent.add(this); parent.add(Box.createRigidArea(new Dimension(0, 20))); parent.add(button_panel); parent.add(Box.createRigidArea(new Dimension(0, 20))); optionframe = new JFrame(Program.getInstance().getProgramName() + " Options"); optionframe.setContentPane(parent); optionframe.pack(); // autoresize of the optionframe } public void showOptionPanel() { show_stickingpolygon.setSelected(SharedConfig.getInstance().isShow_stickingpolygon()); show_grid.setSelected(Config.getInstance().isShow_grid()); enable_custom_elements.setSelected(Config.getInstance().isEnable_custom_elements()); checkForUpdates.setSelected(Config.getInstance().isCheckForUpdates()); developerMode.setSelected(SharedConfig.getInstance().isDev_mode()); ui_manager.setSelectedIndex(uis_technicalNames.indexOf(Config.getInstance().getUiManager())); default_fontsize.setSelectedItem(Config.getInstance().getDefaultFontsize()); propertiesPanelFontsize.setSelectedItem(Config.getInstance().getPropertiesPanelFontsize()); default_fontfamily.setSelectedItem(Config.getInstance().getDefaultFontFamily()); pdfFont.setText(Config.getInstance().getPdfExportFont()); pdfFontBold.setText(Config.getInstance().getPdfExportFontBold()); pdfFontItalic.setText(Config.getInstance().getPdfExportFontItalic()); pdfFontBoldItalic.setText(Config.getInstance().getPdfExportFontBoldItalic()); javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { optionframe.setLocationRelativeTo(CurrentGui.getInstance().getGui().getMainFrame()); optionframe.setVisible(true); optionframe.toFront(); } }); } private void hideOptionPanel() { optionframe.setVisible(false); } // ok or cancel button pressed @Override public void actionPerformed(ActionEvent ae) { hideOptionPanel(); if (ae.getActionCommand().equals("Ok")) { SharedConfig.getInstance().setShow_stickingpolygon(show_stickingpolygon.isSelected()); Config.getInstance().setShow_grid(show_grid.isSelected()); Config.getInstance().setEnable_custom_elements(enable_custom_elements.isSelected()); Config.getInstance().setCheckForUpdates(checkForUpdates.isSelected()); SharedConfig.getInstance().setDev_mode(developerMode.isSelected()); Config.getInstance().setDefaultFontsize((Integer) default_fontsize.getSelectedItem()); Config.getInstance().setPdfExportFont(pdfFont.getText()); Config.getInstance().setPdfExportFontBold(pdfFontBold.getText()); Config.getInstance().setPdfExportFontItalic(pdfFontItalic.getText()); Config.getInstance().setPdfExportFontBoldItalic(pdfFontBoldItalic.getText()); String newui = uis_technicalNames.get(ui_manager.getSelectedIndex()); // only set look and feel if it has changed, because it messes up frame-size if (newui != null && !newui.equals(Config.getInstance().getUiManager())) { Config.getInstance().setUiManager(newui); CurrentGui.getInstance().getGui().setLookAndFeel(newui, optionframe); } // redraw every element to apply changes (like show stickingpolygon, fontsize, ...) for (DiagramHandler d : Main.getInstance().getDiagramsAndPalettes()) { d.getFontHandler().resetFontSize(); d.getDrawPanel().updateElements(); d.getDrawPanel().repaint(); } Config.getInstance().setPropertiesPanelFontsize((Integer) propertiesPanelFontsize.getSelectedItem()); String newfamily = (String) default_fontfamily.getSelectedItem(); Config.getInstance().setDefaultFontFamily(newfamily); } } }