package edu.byu.cs.roots.opg.chart.preset.templates; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.JSpinner.NumberEditor; import edu.byu.cs.roots.opg.gui.tools.FloatEditor; import edu.byu.cs.roots.opg.gui.tools.FloatSpinnerModel; public class NewPresetChartOptionsStylingPanel extends JPanel{ private static final long serialVersionUID = 1L; public PresetChartOptionsPanel parent; private StylingBox selectedStyle; private boolean isAncestor; private int selectedGen; private boolean maskEvents = false; private BoxDimensionPanel boxOps = null; private static String boxString = "BOXPANELSTRING"; private FillerTextPanel textOps = null; private static String textString = "TEXTPANELSTRING"; private ArrowDimensionPanel arrowOps = null; private static String arrowString = "ARROWPANELSTRING"; private JLabel styleGen = null; private JComboBox editPanelChoice = null; private JPanel panelSwap; public NewPresetChartOptionsStylingPanel(PresetChartOptionsPanel parent){ this.parent = parent; initialize(); } public void initialize(){ this.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridwidth = 2; this.add(styleGen = new JLabel("Selected: None"),c); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 1; c.gridwidth = 2; this.add(getEditPanelChoice(), c); boxOps = new BoxDimensionPanel(); textOps = new FillerTextPanel(); arrowOps = new ArrowDimensionPanel(); c = new GridBagConstraints(); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; panelSwap = new JPanel(); panelSwap.setLayout(new CardLayout()); panelSwap.add(boxOps, boxString); panelSwap.add(textOps, textString); panelSwap.add(arrowOps, arrowString); CardLayout cl = (CardLayout)panelSwap.getLayout(); cl.show(panelSwap, boxString); this.add(panelSwap, c); } private void refreshBoxes(){ maskEvents = true; if(selectedStyle == null){ styleGen.setText("Selected: None"); }else{ if (isAncestor) styleGen.setText("Selected Ancestor Gen: " + selectedGen); else styleGen.setText("Selected Descendant Gen: " + selectedGen); } boxOps.refreshBoxes(); textOps.refreshBoxes(); arrowOps.refreshBoxes(); maskEvents = false; } private JComboBox getEditPanelChoice(){ if (editPanelChoice == null) { editPanelChoice = new JComboBox(); editPanelChoice.setToolTipText("The different Chart Style Panels"); editPanelChoice.addItem("Box Properties"); editPanelChoice.addItem("Text Properties"); editPanelChoice.addItem("Arrow Properties"); editPanelChoice.setSelectedIndex(0); editPanelChoice.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { updatePanel(editPanelChoice.getSelectedIndex()); } }); } return editPanelChoice; } public void updatePanel(int i){ CardLayout cl = (CardLayout)panelSwap.getLayout(); switch(i){ case 0: cl.show(panelSwap, boxString); break; case 1: cl.show(panelSwap, textString); break; case 2: cl.show(panelSwap, arrowString); break; } } public void setStyle(int gen, boolean isAncestor, StylingBoxScheme boxStyles){ if (boxStyles != null){ selectedStyle = isAncestor?boxStyles.getAncesStyle(gen):boxStyles.getDescStyle(gen); this.isAncestor = isAncestor; selectedGen = gen; } else selectedStyle = null; refreshBoxes(); } private interface StyleOptionsPanelBase { public void refreshBoxes(); } private class BoxDimensionPanel extends JPanel implements StyleOptionsPanelBase { private JSpinner widthSpinner = null; private JSpinner heightSpinner = null; private JSpinner relativeOffsetSpinner = null; private JSpinner rootBackOffsetSpinner = null; private JSpinner borderWidthSpinner = null; private JSpinner cornerCurveSpinner = null; private JSpinner intrudeWidthSpinner = null; private JSpinner paddingAmountSpinner = null; private JCheckBox intrusionCheckBox = null; public BoxDimensionPanel(){ this.setLayout(new GridBagLayout()); initialize(); } private void initialize(){ GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridwidth = 1; add(new JLabel("Box Width: "), c); c.gridx = 1; add(getWidthSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Box Height: "), c); c.gridx = 1; add(getHeightSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Box Padding: "), c); c.gridx = 1; add(getPaddingAmountSpinner(), c); c.gridx = 0; c.gridy++; c.gridwidth = 2; add(new JLabel("Intrusion:"), c); c.gridwidth = 1; c.gridy++; add(getIntrusionCheckBox(), c); c.gridx = 1; add(getIntrudeWidthSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Border Width: "), c); c.gridx = 1; add(getBorderWidthSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Corner Curve: "), c); c.gridx = 1; add(getCornerCurveSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Ancestor Offset: "), c); c.gridx = 1; add(getRelativeOffsetSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Root Back Offset: "), c); c.gridx = 1; add(getRootBackOffsetSpinner(), c); } JSpinner getWidthSpinner() { if (widthSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); widthSpinner = new JSpinner(); widthSpinner.setModel(spinnerModel); widthSpinner.setEditor(new FloatEditor(widthSpinner)); widthSpinner.setEnabled(true); widthSpinner.setToolTipText("The width of the box"); widthSpinner.setPreferredSize(new Dimension(60, 20)); widthSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.setPermWidth(new Double((Float) spinnerModel.getValue())); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return widthSpinner; } JSpinner getHeightSpinner() { if (heightSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); heightSpinner = new JSpinner(); heightSpinner.setModel(spinnerModel); heightSpinner.setEditor(new FloatEditor(heightSpinner)); heightSpinner.setEnabled(true); heightSpinner.setToolTipText("The height of the box"); heightSpinner.setPreferredSize(new Dimension(60, 20)); heightSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.boxHeight = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return heightSpinner; } JSpinner getRelativeOffsetSpinner() { if (relativeOffsetSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); relativeOffsetSpinner = new JSpinner(); relativeOffsetSpinner.setModel(spinnerModel); relativeOffsetSpinner.setEditor(new FloatEditor(relativeOffsetSpinner)); relativeOffsetSpinner.setEnabled(true); relativeOffsetSpinner.setToolTipText("The offset of the next box"); relativeOffsetSpinner.setPreferredSize(new Dimension(60, 20)); relativeOffsetSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.setPermOffset(new Double((Float) spinnerModel.getValue())); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return relativeOffsetSpinner; } JSpinner getRootBackOffsetSpinner() { if (rootBackOffsetSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); rootBackOffsetSpinner = new JSpinner(); rootBackOffsetSpinner.setModel(spinnerModel); rootBackOffsetSpinner.setEditor(new FloatEditor(rootBackOffsetSpinner)); rootBackOffsetSpinner.setEnabled(true); rootBackOffsetSpinner.setToolTipText("The offset of the previous box, when this is a root box"); rootBackOffsetSpinner.setPreferredSize(new Dimension(60, 20)); rootBackOffsetSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.rootBackOffset = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return rootBackOffsetSpinner; } JSpinner getBorderWidthSpinner() { if (borderWidthSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); spinnerModel.setStepsize(.1f); borderWidthSpinner = new JSpinner(); borderWidthSpinner.setModel(spinnerModel); borderWidthSpinner.setEditor(new FloatEditor(borderWidthSpinner)); borderWidthSpinner.setEnabled(true); borderWidthSpinner.setToolTipText("The width of the borderline"); borderWidthSpinner.setPreferredSize(new Dimension(60, 20)); borderWidthSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.borderlineWidth = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return borderWidthSpinner; } JSpinner getCornerCurveSpinner() { if (cornerCurveSpinner == null) { final SpinnerNumberModel spinnerModel = new SpinnerNumberModel(); spinnerModel.setMaximum(10000); spinnerModel.setMinimum(0); spinnerModel.setValue(0); cornerCurveSpinner = new JSpinner(); cornerCurveSpinner.setModel(spinnerModel); cornerCurveSpinner.setEditor(new NumberEditor(cornerCurveSpinner)); cornerCurveSpinner.setEnabled(true); cornerCurveSpinner.setToolTipText("The curve amount of the corner"); cornerCurveSpinner.setPreferredSize(new Dimension(60, 20)); cornerCurveSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.cornerCurve = (Integer)(spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return cornerCurveSpinner; } JSpinner getIntrudeWidthSpinner() { if (intrudeWidthSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); intrudeWidthSpinner = new JSpinner(); intrudeWidthSpinner.setModel(spinnerModel); intrudeWidthSpinner.setEditor(new FloatEditor(intrudeWidthSpinner)); intrudeWidthSpinner.setEnabled(true); intrudeWidthSpinner.setToolTipText("The box width if intruding"); intrudeWidthSpinner.setPreferredSize(new Dimension(60, 20)); intrudeWidthSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.intrudeWidth = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return intrudeWidthSpinner; } private JCheckBox getIntrusionCheckBox() { if (intrusionCheckBox == null) { intrusionCheckBox = new JCheckBox(); intrusionCheckBox.setText("Intrusion"); intrusionCheckBox.setSelected(true); intrusionCheckBox.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent e) { if (!maskEvents) { maskEvents = true; selectedStyle.isIntruding = intrusionCheckBox.isSelected(); getIntrudeWidthSpinner().setEnabled(selectedStyle.isIntruding); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return intrusionCheckBox; } JSpinner getPaddingAmountSpinner() { if (paddingAmountSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); paddingAmountSpinner = new JSpinner(); paddingAmountSpinner.setModel(spinnerModel); paddingAmountSpinner.setEditor(new FloatEditor(paddingAmountSpinner)); paddingAmountSpinner.setEnabled(true); paddingAmountSpinner.setToolTipText("The mandatory white space needed between this box"); paddingAmountSpinner.setPreferredSize(new Dimension(60, 20)); paddingAmountSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.paddingAmount = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return paddingAmountSpinner; } @Override public void refreshBoxes() { if(selectedStyle == null){ widthSpinner.getModel().setValue(0.0); widthSpinner.setEnabled(false); heightSpinner.getModel().setValue(0.0); heightSpinner.setEnabled(false); relativeOffsetSpinner.getModel().setValue(0.0); relativeOffsetSpinner.setEnabled(false); rootBackOffsetSpinner.getModel().setValue(0.0); rootBackOffsetSpinner.setEnabled(false); borderWidthSpinner.getModel().setValue(0.0); borderWidthSpinner.setEnabled(false); cornerCurveSpinner.getModel().setValue(0); cornerCurveSpinner.setEnabled(false); intrudeWidthSpinner.getModel().setValue(0.0); intrudeWidthSpinner.setEnabled(false); intrusionCheckBox.setSelected(false); intrusionCheckBox.setEnabled(false); paddingAmountSpinner.getModel().setValue(0.0); paddingAmountSpinner.setEnabled(false); }else{ widthSpinner.setEnabled(true); heightSpinner.setEnabled(true); relativeOffsetSpinner.setEnabled(true); rootBackOffsetSpinner.setEnabled(true); borderWidthSpinner.setEnabled(true); cornerCurveSpinner.setEnabled(true); paddingAmountSpinner.setEnabled(true); intrudeWidthSpinner.setEnabled(selectedStyle.isIntruding); intrusionCheckBox.setEnabled(true); widthSpinner.getModel().setValue(selectedStyle.getBoxWidth()); heightSpinner.getModel().setValue(selectedStyle.boxHeight); relativeOffsetSpinner.getModel().setValue(selectedStyle.getRelativeOffset()); rootBackOffsetSpinner.getModel().setValue(selectedStyle.rootBackOffset); borderWidthSpinner.getModel().setValue(selectedStyle.borderlineWidth); cornerCurveSpinner.getModel().setValue(selectedStyle.cornerCurve); intrudeWidthSpinner.getModel().setValue(selectedStyle.intrudeWidth); intrusionCheckBox.setSelected(selectedStyle.isIntruding); paddingAmountSpinner.getModel().setValue(selectedStyle.paddingAmount); } } } private class FillerTextPanel extends JPanel implements StyleOptionsPanelBase { private JSpinner fontSizeSpinner = null; private JSpinner nameFontSizeSpinner = null; private JSpinner textPositionsSpinner = null; private JSpinner textMarginSpinner = null; private JComboBox textPositionsComboBox = null; private JComboBox boxLayoutComboBox = null; private JComboBox weddingLayoutComboBox = null; private JComboBox textDirectionComboBox = null; private JComboBox weddingLocationComboBox = null; private JButton textPositionsButton = null; public FillerTextPanel(){ this.setLayout(new GridBagLayout()); initialize(); } private void initialize(){ GridBagConstraints c = new GridBagConstraints(); c.gridwidth = 1; c.gridy = 0; c.gridx = 0; add(new JLabel("Name Font Size: "), c); c.gridx = 1; add(getNameFontSizeSpinner(), c); c.gridy++; c.gridx = 0; add(new JLabel("Normal Font Size: "), c); c.gridx = 1; add(getFontSizeSpinner(), c); c.gridy++; c.gridx = 0; add(new JLabel("Text Margins: "), c); c.gridx = 1; add(getTextMarginSpinner(), c); c.gridy++; c.gridx = 0; add(new JLabel("Text Direction: "), c); c.gridx = 1; add(getTextDirectionComboBox(), c); c.gridwidth = 2; c.gridy++; c.gridx = 0; add(new JLabel("Text Style"), c); c.gridwidth = 2; c.gridy++; c.gridx = 0; add(getBoxLayoutComboBox(), c); c.gridwidth = 2; c.gridy++; c.gridx = 0; add(new JLabel("Text Positions"), c); c.gridwidth = 2; c.gridy++; c.gridx = 0; JPanel positions = new JPanel(); add(positions, c); positions.setLayout(new GridBagLayout()); GridBagConstraints tempC = new GridBagConstraints(); tempC.gridwidth = 1; tempC.gridx = 0; tempC.gridy = 0; positions.add(getTextPositionsSpinner(), tempC); tempC.gridx++; positions.add(getTextPositionsComboBox(), tempC); tempC.gridx++; positions.add(getTextPositionsButton(), tempC); c.gridwidth = 2; c.gridy++; c.gridx = 0; add(new JLabel("Wedding Layout: "), c); c.gridy++; c.gridx = 0; add(getWeddingLayoutComboBox(), c); c.gridwidth = 2; c.gridy++; c.gridx = 0; add(new JLabel("Wedding Location: "), c); c.gridy++; c.gridx = 0; add(getWeddingLocationComboBox(), c); } JSpinner getFontSizeSpinner() { if (fontSizeSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); fontSizeSpinner = new JSpinner(); fontSizeSpinner.setModel(spinnerModel); fontSizeSpinner.setEditor(new FloatEditor(fontSizeSpinner)); fontSizeSpinner.setEnabled(true); fontSizeSpinner.setToolTipText("The size of the normal font"); fontSizeSpinner.setPreferredSize(new Dimension(60, 20)); fontSizeSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.fontSize = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return fontSizeSpinner; } JSpinner getNameFontSizeSpinner() { if (nameFontSizeSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); nameFontSizeSpinner = new JSpinner(); nameFontSizeSpinner.setModel(spinnerModel); nameFontSizeSpinner.setEditor(new FloatEditor(nameFontSizeSpinner)); nameFontSizeSpinner.setEnabled(true); nameFontSizeSpinner.setToolTipText("The size of the name font"); nameFontSizeSpinner.setPreferredSize(new Dimension(60, 20)); nameFontSizeSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.fontNameSize = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return nameFontSizeSpinner; } private JComboBox getTextPositionsComboBox() { if (textPositionsComboBox == null) { textPositionsComboBox = new JComboBox(); textPositionsComboBox.setToolTipText("The list of text positions"); textPositionsComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(!maskEvents){ maskEvents = true; textPositionsSpinner.getModel().setValue( (Double)selectedStyle.textPositions.get( textPositionsComboBox.getSelectedIndex())); maskEvents = false; } } }); } return textPositionsComboBox; } JSpinner getTextPositionsSpinner() { if (textPositionsSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); textPositionsSpinner = new JSpinner(); textPositionsSpinner.setModel(spinnerModel); textPositionsSpinner.setEditor(new FloatEditor(textPositionsSpinner)); textPositionsSpinner.setEnabled(true); textPositionsSpinner.setToolTipText("The position of the texts"); textPositionsSpinner.setPreferredSize(new Dimension(60, 20)); textPositionsSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.textPositions.set(textPositionsComboBox.getSelectedIndex(), new Double((Float) spinnerModel.getValue())); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return textPositionsSpinner; } JButton getTextPositionsButton() { if (textPositionsButton == null) { textPositionsButton = new JButton("Add Line"); textPositionsButton.setEnabled(true); textPositionsButton.setToolTipText("Add a new position data type"); textPositionsButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(!maskEvents){ selectedStyle.textPositions.add(0.0); textPositionsComboBox.addItem(new String("Line " + selectedStyle.textPositions.size() + 1)); refreshBoxes(); } } }); } return textPositionsButton; } JSpinner getTextMarginSpinner() { if (textMarginSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); textMarginSpinner = new JSpinner(); textMarginSpinner.setModel(spinnerModel); textMarginSpinner.setEditor(new FloatEditor(textMarginSpinner)); textMarginSpinner.setEnabled(true); textMarginSpinner.setToolTipText("The horizontal margin of text in their boxes."); textMarginSpinner.setPreferredSize(new Dimension(60, 20)); textMarginSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.textMargin = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return textMarginSpinner; } private JComboBox getBoxLayoutComboBox() { if (boxLayoutComboBox == null) { boxLayoutComboBox = new JComboBox(); boxLayoutComboBox.setToolTipText("The layout of the text"); for (edu.byu.cs.roots.opg.chart.preset.templates.BoxLayoutParent layout : Layouts.textboxlayouts.list){ boxLayoutComboBox.addItem(layout); } boxLayoutComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(!maskEvents){ maskEvents = true; if (parent.options == null) System.out.println("BLARHG!"); selectedStyle.layout = (edu.byu.cs.roots.opg.chart.preset.templates.BoxLayoutParent)boxLayoutComboBox.getSelectedItem(); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return boxLayoutComboBox; } private JComboBox getWeddingLayoutComboBox() { if (weddingLayoutComboBox == null) { weddingLayoutComboBox = new JComboBox(); weddingLayoutComboBox.setToolTipText("The layout of the wedding text"); for (edu.byu.cs.roots.opg.chart.preset.templates.BoxLayoutParent layout : Layouts.textboxlayouts.weddinglist){ weddingLayoutComboBox.addItem(layout); } weddingLayoutComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(!maskEvents){ maskEvents = true; selectedStyle.weddingLayout = (edu.byu.cs.roots.opg.chart.preset.templates.BoxLayoutParent)weddingLayoutComboBox.getSelectedItem(); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return weddingLayoutComboBox; } private JComboBox getTextDirectionComboBox() { if (textDirectionComboBox == null) { textDirectionComboBox = new JComboBox(); textDirectionComboBox.setToolTipText("The direction of the text"); textDirectionComboBox.addItem(StylingBox.TextDirection.NORMAL); textDirectionComboBox.addItem(StylingBox.TextDirection.NINETY); textDirectionComboBox.addItem(StylingBox.TextDirection.ONE_EIGHTY); textDirectionComboBox.addItem(StylingBox.TextDirection.TWO_SEVENTY); textDirectionComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(!maskEvents){ maskEvents = true; selectedStyle.direction = (StylingBox.TextDirection)textDirectionComboBox.getSelectedItem(); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return textDirectionComboBox; } private JComboBox getWeddingLocationComboBox() { if (weddingLocationComboBox == null) { weddingLocationComboBox = new JComboBox(); weddingLocationComboBox.setToolTipText("Where to position the wedding information"); weddingLocationComboBox.addItem(StylingBox.WeddingPositions.BOTH_POSTFIX); weddingLocationComboBox.addItem(StylingBox.WeddingPositions.DIRECT_DESCENDANT_POSTFIX); weddingLocationComboBox.addItem(StylingBox.WeddingPositions.HUSBAND_POSTFIX); weddingLocationComboBox.addItem(StylingBox.WeddingPositions.WIFE_POSTFIX); weddingLocationComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(!maskEvents){ maskEvents = true; selectedStyle.weddingDisplayType = (StylingBox.WeddingPositions)weddingLocationComboBox.getSelectedItem(); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return weddingLocationComboBox; } @Override public void refreshBoxes() { if(selectedStyle == null){ fontSizeSpinner.getModel().setValue(0.0); fontSizeSpinner.setEnabled(false); nameFontSizeSpinner.getModel().setValue(0.0); nameFontSizeSpinner.setEnabled(false); textPositionsComboBox.setEnabled(false); textPositionsComboBox.setSelectedItem(null); textPositionsSpinner.setEnabled(false); textPositionsSpinner.setValue(0.0); textPositionsButton.setEnabled(false); textMarginSpinner.setEnabled(false); textMarginSpinner.setValue(0.0); boxLayoutComboBox.setEnabled(false); boxLayoutComboBox.setSelectedIndex(-1); weddingLayoutComboBox.setEnabled(false); weddingLayoutComboBox.setSelectedIndex(-1); weddingLocationComboBox.setEnabled(false); weddingLocationComboBox.setSelectedIndex(-1); textDirectionComboBox.setEnabled(false); textDirectionComboBox.setSelectedIndex(-1); }else{ maskEvents = true; fontSizeSpinner.setEnabled(true); nameFontSizeSpinner.setEnabled(true); textPositionsButton.setEnabled(true); textPositionsSpinner.setEnabled(true); textPositionsComboBox.setEnabled(true); textMarginSpinner.setEnabled(true); boxLayoutComboBox.setEnabled(true); weddingLayoutComboBox.setEnabled(true); textDirectionComboBox.setEnabled(true); weddingLocationComboBox.setEnabled(true); fontSizeSpinner.getModel().setValue(selectedStyle.fontSize); nameFontSizeSpinner.getModel().setValue(selectedStyle.fontNameSize); textPositionsComboBox.removeAllItems(); for (int i = 0; i < selectedStyle.textPositions.size(); i++){ textPositionsComboBox.addItem(new String("Line " + (i+1))); } textPositionsComboBox.setSelectedIndex(0); textPositionsSpinner.getModel().setValue(selectedStyle.textPositions.get(textPositionsComboBox.getSelectedIndex())); textMarginSpinner.getModel().setValue(selectedStyle.textMargin); boxLayoutComboBox.setSelectedItem(selectedStyle.layout); weddingLayoutComboBox.setSelectedItem(selectedStyle.weddingLayout); textDirectionComboBox.setSelectedItem(selectedStyle.direction); weddingLocationComboBox.setSelectedItem(selectedStyle.weddingDisplayType); maskEvents = false; } } } private class ArrowDimensionPanel extends JPanel implements StyleOptionsPanelBase { private JSpinner endLineArrowShaftLengthSpinner = null; private JSpinner endLineArrowShaftHeightSpinner = null; private JSpinner endLineArrowHeadLengthSpinner = null; private JSpinner endLineArrowHeadHeightSpinner = null; private JSpinner endLineArrowFontSpinner = null; public ArrowDimensionPanel(){ this.setLayout(new GridBagLayout()); initialize(); } private void initialize(){ GridBagConstraints c = new GridBagConstraints(); c.gridwidth = 1; c.gridx = 0; c.gridy = 0; add(new JLabel("Arrow Shaft Length: "),c); c.gridx = 1; add(getEndLineArrowShaftLengthSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Arrow Shaft Height: "), c); c.gridx = 1; add(getEndLineArrowShaftHeightSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Arrow Head Length: "), c); c.gridx = 1; add(getEndLineArrowHeadLengthSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Arrow Head Height: "), c); c.gridx = 1; add(getEndLineArrowHeadHeightSpinner(), c); c.gridx = 0; c.gridy++; add(new JLabel("Arrow Head Font Size: "), c); c.gridx = 1; add(getEndLineArrowFontSpinner(), c); } JSpinner getEndLineArrowShaftLengthSpinner() { if (endLineArrowShaftLengthSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); endLineArrowShaftLengthSpinner = new JSpinner(); endLineArrowShaftLengthSpinner.setModel(spinnerModel); endLineArrowShaftLengthSpinner.setEditor(new FloatEditor(endLineArrowShaftLengthSpinner)); endLineArrowShaftLengthSpinner.setEnabled(true); endLineArrowShaftLengthSpinner.setToolTipText("The length of the end of line arrow"); endLineArrowShaftLengthSpinner.setPreferredSize(new Dimension(60, 20)); endLineArrowShaftLengthSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.endLineArrowShaftLength = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return endLineArrowShaftLengthSpinner; } JSpinner getEndLineArrowShaftHeightSpinner() { if (endLineArrowShaftHeightSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); endLineArrowShaftHeightSpinner = new JSpinner(); endLineArrowShaftHeightSpinner.setModel(spinnerModel); endLineArrowShaftHeightSpinner.setEditor(new FloatEditor(endLineArrowShaftHeightSpinner)); endLineArrowShaftHeightSpinner.setEnabled(true); endLineArrowShaftHeightSpinner.setToolTipText("The height of the shaft of the end of line arrow"); endLineArrowShaftHeightSpinner.setPreferredSize(new Dimension(60, 20)); endLineArrowShaftHeightSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.endLineArrowShaftHeight = new Double((Float) spinnerModel.getValue()); parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return endLineArrowShaftHeightSpinner; } JSpinner getEndLineArrowFontSpinner() { if (endLineArrowFontSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); endLineArrowFontSpinner = new JSpinner(); endLineArrowFontSpinner.setModel(spinnerModel); endLineArrowFontSpinner.setEditor(new FloatEditor(endLineArrowFontSpinner)); endLineArrowFontSpinner.setEnabled(true); endLineArrowFontSpinner.setToolTipText("The size of the font of the end of line arrow"); endLineArrowFontSpinner.setPreferredSize(new Dimension(60, 20)); endLineArrowFontSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.endLineArrowFontSize = new Double((Float) spinnerModel.getValue());parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return endLineArrowFontSpinner; } JSpinner getEndLineArrowHeadLengthSpinner() { if (endLineArrowHeadLengthSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); endLineArrowHeadLengthSpinner = new JSpinner(); endLineArrowHeadLengthSpinner.setModel(spinnerModel); endLineArrowHeadLengthSpinner.setEditor(new FloatEditor(endLineArrowHeadLengthSpinner)); endLineArrowHeadLengthSpinner.setEnabled(true); endLineArrowHeadLengthSpinner.setToolTipText("The size of arrow head at the end of line arrow"); endLineArrowHeadLengthSpinner.setPreferredSize(new Dimension(60, 20)); endLineArrowHeadLengthSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.endLineArrowHeadLength = new Double((Float) spinnerModel.getValue());parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return endLineArrowHeadLengthSpinner; } JSpinner getEndLineArrowHeadHeightSpinner() { if (endLineArrowHeadHeightSpinner == null) { final FloatSpinnerModel spinnerModel = new FloatSpinnerModel(); spinnerModel.setMaxvalue(10000); spinnerModel.setMinvalue(0); spinnerModel.setValue(0f); endLineArrowHeadHeightSpinner = new JSpinner(); endLineArrowHeadHeightSpinner.setModel(spinnerModel); endLineArrowHeadHeightSpinner.setEditor(new FloatEditor(endLineArrowHeadHeightSpinner)); endLineArrowHeadHeightSpinner.setEnabled(true); endLineArrowHeadHeightSpinner.setToolTipText("The height of the arrow head at the end of line arrow"); endLineArrowHeadHeightSpinner.setPreferredSize(new Dimension(60, 20)); endLineArrowHeadHeightSpinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { if (maskEvents == false){ maskEvents = true; selectedStyle.endLineArrowHeadHeight = new Double((Float) spinnerModel.getValue());parent.options.setStyleBoxChanged(true); parent.parent.refresh(); maskEvents = false; } } }); } return endLineArrowHeadHeightSpinner; } @Override public void refreshBoxes() { if(selectedStyle == null){ endLineArrowShaftLengthSpinner.getModel().setValue(0.0); endLineArrowShaftLengthSpinner.setEnabled(false); endLineArrowShaftHeightSpinner.getModel().setValue(0.0); endLineArrowShaftHeightSpinner.setEnabled(false); endLineArrowFontSpinner.getModel().setValue(0.0); endLineArrowFontSpinner.setEnabled(false); endLineArrowHeadLengthSpinner.getModel().setValue(0.0); endLineArrowHeadLengthSpinner.setEnabled(false); endLineArrowHeadHeightSpinner.getModel().setValue(0.0); endLineArrowHeadHeightSpinner.setEnabled(false); }else{ endLineArrowShaftLengthSpinner.setEnabled(true); endLineArrowShaftHeightSpinner.setEnabled(true); endLineArrowFontSpinner.setEnabled(true); endLineArrowHeadLengthSpinner.setEnabled(true); endLineArrowHeadHeightSpinner.setEnabled(true); endLineArrowShaftLengthSpinner.getModel().setValue(selectedStyle.endLineArrowShaftLength); endLineArrowShaftHeightSpinner.getModel().setValue(selectedStyle.endLineArrowShaftHeight); endLineArrowFontSpinner.getModel().setValue(selectedStyle.endLineArrowFontSize); endLineArrowHeadLengthSpinner.getModel().setValue(selectedStyle.endLineArrowHeadLength); endLineArrowHeadHeightSpinner.getModel().setValue(selectedStyle.endLineArrowHeadHeight); } } } }