/*
 * RectangleReportElement.java
 *
 *  iReport  --  Visual designer for generating JasperReports Documents
 *  Copyright (C) 2002  Giulio Toffoli gt@businesslogic.it
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *  Giulio Toffoli
 *  Via T.Aspetti, 233
 *  35100 Padova ITALY
 *  gt@businesslogic.it
 *
 * Created on 28 febbraio 2003, 19.20
 */
package it.businesslogic.ireport;
import it.businesslogic.ireport.gui.*;
import it.businesslogic.ireport.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;

public class RectangleReportElement extends GraphicReportElement {
    
    public int radius = 0;
    
    public RectangleReportElement (int x, int y, int width, int height) {
        super (x,y, width, height);
        setGraphicElementPen ("Thin");
        this.bgcolor = Color.WHITE;
        this.fgcolor = Color.BLACK;
        setKey ("rectangle");
    }
    
    public RectangleReportElement (int x, int y, int width, int height, int radius) {
        this (x,y,width,height);
        this.radius = radius;
        //setKey("rectangle");
    }
    
    public void drawObject (Graphics2D g,double zoom_factor, int x_shift_origin, int y_shift_origin) {
        position.x -= 10;
        position.y -= 10;
        x_shift_origin -= 10;
        y_shift_origin -= 10;
        
        this.zoom_factor = zoom_factor;
        
        g.setColor ( bgcolor );
        if (!getTransparent ().equalsIgnoreCase ("Transparent"))
            g.fillRoundRect ( getZoomedDim (position.x)-x_shift_origin,
            getZoomedDim (position.y)-y_shift_origin,
            getZoomedDim (width),
            getZoomedDim (height),
            2*this.radius,
            2*this.radius);
        g.setColor ( this.fgcolor );
        
        position.x += 10;
        position.y += 10;
        x_shift_origin += 10;
        y_shift_origin += 10;
        
        drawGraphicsElement (g,this.getGraphicElementPen (), zoom_factor,  x_shift_origin,y_shift_origin, 2*this.radius);
    }
    
    public ReportElement cloneMe () {
        RectangleReportElement newReportElement = new RectangleReportElement (position.x, position.y, width, height);
        copyBaseReportElement (newReportElement, this);
        return newReportElement;
    }
    
    public void  drawGraphicsElement (Graphics2D g, String pen, double zoom_factor, int x_shift_origin, int y_shift_origin) {
        
        Stroke stroke = getPenStroke ( pen,zoom_factor );
        g.setColor ( this.fgcolor );
        
        this.zoom_factor = zoom_factor;
        if (stroke==null || pen.equalsIgnoreCase ("None")) return;
        
        position.x -= 10;
        position.y -= 10;
        x_shift_origin -= 10;
        y_shift_origin -= 10;
        
        Stroke oldStroke = g.getStroke ();
        g.setStroke (stroke);
        g.drawRoundRect (
        getZoomedDim (position.x)-x_shift_origin,
        getZoomedDim (position.y)-y_shift_origin,
        getZoomedDim (width),getZoomedDim (height),
        2*this.radius,
        2*this.radius);
        
        position.x += 10;
        position.y += 10;
        
        g.setStroke (oldStroke);
    }
    
    /** Getter for property radius.
     * @return Value of property radius.
     *
     */
    public int getRadius () {
        return radius;
    }
    
    /** Setter for property radius.
     * @param radius New value of property radius.
     *
     */
    public void setRadius (int radius) {
        this.radius = radius;
    }
    
    public void copyBaseReportElement (ReportElement destination, ReportElement source) {
        super.copyBaseReportElement (destination, source);
        
        if (destination instanceof RectangleReportElement &&
        source instanceof RectangleReportElement ) {
            ((RectangleReportElement)destination).setRadius (  ((RectangleReportElement)source).getRadius ());
        }
    }
    
}
