/*
* Created on 24.03.2005
*/
package com.keeny.report.components;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JComponent;
/**
*
* Beschreibung :
**/
public class Detail extends JComponent implements MouseListener, MouseMotionListener
{
private int detailXPos = 0;
private int detailYPos = 0;
private int detailHeight = 150;
private int detailWidth = 800;
private int dragHeight = 0;
private int resizeYPos = 0;
private int labelYPos = 0;
private Color headerColor = new Color (255, 218, 185);
private Color bgColor = new Color (112, 128, 144);
private Point dragPoint = null;
private boolean inMoveMode = false;
private boolean inResizeMode = false;
private boolean inDragMode = false;
private boolean selected = false;
private static int DETAIL_MIN_HEIGTH = 60;
private static int DETAIL_MAX_HEIGTH = ReportPaper.PAPER_HEIGHT;
/**
* Constructor
*/
public Detail ()
{
super ();
setSize(new Dimension (detailWidth, detailHeight+ReportPaper.PAPER_Y_POS));
detailXPos = ReportPaper.PAPER_X_POS;
if (getLocation ().getY() <= ReportPaper.PAPER_Y_POS)
detailYPos = ReportPaper.PAPER_Y_POS;
addMouseListener(this);
addMouseMotionListener(this);
}
/**
* Paint the Subreport
*/
public void paintComponent(Graphics g)
{
if (getLocation ().getY() <= ReportPaper.PAPER_Y_POS)
detailYPos = ReportPaper.PAPER_Y_POS;
else
detailYPos = ReportPaper.PAPER_Y_POS - 27;
// Paint Detail Identifier
g.setColor (headerColor);
g.fillRect (detailXPos, detailYPos, ReportPaper.PAPER_WIDTH-26, 20);
g.setColor (Color.black);
g.drawRect (detailXPos, detailYPos, ReportPaper.PAPER_WIDTH-26, 20);
g.drawString("Detail", detailXPos+2, detailYPos+15);
// Draw Detail Border
int tempDetailYPos = detailYPos + 20;
g.setColor(Color.white);
g.fillRect(detailXPos, tempDetailYPos, ReportPaper.PAPER_WIDTH-26, getHeight () - 20);
g.setColor(Color.black);
g.drawRect(detailXPos, tempDetailYPos, ReportPaper.PAPER_WIDTH-26, getHeight () - 20);
g.drawRect(detailXPos+1, tempDetailYPos+1, ReportPaper.PAPER_WIDTH-28, getHeight ()- 22);
// Draw Detail Points
g.setColor(Color.lightGray);
for (int i = detailXPos + 7; i < detailXPos+ReportPaper.PAPER_WIDTH-27; i+=7)
{
for (int o = 0; o < getHeight ()-7; o+=7)
{
g.drawOval(i, o+tempDetailYPos+7, 1, 1);
}
}
// Drwa Selection Border
if (selected)
{
g.setColor(Color.blue);
g.drawRect(detailXPos+1, tempDetailYPos-20, ReportPaper.PAPER_WIDTH-26, getHeight ());
g.drawRect(detailXPos+2, tempDetailYPos-19, ReportPaper.PAPER_WIDTH-28, getHeight ()- 2);
}
}
/**
* Mouse Dragged Event Handler
*/
public void mouseDragged(MouseEvent e)
{
int x = e.getX ();
int y = e.getY ();
if (inResizeMode)
{
detailHeight = y;
if (detailHeight > DETAIL_MIN_HEIGTH && detailHeight < DETAIL_MAX_HEIGTH)
setSize (new Dimension (detailWidth, detailHeight));
repaint ();
}
if (inMoveMode)
{
Point p1 = e.getPoint();
Point p2 = getLocation();
p1.translate(0, p2.y-dragPoint.y);
setLocation(p1);
}
}
/**
* Mouse Pressed Action Handler
*/
public void mousePressed(MouseEvent e)
{
if (inResizeMode || inMoveMode)
{
inDragMode = true;
dragPoint = e.getPoint();
}
}
/**
* Mouse Released Event Handler
*/
public void mouseReleased(MouseEvent e)
{
if (inResizeMode || inMoveMode)
{
if (inDragMode)
{
inDragMode = false;
repaint ();
}
resizeYPos = 0;
}
}
/**
* Handle the Mouse Moved Event
*/
public void mouseMoved(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
int height = getHeight ();
// Move
int locX = (int)getLocation ().getX();
int locY = (int)getLocation ().getY();
if (y >= locY && y <= locY + 40)
{
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
inMoveMode = true;
}
else
{
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
inMoveMode = false;
}
// Resize
if (!inMoveMode)
{
if (y > height - 10 && y < height + 10)
{
setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
inResizeMode = true;
}
else
{
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
inResizeMode = false;
}
}
}
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent arg0) { }
public void mouseExited(MouseEvent arg0) { }
/**
* Set the Detail Selected
* @param select The Boolean
*/
public void setSelected (boolean select)
{
selected = select;
repaint ();
}
}