package org.enhydra.jawe.base.panel.panels; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingConstants; import org.enhydra.jawe.JaWE; import org.enhydra.jawe.ResourceManager; import org.enhydra.jawe.Settings; import org.enhydra.jawe.base.panel.PanelContainer; import org.enhydra.jawe.base.panel.PanelSettings; import org.enhydra.shark.xpdl.XMLElement; import org.enhydra.shark.xpdl.elements.Deadline; public class XMLMultiLineTextPanel extends XMLBasicPanel { public static int SIZE_SMALL = 0; public static int SIZE_MEDIUM = 1; public static int SIZE_LARGE = 2; public static int SIZE_EXTRA_LARGE = 3; public static Dimension textAreaDimensionSmall = new Dimension(200, 60); public static Dimension textAreaDimensionMedium = new Dimension(300, 90); public static Dimension textAreaDimensionLarge = new Dimension(400, 120); public static Dimension textAreaDimensionExtraLarge = new Dimension(400, 300); protected JTextArea jta; protected JLabel jl; protected boolean falseRequiredForCC = false; public XMLMultiLineTextPanel( PanelContainer pc, XMLElement myOwner, boolean isVertical, int type, boolean wrapLines, boolean isEnabled) { this(pc, myOwner, myOwner.toName(), myOwner.isRequired(), isVertical, type, wrapLines, isEnabled); } public XMLMultiLineTextPanel( PanelContainer pc, XMLElement myOwner, String labelKey, boolean isFalseRequired, boolean isVertical, int type, boolean wrapLines, boolean isEnabled) { super(pc, myOwner, "", false, false, true); this.falseRequiredForCC = isFalseRequired; boolean rightAllignment = false; Color bkgCol = new Color(245, 245, 245); if (pc != null) { Settings settings = pc.getSettings(); rightAllignment = settings.getSettingBoolean("XMLBasicPanel.RightAllignment"); if (settings instanceof PanelSettings) { bkgCol = ((PanelSettings) settings).getBackgroundColor(); } } JScrollPane jsp = new JScrollPane(); jsp.setAlignmentX(Component.LEFT_ALIGNMENT); jsp.setAlignmentY(Component.TOP_ALIGNMENT); String lbl = ""; if (pc != null) { lbl = pc.getSettings().getLanguageDependentString(labelKey + "Key") + ": "; } else { lbl = ResourceManager.getLanguageDependentString(labelKey + "Key") + ": "; } jl = new JLabel(lbl); jl.setAlignmentX(Component.LEFT_ALIGNMENT); jl.setAlignmentY(Component.TOP_ALIGNMENT); if (rightAllignment) { jl.setHorizontalAlignment(SwingConstants.RIGHT); } else { jl.setHorizontalAlignment(SwingConstants.LEFT); } jta = new JTextArea(); jta.setTabSize(4); jta.setText(myOwner.toValue()); jta.getCaret().setDot(0); jta.setLineWrap(wrapLines); jta.setWrapStyleWord(wrapLines); jta.setAlignmentX(Component.LEFT_ALIGNMENT); jta.setAlignmentY(Component.TOP_ALIGNMENT); //CUSTOM if (JaWE.BASIC_MODE && myOwner.toName().equalsIgnoreCase("DeadlineCondition")) { if (myOwner instanceof Deadline) { jta.setEnabled(true); } else { jta.setEnabled(false); } } else { jta.setEnabled(isEnabled); } //END CUSTOM jta.setBackground(bkgCol); final XMLPanel p = this; jta.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (getPanelContainer() == null) { return; } if (PanelUtilities.isModifyingEvent(e)) { getPanelContainer().panelChanged(p, e); } } }); jsp.setViewportView(jta); jsp.setAlignmentX(Component.LEFT_ALIGNMENT); jsp.setAlignmentY(Component.TOP_ALIGNMENT); Dimension dim = new Dimension(textAreaDimensionMedium); if (type == XMLMultiLineTextPanel.SIZE_SMALL) { dim = new Dimension(textAreaDimensionSmall); } else if (type == XMLMultiLineTextPanel.SIZE_MEDIUM) { dim = new Dimension(textAreaDimensionMedium); } else if (type == XMLMultiLineTextPanel.SIZE_LARGE) { dim = new Dimension(textAreaDimensionLarge); } else { dim = new Dimension(textAreaDimensionExtraLarge); } jsp.setPreferredSize(dim); JPanel mainPanel = this; if (isVertical) { mainPanel = new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); } if (rightAllignment && !isVertical) { mainPanel.add(Box.createHorizontalGlue()); } mainPanel.add(jl); if (!rightAllignment && !isVertical) { mainPanel.add(Box.createHorizontalGlue()); } mainPanel.add(jsp); if (!rightAllignment && !isVertical) { mainPanel.add(Box.createHorizontalGlue()); } if (isVertical) { add(mainPanel); } } public boolean validateEntry() { if (isEmpty() && getOwner().isRequired() && falseRequiredForCC && !getOwner().isReadOnly()) { //TODO CHECK THIS XMLBasicPanel.defaultErrorMessage(this.getWindow(), jl.getText()); jta.requestFocus(); return false; } return true; } public boolean isEmpty() { return getText().trim().equals(""); } public void setElements() { if (!getOwner().isReadOnly()) { myOwner.setValue(getText().trim()); } } public String getText() { return jta.getText(); } public Object getValue() { return getText(); } public void requestFocus() { jta.requestFocus(); } }