summaryrefslogtreecommitdiff
path: root/java/src/IceGridGUI/Application/ArrayMapField.java
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2009-04-03 15:15:13 -0700
committerMark Spruiell <mes@zeroc.com>2009-04-03 15:15:13 -0700
commitb415955846ce0d5c2e0c283f897190ccd2c3616a (patch)
tree10daf6bb8a05edf5052a33f10ea16c73d8ae0d89 /java/src/IceGridGUI/Application/ArrayMapField.java
parentBug 3465 - Remove _adapter members from test where unecessary (diff)
downloadice-b415955846ce0d5c2e0c283f897190ccd2c3616a.tar.bz2
ice-b415955846ce0d5c2e0c283f897190ccd2c3616a.tar.xz
ice-b415955846ce0d5c2e0c283f897190ccd2c3616a.zip
removing Java2 mapping
Diffstat (limited to 'java/src/IceGridGUI/Application/ArrayMapField.java')
-rw-r--r--java/src/IceGridGUI/Application/ArrayMapField.java207
1 files changed, 207 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/Application/ArrayMapField.java b/java/src/IceGridGUI/Application/ArrayMapField.java
new file mode 100644
index 00000000000..cdb49d25613
--- /dev/null
+++ b/java/src/IceGridGUI/Application/ArrayMapField.java
@@ -0,0 +1,207 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+package IceGridGUI.Application;
+
+import IceGrid.*;
+import IceGridGUI.*;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.KeyStroke;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+//
+// A special field used to show/edit a map
+//
+
+public class ArrayMapField extends JTable
+{
+ public ArrayMapField(Editor editor, boolean substituteKey, String... columns)
+ {
+ _editor = editor;
+ _substituteKey = substituteKey;
+ _vectorSize = columns.length;
+
+ _columnNames = new java.util.Vector<String>(_vectorSize);
+ for(String name : columns)
+ {
+ _columnNames.add(name);
+ }
+
+ assert _vectorSize > 2;
+
+ Action deleteRow = new AbstractAction("Delete selected row(s)")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if(_editable)
+ {
+ if(isEditing())
+ {
+ getCellEditor().stopCellEditing();
+ }
+
+ for(;;)
+ {
+ int selectedRow = getSelectedRow();
+ if(selectedRow == -1)
+ {
+ break;
+ }
+ else
+ {
+ _model.removeRow(selectedRow);
+ }
+ }
+ }
+ }
+ };
+ getActionMap().put("delete", deleteRow);
+ getInputMap().put(KeyStroke.getKeyStroke("DELETE"), "delete");
+ }
+
+ public void set(java.util.Map<String, String[]> map, Utils.Resolver resolver, boolean editable)
+ {
+ _editable = editable;
+ assert(_vectorSize > 2);
+
+ //
+ // Transform map into vector of vectors
+ //
+ java.util.Vector<java.util.Vector<String>> vector = new java.util.Vector<java.util.Vector<String>>(map.size());
+ for(java.util.Map.Entry<String, String[]> p : map.entrySet())
+ {
+ java.util.Vector<String> row = new java.util.Vector<String>(_vectorSize);
+
+ if(_substituteKey)
+ {
+ row.add(Utils.substitute(p.getKey(), resolver));
+ }
+ else
+ {
+ row.add(p.getKey());
+ }
+
+ for(String val : p.getValue())
+ {
+ row.add(Utils.substitute(val, resolver));
+ }
+
+ vector.add(row);
+ }
+
+ if(_editable)
+ {
+ java.util.Vector<String> newRow = new java.util.Vector<String>(_vectorSize);
+ for(int i = 0; i < _vectorSize; ++i)
+ {
+ newRow.add("");
+ }
+ vector.add(newRow);
+ }
+
+ _model = new DefaultTableModel(vector, _columnNames)
+ {
+ public boolean isCellEditable(int row, int column)
+ {
+ return _editable;
+ }
+ };
+
+ _model.addTableModelListener(new TableModelListener()
+ {
+ public void tableChanged(TableModelEvent e)
+ {
+ if(_editable)
+ {
+ Object lastKey = _model.getValueAt(_model.getRowCount() - 1 , 0);
+ if(lastKey != null && !lastKey.equals(""))
+ {
+ Object[] emptyRow = new Object[_vectorSize];
+ for(int i = 0; i < _vectorSize; ++i)
+ {
+ emptyRow[i] = "";
+ }
+ _model.addRow(emptyRow);
+ }
+ _editor.updated();
+ }
+ }
+ });
+ setModel(_model);
+
+ setCellSelectionEnabled(_editable);
+ setOpaque(_editable);
+ setPreferredScrollableViewportSize(getPreferredSize());
+
+ DefaultTableCellRenderer cr = (DefaultTableCellRenderer)getDefaultRenderer(String.class);
+ cr.setOpaque(_editable);
+ }
+
+ public java.util.TreeMap<String, String[]> get()
+ {
+ assert _editable;
+ assert(_vectorSize > 2);
+
+ if(isEditing())
+ {
+ getCellEditor().stopCellEditing();
+ }
+ @SuppressWarnings("unchecked")
+ java.util.Vector<java.util.Vector<String>> vector =
+ (java.util.Vector<java.util.Vector<String>>)_model.getDataVector();
+
+ java.util.TreeMap<String, String[]> result = new java.util.TreeMap<String, String[]>();
+
+ for(java.util.Vector<String> row : vector)
+ {
+ //
+ // Eliminate rows with null or empty keys
+ //
+ String key = row.elementAt(0);
+ if(key != null)
+ {
+ key = key.trim();
+ if(!key.equals(""))
+ {
+ String[] val = new String[_vectorSize - 1];
+ for(int i = 1; i < _vectorSize; ++i)
+ {
+ val[i - 1] = row.elementAt(i);
+ if(val[i - 1] == null)
+ {
+ val[i - 1] = "";
+ }
+ }
+ result.put(key, val);
+ }
+ }
+ }
+ return result;
+ }
+
+ private final int _vectorSize;
+
+ private DefaultTableModel _model;
+ private java.util.Vector<String> _columnNames;
+ private boolean _editable = false;
+
+ private boolean _substituteKey;
+
+ private Editor _editor;
+}