diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-03-29 21:21:02 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-03-29 21:21:02 +0000 |
commit | 20744ae1f1182d08e26b175f59d14041aabaf754 (patch) | |
tree | 937d125b80663966b3a61e13e744e28daf1f22da /java/src/IceGridGUI/TableDialog.java | |
parent | Java metadata (diff) | |
download | ice-20744ae1f1182d08e26b175f59d14041aabaf754.tar.bz2 ice-20744ae1f1182d08e26b175f59d14041aabaf754.tar.xz ice-20744ae1f1182d08e26b175f59d14041aabaf754.zip |
IceGrid GUI refactoring
Diffstat (limited to 'java/src/IceGridGUI/TableDialog.java')
-rwxr-xr-x | java/src/IceGridGUI/TableDialog.java | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/TableDialog.java b/java/src/IceGridGUI/TableDialog.java new file mode 100755 index 00000000000..da0b7e9cac3 --- /dev/null +++ b/java/src/IceGridGUI/TableDialog.java @@ -0,0 +1,234 @@ +// **********************************************************************
+//
+// Copyright (c) 2003-2005 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;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableModel;
+
+import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.forms.factories.ButtonBarFactory;
+
+//
+// A simple two-column table dialog, to edit properties and properties-like
+// maps.
+//
+
+public class TableDialog extends JDialog
+{
+ public TableDialog(Frame parentFrame, String title,
+ String heading0, String heading1, boolean editKeys)
+ {
+ super(parentFrame, title + " - IceGrid Admin", true);
+ _editKeys = editKeys;
+ setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
+
+ _columnNames = new java.util.Vector(2);
+ _columnNames.add(heading0);
+ _columnNames.add(heading1);
+
+ _table = new JTable();
+
+ Action ok = new AbstractAction("OK")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _cancelled = false;
+ setVisible(false);
+ }
+ };
+ JButton okButton = new JButton(ok);
+
+ Action cancel = new AbstractAction("Cancel")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ setVisible(false);
+ }
+ };
+ JButton cancelButton = new JButton(cancel);
+
+ if(_editKeys)
+ {
+ Action deleteRow = new AbstractAction("Delete selected row(s)")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if(_table.isEditing())
+ {
+ _table.getCellEditor().stopCellEditing();
+ }
+
+ for(;;)
+ {
+ int selectedRow = _table.getSelectedRow();
+ if(selectedRow == -1)
+ {
+ break;
+ }
+ else
+ {
+ _model.removeRow(selectedRow);
+ }
+ }
+ }
+ };
+ _table.getActionMap().put("delete", deleteRow);
+ _table.getInputMap().put(
+ KeyStroke.getKeyStroke("DELETE"), "delete");
+ }
+
+ JScrollPane scrollPane = new JScrollPane(_table);
+ scrollPane.setBorder(Borders.DIALOG_BORDER);
+
+ getContentPane().add(scrollPane, BorderLayout.CENTER);
+ JPanel buttonBar =
+ ButtonBarFactory.buildOKCancelBar(okButton, cancelButton);
+ buttonBar.setBorder(Borders.DIALOG_BORDER);
+
+ getContentPane().add(buttonBar, BorderLayout.SOUTH);
+ pack();
+ }
+
+ //
+ // Returns null when cancel is pressed
+ //
+ public java.util.TreeMap show(java.util.Map map, JComponent onComponent)
+ {
+ _cancelled = true;
+
+ //
+ // Transform map into vector of vectors
+ //
+ java.util.Vector vector = new java.util.Vector(map.size());
+ java.util.Iterator p = map.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ java.util.Vector row = new java.util.Vector(2);
+ row.add(entry.getKey());
+ row.add(entry.getValue());
+ vector.add(row);
+ }
+ if(_editKeys)
+ {
+ java.util.Vector newRow = new java.util.Vector(2);
+ newRow.add("");
+ newRow.add("");
+ vector.add(newRow);
+ }
+
+ _model = new DefaultTableModel(vector, _columnNames)
+ {
+ public boolean isCellEditable(int row, int column)
+ {
+ if(_editKeys)
+ {
+ return true;
+ }
+ else
+ {
+ return column > 0;
+ }
+ }
+ };
+
+ _model.addTableModelListener(new TableModelListener()
+ {
+ public void tableChanged(TableModelEvent e)
+ {
+ if(_editKeys)
+ {
+ Object lastKey = _model.getValueAt(
+ _model.getRowCount() - 1 , 0);
+ if(lastKey != null && !lastKey.equals(""))
+ {
+ _model.addRow(new Object[]{"", ""});
+ }
+ }
+ }
+ });
+
+
+ _table.setModel(_model);
+
+ setLocationRelativeTo(onComponent);
+ setVisible(true);
+
+ if(_cancelled)
+ {
+ return null;
+ }
+ else
+ {
+ if(_table.isEditing())
+ {
+ _table.getCellEditor().stopCellEditing();
+ }
+ vector = _model.getDataVector();
+
+ //
+ // Transform vector into new Map
+ //
+ java.util.TreeMap result = new java.util.TreeMap();
+ p = vector.iterator();
+ while(p.hasNext())
+ {
+ java.util.Vector row = (java.util.Vector)p.next();
+
+ //
+ // Eliminate rows with null or empty keys
+ //
+ String key = (String)row.elementAt(0);
+ if(key != null)
+ {
+ if(_editKeys)
+ {
+ key = key.trim();
+ }
+
+ if(!key.equals(""))
+ {
+ String val = (String) row.elementAt(1);
+ if(val == null)
+ {
+ val = "";
+ }
+ result.put(key, val);
+ }
+ }
+ }
+ return result;
+ }
+ }
+
+ private final boolean _editKeys;
+ private boolean _cancelled;
+ private JTable _table;
+ private DefaultTableModel _model;
+ private java.util.Vector _columnNames;
+}
+
+
+
|