package es.icarto.gvsig.navtableforms.gui.tables.menu; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import javax.swing.JTable; import com.iver.andami.PluginServices; import es.icarto.gvsig.navtableforms.gui.tables.JTableUtils; import es.icarto.gvsig.navtableforms.gui.tables.handler.EditableNNRelTableForm; import es.icarto.gvsig.navtableforms.gui.tables.handler.VectorialEditableNNRelTableHandler; import es.icarto.gvsig.navtableforms.gui.tables.model.VectorialTableModel; import es.icarto.gvsig.navtableforms.utils.FormFactory; /** * VectorialEditableNNRelJTableContextualMenu * * n:n relationship table contextual menus which opens forms and has options for * updating, creating and deleting registers. * * @author Jorge L�pez Fern�ndez <jlopez@cartolab.es> */ public class VectorialEditableNNRelJTableContextualMenu extends VectorialJTableContextualMenu { protected VectorialEditableNNRelTableHandler tableRelationship; public VectorialEditableNNRelJTableContextualMenu( VectorialEditableNNRelTableHandler tableRelationship) { super(tableRelationship.getSourceTableName()); newMenuItem .setText(PluginServices.getText(this, "create_new_relation")); updateMenuItem.setText(PluginServices.getText(this, "update_item_relation")); deleteMenuItem.setText(PluginServices.getText(this, "delete_item_relation")); this.form = FormFactory .createSingletonFormRegistered(tableRelationship .getSourceTableName()); this.tableRelationship = tableRelationship; } protected void initContextualMenu() { newMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { new EditableNNRelTableForm(tableRelationship, tableRelationship .getKeyColumn()).addAction(); } }); popupMenu.add(newMenuItem); updateMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { openDialog(); } }); popupMenu.add(updateMenuItem); deleteMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { new EditableNNRelTableForm(tableRelationship, tableRelationship .getKeyColumn()).deleteAction(); } }); popupMenu.add(deleteMenuItem); } @Override public void mouseClicked(MouseEvent e) { table = (JTable) e.getComponent(); if ((e.getClickCount() == 2) && (table.getSelectedRow() > -1)) { openDialog(); } else if (e.getButton() == BUTTON_RIGHT) { if (!JTableUtils.hasRows(table) || (table.getSelectedRow() == NO_ROW_SELECTED)) { deleteMenuItem.setEnabled(false); updateMenuItem.setEnabled(false); } else { deleteMenuItem.setEnabled(true); updateMenuItem.setEnabled(true); } popupMenu.show(e.getComponent(), e.getX(), e.getY()); } } protected void openDialog() { if (!formInitialized) { if ((form != null) && (form.init())) { formInitialized = true; readSelectedPosition(); PluginServices.getMDIManager().addWindow(form); } } else { form.reinit(); readSelectedPosition(); PluginServices.getMDIManager().addWindow(form); } } private void readSelectedPosition() { form.setPosition(((VectorialTableModel) table.getModel()) .convertRowIndexToModel(table.getSelectedRow())); } }