/* * @(#)CLCEditor.java * * $Log: V:/PvcsSwf/Architektur_Implementation10/src/swf/framework/common/user/ui/columnLayout/CLCEditor.java_v $ * * Rev 1.0 Nov 06 2000 15:43:14 RE05529 * Initial revision. * * Rev 1.3 Oct 05 2000 16:36:20 RE03277 * ATL: noch stabiler gemacht * * Rev 1.2 Oct 04 2000 20:52:54 RE03277 * ATL: kleiner Bugfix * * Rev 1.1 Oct 04 2000 10:53:38 RE03277 * ATL: ColumnLayout beanifiziert * * Rev 1.0 Sep 20 2000 12:36:10 RE03592 * Initial revision. * */ package swf.framework.common.user.ui.columnLayout; import java.beans.*; public class CLCEditor implements PropertyEditor, Runnable { private PropertyChangeListener listener; private CLC value = new CLC(); // dargestellte CLC, niemals null private Object lastvalue; // zuletzt gesetzer Wert private CLC editedvalue; // editierter Wert private CustomEditor editor; public CLCEditor() { editor = new CustomEditor(); updateEditor(); } private void updateEditor() { if (javax.swing.SwingUtilities.isEventDispatchThread()) editor.updateGUI(); else javax.swing.SwingUtilities.invokeLater( this ); } public void run() { editor.updateGUI(); } public boolean supportsCustomEditor() { return true; } public java.awt.Component getCustomEditor() { return editor; } public void setValue(Object newvalue) { if (newvalue==lastvalue) return; lastvalue = newvalue; if (!(newvalue instanceof CLC)) newvalue = new CLC(); value = (CLC)newvalue; updateEditor(); fire(); } public Object getValue() { if (editedvalue!=null) return editedvalue; return value; } public boolean isPaintable() { return false; } public void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box) { } public String getAsText() { if (value == null) return null; return value.toString(); } public String getJavaInitializationString() { if (value == null) return null; StringBuffer buffer = new StringBuffer("new CLC"); boolean isclc2 = value instanceof CLC2; if (isclc2) buffer.append('2'); buffer.append('('); buffer.append(ColumnLayout.classname); buffer.append('.'); buffer.append(ColumnLayout.getColumn(value.startcolumn)); buffer.append(','); buffer.append(value.row); buffer.append(','); buffer.append(ColumnLayout.classname); buffer.append('.'); if (isclc2) buffer.append(ColumnLayout.getColumn(value.endcolumn)); else buffer.append(ColumnLayout.getColumnWidth(value.startcolumn, value.endcolumn)); buffer.append(','); buffer.append(value.offset); buffer.append(",CLC."); buffer.append(CLC.getAlignment(value.alignToBaseline)); buffer.append(",CLC."); buffer.append(CLC.getGroupId(value.groupid)); buffer.append(')'); return buffer.toString(); } public void setAsText(String text) throws java.lang.IllegalArgumentException { throw new IllegalArgumentException(); } public String[] getTags() { return null; } private void fire() { if (listener != null) listener.propertyChange(new PropertyChangeEvent(this, "CLCEditor", null, getValue())); } public void addPropertyChangeListener(PropertyChangeListener l) { listener = l; } public void removePropertyChangeListener(PropertyChangeListener l) { listener = null; } private class CustomEditor extends javax.swing.JPanel implements java.awt.event.ActionListener, java.awt.event.ItemListener, javax.swing.event.DocumentListener { private javax.swing.JCheckBox clc2 = new javax.swing.JCheckBox("CLC2"); private javax.swing.JComboBox startColumn = new javax.swing.JComboBox(); private javax.swing.JLabel endLabel = new javax.swing.JLabel(); private javax.swing.JComboBox endColumn = new javax.swing.JComboBox(); private javax.swing.JTextField row = new javax.swing.JTextField(10); private javax.swing.JTextField offset = new javax.swing.JTextField(10); private javax.swing.JComboBox alignment = new javax.swing.JComboBox(); private javax.swing.JComboBox grouping = new javax.swing.JComboBox(); private boolean isclc2 = false; private boolean updating = false; CustomEditor() { super( new java.awt.BorderLayout() ); add(clc2, java.awt.BorderLayout.WEST); clc2.addActionListener( this ); javax.swing.JPanel panel = new javax.swing.JPanel(); panel.add( new javax.swing.JLabel("Startcolumn:") ); panel.add( startColumn ); startColumn.addItemListener(this); panel.add( endLabel ); panel.add( endColumn ); endColumn.addItemListener(this); add( panel, java.awt.BorderLayout.NORTH ); panel = new javax.swing.JPanel(); panel.add( new javax.swing.JLabel("Row:") ); panel.add( row ); row.getDocument().addDocumentListener(this); panel.add( new javax.swing.JLabel(" Offset:") ); panel.add( offset ); offset.getDocument().addDocumentListener(this); add( panel ); panel = new javax.swing.JPanel(); panel.add( new javax.swing.JLabel("Alignment:") ); panel.add( alignment ); alignment.addItemListener(this); panel.add( new javax.swing.JLabel(" Grouping:") ); panel.add( grouping ); grouping.addItemListener(this); add( panel, java.awt.BorderLayout.SOUTH ); setPreferredSize( new java.awt.Dimension(450, 105) ); } public String toString() { return "CLC Editor"; } private javax.swing.DefaultComboBoxModel columnsModel; private javax.swing.DefaultComboBoxModel columnWithsModel; private void update( CLC value ) { updating = true; if (columnsModel==null) { //initializierung der GUI-Elementen java.util.Vector vec = new java.util.Vector(); ColumnLayout.getColumns(vec); columnsModel = new javax.swing.DefaultComboBoxModel(vec); startColumn.setModel( columnsModel ); columnsModel = new javax.swing.DefaultComboBoxModel(vec); vec = new java.util.Vector(); ColumnLayout.getColumnWidths(vec); columnWithsModel = new javax.swing.DefaultComboBoxModel(vec); vec = new java.util.Vector(); CLC.getAlignments(vec); alignment.setModel( new javax.swing.DefaultComboBoxModel(vec) ); vec = new java.util.Vector(); CLC.getGroupIds(vec); grouping.setModel( new javax.swing.DefaultComboBoxModel(vec) ); } clc2.setSelected(isclc2); startColumn.setSelectedItem(ColumnLayout.getColumn(value.startcolumn)); if (isclc2) { endLabel.setText(" Endcolumn:"); endColumn.setModel(columnsModel); endColumn.setSelectedItem(ColumnLayout.getColumn(value.endcolumn)); } else { endLabel.setText(" Width:"); endColumn.setModel(columnWithsModel); endColumn.setSelectedItem(ColumnLayout.getColumnWidth(value.startcolumn, value.endcolumn)); } row.setText(String.valueOf(value.row)); offset.setText(String.valueOf(value.offset)); alignment.setSelectedItem(CLC.getAlignment(value.alignToBaseline)); grouping.setSelectedItem(CLC.getGroupId(value.groupid)); updating = false; } void updateGUI() { //wird immer im AWT-Thread ausgeführt editedvalue = null; isclc2 = value instanceof CLC2; update(value); } public void actionPerformed( java.awt.event.ActionEvent ae ) { if (updating) return; isclc2 = clc2.isSelected(); if (editedvalue==null) { if (isclc2) editedvalue = CLC2.makeClone2( value ); else editedvalue = CLC.makeClone( value ); } else { if (isclc2) editedvalue = CLC2.makeClone2(editedvalue); else editedvalue = CLC.makeClone(editedvalue); } update(editedvalue); } public void itemStateChanged( java.awt.event.ItemEvent ie ) { if (updating || ie.getStateChange()==java.awt.event.ItemEvent.DESELECTED) return; if (editedvalue==null) editedvalue = value.makeClone(); if (ie.getSource()==alignment) { editedvalue.alignToBaseline = CLC.getAlignment((String)alignment.getSelectedItem()); } else if (ie.getSource()==grouping) { editedvalue.groupid = CLC.getGroupId((String)grouping.getSelectedItem()); } else { editedvalue.startcolumn = ColumnLayout.getColumn((String)startColumn.getSelectedItem()); if (isclc2) { editedvalue.endcolumn = ColumnLayout.getColumn((String)endColumn.getSelectedItem()); } else { editedvalue.endcolumn = CLC.WIDTH_OFFSET-ColumnLayout.getColumnWidth((String)endColumn.getSelectedItem()); } } } public void changedUpdate( javax.swing.event.DocumentEvent de ) { if (updating) return; if (editedvalue==null) editedvalue = value.makeClone(); if (de.getDocument()==row.getDocument()) { try { editedvalue.row = Integer.parseInt(row.getText()); } catch (Exception e) {} } else if (de.getDocument()==offset.getDocument()) { try { editedvalue.offset = Integer.parseInt(offset.getText()); } catch (Exception e) {} } } public void insertUpdate( javax.swing.event.DocumentEvent de ) { changedUpdate( de ); } public void removeUpdate( javax.swing.event.DocumentEvent de ) { changedUpdate( de ); } } }