[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.gmf] Re: To highlight an element on editor

Hi Artur,

I guess I found a solution. By the way, there is one more thing to consider, it's zooming. FeedbackLayer does not handle this, so I added my solution for that too:
[CODE]
public class HighlightOnSelectionEditPolicy extends SelectionEditPolicy
implements FigureListener, ZoomListener {


RectangleFigure highlightFigure;

protected void showSelection() {
   hideSelection();

   highlightFigure = new RectangleFigure() {
       public void paint(Graphics graphics) {
           graphics.setAlpha(32);
           super.paint(graphics);
       }
   };
   updateBounds();
   highlightFigure.setBackgroundColor(ColorConstants.blue);
   addFeedback(highlightFigure);
   getHostFigure().addFigureListener(this);
   DiagramRootEditPart root = (DiagramRootEditPart) getHost().getRoot();
   root.getZoomManager().addZoomListener(this);
}

protected void hideSelection() {
   if (highlightFigure != null) {
       getHostFigure().removeFigureListener(this);
       removeFeedback(highlightFigure);
       DiagramRootEditPart root = (DiagramRootEditPart) getHost()
               .getRoot();
       root.getZoomManager().removeZoomListener(this);
       highlightFigure = null;
   }
}

@Override
public void figureMoved(IFigure source) {
   updateBounds();
}

@Override
public void zoomChanged(double zoom) {
   updateBounds();
}

private void updateBounds() {
   Rectangle bounds = getHostFigure().getBounds().getCopy();
   getHostFigure().getParent().translateToAbsolute(bounds);
   getFeedbackLayer().translateToRelative(bounds);
   highlightFigure.setBounds(bounds);
}
}
[/CODE]