001: /*
002: * Copyright 2006-2007 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt.
007: *
008: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
009: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
010: * the license for the specific language governing your rights and limitations.
011: *
012: * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
013: */
014: package org.pentaho.reportdesigner.crm.report.model.layoutmanager;
015:
016: import org.jetbrains.annotations.NotNull;
017: import org.pentaho.reportdesigner.crm.report.model.ReportElement;
018: import org.pentaho.reportdesigner.lib.client.util.DoubleDimension;
019:
020: import java.awt.geom.Point2D;
021: import java.awt.geom.Rectangle2D;
022: import java.util.ArrayList;
023:
024: /**
025: * User: Martin
026: * Date: 21.02.2006
027: * Time: 09:28:04
028: */
029: public class NullReportLayoutManager extends ReportLayoutManager {
030: private boolean layoutInProgress;
031:
032: public void layoutReportElement(@NotNull
033: ReportElement reportElement) {
034: if (!layoutInProgress) {
035: layoutInProgress = true;
036:
037: ArrayList<ReportElement> children = reportElement
038: .getChildren();
039: for (ReportElement element : children) {
040: element.getOrigRectangle().setRect(
041: element.getPosition().getX(),
042: element.getPosition().getY(),
043: element.getMinimumSize().getWidth(),
044: element.getMinimumSize().getHeight());
045: element.getRectangle().setRect(
046: element.getPosition().getX(),
047: element.getPosition().getY(),
048: element.getMinimumSize().getWidth(),
049: element.getMinimumSize().getHeight());
050:
051: //cut off width/height
052: Rectangle2D bounds2D = new Rectangle2D.Double(0, 0,
053: reportElement.getRectangle().width,
054: reportElement.getRectangle().height);
055: Rectangle2D rect = bounds2D.createIntersection(element
056: .getRectangle());
057:
058: DoubleDimension ms = new DoubleDimension(rect
059: .getWidth(), rect.getHeight());
060: element.setMinimumSize(ms);
061:
062: if (element.getRectangle().x < 0) {
063: element.setPosition(new Point2D.Double(0, element
064: .getPosition().getY()));
065: }
066: if (element.getRectangle().y < 0) {
067: element.setPosition(new Point2D.Double(element
068: .getPosition().getX(), 0));
069: }
070: if (element.getRectangle().x
071: + element.getRectangle().width > reportElement
072: .getRectangle().width) {
073: element
074: .setPosition(new Point2D.Double(
075: reportElement.getRectangle().width
076: - (element.getRectangle().x + element
077: .getRectangle().width),
078: element.getPosition().getY()));
079: }
080: if (element.getRectangle().y
081: + element.getRectangle().height > reportElement
082: .getRectangle().height) {
083: element.setPosition(new Point2D.Double(element
084: .getPosition().getX(), reportElement
085: .getRectangle().height
086: - (element.getRectangle().y + element
087: .getRectangle().height)));
088: }
089: }
090:
091: layoutInProgress = false;
092: }
093: }
094:
095: @NotNull
096: public Rectangle2D.Double getDestinationRect(@NotNull
097: ReportElement band, @NotNull
098: ArrayList<ReportElement> elementsToInsert) {
099: return new Rectangle2D.Double(0, 0, band.getRectangle().width,
100: band.getRectangle().height);
101: }
102: }
|