Search in sources :

Example 1 with AttributeComboBoxPropertyEditor

use of org.cytoscape.view.vizmap.gui.internal.view.editor.propertyeditor.AttributeComboBoxPropertyEditor in project cytoscape-impl by cytoscape.

the class CellEditorEventHandler method processEvent.

/**
 * Execute commands based on PropertyEditor's local event.
 *
 * In this handler, we should handle the following:
 * <ul>
 * <li>Mapping Type change
 * <li>Attribute Name Change
 * </ul>
 *
 * Other old global events (ex. Cytoscape.NETWORK_LOADED) is replaced by new
 * events.
 *
 * @param e PCE to be processed in this handler.
 */
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void processEvent(final PropertyChangeEvent e) {
    final Object newVal = e.getNewValue();
    final Object oldVal = e.getOldValue();
    // Check update is necessary or not.
    if (newVal == null && oldVal == null)
        return;
    // Same value. No change required.
    if (newVal != null && newVal.equals(oldVal))
        return;
    final VisualPropertySheetItem<?> vpSheetItem = vizMapperMediator.getCurrentVisualPropertySheetItem();
    final PropertySheetPanel propSheetPnl = vpSheetItem != null ? vpSheetItem.getPropSheetPnl() : null;
    if (propSheetPnl == null)
        return;
    final VizMapperProperty<?, ?, ?> prop = vizMapperMediator.getCurrentVizMapperProperty();
    if (prop == null)
        return;
    final VisualProperty<?> vp = vpSheetItem.getModel().getVisualProperty();
    final VisualMappingFunction mapping = vpSheetItem.getModel().getVisualMappingFunction();
    if (prop.getCellType() == CellType.DISCRETE && mapping instanceof DiscreteMapping) {
        // Discrete mapping value changed:
        // -------------------------------
        // Create new map entry and register it.
        final DiscreteMapping<Object, Object> discMap = (DiscreteMapping<Object, Object>) mapping;
        setDiscreteMappingEntry(prop.getKey(), oldVal, newVal, discMap);
    } else {
        VisualMappingFunction newMapping = mapping;
        String undoName = null;
        if (prop.getCellType() == CellType.VISUAL_PROPERTY_TYPE) {
            // -----------------------
            if (newVal != null && e.getSource() instanceof AttributeComboBoxPropertyEditor) {
                final AttributeComboBoxPropertyEditor editor = (AttributeComboBoxPropertyEditor) e.getSource();
                final VisualMappingFunctionFactory factory = (VisualMappingFunctionFactory) propSheetPnl.getTable().getValueAt(1, 1);
                newMapping = switchColumn(factory, editor, prop, newVal.toString(), propSheetPnl);
                vpSheetItem.getModel().setVisualMappingFunction(newMapping);
                if (newMapping == null)
                    vpSheetItem.getModel().setMappingColumnName(prop.getValue() != null ? prop.getValue().toString() : null);
                undoName = "Set Mapping Column";
            }
        } else if (prop.getCellType() == CellType.MAPPING_TYPE) {
            // Mapping type changed:
            // -----------------------
            // Parent is always root.
            // TODO: refactor--this class should not have to know the row/column where the value is
            Object controllingAttrName = propSheetPnl.getTable().getValueAt(0, 1);
            if (vp != null && controllingAttrName != null && (newVal == null || newVal instanceof VisualMappingFunctionFactory)) {
                newMapping = switchMappingType(prop, vp, (VisualMappingFunctionFactory) oldVal, (VisualMappingFunctionFactory) newVal, controllingAttrName.toString(), propSheetPnl);
                vpSheetItem.getModel().setVisualMappingFunction(newMapping);
                undoName = "Set Mapping Type";
            }
        }
        if (newMapping != mapping && undoName != null) {
            // Add undo support
            final VisualMappingFunction myNewMapping = newMapping;
            final UndoSupport undo = servicesUtil.get(UndoSupport.class);
            undo.postEdit(new AbstractCyEdit(undoName) {

                @Override
                public void undo() {
                    vpSheetItem.getModel().setVisualMappingFunction(mapping);
                }

                @Override
                public void redo() {
                    vpSheetItem.getModel().setVisualMappingFunction(myNewMapping);
                }
            });
        }
    }
}
Also used : PropertySheetPanel(com.l2fprod.common.propertysheet.PropertySheetPanel) VisualMappingFunctionFactory(org.cytoscape.view.vizmap.VisualMappingFunctionFactory) VisualMappingFunction(org.cytoscape.view.vizmap.VisualMappingFunction) DiscreteMapping(org.cytoscape.view.vizmap.mappings.DiscreteMapping) UndoSupport(org.cytoscape.work.undo.UndoSupport) AbstractCyEdit(org.cytoscape.work.undo.AbstractCyEdit) AttributeComboBoxPropertyEditor(org.cytoscape.view.vizmap.gui.internal.view.editor.propertyeditor.AttributeComboBoxPropertyEditor)

Aggregations

PropertySheetPanel (com.l2fprod.common.propertysheet.PropertySheetPanel)1 VisualMappingFunction (org.cytoscape.view.vizmap.VisualMappingFunction)1 VisualMappingFunctionFactory (org.cytoscape.view.vizmap.VisualMappingFunctionFactory)1 AttributeComboBoxPropertyEditor (org.cytoscape.view.vizmap.gui.internal.view.editor.propertyeditor.AttributeComboBoxPropertyEditor)1 DiscreteMapping (org.cytoscape.view.vizmap.mappings.DiscreteMapping)1 AbstractCyEdit (org.cytoscape.work.undo.AbstractCyEdit)1 UndoSupport (org.cytoscape.work.undo.UndoSupport)1