package agg.attribute.handler.impl.javaExpr.gui; //import agg.attribute.gui.TextField; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; import agg.attribute.handler.AttrHandler; import agg.attribute.handler.gui.HandlerCustomizingEditor; import agg.attribute.handler.gui.impl.AbstractHandlerEditor; import agg.attribute.handler.impl.javaExpr.JexHandler; import agg.attribute.parser.javaExpr.ClassResolver; import agg.attribute.util.RowDragEvent; import agg.attribute.util.RowDragListener; import agg.attribute.util.TableRowDragger; /** * Old awt-widgets, should be translated to swing. * * @version $Id: JexHandlerEditor.java,v 1.4 2010/09/23 08:13:48 olga Exp $ * @author $Author: olga $ */ public class JexHandlerEditor extends AbstractHandlerEditor implements HandlerCustomizingEditor, ScrollPaneConstants, ListSelectionListener, RowDragListener { protected JexHandler handler; protected ClassResolver classResolver; protected Vector<String> packages; protected PackageTableModel tableModel; protected JPanel mainPanel; protected JPanel packageP, buttonP, entriesP, inputP; protected JTable entriesL; protected JTextField inputTF; protected Action insertAction, appendAction, deleteAction; @SuppressWarnings("serial") public JexHandlerEditor(AttrHandler h) { super(); this.handler = (JexHandler) h; this.classResolver = this.handler.getClassResolver(); // Package list this.tableModel = new PackageTableModel(); this.entriesL = new JTable(this.tableModel); this.entriesL.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.entriesL.setRowSelectionAllowed(true); this.entriesL.setColumnSelectionAllowed(false); this.entriesL.getSelectionModel().addListSelectionListener(this); // this.entriesL.setMaximumSize(new Dimension( 100, 5 )); this.entriesL.setPreferredScrollableViewportSize(new Dimension(200, 100)); TableRowDragger rowDragger = new TableRowDragger(this.entriesL); rowDragger.addRowDragListener(this); // Package list decoration JScrollPane listScrollPane = new JScrollPane(this.entriesL); /* * JScrollPane listScrollPane = new JScrollPane( listScrollPane1, * VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED ); * listScrollPane.setBorder( new BevelBorder( BevelBorder.LOWERED )); */ listScrollPane.setPreferredSize(new Dimension(200, 100)); this.entriesP = new JPanel(); this.entriesP.setLayout(new BorderLayout()); this.entriesP.add(listScrollPane, "Center"); this.entriesP.setBorder(BorderFactory.createTitledBorder(new EtchedBorder(), "Searched Packages", TitledBorder.CENTER, TitledBorder.TOP)); this.entriesP.setPreferredSize(new Dimension(200, 100)); // Tool bar JToolBar toolBar = new JToolBar(); toolBar.setFloatable(false); this.insertAction = new AbstractAction("Insert") { public void actionPerformed(ActionEvent ev) { int sel = JexHandlerEditor.this.entriesL.getSelectedRow(); if (sel == -1) sel = 0; JexHandlerEditor.this.packages.insertElementAt("", sel); JexHandlerEditor.this.tableModel.update(); JexHandlerEditor.this.entriesL.editCellAt(sel, 0); } }; toolBar.add(this.insertAction); toolBar.addSeparator(); this.appendAction = new AbstractAction("Append") { public void actionPerformed(ActionEvent ev) { int sel = JexHandlerEditor.this.entriesL.getSelectedRow(); if (sel == -1) sel = JexHandlerEditor.this.packages.size() - 1; appendPackageAt("", sel); JexHandlerEditor.this.tableModel.update(); JexHandlerEditor.this.entriesL.editCellAt(sel + 1, 0); } }; toolBar.add(this.appendAction); toolBar.addSeparator(); this.deleteAction = new AbstractAction("Remove") { public void actionPerformed(ActionEvent ev) { int sel = JexHandlerEditor.this.entriesL.getSelectedRow(); if (sel != -1) { JexHandlerEditor.this.packages.removeElementAt(sel); JexHandlerEditor.this.tableModel.update(); updateResolver(); } } }; toolBar.add(this.deleteAction); // Tool bar decoration JPanel toolPanel = new JPanel(); toolPanel.add(toolBar); // toolPanel.setPreferredSize( new Dimension( 300, 20 )); // buttonP.setBorder( new BevelBorder( BevelBorder.RAISED )); this.packageP = new JPanel(); this.packageP.setLayout(new BorderLayout()); this.packageP.add(this.entriesP, "Center"); this.packageP.add(toolPanel, "South"); this.packageP.setPreferredSize(new Dimension(200, 200)); this.mainPanel = this.packageP; // new JPanel( new BorderLayout()); // this.mainPanel.add( this.packageP, "Center" ); this.mainPanel.setPreferredSize(new Dimension(200, 200)); // this.mainPanel.setBorder( new BevelBorder( BevelBorder.LOWERED )); updateList(); } protected void appendPackageAt(String p, int pos) { if (pos == this.packages.size() - 1) { this.packages.addElement(p); } else { this.packages.insertElementAt(p, pos + 1); } } // // Implementing the RowDragListener interface // /** Just acknowledge the fact. */ public void draggingStarted(RowDragEvent ev) { // int src = ev.getSourceRow(); // System.out.println("Started dragging row "+src); } /** Updates the class resolver. */ public void draggingStopped(RowDragEvent ev) { // int src = ev.getSourceRow(); // System.out.println("Stopped dragging row "+src); updateResolver(); } /** Moving a package name within the local list. */ public void draggingMoved(RowDragEvent ev) { /* * System.out.println ("draggingMoved("+ev.getSourceRow()+", "+ * ev.getTargetRow()+")"); */ int src = ev.getSourceRow(); int dest = ev.getTargetRow(); if (dest == -1 || src == -1) return; if (dest == src) return; // System.out.println("Source row="+src+"; dest. row="+dest); String p = this.packages.elementAt(src); if (src < dest) { appendPackageAt(p, dest); this.packages.removeElementAt(src); } else { this.packages.insertElementAt(p, dest); this.packages.removeElementAt(src + 1); } this.tableModel.update(); } /** ListSelectionListener interface implementation. */ public void valueChanged(ListSelectionEvent ev) { int row = ev.getFirstIndex(); this.deleteAction.setEnabled(row != -1); } public Component getComponent() { return this.mainPanel; } public AttrHandler getAttrHandler() { return this.handler; } public void setAttrHandler(AttrHandler h) { this.handler = (JexHandler) h; this.classResolver = this.handler.getClassResolver(); this.packages = this.classResolver.getPackages(); updateList(); } protected void updateList() { this.packages = this.classResolver.getPackages(); this.tableModel.update(); } protected void updateResolver() { this.classResolver.setPackages(this.packages); } @SuppressWarnings("serial") class PackageTableModel extends AbstractTableModel { public int getRowCount() { if (JexHandlerEditor.this.packages == null) updateList(); return JexHandlerEditor.this.packages.size(); } public int getColumnCount() { return 1; } public Class<?> getColumnClass(int column) { return "".getClass(); } public String getColumnName(int column) { return null; // "Package Name"; } public boolean isCellEditable(int row, int column) { return true; } public Object getValueAt(int row, int column) { return JexHandlerEditor.this.packages.elementAt(row); } public void setValueAt(Object value, int row, int column) { String text = (String) value; if (text == null || text.trim().length() == 0) { JexHandlerEditor.this.packages.removeElementAt(row); update(); } else { JexHandlerEditor.this.packages.setElementAt(text, row); } updateResolver(); } public void update() { fireTableDataChanged(); } } } /* * $Log: JexHandlerEditor.java,v $ * Revision 1.4 2010/09/23 08:13:48 olga * tuning * * Revision 1.3 2007/11/05 09:18:22 olga * code tuning * * Revision 1.2 2007/09/10 13:05:53 olga * In this update: * - package xerces2.5.0 is not used anymore; * - class com.objectspace.jgl.Pair is replaced by the agg own generic class agg.util.Pair; * - bugs fixed in: usage of PACs in rules; match completion; * usage of static method calls in attr. conditions * - graph editing: added some new features * Revision 1.1 2005/08/25 11:57:00 enrico *** * empty log message *** * * Revision 1.2 2005/06/20 13:37:04 olga Up to now the version 1.2.8 will be * prepared. * * Revision 1.1 2005/05/30 12:58:04 olga Version with Eclipse * * Revision 1.3 2003/03/05 18:24:28 komm sorted/optimized import statements * * Revision 1.2 2002/09/23 12:23:54 komm added type graph in xt_basis, editor * and GUI * * Revision 1.1.1.1 2002/07/11 12:17:01 olga Imported sources * * Revision 1.8 2000/06/05 14:07:25 shultzke Debugausgaben fuer V1.0.0b * geloescht * * Revision 1.7 2000/04/05 12:08:48 shultzke serialVersionUID aus V1.0.0 * generiert * * Revision 1.6 2000/03/03 11:40:05 shultzke *** empty log message *** */