|
Re: Delete Not working still: msg#00057java.netbeans.modules.graph.user
Hello! I figured out my null pointer, I think...I am not using Object Scene correctly. I do see in my test case that the key event is still firing with the layer approach.... I still can't figure out why its not happening in my class....which is attached.... Chris public class CanvasModel extends AbstractCanvasModel<DesignerHandle, Object> { private WidgetAction designSelect = ActionFactory.createSelectAction(new SelectionProviderImpl()); private WidgetAction designDeselect = ActionFactory.createSelectAction(new DeselectionImpl()); private WidgetAction designAccept = ActionFactory.createAcceptAction(new AcceptProviderImpl()); private WidgetAction designMove; private WidgetAction designResize; private WidgetAction designDeleteAction = new KeyEventLoggerAction(); private LayerWidget backgroundLayer; private LayerWidget componentLayer; private LayerWidget interactionLayer; /** Creates a new instance of CanvasModel */ public CanvasModel() { init(); } private void init() { // Furthest back backgroundLayer = new LayerWidget(this); // components sit there. componentLayer = new LayerWidget(this); // moves occur here interactionLayer = new LayerWidget(this); // setMaximumBounds(new Rectangle(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE)); // setKeyEventProcessingType (EventProcessingType.FOCUSED_WIDGET_AND_ITS_PARENTS); addChild(backgroundLayer); addChild(componentLayer); addChild(interactionLayer); getActions().addAction(designAccept); // getActions().addAction(designDeselect); // getActions().addAction(ActionFactory.createPopupMenuAction(createPopupMenuProvider())); designResize = ActionFactory.createAlignWithResizeAction (componentLayer, interactionLayer, null); designMove = createMoveAction(); } protected WidgetAction createMoveAction() { return ActionFactory.createAlignWithMoveAction (componentLayer, interactionLayer, null); } protected void selectObject(Object object, boolean invertSelection) { if (getFocusedObject() != null) { findWidget(getFocusedObject()).setBorder(createDesignBorder()); } findWidget(object).setBorder(createDesignResizeBorder((DesignerHandle)object)); setFocusedObject(object); if (object != null) { if (getSelectedObjects().contains(object)) return; userSelectionSuggested(Collections.singleton(object), invertSelection); } else userSelectionSuggested(Collections.emptySet(), invertSelection); } protected Widget attachNodeWidget(DesignerHandle handle) { final ComponentWidget des = new ComponentWidget(this,handle.getRuntimeComponent().getViewDelegate().getComponent()); componentLayer.addChild(des); des.setBorder(createDesignBorder()); des.getActions().addAction(designDeleteAction); des.getActions().addAction(designSelect); // des.getActions().addAction(designResize); // des.getActions().addAction(designMove); // attachDesignActions(des, handle); return des; } protected Widget attachEdgeWidget(Object edge) { return null; } protected void attachEdgeSourceAnchor(Object edge, DesignerHandle source, DesignerHandle target) { } protected void attachEdgeTargetAnchor(Object edge, DesignerHandle source, DesignerHandle target) { } public static final int BORDER_SIZE = 5; public Border createDesignResizeBorder(DesignerHandle dh) { return BorderFactory.createResizeBorder(BORDER_SIZE); } public Border createDesignBorder() { return CanvasBorderFactory.BORDER_SHADOW_NORMAL; } private class SelectionProviderImpl implements SelectProvider { public boolean isAimingAllowed(Widget widget, Point localLocation, boolean invertSelection) { return false; } public boolean isSelectionAllowed(Widget widget, Point localLocation, boolean invertSelection) { // Object object = findObject(widget); // return object != null && (invertSelection || ! getSelectedObjects().contains(object)); return true; } public void select(Widget widget, Point localLocation, boolean invertSelection) { // Object object = findObject(widget); // selectObject(object, invertSelection); // setFocusedWidget(widget); } } private class AcceptProviderImpl implements AcceptProvider { public ConnectorState isAcceptable(Widget widget, Point point, Transferable transferable) { if ( transferable.isDataFlavorSupported(PaletteTransferable.FLAVOUR)) { return ConnectorState.ACCEPT; } else return ConnectorState.REJECT; } public void accept(Widget widget, Point point, Transferable transferable) { try { final DesignerHandle handle = (DesignerHandle)transferable.getTransferData(PaletteTransferable.FLAVOUR); Widget wid = addNode(handle); wid.setPreferredLocation(point); Dimension dim = handle.getComponentDataBean().getPreferredSize(); if ( dim == null ) { dim = handle.getRuntimeComponent().getViewDelegate().getComponent().getPreferredSize(); } //TODO P3 - 10 is magic number, based on the border around the widget. wid.setPreferredSize(new Dimension(dim.width + 10, dim.height + 10)); onAccept(handle); } catch (UnsupportedFlavorException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } } private class CPResolver implements ResizeControlPointResolver { private ResizeControlPointResolver original = ActionFactory.createDefaultResizeControlPointResolver(); public ResizeProvider.ControlPoint resolveControlPoint(Widget widget, Point point) { ResizeProvider.ControlPoint ret = original.resolveControlPoint(widget, point); if (ret == null) { return ret; } Object obj = CanvasModel.this.findObject(widget); if (obj != null) { DesignerHandle wr = (DesignerHandle)obj; int dirs = wr.getComponentDataBean().getResizeDirections(); if ((dirs & ComponentDataBean.RESIZE_HORIZONTAL) == 0) { if (ret == ResizeProvider.ControlPoint.CENTER_LEFT || ret == ResizeProvider.ControlPoint.CENTER_RIGHT) { return null; } if (ret == ResizeProvider.ControlPoint.TOP_LEFT || ret == ResizeProvider.ControlPoint.TOP_RIGHT) { ret = ResizeProvider.ControlPoint.TOP_CENTER; } if (ret == ResizeProvider.ControlPoint.BOTTOM_RIGHT || ret == ResizeProvider.ControlPoint.BOTTOM_LEFT) { ret = ResizeProvider.ControlPoint.BOTTOM_CENTER; } } if ((dirs & ComponentDataBean.RESIZE_VERTICAL) == 0) { if (ret == ResizeProvider.ControlPoint.TOP_CENTER || ret == ResizeProvider.ControlPoint.BOTTOM_CENTER) { return null; } if (ret == ResizeProvider.ControlPoint.TOP_LEFT || ret == ResizeProvider.ControlPoint.BOTTOM_LEFT) { ret = ResizeProvider.ControlPoint.CENTER_LEFT; } if (ret == ResizeProvider.ControlPoint.TOP_RIGHT || ret == ResizeProvider.ControlPoint.BOTTOM_RIGHT) { ret = ResizeProvider.ControlPoint.CENTER_RIGHT; } } } return ret; } } private class AlignCollector implements AlignWithWidgetCollector { private boolean resize; public AlignCollector(boolean res) { resize = res; } public Collection<Rectangle> getRegions(Widget widget) { Collection<Rectangle> toRet = new ArrayList<Rectangle>(); for (DesignerHandle dh : CanvasModel.this.getNodes()) { Widget wid = findWidget(dh); if (wid != widget) { toRet.add(wid.convertLocalToScene(wid.getBounds())); } else if (resize) { Point loc = wid.getLocation(); Dimension size = dh.getComponentDataBean().getPreferredSize(); if (size == null) { size = wid.getPreferredSize(); } //magic because of borders.. Rectangle r = new Rectangle (loc.x - BORDER_SIZE, loc.y - BORDER_SIZE, size.width + BORDER_SIZE * 2, size.height + BORDER_SIZE * 2); toRet.add(r); } } //somewhat hack, would be more happy with Integer.MAX_VALUE but that one freaks out the view. toRet.add(new Rectangle(0, 0, 0, 10000)); toRet.add(new Rectangle(0, 0, 10000, 0)); return toRet; } } private class KeyEventLoggerAction extends WidgetAction.Adapter { public State keyPressed(Widget widget, WidgetKeyEvent event) { return State.REJECTED; } public State keyTyped(Widget widget, WidgetKeyEvent event) { return State.REJECTED; } public State keyReleased(Widget widget, WidgetKeyEvent event) { if (event.getKeyCode() == KeyEvent.VK_DELETE) { DesignerHandle handle = (DesignerHandle)CanvasModel.this.findObject(widget); if (handle == null) { return State.REJECTED; } if ( JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(null,"Are you sure you want to remove the widget?")) { CanvasModel.this.removeNode(handle); } return State.CONSUMED; }; return State.REJECTED; } } private class DeselectionImpl implements SelectProvider { public boolean isAimingAllowed(Widget widget, Point localLocation, boolean invertSelection) { return false; } public boolean isSelectionAllowed(Widget widget, Point localLocation, boolean invertSelection) { if (widget == CanvasModel.this) { return true; } return false; } public void select(Widget widget, Point localLocation, boolean invertSelection) { if (widget == CanvasModel.this) { if (getFocusedObject() != null) { findWidget(getFocusedObject()).setBorder(createDesignBorder()); } setFocusedObject(null); userSelectionSuggested(Collections.emptySet(), false); } } } } Chris Palmer wrote: Hello!
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Help regarding Satellite view integration with Navigator panel., karthik |
|---|---|
| Next by Date: | Re: Deleting widgets, David Kaspar |
| Previous by Thread: | Delete Not working still, Chris Palmer |
| Next by Thread: | Re: Delete Not working still, David Kaspar |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |