[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[news.eclipse.tools.gef] Re: Filtering out nodes and connections from a diagram results in dangling connections in filtered state

Hi

In the meantime I noticed, that the editpart seems to be deleted from the editparts but it is still drawn. It is not possible to select the line.

So what might be the problem.

regards
Silvio


Silvio Meier wrote:
Hi there.

I have a problem which was often discussed in this newsgroup, but I couldn't manage, sorry. I use GEF 3.1 for a diagram editor which can create nested nodes and connections that can connect arbitrary nodes as shown in the example attachment, situation a.

I'd like to filter out, for example, the inner node X in the diagram and I want also filter out the connection y. This is shown in situation b. in the attachement.

Unfortunately it results something like in situation c. with a dangling connection but the node is filtered out correctly.

The code I use is the following in the edit part of the node.

I have a propertyChange method which listens for specific events. When changing the visibility property of the node, the refreshSourceConncetions() and refreshNodes() are called.

public void propertyChange(PropertyChangeEvent evt) {
  String prop = evt.getPropertyName();

  if (ModelElement.VISIBILITY_PROP.equals(prop)) {
    refreshChildren();
    refreshSourceConnections();
  } else if (NodeContainer.ZOOMED_PROP.equals(prop)) {
    refreshChildren();
    refreshSourceConnections();
    refreshVisuals();
  } else if (Node.SIZE_PROP.equals(prop) ||
             Node.LOCATION_PROP.equals(prop)) {
    refreshVisuals();
  } else if (Node.NAME_PROP.equals(prop)) {
     ....
  }
}

I have overridden the getModelChildren() and the getModelSourceConnections() which provide now a filtered list of all visible nodes and visible source connections respectively.
Somehow like this:


protected List getModelChildren() {
  FilteredArrayList list = new
    FilteredArrayList(
    (ArrayList)getCastedObjectModel().getChildren());

  list.setFilter(new ModelElementVisibilityFilter());
  return list;
}

protected List getModelSourceConnections() {
  FilteredArrayList list = new
    FilteredArrayList(
    (ArrayList)getCastedModel().getSourceConnections());

  list.setFilter(new ModelElementVisibilityFilter());
        return list;
}

The used classes which provide the filter service work correctly and the visible properties of the corresponding connections and nodes are set properly (ie. to false) before calling the methods refreshChildren() and refreshConnections().


The filtering of the nodes works, in contrast to connections which dangle somehow after the filter operation. When debugging GEF, it looks as if the edit parts of the connection are thrown away in the refreshSourceConnections() method, but somehow there are still some remaining artifacts of them.


What's wrong?

thanx & regards
Silvio


------------------------------------------------------------------------