001: /*
002: * Copyright (C) 2005 - 2008 JasperSoft Corporation. All rights reserved.
003: * http://www.jaspersoft.com.
004: *
005: * Unless you have purchased a commercial license agreement from JasperSoft,
006: * the following license terms apply:
007: *
008: * This program is free software; you can redistribute it and/or modify
009: * it under the terms of the GNU General Public License version 2 as published by
010: * the Free Software Foundation.
011: *
012: * This program is distributed WITHOUT ANY WARRANTY; and without the
013: * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
014: * See the GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
018: * or write to:
019: *
020: * Free Software Foundation, Inc.,
021: * 59 Temple Place - Suite 330,
022: * Boston, MA USA 02111-1307
023: *
024: *
025: *
026: *
027: * BandDraggedOperation.java
028: *
029: * Created on 19 giugno 2003, 23.23
030: *
031: */
032:
033: package it.businesslogic.ireport.undo;
034:
035: import it.businesslogic.ireport.gui.event.*;
036: import it.businesslogic.ireport.*;
037: import it.businesslogic.ireport.gui.*;
038: import it.businesslogic.ireport.util.*;
039: import java.awt.*;
040:
041: import java.util.*;
042:
043: /**
044: * This class handle the band dragged operation.
045: * As all operations, the costructor take the JReportFrame (owner of the element)
046: * The ReportElement is not cloned, this can be a problem if not all undo operations
047: * are correctly logged and handled.
048: * This undo operation contains the band dragged and all elements that was repositioned
049: * after the draging.
050: * It reuse a lot of code of TransformElementsOperation.
051: * @author Giulio Toffoli
052: */
053: public class BandDraggedOperation implements
054: it.businesslogic.ireport.UndoOperation {
055:
056: /*
057: * The report elements that was inserted.
058: */
059: private Vector transformations = null;
060: private int bandDelta = 0;
061:
062: private JReportFrame jrf = null;
063:
064: private Band band;
065:
066: /** Creates a new instance of InsertElementOperation */
067: public BandDraggedOperation(JReportFrame jrf, Band band) {
068: this .transformations = new Vector();
069: this .band = band;
070: this .jrf = jrf;
071: }
072:
073: public void redo() {
074: if (jrf == null)
075: return;
076:
077: band.setHeight(band.getHeight() + bandDelta);
078:
079: //jrf.setSelectedElement(null);
080: Enumeration e = this .getTransformations().elements();
081: while (e.hasMoreElements()) {
082: ElementTransformation pe = (ElementTransformation) e
083: .nextElement();
084: ReportElement element = pe.element;
085: // Add element....
086: //jrf.addSelectedElement( element );
087:
088: element.getPosition().x = pe.newBounds.x;
089: element.getPosition().y = pe.newBounds.y;
090: element.setWidth(pe.newBounds.width);
091: element.setHeight(pe.newBounds.height);
092:
093: element.updateBounds();
094: jrf
095: .fireReportListenerReportElementsChanged(new ReportElementChangedEvent(
096: jrf, element,
097: ReportElementChangedEvent.CHANGED));
098: //jrf.getSelectedElements().remove( element );
099: //jrf.fireReportListenerReportElementsChanged(new ReportElementChangedEvent(jrf, element , ReportElementChangedEvent.REMOVED));
100: }
101: jrf.setIsDocDirty(true);
102: jrf.getReportPanel().repaint();
103: }
104:
105: public void undo() {
106: if (jrf == null)
107: return;
108:
109: band.setHeight(band.getHeight() - bandDelta);
110:
111: //jrf.setSelectedElement(null);
112: for (int i = this .getTransformations().size() - 1; i >= 0; --i) {
113: ElementTransformation pe = (ElementTransformation) getTransformations()
114: .get(i);
115: ReportElement element = pe.element;
116: // Add element....
117: //jrf.addSelectedElement( element );
118:
119: element.getPosition().x = pe.oldBounds.x;
120: element.getPosition().y = pe.oldBounds.y;
121: element.setWidth(pe.oldBounds.width);
122: element.setHeight(pe.oldBounds.height);
123:
124: element.updateBounds();
125: jrf
126: .fireReportListenerReportElementsChanged(new ReportElementChangedEvent(
127: jrf, element,
128: ReportElementChangedEvent.CHANGED));
129: //jrf.getSelectedElements().remove( element );
130: //jrf.fireReportListenerReportElementsChanged(new ReportElementChangedEvent(jrf, element , ReportElementChangedEvent.REMOVED));
131: }
132: jrf.setIsDocDirty(true);
133: jrf.getReportPanel().repaint();
134: }
135:
136: public String toString() {
137: return "band resize";
138: }
139:
140: /** Getter for property elements.
141: * @return Value of property elements.
142: *
143: * To add an element, use the addElement method. Don't access directly
144: * addElement from the vector elements
145: *
146: */
147: public java.util.Vector getTransformations() {
148: return transformations;
149: }
150:
151: /** Setter for property elements.
152: * @param elements New value of property elements.
153: *
154: */
155: public void setTransformations(java.util.Vector transformations) {
156: this .transformations = transformations;
157: }
158:
159: /*
160: * Add an element to the list of elements handled by this
161: * undo operation.
162: * You must supply the old and the new bound of you report.
163: * This make more simple the undo/redo operation...
164: *
165: */
166: public void addElement(ReportElement element, Rectangle oldBounds,
167: Rectangle newBounds) {
168:
169: ElementTransformation et = new ElementTransformation();
170: et.element = element;
171: et.oldBounds = oldBounds;
172: et.newBounds = newBounds;
173: getTransformations().add(et);
174: }
175:
176: /** Getter for property band.
177: * @return Value of property band.
178: *
179: */
180: public it.businesslogic.ireport.Band getBand() {
181: return band;
182: }
183:
184: /** Setter for property band.
185: * @param band New value of property band.
186: *
187: */
188: public void setBand(it.businesslogic.ireport.Band band) {
189: this .band = band;
190: }
191:
192: /** Getter for property bandDelta.
193: * @return Value of property bandDelta.
194: *
195: */
196: public int getBandDelta() {
197: return bandDelta;
198: }
199:
200: /** Setter for property bandDelta.
201: * @param bandDelta New value of property bandDelta.
202: *
203: */
204: public void setBandDelta(int bandDelta) {
205: this.bandDelta = bandDelta;
206: }
207:
208: }
|