001: package org.enhydra.jawe.base.panel.panels;
002:
003: import java.awt.Component;
004: import java.awt.Dimension;
005: import java.awt.event.ActionEvent;
006: import java.awt.event.ActionListener;
007: import java.util.List;
008:
009: import javax.swing.BorderFactory;
010: import javax.swing.Box;
011: import javax.swing.JScrollPane;
012:
013: import org.enhydra.jawe.base.panel.PanelContainer;
014: import org.enhydra.jawe.base.panel.PanelSettings;
015: import org.enhydra.shark.xpdl.XMLElement;
016: import org.enhydra.shark.xpdl.elements.DataTypes;
017:
018: /**
019: * Creates a combo panel and a panel which type is determined by the
020: * choosen element from combo panel.
021: * @author Sasa Bojanic
022: * @author Zoran Milakovic
023: */
024: public class XMLDataTypesPanel extends XMLBasicPanel {
025:
026: protected XMLPanel prevPanel = null;
027: protected XMLPanel emptyPanel;
028:
029: protected XMLComboPanel pCombo;
030:
031: public XMLDataTypesPanel(PanelContainer pc, DataTypes myOwner,
032: List choices, String title, boolean isEnabled) {
033:
034: super (pc, myOwner, title, true, false, true);
035:
036: PanelSettings ps = (PanelSettings) pc.getSettings();
037: boolean hasBorder = ps.doesXMLDataTypesPanelHasBorder();
038:
039: Dimension dim = new Dimension(ps.getXMLDataTypesPanelWidth(),
040: ps.getXMLDataTypesPanelHeight());
041:
042: final JScrollPane jsp = new JScrollPane();
043: jsp.setAlignmentX(Component.LEFT_ALIGNMENT);
044: jsp.setAlignmentY(Component.TOP_ALIGNMENT);
045:
046: pCombo = new XMLComboPanel(pc, myOwner, choices, false, false,
047: false, false, isEnabled);
048: add(pCombo);
049: jsp.setPreferredSize(new Dimension(dim));
050: jsp.setMinimumSize(new Dimension(dim));
051: if (hasBorder) {
052: jsp.setBorder(BorderFactory.createEtchedBorder());
053: } else {
054: jsp.setBorder(BorderFactory.createEmptyBorder());
055: }
056: add(jsp);
057:
058: emptyPanel = new XMLBasicPanel(pc, myOwner, "", true, false,
059: false);
060: jsp.setViewportView(emptyPanel);
061:
062: pCombo.getComboBox().addActionListener(new ActionListener() {
063: public void actionPerformed(ActionEvent ae) {
064: if (prevPanel != null) {
065: // prevPanel.setElements();
066: emptyPanel.remove(prevPanel);
067: }
068: XMLElement choosen = (XMLElement) pCombo
069: .getSelectedItem();
070: if (choosen != null) {
071: prevPanel = getPanelContainer().getPanelGenerator()
072: .getPanel(choosen);
073: emptyPanel.add(prevPanel);
074: }
075: jsp.paintAll(jsp.getGraphics());
076: }
077: });
078: pCombo.getComboBox().setSelectedItem(
079: new XMLElementView(pc, myOwner.getChoosen(),
080: XMLElementView.TONAME));
081:
082: add(Box.createVerticalGlue());
083:
084: }
085:
086: public boolean validateEntry() {
087: boolean isOK = pCombo.validateEntry();
088: for (int i = 0; i < emptyPanel.getComponentCount(); i++) {
089: XMLPanel p = (XMLPanel) emptyPanel.getComponent(i);
090: isOK = isOK && p.validateEntry();
091: }
092:
093: return isOK;
094: }
095:
096: public void setElements() {
097: if (!getOwner().isReadOnly()) {
098: pCombo.setElements();
099: for (int i = 0; i < emptyPanel.getComponentCount(); i++) {
100: XMLPanel p = (XMLPanel) emptyPanel.getComponent(i);
101: p.setElements();
102: }
103: }
104: }
105:
106: public Object getValue() {
107: return pCombo.getValue();
108: }
109:
110: public void cleanup() {
111: pCombo.cleanup();
112: for (int i = 0; i < emptyPanel.getComponentCount(); i++) {
113: XMLPanel p = (XMLPanel) emptyPanel.getComponent(i);
114: p.cleanup();
115: }
116: }
117:
118: }
|