package org.joone.edit;
import CH.ifa.draw.framework.*;
import CH.ifa.draw.contrib.*;
import CH.ifa.draw.figures.*;
import java.awt.event.*;
import java.awt.*;

/**
 * Delegate mouse selection to a specific TextTool if
 * the figure selected inside a CompositeFigure is a
 * TextFigure
 */
public class DelegationSelectionTool extends CustomSelectionTool {
    
    /**
     * TextTool which will be invoked at the top level container.
     */
    private TextTool myTextTool;
    private PropertySheet myPsp;
    
    /** Costructor
     * @param view The DrawingView
     */
    public DelegationSelectionTool(DrawingView view) {
        super(view);
        setTextTool(new TextTool(view, new TextFigure()));
    }
    
    /**
     * Hook method which can be overriden by subclasses to provide
     * specialised behaviour in the event of a mouse double click.
     * @param e The MouseEvent
     * @param x x cursor position
     * @param y y cursor position
     */
    protected void handleMouseDoubleClick(MouseEvent e, int x, int y) {
        Figure figure = drawing().findFigureInside(e.getX(), e.getY());
        if ((figure != null) && (figure instanceof TextFigure)) {
            TextFigure txtFig = (TextFigure)figure;
            if (!txtFig.readOnly()) {
                getTextTool().activate();
                getTextTool().mouseDown(e, x, y);
            }
        }
        
    }
    public void setPropertyPanel(PropertySheet psp) {
        myPsp = psp;
    }
    
    /** Getter for property panel.
     * @return Value of property myPsp.
     */
    public PropertySheet getPropertyPanel() {
        return myPsp;
    }
    
    /**
     * Hook method which can be overriden by subclasses to provide
     * specialised behaviour in the event of a mouse down.
     * @param e The MouseEvent
     * @param x x cursor position
     * @param y y cursor position
     */
    protected void handleMouseClick(MouseEvent e, int x, int y) {
        deactivate();
    }
    
    /**
     * Terminates the editing of a text figure.
     */
    public void deactivate() {
        super.deactivate();
        if (getTextTool().isActivated()) {
            getTextTool().deactivate();
        }
    }
    
    /**
     * Set the text tool to which double clicks should be delegated. The text tool is shared by
     * all figures upon which this selection tool operates.
     *
     * @param newTextTool delegate text tool
     */
    protected void setTextTool(TextTool newTextTool) {
        myTextTool = newTextTool;
    }
    
    /**
     * Return the text tool to which double clicks are delegated. The text tool is shared by
     * all figures upon which this selection tool operates.
     *
     * @return delegate text tool
     */
    protected TextTool getTextTool() {
        return myTextTool;
    }
    
    /**
     * This method displays a popup menu as defined in ConcreteSelectionTool.
     *
     * @param   figure      Figure for which a popup menu should be displayed
     * @param   x           x coordinate where the popup menu should be displayed
     * @param   y           y coordinate where the popup menu should be displayed
     * @param   component   Component which invoked the popup menu
     */
    protected void showPopupMenu(Figure figure, int x, int y, Component comp) {
        deactivate();
        
        // The figure parameter is a JHotDraw figure, not a ConcreteGenericFigure.
        // So we actually have to find figure2 from the drawing.
        Figure figure2 = drawing().findFigure(x, y);
        
        if (figure2 != null) {
            if (figure2 instanceof ConcreteGenericFigure) {
                // Show the popup for the figure.
                ((ConcreteGenericFigure)figure2).getPopupMenu(myPsp, view()).show(comp, x, y);
            }
            if (figure2 instanceof LayerConnection) {
                javax.swing.JPopupMenu pop = ((LayerConnection)figure2).getPopupMenu(myPsp, view());
                if (pop != null)
                    // Show the popup for the figure.
                    pop.show(comp, x, y);
            }
        }
    }
}
 

Ads help maintain this website.