KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > it > businesslogic > ireport > crosstab > gui > CrosstabEditorPanel


1 /*
2  * Copyright (C) 2005 - 2006 JasperSoft Corporation. All rights reserved.
3  * http://www.jaspersoft.com.
4  *
5  * Unless you have purchased a commercial license agreement from JasperSoft,
6  * the following license terms apply:
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as published by
10  * the Free Software Foundation.
11  *
12  * This program is distributed WITHOUT ANY WARRANTY; and without the
13  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
18  * or write to:
19  *
20  * Free Software Foundation, Inc.,
21  * 59 Temple Place - Suite 330,
22  * Boston, MA USA 02111-1307
23  *
24  *
25  *
26  *
27  * CrosstabEditorPanel.java
28  *
29  * Created on January 12, 2006, 4:19 PM
30  *
31  */

32
33 package it.businesslogic.ireport.crosstab.gui;
34
35 import it.businesslogic.ireport.CrosstabReportElement;
36 import it.businesslogic.ireport.FrameReportElement;
37 import it.businesslogic.ireport.OperationType;
38 import it.businesslogic.ireport.ReportElement;
39 import it.businesslogic.ireport.ReportElementFactory;
40 import it.businesslogic.ireport.ReportElementType;
41 import it.businesslogic.ireport.StaticTextReportElement;
42 import it.businesslogic.ireport.TransformationType;
43 import it.businesslogic.ireport.crosstab.CrosstabCell;
44 import it.businesslogic.ireport.crosstab.CrosstabGroup;
45 import it.businesslogic.ireport.gui.MainFrame;
46 import it.businesslogic.ireport.gui.event.ReportElementChangedEvent;
47 import it.businesslogic.ireport.undo.CrosstabColumnDraggedOperation;
48 import it.businesslogic.ireport.undo.CrosstabRowDraggedOperation;
49 import it.businesslogic.ireport.undo.InsertElementOperation;
50 import it.businesslogic.ireport.undo.TransformElementsOperation;
51 import it.businesslogic.ireport.util.LanguageChangedEvent;
52 import it.businesslogic.ireport.util.LanguageChangedListener;
53 import java.awt.Color JavaDoc;
54 import java.awt.Cursor JavaDoc;
55 import java.awt.Dimension JavaDoc;
56 import java.awt.Graphics JavaDoc;
57 import java.awt.Graphics2D JavaDoc;
58 import java.awt.Point JavaDoc;
59 import java.awt.Rectangle JavaDoc;
60 import java.awt.RenderingHints JavaDoc;
61 import java.awt.Shape JavaDoc;
62 import java.awt.Stroke JavaDoc;
63 import java.awt.geom.AffineTransform JavaDoc;
64 import java.util.ArrayList JavaDoc;
65 import java.util.Enumeration JavaDoc;
66 import java.util.Iterator JavaDoc;
67 import java.util.List JavaDoc;
68 import java.util.Vector JavaDoc;
69 import it.businesslogic.ireport.Style;
70 import it.businesslogic.ireport.TextFieldReportElement;
71 import it.businesslogic.ireport.TextReportElement;
72 import it.businesslogic.ireport.gui.FieldPatternDialog;
73 import it.businesslogic.ireport.gui.JReportFrame;
74 import it.businesslogic.ireport.gui.command.FormatCommand;
75 import it.businesslogic.ireport.gui.event.ReportElementsSelectionEvent;
76 import it.businesslogic.ireport.undo.ChangeEmentsOrderOperation;
77 import it.businesslogic.ireport.undo.DeleteElementsOperation;
78 import it.businesslogic.ireport.undo.PasteStyleOperation;
79 import it.businesslogic.ireport.undo.ReplacedElementsOperation;
80 import java.awt.datatransfer.DataFlavor JavaDoc;
81 import java.awt.datatransfer.Transferable JavaDoc;
82 import java.awt.dnd.DnDConstants JavaDoc;
83 import java.awt.dnd.DropTarget JavaDoc;
84 import java.awt.dnd.DropTargetContext JavaDoc;
85 import it.businesslogic.ireport.util.I18n;
86
87 /**
88  *
89  * @author gtoffoli
90  */

91 public class CrosstabEditorPanel extends javax.swing.JPanel JavaDoc implements java.awt.dnd.DropTargetListener JavaDoc {
92
93     // Menus...
94
private javax.swing.JMenu JavaDoc jMenuAlign;
95     private javax.swing.JMenuItem JavaDoc jMenuItemAlignLeft;
96     private javax.swing.JMenuItem JavaDoc jMenuItemAlignRight;
97     private javax.swing.JMenuItem JavaDoc jMenuItemAlignTop;
98     private javax.swing.JMenuItem JavaDoc jMenuItemAlignBottom;
99     private javax.swing.JSeparator JavaDoc jSeparator19;
100     private javax.swing.JMenuItem JavaDoc jMenuItemAlignVerticalAxis;
101     private javax.swing.JMenuItem JavaDoc jMenuItemAlignHorizontalAxis;
102     private javax.swing.JMenu JavaDoc jMenuSize;
103     private javax.swing.JMenuItem JavaDoc jMenuItemSameWidth;
104     private javax.swing.JMenuItem JavaDoc jMenuItemSameWidthMax;
105     private javax.swing.JMenuItem JavaDoc jMenuItemSameWidthMin;
106     private javax.swing.JSeparator JavaDoc jSeparator17;
107     private javax.swing.JMenuItem JavaDoc jMenuItemSameHeight;
108     private javax.swing.JMenuItem JavaDoc jMenuItemSameHeightMax;
109     private javax.swing.JMenuItem JavaDoc jMenuItemSameHeightMin;
110     private javax.swing.JSeparator JavaDoc jSeparator18;
111     private javax.swing.JMenuItem JavaDoc jMenuItemSameSize;
112     private javax.swing.JMenu JavaDoc jMenuPosition;
113     private javax.swing.JMenuItem JavaDoc jMenuItemCenterH;
114     private javax.swing.JMenuItem JavaDoc jMenuItemCenterV;
115     private javax.swing.JMenuItem JavaDoc jMenuItemCenterInCell;
116     private javax.swing.JMenuItem JavaDoc jMenuItemJoinLeft;
117     private javax.swing.JMenuItem JavaDoc jMenuItemJoinRight;
118     private javax.swing.JSeparator JavaDoc jSeparator5;
119     private javax.swing.JMenuItem JavaDoc jMenuHSpacing;
120     private javax.swing.JMenuItem JavaDoc jMenuItemHSMakeEqual;
121     private javax.swing.JMenuItem JavaDoc jMenuItemHSIncrease;
122     private javax.swing.JMenuItem JavaDoc jMenuItemHSDecrease;
123     private javax.swing.JMenuItem JavaDoc jMenuItemHSRemove;
124     private javax.swing.JMenuItem JavaDoc jMenuVSpacing;
125     private javax.swing.JMenuItem JavaDoc jMenuItemVSMakeEqual;
126     private javax.swing.JMenuItem JavaDoc jMenuItemVSIncrease;
127     private javax.swing.JMenuItem JavaDoc jMenuItemVSDecrease;
128     private javax.swing.JMenuItem JavaDoc jMenuItemVSRemove;
129     private javax.swing.JSeparator JavaDoc jSeparator8;
130     private javax.swing.JMenuItem JavaDoc jMenuItemBringToFront;
131     private javax.swing.JMenuItem JavaDoc jMenuItemSendToBack;
132
133     private javax.swing.JMenuItem JavaDoc jMenuItemFillCell;
134     private javax.swing.JMenuItem JavaDoc jMenuItemFillCellH;
135     private javax.swing.JMenuItem JavaDoc jMenuItemFillCellV;
136
137     private double zoomFactor = 2.0;
138     private boolean animation = false;
139
140     private java.util.List JavaDoc openedNodesDocumentStructure = null;
141
142     private boolean defaultCellMode = false;
143     /**
144      * It contains the number of row ready to be dragged.
145      **/

146     private int readyToDragCellVertically = -1;
147
148     /**
149      * It contains the number of column ready to be dragged
150      **/

151     private int readyToDragCellHorizontally = -1;
152
153     /**
154      * Point from wich a drag operation is started
155      **/

156     private Point JavaDoc dragging_origin = null;
157
158     /**
159      * True if I'm dragging a cell...
160      **/

161     private boolean cell_dragging = false;
162
163     private int newObjectType = ReportElementType.NONE;
164     private boolean resistenceExceeded = false;
165
166     /**
167      * This flag is true if we are trasforming elements...
168      */

169     private boolean trasforming = false;
170     /**
171      * The type of transformation (see TransformationTypes)...
172      */

173     private int transformation_type= TransformationType.TRANSFORMATION_NONE;
174     /**
175      * Point to start the calculation of transformation delta
176      */

177     private Point JavaDoc transformation_origin=null;
178     /**
179      * Point to end the calculation of transformation delta
180      */

181     private Point JavaDoc transformation_origin_end=null;
182     private Point JavaDoc transformation_undo_delta=null;
183     private boolean firstXORDrawTransforming = true;
184     private boolean firstXORDraw = true ;
185     private Rectangle JavaDoc transformationOldBound = null;
186
187     private JReportFrame parentReportFrame = null;
188
189     /**
190      * Point to start the calculation of the new object
191      */

192     private Point JavaDoc newObjectOrigin = null;
193
194     /**
195      * This flag is true if we are selecting elements drawing a rectangle...
196      */

197     private boolean drag_selection_mode = false;
198     /**
199      * The origin of the selection rectangle...
200      */

201     private java.awt.Point JavaDoc drag_selection_origin = null;
202     /**
203      * The end of the selection rectangle...
204      */

205     private java.awt.Point JavaDoc drag_selection_end = null;
206     /**
207      * The flag is used to handle XOR operation on rectangle selection
208      */

209     private boolean first_draw_selection_rect = true;
210
211     /**
212      * Stroke to use when draw selection rectangle
213      */

214     private java.awt.Stroke JavaDoc selectionStroke = null;
215
216     /**
217      * Position of the mouse of the last draw operation. Used to restore XOR draw.
218      **/

219     private Point JavaDoc mouse = new Point JavaDoc(0,0);
220
221     private Vector JavaDoc rowBands = new Vector JavaDoc();
222     private Vector JavaDoc columnBands = new Vector JavaDoc();
223
224     /**
225      * This array stores vertical lines positions (the number of lines is:
226      * [# of row groups] + [# of column groups] + [# of total column groups]
227      */

228     private List JavaDoc columns = new ArrayList JavaDoc();
229     /**
230      * This array stores horizontal lines positions (the number of lines is:
231      * [# of column groups] + [# of row groups] + [# of total row groups]
232      */

233     private List JavaDoc rows = new ArrayList JavaDoc();
234
235     /**
236      * this vector contains the current selection in the editor
237      */

238     private Vector JavaDoc selectedElements = new Vector JavaDoc();
239
240
241     /**
242      * CrosstabCell selected when right mouse is pressed
243      */

244     private CrosstabCell selectedCell = null;
245
246
247     private static final javax.swing.ImageIcon JavaDoc crosstabCornerImage = new javax.swing.ImageIcon JavaDoc(CrosstabEditorPanel.class.getResource("/it/businesslogic/ireport/icons/crosstabcorner.png"));
248     private static final javax.swing.ImageIcon JavaDoc crosstabBorderImage = new javax.swing.ImageIcon JavaDoc(CrosstabEditorPanel.class.getResource("/it/businesslogic/ireport/icons/crosstabborder.png"));
249     private static final javax.swing.ImageIcon JavaDoc crosstabBorderHImage = new javax.swing.ImageIcon JavaDoc(CrosstabEditorPanel.class.getResource("/it/businesslogic/ireport/icons/crosstabborderh.png"));
250
251     private CrosstabEditor editor = null;
252     /** Creates new form CrosstabEditorPanel */
253     public CrosstabEditorPanel() {
254         initComponents();
255
256         selectionStroke = new java.awt.BasicStroke JavaDoc(
257                 (float)(2f),
258                 java.awt.BasicStroke.CAP_BUTT,
259                 java.awt.BasicStroke.JOIN_BEVEL,
260                 0f,
261                 new float[]{5f, 3f},
262                 0f);
263
264          addFormatItemsToMenu(jPopupMenuCrosstabReporteElement);
265          new DropTarget JavaDoc( this, // component
266
DnDConstants.ACTION_COPY_OR_MOVE, // actions
267
this); // DropTargetListener
268

269          
270          I18n.addOnLanguageChangedListener( new LanguageChangedListener() {
271              public void languageChanged(LanguageChangedEvent evt) {
272                 applyI18n();
273              }
274          });
275          applyI18n();
276     }
277
278     public void updateSize() {
279         int maxWidth = 0;
280         int maxHeight = 0;
281
282         if (getColumns().size() > 0) maxWidth = ((Integer JavaDoc)getColumns().get( getColumns().size() -1)).intValue();
283         if (getRows().size() > 0) maxHeight = ((Integer JavaDoc)getRows().get( getRows().size() -1)).intValue();
284
285         if (getRows().size() == 0) maxHeight += getRowHeight("");
286         if (getColumns().size() == 0) maxWidth += getColumnWidth("");
287
288
289
290         if (getCrosstabElement().getHeight() > maxHeight) maxHeight = getCrosstabElement().getHeight();
291         if (getCrosstabElement().getWidth() > maxWidth) maxWidth = getCrosstabElement().getWidth();
292         Dimension JavaDoc d = new Dimension JavaDoc( (int)(maxWidth*getZoomFactor()+20),(int)(maxHeight*getZoomFactor()+20));
293         this.setSize( d );
294         this.setPreferredSize(d);
295         this.setMinimumSize(d);
296         this.setMaximumSize( d);
297     }
298
299     public CrosstabReportElement getCrosstabElement() {
300         if (getEditor() != null) return getEditor().getCrosstabElement();
301         return null;
302     }
303
304     /**
305      * This method paint the wthite surface of the crossrtab
306      **/

307     public void paintDocument(Graphics2D JavaDoc g2) {
308         CrosstabReportElement crosstabElement = getCrosstabElement();
309
310         if (crosstabElement == null) return;
311
312         g2.setPaint( java.awt.Color.WHITE);
313
314         int maxWidth = 0;
315         int maxHeight = 0;
316
317         if (getColumns().size() > 0) maxWidth = ((Integer JavaDoc)getColumns().get( getColumns().size() -1)).intValue();
318         if (getRows().size() > 0) maxHeight = ((Integer JavaDoc)getRows().get( getRows().size() -1)).intValue();
319
320         if (getRows().size() == 0) maxHeight += getRowHeight("");
321         if (getColumns().size() == 0) maxWidth += getColumnWidth("");
322
323         if (getCrosstabElement().getHeight() > maxHeight) maxHeight = getCrosstabElement().getHeight();
324         if (getCrosstabElement().getWidth() > maxWidth) maxWidth = getCrosstabElement().getWidth();
325
326         int zoomedCrosstabWidth = getZoomedDim(maxWidth);
327         int zoomedCrosstabHeight = getZoomedDim(maxHeight);
328
329         g2.fillRect(10,10, zoomedCrosstabWidth, zoomedCrosstabHeight);
330
331         // BORDER TOP...
332
AffineTransform JavaDoc at = new AffineTransform JavaDoc();
333         at.translate(17,0);
334         at.scale(zoomedCrosstabWidth-14,1);
335         g2.drawImage(crosstabBorderImage.getImage(),at, this);
336
337         // BORDER BOTTOM
338
at = new AffineTransform JavaDoc();
339         at.translate(17,zoomedCrosstabHeight+20);
340         at.scale(zoomedCrosstabWidth-14,1);
341         at.scale(1,-1);
342         g2.drawImage(crosstabBorderImage.getImage(),at, this);
343
344         // LEFT
345
at = new AffineTransform JavaDoc();
346         at.translate(0,17);
347         at.scale(1,zoomedCrosstabHeight-14);
348         g2.drawImage(crosstabBorderHImage.getImage(),at, this);
349
350         // RIGHT
351
at = new AffineTransform JavaDoc();
352         at.translate(zoomedCrosstabWidth+20,17);
353         at.scale(1,zoomedCrosstabHeight-14);
354         at.scale(-1,1);
355         g2.drawImage(crosstabBorderHImage.getImage(),at, this);
356
357
358         // CORNERS
359
g2.drawImage(crosstabCornerImage.getImage(),0,0, this);
360         at = new AffineTransform JavaDoc();
361         at.translate(0, zoomedCrosstabHeight+crosstabCornerImage.getIconHeight()+3);
362         at.scale(1,-1);
363         g2.drawImage(crosstabCornerImage.getImage(),at, this);
364
365         at = new AffineTransform JavaDoc();
366
367         //at.scale(-1,1); // Horizontal flip
368
at.translate(zoomedCrosstabWidth +crosstabCornerImage.getIconWidth()+3,0);
369         at.scale(-1,1);
370         g2.drawImage(crosstabCornerImage.getImage(),at, this);
371
372         at.translate(0, zoomedCrosstabHeight+crosstabCornerImage.getIconHeight()+3);
373         at.scale(1,-1);
374         g2.drawImage(crosstabCornerImage.getImage(),at, this);
375
376         // Now we have to paint the cells...
377

378
379
380         maxWidth = 0;
381         maxHeight = 0;
382
383
384
385         g2.setColor(new Color JavaDoc(220,220,255));
386
387         if (getColumns().size() > 0) maxWidth = ((Integer JavaDoc)getColumns().get( getColumns().size() -1)).intValue();
388         if (getRows().size() > 0) maxHeight = ((Integer JavaDoc)getRows().get( getRows().size() -1)).intValue();
389
390         for (int i=0; i< getColumns().size(); ++i) {
391             int x = ((Integer JavaDoc)getColumns().get(i)).intValue();
392             if (x>0) g2.drawLine( 10 + getZoomedDim(x)-1, 10, 10 + getZoomedDim(x)-1, getZoomedDim(maxHeight)-1+10);
393         }
394
395         for (int i=0; i< getRows().size(); ++i) {
396             int y = ((Integer JavaDoc)getRows().get(i)).intValue();
397
398             if (y>0) g2.drawLine( 10, 10 + getZoomedDim(y)-1, getZoomedDim(maxWidth)-1+10, 10+ getZoomedDim(y)-1);
399         }
400
401
402         //g2.setColor(new Color(250,250,250));
403
//g2.fillRect(10,10, getZoomedDim( ((Integer)getColumns().get( getCrosstabElement().getRowGroups().size() )).intValue())-1,
404
// getZoomedDim( ((Integer)getRows().get( getCrosstabElement().getColumnGroups().size() )).intValue())-1);
405

406
407         // FIRST DROW THE BACKGROUND FOR EACH CELLS
408
for (int i=0; i<getCrosstabElement().getCells().size(); ++i) {
409             CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(i);
410
411             if (cell.getType() != cell.NODATA_CELL && cell.getWidth() > 0 && cell.getHeight() > 0) {
412                 cell.drawCell( g2, getZoomFactor());
413                 cell.drawCellBox(g2, getZoomFactor(),
414                 (cell.getType() == cell.HEADER_CELL || cell.getType() == cell.CT_HEADER_CELL) && cell.getTop() == ((Integer JavaDoc)rows.get(getCrosstabElement().getColumnGroups().size())).intValue(),
415                 (cell.getType() == cell.HEADER_CELL || cell.getType() == cell.CT_HEADER_CELL) && cell.getLeft() == ((Integer JavaDoc)columns.get(getCrosstabElement().getRowGroups().size())).intValue());
416             }
417         }
418
419         // DRAW ALL ELEMENTS...
420
for (int i=0; i< getCrosstabElement().getElements().size(); ++i) {
421                 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
422                 if (re.getCell().getType() != CrosstabCell.NODATA_CELL)
423                 {
424                     re.drawObject(g2,getZoomFactor(),0,0);
425                 }
426         }
427
428         // THEN DRAW THE BOX FOR EACH CELL...
429
for (int i=0; i<getCrosstabElement().getCells().size(); ++i) {
430             CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(i);
431             if (cell.getType() != cell.NODATA_CELL && cell.getWidth() > 0 && cell.getHeight() > 0) {
432
433                // cell.drawCellBox(g2, getZoomFactor());
434
}
435         }
436
437         if (isDefaultCellMode())
438         {
439             //g2.setColor(new Color(255,255,255,200));
440
//g2.fillRect(10,10, zoomedCrosstabWidth, zoomedCrosstabHeight);
441

442             for (int i=0; i<getCrosstabElement().getCells().size(); ++i) {
443             CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(i);
444             if (cell.getType() == cell.NODATA_CELL) {
445                 cell.drawCell( g2, getZoomFactor());
446                 cell.drawCellBox(g2, getZoomFactor(), false, false);
447
448                     // DRAW ALL ELEMENTS...
449
for (int j=0; j< getCrosstabElement().getElements().size(); ++j) {
450                             ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
451                             if (re.getCell() == cell)
452                             {
453                                 re.drawObject(g2,getZoomFactor(),0,0);
454                             }
455                     }
456                 }
457             }
458         }
459
460         // DRAW SELECTION...
461
for (int i=0; i< getCrosstabElement().getElements().size(); ++i) {
462                 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
463                 if (getSelectedElements().contains(re))
464                 {
465                     re.drawCorona(g2,getZoomFactor(),0,0, re == getSelectedElements().firstElement() );
466                 }
467         }
468
469     }
470
471
472     public void paint(Graphics JavaDoc g) {
473         if (animation) return;
474         try {
475         super.paint(g);
476
477         
478         Graphics2D JavaDoc g2 = (Graphics2D JavaDoc)g;
479         Shape JavaDoc s = g2.getClip();
480         
481         if (getCrosstabElement() == null) return;
482
483         if (MainFrame.getMainInstance().getProperties().getProperty("Antialias","true").equals("false"))
484         {
485
486             g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
487                     RenderingHints.VALUE_ANTIALIAS_OFF);
488             g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
489                     RenderingHints.VALUE_STROKE_PURE);
490             g2.setRenderingHint(RenderingHints.KEY_DITHERING,
491                     RenderingHints.VALUE_DITHER_DISABLE);
492         }
493         else
494         {
495
496             g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
497                     RenderingHints.VALUE_ANTIALIAS_ON);
498             g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
499                     RenderingHints.VALUE_STROKE_DEFAULT);
500             g2.setRenderingHint(RenderingHints.KEY_DITHERING,
501                     RenderingHints.VALUE_DITHER_ENABLE);
502         }
503
504         
505             paintDocument(g2);
506             
507             g2.setClip(s);
508          
509         
510         } catch (Throwable JavaDoc ex)
511         {
512             ex.printStackTrace();
513         }
514         
515     }
516
517     public CrosstabEditor getEditor() {
518         return editor;
519     }
520
521     public void setEditor(CrosstabEditor editor) {
522         this.editor = editor;
523         this.updateGrid();
524         this.invalidate();
525         this.repaint();
526     }
527
528     public double getZoomFactor() {
529         return zoomFactor;
530     }
531
532     public void setZoomFactor(double zoomFactor) {
533         this.zoomFactor = zoomFactor;
534         updateSize();
535         this.repaint();
536     }
537
538
539     /**
540      * Return an int. It performs zoomFactor*dim and a round.
541      */

542     public int getZoomedDim(int dim) {
543         if (zoomFactor == 1.0 || dim == 0) return dim;
544         return (int)((double)dim*zoomFactor);
545     }
546
547     /**
548      * Return an int. It performs zoomFactor*dim and a round.
549      */

550     public int getRealDim(int dim) {
551         if (zoomFactor == 1.0 || dim == 0) return dim;
552         return (int)((double)dim/zoomFactor);
553     }
554
555
556
557     /**
558      * This method update the cell matrix according with groups and cells contained in
559      * the CrosstabElement...
560      **/

561     public void updateGrid() {
562         if (getCrosstabElement() == null) return;
563
564         try {
565             getColumns().clear();
566             getRows().clear();
567             int current_x = 0;
568             int current_y = 0;
569
570             // Adjusting cells dimensions...
571
CrosstabCell mainCell = findCell("","");
572             for (int k=0; k<getCrosstabElement().getCells().size(); ++k) {
573                 CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(k);
574
575                 cell.setParent( this.getCrosstabElement());
576
577                 if (cell.getType() == cell.DETAIL_CELL) {
578                     if (cell.getHeight() == 0) cell.setHeight( getRowHeight( cell.getRowTotalGroup() ) );
579                     if (cell.getWidth() == 0) cell.setWidth( getColumnWidth( cell.getColumnTotalGroup() ) );
580                 }
581             }
582
583             addNotDefinedCells();
584
585             getColumns().add( new Integer JavaDoc(current_x) );
586
587             for (int i=0; i<getCrosstabElement().getRowGroups().size(); ++i) {
588                 CrosstabGroup cg = (CrosstabGroup)getCrosstabElement().getRowGroups().elementAt(i);
589                 cg.getHeaderCell().setLeft( current_x );
590                 cg.getTotalCell().setLeft( current_x );
591                 current_x = current_x + cg.getSize();
592                 getColumns().add( new Integer JavaDoc(current_x) );
593             }
594
595             ArrayList JavaDoc columnWidths = new ArrayList JavaDoc();
596             for (int i=getCrosstabElement().getColumnGroups().size()-1; i>=0; --i) {
597                 CrosstabGroup cg = (CrosstabGroup)getCrosstabElement().getColumnGroups().elementAt(i);
598
599                 if (i == getCrosstabElement().getColumnGroups().size()-1)
600                 {
601                     columnWidths.add( new Integer JavaDoc( getColumnWidth("")));
602                 }
603                 if (!cg.getTotalPosition().equals("Start"))
604                 {
605                    columnWidths.add( new Integer JavaDoc( getColumnWidth(cg.getName())));
606                 }
607                 else
608                 {
609                     columnWidths.add(0, new Integer JavaDoc( getColumnWidth(cg.getName())));
610                 }
611
612             }
613
614             for (int i=0; i<columnWidths.size(); ++i)
615             {
616                 current_x += ((Integer JavaDoc)columnWidths.get(i)).intValue();
617                 getColumns().add( new Integer JavaDoc(current_x));
618             }
619             if (getCrosstabElement().getColumnGroups().size() == 0) getColumns().add( new Integer JavaDoc(current_x += getColumnWidth("")));
620
621             // Look for all rows...
622

623             getRows().add( new Integer JavaDoc(current_y) );
624             for (int i=0; i<getCrosstabElement().getColumnGroups().size(); ++i) {
625                 CrosstabGroup cg = (CrosstabGroup)getCrosstabElement().getColumnGroups().elementAt(i);
626                 cg.getHeaderCell().setTop( current_y );
627                 cg.getTotalCell().setTop( current_y );
628                 current_y = current_y + cg.getSize();
629                 getRows().add( new Integer JavaDoc(current_y) );
630
631             }
632
633             ArrayList JavaDoc rowHeights = new ArrayList JavaDoc();
634             for (int i=getCrosstabElement().getRowGroups().size()-1; i>=0; --i) {
635                 CrosstabGroup cg = (CrosstabGroup)getCrosstabElement().getRowGroups().elementAt(i);
636
637                 if (i == getCrosstabElement().getRowGroups().size()-1)
638                 {
639                     rowHeights.add( new Integer JavaDoc( getRowHeight("")));
640                 }
641                 if (!cg.getTotalPosition().equals("Start"))
642                 {
643                    rowHeights.add( new Integer JavaDoc( getRowHeight(cg.getName())));
644                 }
645                 else
646                 {
647                     rowHeights.add(0, new Integer JavaDoc( getRowHeight(cg.getName())));
648                 }
649             }
650
651             for (int i=0; i<rowHeights.size(); ++i)
652             {
653                 current_y += ((Integer JavaDoc)rowHeights.get(i)).intValue();
654                 getRows().add( new Integer JavaDoc(current_y));
655             }
656             if (getCrosstabElement().getRowGroups().size() == 0) getRows().add( new Integer JavaDoc(current_y += getRowHeight("")));
657
658             int columnGroups = getCrosstabElement().getColumnGroups().size();
659             int rowGroups = getCrosstabElement().getRowGroups().size();
660
661
662
663
664             int currentTopRowNumber = columnGroups;
665             int currentBottomRowNumber = columnGroups + rowGroups + 1;
666
667             for (int i=0; i<getCrosstabElement().getRowGroups().size(); ++i) {
668                 CrosstabGroup cg = (CrosstabGroup)getCrosstabElement().getRowGroups().elementAt(i);
669
670                 cg.getHeaderCell().setLeftIndex( i );
671                 cg.getHeaderCell().setLeft( ((Integer JavaDoc)getColumns().get(i)).intValue() );
672                 cg.getHeaderCell().setTopIndex( (cg.getTotalPosition().equals("Start")) ? currentTopRowNumber+1 : currentTopRowNumber );
673                 cg.getHeaderCell().setTop( ((Integer JavaDoc)getRows().get( cg.getHeaderCell().getTopIndex() )).intValue() );
674                 cg.getHeaderCell().setRightIndex( i+1 );
675                 cg.getHeaderCell().setWidth( cg.getSize() );
676                 cg.getHeaderCell().setBottomIndex( (cg.isHasTotal() && cg.getTotalPosition().equals("Start")) ? currentBottomRowNumber : currentBottomRowNumber - 1 );
677                 cg.getHeaderCell().setHeight( ((Integer JavaDoc)getRows().get( cg.getHeaderCell().getBottomIndex() )).intValue() -cg.getHeaderCell().getTop());
678
679                 cg.getTotalCell().setLeftIndex( i );
680                 cg.getTotalCell().setLeft( cg.getHeaderCell().getLeft());
681                 cg.getTotalCell().setTopIndex( (cg.getTotalPosition().equals("Start")) ? currentTopRowNumber : currentBottomRowNumber-1 );
682                 cg.getTotalCell().setTop( ((Integer JavaDoc)getRows().get( cg.getTotalCell().getTopIndex() )).intValue() );
683                 cg.getTotalCell().setRightIndex( rowGroups );
684                 cg.getTotalCell().setWidth( ((Integer JavaDoc)getColumns().get( rowGroups)).intValue() - cg.getTotalCell().getLeft() );
685                 cg.getTotalCell().setBottomIndex( (cg.isHasTotal() && cg.getTotalPosition().equals("Start")) ? currentTopRowNumber +1 : currentBottomRowNumber );
686                 cg.getTotalCell().setHeight( ((Integer JavaDoc)getRows().get( cg.getTotalCell().getBottomIndex() )).intValue() - cg.getTotalCell().getTop() );
687
688                 if (cg.getTotalPosition().equals("Start")) currentTopRowNumber++;
689                 else currentBottomRowNumber--;
690
691                 // Update all cells with rowTotalGroup this group
692
for (int k=0; k<getCrosstabElement().getCells().size(); ++k) {
693                     CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(k);
694
695                     if (cell.getRowTotalGroup().equals(cg.getName())) {
696
697                         cell.setTop(cg.getTotalCell().getTop());
698                         cell.setHeight( cg.getTotalCell().getHeight());
699                     }
700                 }
701             }
702
703             int currentLeftColumnNumber = rowGroups;
704             int currentRightColumnNumber = columnGroups + rowGroups + 1;
705             for (int i=0; i<getCrosstabElement().getColumnGroups().size(); ++i) {
706                 CrosstabGroup cg = (CrosstabGroup)getCrosstabElement().getColumnGroups().elementAt(i);
707
708                 // Count preceding total rows...
709

710                 cg.getHeaderCell().setLeftIndex( (cg.getTotalPosition().equals("Start")) ? currentLeftColumnNumber+1 : currentLeftColumnNumber );
711                 cg.getHeaderCell().setLeft( ((Integer JavaDoc)getColumns().get( cg.getHeaderCell().getLeftIndex())).intValue() );
712                 cg.getHeaderCell().setTopIndex( i );
713                 cg.getHeaderCell().setTop( ((Integer JavaDoc)getRows().get( i )).intValue() );
714                 cg.getHeaderCell().setRightIndex((cg.isHasTotal() && cg.getTotalPosition().equals("Start")) ? currentRightColumnNumber : currentRightColumnNumber - 1);
715                 cg.getHeaderCell().setWidth( ((Integer JavaDoc)getColumns().get(cg.getHeaderCell().getRightIndex()) ).intValue() -cg.getHeaderCell().getLeft());
716                 cg.getHeaderCell().setBottomIndex( i+1 );
717                 cg.getHeaderCell().setHeight( cg.getSize());
718
719                 cg.getTotalCell().setLeftIndex( (cg.getTotalPosition().equals("Start")) ? currentLeftColumnNumber : currentRightColumnNumber-1 );
720                 cg.getTotalCell().setLeft( ((Integer JavaDoc)getColumns().get( cg.getTotalCell().getLeftIndex() )).intValue() );
721                 cg.getTotalCell().setTopIndex( i );
722                 cg.getTotalCell().setTop( ((Integer JavaDoc)getRows().get( i)).intValue() );
723                 cg.getTotalCell().setRightIndex((cg.isHasTotal() && cg.getTotalPosition().equals("Start")) ? currentLeftColumnNumber +1 : currentRightColumnNumber);
724                 cg.getTotalCell().setWidth( ((Integer JavaDoc)getColumns().get( cg.getTotalCell().getRightIndex() )).intValue() - cg.getTotalCell().getLeft() );
725                 cg.getTotalCell().setBottomIndex( columnGroups );
726                 cg.getTotalCell().setHeight( ((Integer JavaDoc)getRows().get( columnGroups)).intValue() - cg.getTotalCell().getTop() );
727
728                 if (cg.getTotalPosition().equals("Start")) currentLeftColumnNumber++;
729                 else currentRightColumnNumber--;
730
731                 for (int k=0; k<getCrosstabElement().getCells().size(); ++k) {
732                     CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(k);
733
734                     if (cell.getColumnTotalGroup().equals(cg.getName())) {
735                         cell.setLeft(cg.getTotalCell().getLeft());
736                         cell.setWidth( cg.getTotalCell().getWidth());
737                     }
738                 }
739
740             }
741
742             // Update coordinates for the A0 cell
743

744             if (getCrosstabElement().getRowGroups().size() > 0)
745             {
746                 mainCell.setTopIndex(((CrosstabGroup)getCrosstabElement().getRowGroups().lastElement()).getHeaderCell().getTopIndex() );
747                 mainCell.setTop(((CrosstabGroup)getCrosstabElement().getRowGroups().lastElement()).getHeaderCell().getTop());
748             }
749             else
750             {
751                 mainCell.setTop(getCrosstabElement().getColumnGroups().size());
752                 mainCell.setTop(((Integer JavaDoc)getRows().get(getCrosstabElement().getColumnGroups().size())).intValue() );
753             }
754             mainCell.setBottomIndex(mainCell.getTopIndex() + 1);
755
756             if (getCrosstabElement().getColumnGroups().size() > 0)
757             {
758                 mainCell.setLeftIndex(((CrosstabGroup)getCrosstabElement().getColumnGroups().lastElement()).getHeaderCell().getLeftIndex() );
759                 mainCell.setLeft(((CrosstabGroup)getCrosstabElement().getColumnGroups().lastElement()).getHeaderCell().getLeft());
760             }
761             else
762             {
763                 mainCell.setLeftIndex(getCrosstabElement().getRowGroups().size());
764                 mainCell.setLeft(((Integer JavaDoc)getColumns().get(getCrosstabElement().getRowGroups().size())).intValue());
765             }
766             mainCell.setRightIndex(mainCell.getLeftIndex() + 1);
767
768
769             for (int k=0; k<getCrosstabElement().getCells().size(); ++k) {
770                 CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(k);
771
772                 if (cell.getType() == cell.DETAIL_CELL)
773                 {
774                     if (cell.getRowTotalGroup().equals("")) {
775
776                         cell.setTop(mainCell.getTop());
777                         cell.setTopIndex(mainCell.getTopIndex());
778                         cell.setBottomIndex(mainCell.getBottomIndex());
779                     }
780                     if (cell.getColumnTotalGroup().equals("")) {
781
782                         cell.setLeft(mainCell.getLeft());
783                         cell.setLeftIndex(mainCell.getLeftIndex());
784                         cell.setRightIndex(mainCell.getRightIndex());
785                     }
786
787                     cell.setTopIndex( getTotalRowTopIndex(cell.getRowTotalGroup()) );
788                     cell.setBottomIndex( cell.getTopIndex() +1);
789
790                     cell.setLeftIndex( getTotalColumnLeftIndex(cell.getColumnTotalGroup()) );
791                     cell.setRightIndex( cell.getLeftIndex() +1);
792                 }
793             }
794
795             // adding DEFAULT NO DATA CELL....
796
CrosstabCell detailCell = findCell( "", "");
797             boolean found = false;
798             for (int i=0; i<getCrosstabElement().getCells().size(); ++i)
799             {
800                 CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(i);
801                 if (cell.getType() == cell.NODATA_CELL)
802                 {
803                     cell.setTop( 0 );
804                     cell.setLeft( 0 );
805                     cell.setWidth( this.getCrosstabElement().getWidth() );
806                     cell.setHeight( this.getCrosstabElement().getHeight());
807                     cell.setTopIndex( 0 );
808                     cell.setLeftIndex( 0 );
809                     cell.setBottomIndex( 0 );
810                     cell.setRightIndex( 0 );
811                     found = true;
812                     break;
813                 }
814             }
815
816             if (!found)
817             {
818                 CrosstabCell defaultWhenNoDataCell= detailCell.cloneMe();
819                 defaultWhenNoDataCell.setType( defaultWhenNoDataCell.NODATA_CELL);
820                 defaultWhenNoDataCell.setParent( this.getCrosstabElement());
821                 defaultWhenNoDataCell.setName(null);
822                 defaultWhenNoDataCell.setTop( 0 );
823                 defaultWhenNoDataCell.setLeft( 0 );
824                 defaultWhenNoDataCell.setWidth( this.getCrosstabElement().getWidth() );
825                 defaultWhenNoDataCell.setHeight( this.getCrosstabElement().getHeight());
826                 defaultWhenNoDataCell.setTopIndex( 0 );
827                 defaultWhenNoDataCell.setLeftIndex( 0 );
828                 defaultWhenNoDataCell.setBottomIndex( 0 );
829                 defaultWhenNoDataCell.setRightIndex( 0 );
830                 getCrosstabElement().getCells().add(defaultWhenNoDataCell);
831             }
832
833             found = false;
834
835             // adding DEFAULT HEADER CELL....
836
for (int i=0; i<getCrosstabElement().getCells().size(); ++i)
837             {
838                 CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(i);
839                 if (cell.getType() == cell.CT_HEADER_CELL)
840                 {
841                     cell.setTop( 0 );
842                     cell.setTopIndex( 0 );
843                     cell.setLeft( 0 );
844                     cell.setLeftIndex( 0 );
845                     cell.setRightIndex( getCrosstabElement().getRowGroups().size() );
846                     cell.setWidth( ((Integer JavaDoc)getColumns().get( cell.getRightIndex() )).intValue() );
847                     cell.setBottomIndex( getCrosstabElement().getColumnGroups().size() );
848                     cell.setHeight( ((Integer JavaDoc)getRows().get( cell.getBottomIndex() )).intValue() );
849                     found = true;
850                     break;
851                 }
852             }
853
854             if (!found)
855             {
856
857                 CrosstabCell crossTabHeaderCell= new CrosstabCell();
858                 crossTabHeaderCell.setType( crossTabHeaderCell.CT_HEADER_CELL);
859                 crossTabHeaderCell.setParent( this.getCrosstabElement());
860                 crossTabHeaderCell.setName(null);
861                 crossTabHeaderCell.setTop( 0 );
862                 crossTabHeaderCell.setTopIndex( 0 );
863                 crossTabHeaderCell.setLeft( 0 );
864                 crossTabHeaderCell.setLeftIndex( 0 );
865                 crossTabHeaderCell.setRightIndex( getCrosstabElement().getRowGroups().size() );
866                 crossTabHeaderCell.setWidth( ((Integer JavaDoc)getColumns().get( crossTabHeaderCell.getRightIndex() )).intValue() );
867                 crossTabHeaderCell.setBottomIndex( getCrosstabElement().getColumnGroups().size() );
868                 crossTabHeaderCell.setHeight( ((Integer JavaDoc)getRows().get( crossTabHeaderCell.getBottomIndex() )).intValue() );
869                 getCrosstabElement().getCells().add(crossTabHeaderCell);
870             }
871
872             getRowBands().clear();
873
874             for (int i=1; i<getRows().size(); ++i)
875             {
876                 Vector JavaDoc rowBandContents = new Vector JavaDoc();
877                 for (int k=0; k<getCrosstabElement().getCells().size(); ++k) {
878                     CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(k);
879                     if (cell.getBottomIndex() == i)
880                     {
881                         rowBandContents.add(cell);
882                     }
883                 }
884                 getRowBands().add(rowBandContents);
885             }
886
887             getColumnBands().clear();
888
889             for (int i=1; i<getColumns().size(); ++i)
890             {
891                 Vector JavaDoc columnBandContents = new Vector JavaDoc();
892                 for (int k=0; k<getCrosstabElement().getCells().size(); ++k) {
893                     CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(k);
894                     if (cell.getRightIndex() == i)
895                     {
896                         columnBandContents.add(cell);
897                     }
898                 }
899                 getColumnBands().add(columnBandContents);
900             }
901
902
903
904             // Update all elements positions...
905
for (int i=0; i< getCrosstabElement().getElements().size(); ++i) {
906                 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
907
908                 re.getPosition().x = re.getRelativePosition().x + re.getCell().getLeft()+10;
909                 re.getPosition().y = re.getRelativePosition().y + re.getCell().getTop()+10;
910
911                 re.setPosition(re.position);
912                 re.trasform(new java.awt.Point JavaDoc(0,0),TransformationType.TRANSFORMATION_RESIZE_SE);
913
914             }
915
916         } catch (Exception JavaDoc ex) {
917             ex.printStackTrace();
918         }
919         updateSize();
920
921     }
922
923     public CrosstabCell findCell(String JavaDoc rowGroup, String JavaDoc columnGroup) {
924         if (getCrosstabElement() == null) return null;
925         for (int i=0; i< getCrosstabElement().getCells().size(); ++i) {
926             CrosstabCell cell = (CrosstabCell) getCrosstabElement().getCells().elementAt(i);
927             if (cell.getType() == cell.DETAIL_CELL &&
928                     cell.getRowTotalGroup().equals(rowGroup) &&
929                     cell.getColumnTotalGroup().equals(columnGroup)) {
930                 return cell;
931             }
932         }
933         return null;
934     }
935
936
937     /**
938      * Return the maximum width of a certain column. The column "" is the A0 cell width
939      */

940     public int getColumnWidth(String JavaDoc columnTotalGroup) {
941         int tmpWidth =-1;
942         for (int i=0; i< getCrosstabElement().getCells().size(); ++i) {
943             CrosstabCell cell = (CrosstabCell) getCrosstabElement().getCells().elementAt(i);
944             if (cell.getType() == cell.DETAIL_CELL &&
945                     cell.getColumnTotalGroup().equals(columnTotalGroup) &&
946                     cell.getWidth() > tmpWidth) {
947                 tmpWidth = cell.getWidth();
948             }
949         }
950
951         if (tmpWidth < 0)
952         {
953             return getColumnWidth("");
954         }
955
956         return tmpWidth;
957     }
958
959     /**
960      * Return the maximum height of a certain row. The row "" is the A0 cell row
961      */

962     public int getRowHeight(String JavaDoc rowTotalGroup) {
963         int tmpHeight = -1;
964         for (int i=0; i< getCrosstabElement().getCells().size(); ++i) {
965             CrosstabCell cell = (CrosstabCell) getCrosstabElement().getCells().elementAt(i);
966             if (cell.getType() == cell.DETAIL_CELL &&
967                     cell.getRowTotalGroup().equals(rowTotalGroup) &&
968                     cell.getHeight() > tmpHeight) {
969                 tmpHeight = cell.getHeight();
970             }
971         }
972
973         if (tmpHeight < 0 && !rowTotalGroup.equals(""))
974         {
975             return getRowHeight("");
976         }
977         else if (tmpHeight < 0 && rowTotalGroup.equals(""))
978         {
979             return 0;
980         }
981
982         return tmpHeight;
983     }
984
985     /**
986      * Return the maximum height of a certain row. The row "" is the A0 cell row
987      */

988     public int getTotalRowTopIndex(String JavaDoc rowTotalGroup) {
989         for (int i=0; i<getCrosstabElement().getRowGroups().size(); ++i)
990         {
991             CrosstabGroup group = (CrosstabGroup)getCrosstabElement().getRowGroups().elementAt(i);
992             if (group.getName().equals(rowTotalGroup))
993             {
994                 return group.getTotalCell().getTopIndex();
995             }
996         }
997         return findCell("","").getTopIndex();
998     }
999
1000    /**
1001     * Return the maximum height of a certain row. The row "" is the A0 cell row
1002     */

1003    public int getTotalColumnLeftIndex(String JavaDoc columnTotalGroup) {
1004        for (int i=0; i<getCrosstabElement().getColumnGroups().size(); ++i)
1005        {
1006            CrosstabGroup group = (CrosstabGroup)getCrosstabElement().getColumnGroups().elementAt(i);
1007            if (group.getName().equals(columnTotalGroup))
1008            {
1009                return group.getTotalCell().getLeftIndex();
1010            }
1011        }
1012        return findCell("","").getLeftIndex();
1013    }
1014
1015
1016
1017    /** This method is called from within the constructor to
1018     * initialize the form.
1019     * WARNING: Do NOT modify this code. The content of this method is
1020     * always regenerated by the Form Editor.
1021     */

1022    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
1023
private void initComponents() {
1024        jPopupMenuCrosstabReporteElement = new javax.swing.JPopupMenu JavaDoc();
1025        jMenuItemElementProperties = new javax.swing.JMenuItem JavaDoc();
1026        jMenuItemCrosstabProperties = new javax.swing.JMenuItem JavaDoc();
1027        jMenuItemCellProperties = new javax.swing.JMenuItem JavaDoc();
1028        jCheckBoxMenuItemDefaultCellEdit = new javax.swing.JCheckBoxMenuItem JavaDoc();
1029        jSeparator1 = new javax.swing.JSeparator JavaDoc();
1030        jMenuItemCut = new javax.swing.JMenuItem JavaDoc();
1031        jMenuItemCopy = new javax.swing.JMenuItem JavaDoc();
1032        jMenuItemPaste = new javax.swing.JMenuItem JavaDoc();
1033        jMenuItemDelete = new javax.swing.JMenuItem JavaDoc();
1034        jSeparator3 = new javax.swing.JSeparator JavaDoc();
1035        jMenuItemCopyStyle = new javax.swing.JMenuItem JavaDoc();
1036        jMenuItemPasteStyle = new javax.swing.JMenuItem JavaDoc();
1037        jMenuItemTransformStaticText = new javax.swing.JMenuItem JavaDoc();
1038        jMenuItemPattern = new javax.swing.JMenuItem JavaDoc();
1039        jSeparator4 = new javax.swing.JSeparator JavaDoc();
1040        jPopupMenuCrosstab = new javax.swing.JPopupMenu JavaDoc();
1041        jMenuItemCrosstabProperties1 = new javax.swing.JMenuItem JavaDoc();
1042        jMenuItemCellProperties1 = new javax.swing.JMenuItem JavaDoc();
1043        jCheckBoxMenuItemDefaultCellEdit1 = new javax.swing.JCheckBoxMenuItem JavaDoc();
1044        jMenuItemPaste1 = new javax.swing.JMenuItem JavaDoc();
1045
1046        jMenuItemElementProperties.setText(it.businesslogic.ireport.util.I18n.getString("elementProperties","Element properties"));
1047        jMenuItemElementProperties.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1048            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1049                jMenuItemElementPropertiesActionPerformed(evt);
1050            }
1051        });
1052
1053        jPopupMenuCrosstabReporteElement.add(jMenuItemElementProperties);
1054
1055        jMenuItemCrosstabProperties.setText("Crosstab properties");
1056        jMenuItemCrosstabProperties.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1057            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1058                jMenuItemCrosstabPropertiesActionPerformed(evt);
1059            }
1060        });
1061
1062        jPopupMenuCrosstabReporteElement.add(jMenuItemCrosstabProperties);
1063
1064        jMenuItemCellProperties.setText("Cell properties");
1065        jMenuItemCellProperties.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1066            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1067                jMenuItemCellPropertiesActionPerformed(evt);
1068            }
1069        });
1070
1071        jPopupMenuCrosstabReporteElement.add(jMenuItemCellProperties);
1072
1073        jCheckBoxMenuItemDefaultCellEdit.setText("Edit When-No-Data default cell");
1074        jCheckBoxMenuItemDefaultCellEdit.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1075            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1076                jCheckBoxMenuItemDefaultCellEditActionPerformed(evt);
1077            }
1078        });
1079
1080        jPopupMenuCrosstabReporteElement.add(jCheckBoxMenuItemDefaultCellEdit);
1081
1082        jPopupMenuCrosstabReporteElement.add(jSeparator1);
1083
1084        jMenuItemCut.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/cut.png")));
1085        jMenuItemCut.setText("Cut");
1086        jMenuItemCut.setEnabled(false);
1087        jMenuItemCut.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1088            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1089                jMenuItemCutActionPerformed(evt);
1090            }
1091        });
1092
1093        jPopupMenuCrosstabReporteElement.add(jMenuItemCut);
1094
1095        jMenuItemCopy.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/copy.png")));
1096        jMenuItemCopy.setText("Copy");
1097        jMenuItemCopy.setEnabled(false);
1098        jMenuItemCopy.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1099            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1100                jMenuItemCopyActionPerformed(evt);
1101            }
1102        });
1103
1104        jPopupMenuCrosstabReporteElement.add(jMenuItemCopy);
1105
1106        jMenuItemPaste.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/paste.png")));
1107        jMenuItemPaste.setText("Paste");
1108        jMenuItemPaste.setEnabled(false);
1109        jMenuItemPaste.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1110            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1111                jMenuItemPasteActionPerformed(evt);
1112            }
1113        });
1114
1115        jPopupMenuCrosstabReporteElement.add(jMenuItemPaste);
1116
1117        jMenuItemDelete.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/delete.png")));
1118        jMenuItemDelete.setText("Delete");
1119        jMenuItemDelete.setEnabled(false);
1120        jMenuItemDelete.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1121            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1122                jMenuItemDeleteActionPerformed(evt);
1123            }
1124        });
1125
1126        jPopupMenuCrosstabReporteElement.add(jMenuItemDelete);
1127
1128        jPopupMenuCrosstabReporteElement.add(jSeparator3);
1129
1130        jMenuItemCopyStyle.setEnabled(false);
1131        jMenuItemCopyStyle.setLabel("Copy style");
1132        jMenuItemCopyStyle.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1133            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1134                jMenuItemCopyStyleActionPerformed(evt);
1135            }
1136        });
1137
1138        jPopupMenuCrosstabReporteElement.add(jMenuItemCopyStyle);
1139
1140        jMenuItemPasteStyle.setEnabled(false);
1141        jMenuItemPasteStyle.setLabel("Paste style");
1142        jMenuItemPasteStyle.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1143            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1144                jMenuItemPasteStyleActionPerformed(evt);
1145            }
1146        });
1147
1148        jPopupMenuCrosstabReporteElement.add(jMenuItemPasteStyle);
1149
1150        jMenuItemTransformStaticText.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
1151        jMenuItemTransformStaticText.setLabel("Transform in Textfield");
1152        jMenuItemTransformStaticText.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1153            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1154                jMenuItemTransformStaticTextActionPerformed(evt);
1155            }
1156        });
1157
1158        jPopupMenuCrosstabReporteElement.add(jMenuItemTransformStaticText);
1159
1160        jMenuItemPattern.setText("Field pattern");
1161        jMenuItemPattern.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1162            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1163                jMenuItemPatternActionPerformed(evt);
1164            }
1165        });
1166
1167        jPopupMenuCrosstabReporteElement.add(jMenuItemPattern);
1168
1169        jPopupMenuCrosstabReporteElement.add(jSeparator4);
1170
1171        jMenuItemCrosstabProperties1.setText("Crosstab properties");
1172        jMenuItemCrosstabProperties1.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1173            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1174                jMenuItemCrosstabPropertiesActionPerformed1(evt);
1175            }
1176        });
1177
1178        jPopupMenuCrosstab.add(jMenuItemCrosstabProperties1);
1179
1180        jMenuItemCellProperties1.setText("Cell properties");
1181        jMenuItemCellProperties1.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1182            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1183                jMenuItemCellPropertiesActionPerformed1(evt);
1184            }
1185        });
1186
1187        jPopupMenuCrosstab.add(jMenuItemCellProperties1);
1188
1189        jCheckBoxMenuItemDefaultCellEdit1.setText("Edit When-No-Data default cell");
1190        jCheckBoxMenuItemDefaultCellEdit1.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1191            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1192                jCheckBoxMenuItemDefaultCellEdit1ActionPerformed(evt);
1193            }
1194        });
1195
1196        jPopupMenuCrosstab.add(jCheckBoxMenuItemDefaultCellEdit1);
1197
1198        jMenuItemPaste1.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/paste.png")));
1199        jMenuItemPaste1.setText("Paste");
1200        jMenuItemPaste1.setEnabled(false);
1201        jMenuItemPaste1.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1202            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1203                jMenuItemPasteActionPerformed1(evt);
1204            }
1205        });
1206
1207        jPopupMenuCrosstab.add(jMenuItemPaste1);
1208
1209        setLayout(null);
1210
1211        setBackground(new java.awt.Color JavaDoc(204, 204, 204));
1212        setFocusCycleRoot(true);
1213        addMouseMotionListener(new java.awt.event.MouseMotionAdapter JavaDoc() {
1214            public void mouseDragged(java.awt.event.MouseEvent JavaDoc evt) {
1215                formMouseDragged(evt);
1216            }
1217            public void mouseMoved(java.awt.event.MouseEvent JavaDoc evt) {
1218                formMouseMoved(evt);
1219            }
1220        });
1221        addFocusListener(new java.awt.event.FocusAdapter JavaDoc() {
1222            public void focusGained(java.awt.event.FocusEvent JavaDoc evt) {
1223                formFocusGained(evt);
1224            }
1225        });
1226        addKeyListener(new java.awt.event.KeyAdapter JavaDoc() {
1227            public void keyPressed(java.awt.event.KeyEvent JavaDoc evt) {
1228                formKeyPressed(evt);
1229            }
1230            public void keyTyped(java.awt.event.KeyEvent JavaDoc evt) {
1231                formKeyTyped(evt);
1232            }
1233        });
1234        addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
1235            public void mouseClicked(java.awt.event.MouseEvent JavaDoc evt) {
1236                formMouseClicked(evt);
1237            }
1238            public void mousePressed(java.awt.event.MouseEvent JavaDoc evt) {
1239                formMousePressed(evt);
1240            }
1241            public void mouseReleased(java.awt.event.MouseEvent JavaDoc evt) {
1242                formMouseReleased(evt);
1243            }
1244        });
1245
1246    }// </editor-fold>//GEN-END:initComponents
1247

1248    private void jCheckBoxMenuItemDefaultCellEdit1ActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jCheckBoxMenuItemDefaultCellEdit1ActionPerformed
1249
setDefaultCellMode(jCheckBoxMenuItemDefaultCellEdit1.isSelected());
1250    }//GEN-LAST:event_jCheckBoxMenuItemDefaultCellEdit1ActionPerformed
1251

1252    private void jCheckBoxMenuItemDefaultCellEditActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jCheckBoxMenuItemDefaultCellEditActionPerformed
1253

1254        setDefaultCellMode(jCheckBoxMenuItemDefaultCellEdit.isSelected());
1255
1256    }//GEN-LAST:event_jCheckBoxMenuItemDefaultCellEditActionPerformed
1257

1258    private void jMenuItemPasteActionPerformed1(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemPasteActionPerformed1
1259

1260        getParentReportFrame().paste();
1261
1262    }//GEN-LAST:event_jMenuItemPasteActionPerformed1
1263

1264    private void jMenuItemCellPropertiesActionPerformed1(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCellPropertiesActionPerformed1
1265
jMenuItemCellPropertiesActionPerformed(evt);
1266    }//GEN-LAST:event_jMenuItemCellPropertiesActionPerformed1
1267

1268    private void jMenuItemCrosstabPropertiesActionPerformed1(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCrosstabPropertiesActionPerformed1
1269
jMenuItemCrosstabPropertiesActionPerformed(evt);
1270    }//GEN-LAST:event_jMenuItemCrosstabPropertiesActionPerformed1
1271

1272    private void jMenuItemPatternActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemPatternActionPerformed
1273
String JavaDoc pattern = "";
1274        FieldPatternDialog pd = new FieldPatternDialog( MainFrame.getMainInstance() ,true);
1275        pd.setVisible(true);
1276        if (pd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION ) {
1277
1278
1279            Enumeration JavaDoc selectedElementEnum = getSelectedElements().elements();
1280
1281            while (selectedElementEnum.hasMoreElements()) {
1282                ReportElement re = (ReportElement)selectedElementEnum.nextElement();
1283                if (re instanceof TextFieldReportElement) {
1284                    ((TextFieldReportElement)re).setPattern( pd.getPattern() );
1285                }
1286            }
1287        }
1288    }//GEN-LAST:event_jMenuItemPatternActionPerformed
1289

1290    private void jMenuItemTransformStaticTextActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemTransformStaticTextActionPerformed
1291
transformStaticInTextFields();
1292    }//GEN-LAST:event_jMenuItemTransformStaticTextActionPerformed
1293

1294    private void jMenuItemPasteStyleActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemPasteStyleActionPerformed
1295
pasteStyle();
1296    }//GEN-LAST:event_jMenuItemPasteStyleActionPerformed
1297

1298    private void jMenuItemCopyStyleActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCopyStyleActionPerformed
1299
copyStyle();
1300    }//GEN-LAST:event_jMenuItemCopyStyleActionPerformed
1301

1302    private void jMenuItemDeleteActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemDeleteActionPerformed
1303
deleteSelectedElements();
1304    }//GEN-LAST:event_jMenuItemDeleteActionPerformed
1305

1306    private void jMenuItemPasteActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemPasteActionPerformed
1307
getParentReportFrame().paste();
1308    }//GEN-LAST:event_jMenuItemPasteActionPerformed
1309

1310    private void jMenuItemCopyActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCopyActionPerformed
1311
getParentReportFrame().copy();
1312    }//GEN-LAST:event_jMenuItemCopyActionPerformed
1313

1314    private void jMenuItemCutActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCutActionPerformed
1315
getParentReportFrame().cut();
1316    }//GEN-LAST:event_jMenuItemCutActionPerformed
1317

1318    private void jMenuItemElementPropertiesActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemElementPropertiesActionPerformed
1319
this.getParentReportFrame().openElementPropertiesDialog();
1320    }//GEN-LAST:event_jMenuItemElementPropertiesActionPerformed
1321

1322    private void jMenuItemCellPropertiesActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCellPropertiesActionPerformed
1323

1324        if (selectedCell != null)
1325        {
1326            editCell(selectedCell);
1327        }
1328
1329    }//GEN-LAST:event_jMenuItemCellPropertiesActionPerformed
1330

1331
1332    public void editCell(CrosstabCell editCell)
1333    {
1334        CrosstabCellDialog ctd = new CrosstabCellDialog(MainFrame.getMainInstance(), true);
1335            ctd.setTmpCell( editCell );
1336            ctd.setVisible(true);
1337            if (ctd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION)
1338            {
1339                editCell.setBackcolor( ctd.getTmpCell().getBackcolor() );
1340                editCell.setBox( ctd.getTmpCell().getBox() );
1341                editCell.setMode( ctd.getTmpCell().getMode() );
1342                editCell.setStyle( ctd.getTmpCell().getStyle() );
1343
1344                if (editCell.getWidth() != ctd.getTmpCell().getWidth())
1345                {
1346                    // Modify all with for cell with this column index,
1347
// Modify all left coords for elements of cells width index > of this column index
1348
// Modify all cell left
1349

1350                    int columnIndex = editCell.getLeftIndex();
1351                    int delta = ctd.getTmpCell().getWidth() - editCell.getWidth();
1352                    for (int i=0; i< this.getCrosstabElement().getCells().size(); ++i)
1353                    {
1354                        CrosstabCell cell = (CrosstabCell)this.getCrosstabElement().getCells().elementAt(i);
1355                        if (cell.getLeftIndex() == columnIndex || cell.getRightIndex() == columnIndex + 1)
1356                        {
1357                            cell.setWidth(cell.getWidth() + delta);
1358                        }
1359                        if (cell.getLeftIndex() > columnIndex)
1360                        {
1361                            cell.setLeft(cell.getLeft() + delta );
1362                            for (int j=0; j<getCrosstabElement().getElements().size(); ++j)
1363                            {
1364                                   ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
1365                                   if (re.getCell() == cell)
1366                                   {
1367                                      re.trasform(new Point JavaDoc(delta,0), TransformationType.TRANSFORMATION_MOVE);
1368                                   }
1369                            }
1370                        }
1371                    }
1372
1373                    for (int i=columnIndex+1; i< columns.size(); ++i)
1374                    {
1375                        int columnPosition = ((Integer JavaDoc)columns.get(i)).intValue();
1376                        columnPosition = columnPosition += delta;
1377                        columns.set(i,new Integer JavaDoc(columnPosition));
1378                    }
1379                }
1380
1381                if (editCell.getHeight() != ctd.getTmpCell().getHeight())
1382                {
1383                    // Modify all with for cell with this column index,
1384
// Modify all left coords for elements of cells width index > of this column index
1385
// Modify all cell left
1386

1387                    int rowIndex = editCell.getTopIndex();
1388                    int delta = ctd.getTmpCell().getHeight() - editCell.getHeight();
1389                    for (int i=0; i< this.getCrosstabElement().getCells().size(); ++i)
1390                    {
1391                        CrosstabCell cell = (CrosstabCell)this.getCrosstabElement().getCells().elementAt(i);
1392
1393                        if (cell.getTopIndex() == rowIndex || cell.getBottomIndex() == rowIndex + 1)
1394                        {
1395                            cell.setHeight(cell.getHeight() + delta);
1396                        }
1397                        else if (cell.getTopIndex() > rowIndex)
1398                        {
1399                            cell.setTop(cell.getTop() + delta );
1400                            for (int j=0; j<getCrosstabElement().getElements().size(); ++j)
1401                            {
1402                                   ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
1403                                   if (re.getCell() == cell)
1404                                   {
1405                                      re.trasform(new Point JavaDoc(0,delta), TransformationType.TRANSFORMATION_MOVE);
1406                                   }
1407                            }
1408                        }
1409                    }
1410
1411                    for (int i=rowIndex+1; i< rows.size(); ++i)
1412                    {
1413                        int rowPosition = ((Integer JavaDoc)rows.get(i)).intValue();
1414                        rowPosition = rowPosition += delta;
1415                        rows.set(i,new Integer JavaDoc(rowPosition));
1416                    }
1417                }
1418
1419                this.repaint();
1420                this.getCrosstabElement().notifyChange();
1421            }
1422    }
1423
1424    private void formFocusGained(java.awt.event.FocusEvent JavaDoc evt) {//GEN-FIRST:event_formFocusGained
1425

1426    }//GEN-LAST:event_formFocusGained
1427

1428    private void formKeyTyped(java.awt.event.KeyEvent JavaDoc evt) {//GEN-FIRST:event_formKeyTyped
1429

1430    }//GEN-LAST:event_formKeyTyped
1431

1432
1433    public void panelKeyPressed(java.awt.event.KeyEvent JavaDoc evt)
1434    {
1435        formKeyPressed(evt);
1436    }
1437
1438    private void formKeyPressed(java.awt.event.KeyEvent JavaDoc evt) {//GEN-FIRST:event_formKeyPressed
1439

1440
1441
1442        if (this.getSelectedElements().size() > 0) evt.consume();
1443        // Standard speed:
1444
int x=1, y=1;
1445
1446        // Increase the speed of movement if the Shift key is pressed
1447
if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0) {
1448            x = 10;
1449            y = 10;
1450        }
1451
1452        //if ((evt.getModifiers() & evt.ALT_MASK) != 0)
1453
// System.out.println("Tasto:"+evt.getKeyCode());
1454
if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) {
1455            this.deleteSelectedElements();
1456            return;
1457        }
1458        /* Begin code Robert Lamping, 12 July 2004 */
1459        /* Short cut keys for quick alignment */
1460        else if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) &&
1461                (( evt.getModifiers() & evt.CTRL_MASK) != 0) ) {
1462
1463            /* all key presses when SHIFT/CTRL are both pressed */
1464
1465            /* Short cuts for alignments */
1466            /* most of them deactivated, since they are activated bia the menu options and their
1467             * short cuts
1468             */

1469            switch ( evt.getKeyCode()) {
1470                case java.awt.event.KeyEvent.VK_S:
1471                    /* shrink A3-A4 */
1472                    FormatCommand.getCommand(OperationType.SHRINK).execute();
1473                    break;
1474            }
1475
1476        }
1477        /* End code Robert Lamping, 12 July 2004 */
1478
1479        else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP) {
1480            y *= -1;
1481            x = 0;
1482
1483            // Remove selected elements...
1484
// Up of x...
1485
Vector JavaDoc changed_elements = new Vector JavaDoc();
1486            for (Iterator JavaDoc i = selectedElements.iterator(); i.hasNext(); ) {
1487                ReportElement element = (ReportElement) i.next();
1488                element.trasform(new Point JavaDoc(x,y), TransformationType.TRANSFORMATION_MOVE);
1489                element.adjustCell( getCrosstabElement().getCells() );
1490                changed_elements.add(element);
1491            }
1492            getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), changed_elements , ReportElementChangedEvent.CHANGED));
1493
1494            this.getMainFrame().getElementPropertiesDialog().updateSelection();
1495            this.repaint();
1496        } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT) {
1497            x *= -1;
1498            y = 0;
1499
1500            // Up of x...
1501
Vector JavaDoc changed_elements = new Vector JavaDoc();
1502            for (Iterator JavaDoc i = selectedElements.iterator(); i.hasNext(); ) {
1503                ReportElement element = (ReportElement) i.next();
1504                element.trasform(new Point JavaDoc(x,y), TransformationType.TRANSFORMATION_MOVE);
1505                element.adjustCell(getCrosstabElement().getCells());
1506                changed_elements.add(element);
1507            }
1508            getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), changed_elements , ReportElementChangedEvent.CHANGED));
1509            this.getMainFrame().getElementPropertiesDialog().updateSelection();
1510            this.repaint();
1511        } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT) {
1512            y=0;
1513            // Remove selected elements...
1514
// Up of x...
1515
Vector JavaDoc changed_elements = new Vector JavaDoc();
1516            for (Iterator JavaDoc i = selectedElements.iterator(); i.hasNext(); ) {
1517                ReportElement element = (ReportElement) i.next();
1518                element.trasform(new Point JavaDoc(x,y), TransformationType.TRANSFORMATION_MOVE);
1519                element.adjustCell(getCrosstabElement().getCells());
1520                changed_elements.add(element);
1521            }
1522            getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), changed_elements , ReportElementChangedEvent.CHANGED));
1523            this.getMainFrame().getElementPropertiesDialog().updateSelection();
1524
1525            this.repaint();
1526        } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN) {
1527            x = 0;
1528            // Remove selected elements...
1529
// Up of x...
1530
Vector JavaDoc changed_elements = new Vector JavaDoc();
1531            for (Iterator JavaDoc i = selectedElements.iterator(); i.hasNext(); ) {
1532                ReportElement element = (ReportElement) i.next();
1533                element.trasform(new Point JavaDoc(x,y), TransformationType.TRANSFORMATION_MOVE);
1534                element.adjustCell(getCrosstabElement().getCells());
1535                changed_elements.add(element);
1536            }
1537            getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), changed_elements , ReportElementChangedEvent.CHANGED));
1538            this.getMainFrame().getElementPropertiesDialog().updateSelection();
1539            this.repaint();
1540        } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_F2) {
1541            // Edit static Text
1542

1543            DeleteElementsOperation undoOp = new DeleteElementsOperation(getParentReportFrame(), getCrosstabElement());
1544            for (Iterator JavaDoc i = selectedElements.iterator(); i.hasNext(); ) {
1545                ReportElement re = (ReportElement) i.next();
1546                if(re instanceof TextReportElement){
1547                    String JavaDoc te = ((TextReportElement)re).getText();
1548                    String JavaDoc result = javax.swing.JOptionPane.showInputDialog(this, I18n.getString("messages.enterNewValue","Please enter a new Value"), te);
1549                    if(result != null && !result.equals("")){
1550                        ((TextReportElement)re).setText(result);
1551                        undoOp.addElement( re, getCrosstabElement().getElements().indexOf(re));
1552                        getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), re , ReportElementChangedEvent.CHANGED));
1553                    }
1554                }
1555            }
1556            getParentReportFrame().addUndoOperation(undoOp);
1557            getMainFrame().getElementPropertiesDialog().updateSelection();
1558            this.repaint();
1559        } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_F3) {
1560
1561            getParentReportFrame().transformStaticInTextFields();
1562            this.getMainFrame().getElementPropertiesDialog().updateSelection();
1563        }
1564        /* Begin code by Robert Lamping, 12 july 2004 */
1565        /* Copy and paste via CTRL/INS and SHIFT insert */
1566        else if ( (( evt.getModifiers() & evt.CTRL_MASK) != 0 ) && evt.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) {
1567            getParentReportFrame().copy();
1568        } else if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && evt.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) {
1569            getParentReportFrame().paste();
1570        }
1571        /* End code Robert Lamping, 12 July 2004 */
1572
1573
1574
1575    }//GEN-LAST:event_formKeyPressed
1576

1577    private void jMenuItemCrosstabPropertiesActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jMenuItemCrosstabPropertiesActionPerformed
1578

1579
1580        it.businesslogic.ireport.crosstab.gui.CrosstabPropertiesDialog cpd = new it.businesslogic.ireport.crosstab.gui.CrosstabPropertiesDialog(MainFrame.getMainInstance(),true);
1581        cpd.setCurrentCrosstabReportElement( getCrosstabElement());
1582        cpd.setVisible(true);
1583
1584    }//GEN-LAST:event_jMenuItemCrosstabPropertiesActionPerformed
1585

1586    private void formMouseReleased(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_formMouseReleased
1587

1588        int mouseX = (int)evt.getPoint().getX();
1589        int mouseY = (int)evt.getPoint().getY();
1590
1591        if (drag_selection_mode && evt.getButton() == evt.BUTTON1) {
1592
1593            drag_selection_mode = false;
1594            Graphics2D JavaDoc gg = (Graphics2D JavaDoc)this.getGraphics();
1595            gg.setXORMode(Color.GREEN);
1596
1597            Stroke JavaDoc s = gg.getStroke();
1598            gg.setStroke(selectionStroke);
1599
1600            if (!first_draw_selection_rect) {
1601                gg.drawRect((int)Math.min( drag_selection_origin.x, drag_selection_end.x),
1602                        (int)Math.min( drag_selection_origin.y, drag_selection_end.y),
1603                        (int)Math.abs( drag_selection_origin.x - drag_selection_end.x),
1604                        (int)Math.abs( drag_selection_origin.y - drag_selection_end.y));
1605            }
1606
1607            gg.setPaintMode();
1608            if (s != null) {
1609                gg.setStroke(s);
1610            }
1611            drag_selection_mode = false;
1612            first_draw_selection_rect = true;
1613
1614            if (( evt.getModifiers() & evt.SHIFT_MASK ) == 0){
1615                setSelectedElement(null);
1616            }
1617
1618            int delta_w = evt.getX()- drag_selection_origin.x;
1619            int delta_h = evt.getY()- drag_selection_origin.y;
1620            int delta_x = (delta_w < 0) ? delta_w: 0;
1621            int delta_y = (delta_h < 0) ? delta_h : 0;
1622
1623            int originX = getRealDim( Math.min( drag_selection_origin.x,drag_selection_end.x)-10)+10;
1624            int originY = getRealDim( Math.min( drag_selection_origin.y, drag_selection_end.y)-10)+10;
1625            int width = getRealDim( Math.abs( delta_w ) );
1626            int height = getRealDim( Math.abs( delta_h ) );
1627
1628            // We need logical coordinates...
1629
java.awt.Rectangle JavaDoc rect = new java.awt.Rectangle JavaDoc( originX, originY, width, height );
1630            boolean selection_changed = false;
1631            for (Iterator JavaDoc i = getCrosstabElement().getElements().iterator(); i.hasNext(); ) {
1632                ReportElement re = (ReportElement) i.next();
1633                if ( re.intersects( rect ) ) {
1634                    if (!selection_changed) selection_changed = true;
1635                    addSelectedElement(re,false);
1636                }
1637            }
1638            if (selection_changed) {
1639                fireSelectionChangedEvent();
1640            }
1641
1642        } else if (evt.getButton() == evt.BUTTON1 && cell_dragging && readyToDragCellVertically>0) {
1643            Graphics JavaDoc gg = this.getGraphics();
1644            gg.setXORMode(Color.WHITE);
1645            gg.drawLine( 0, mouse.y , this.getWidth(), mouse.y);
1646            gg.setPaintMode();
1647
1648            // Calculate DELTA...
1649
int oldPosition = ((Integer JavaDoc)getRows().get(readyToDragCellVertically)).intValue();
1650            int delta = getRealDim( mouseY -10 - getZoomedDim(oldPosition) );
1651
1652            if (oldPosition + delta <= ((Integer JavaDoc)getRows().get(readyToDragCellVertically-1)).intValue())
1653            {
1654               delta = ((Integer JavaDoc)getRows().get(readyToDragCellVertically-1)).intValue() - oldPosition;
1655            }
1656
1657            // Max height = Document height - Crosstab position...
1658
int maxHeight = getParentReportFrame().getReport().getHeight() - getCrosstabElement().getPosition().y;
1659
1660            if ( ((Integer JavaDoc)getRows().get( getRows().size()-1)).intValue() + delta > maxHeight)
1661            {
1662                delta = maxHeight-((Integer JavaDoc)getRows().get( getRows().size()-1)).intValue();
1663            }
1664            if (delta == 0) return;
1665
1666            int newPosition = ((Integer JavaDoc)getRows().get(readyToDragCellVertically)).intValue() + delta;
1667
1668            // Save relative position for all elements...
1669
for (int j=0; j<getCrosstabElement().getElements().size(); ++j)
1670            {
1671                ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
1672                re.setRelativePosition(new Point JavaDoc( re.getPosition().x - re.getCell().getLeft() - 10, re.getPosition().y - re.getCell().getTop() - 10 ));
1673            }
1674
1675            if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0)
1676            {
1677                // 1. Perform a reverse search for readyToDragCellVertically
1678

1679
1680                for (int i=getRows().size()-1; i>0; --i)
1681                {
1682                    int position = ((Integer JavaDoc)getRows().get(i)).intValue();
1683                    if (oldPosition == position)
1684                    {
1685                        readyToDragCellVertically = i;
1686                        break;
1687                    }
1688                }
1689            }
1690
1691            // Modify hight of all cell in band readyToDragCellVertically...
1692
Vector JavaDoc cells = (Vector JavaDoc)getRowBands().elementAt(readyToDragCellVertically-1);
1693            for (int i=0; i<cells.size(); ++i)
1694            {
1695                CrosstabCell cell = (CrosstabCell)cells.elementAt(i);
1696                cell.setHeight(cell.getHeight() + delta );
1697            }
1698            for (int j=readyToDragCellVertically; j<getRowBands().size(); ++j)
1699            {
1700                cells = (Vector JavaDoc)getRowBands().elementAt(j);
1701                for (int i=0; i<cells.size(); ++i)
1702                {
1703                    CrosstabCell cell = (CrosstabCell)cells.elementAt(i);
1704                    if (cell.getTopIndex() >= readyToDragCellVertically)
1705                    {
1706                        cell.setTop(cell.getTop() + delta );
1707                    }
1708                    else
1709                    {
1710                        cell.setHeight(cell.getHeight() + delta );
1711                    }
1712                }
1713            }
1714
1715            // Adjust size value of all groups...
1716
for (int i=0; i< getCrosstabElement().getColumnGroups().size(); ++i)
1717            {
1718                CrosstabGroup group = (CrosstabGroup)getCrosstabElement().getColumnGroups().elementAt(i);
1719                group.setSize( group.getHeaderCell().getHeight() );
1720            }
1721
1722            // Adjust all elements position with new cell positions...
1723
for (int j=0; j<getCrosstabElement().getElements().size(); ++j)
1724            {
1725                ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
1726                re.getPosition().x = re.getRelativePosition().x + re.getCell().getLeft()+10;
1727                re.getPosition().y = re.getRelativePosition().y + re.getCell().getTop()+10;
1728
1729                re.setPosition(re.position);
1730                re.trasform(new java.awt.Point JavaDoc(0,0),TransformationType.TRANSFORMATION_RESIZE_SE);
1731            }
1732
1733
1734            for (int i=readyToDragCellVertically; i<getRows().size(); ++i)
1735            {
1736                int rowPosition = ((Integer JavaDoc)getRows().get(i)).intValue() + delta;
1737                getRows().set(i, new Integer JavaDoc(rowPosition));
1738            }
1739
1740            //
1741

1742            cell_dragging = false;
1743            updateSize();
1744            repaint();
1745            getParentReportFrame().addUndoOperation(new CrosstabRowDraggedOperation(this,getCrosstabElement(),readyToDragCellVertically,delta));
1746        }
1747        else if (evt.getButton() == evt.BUTTON1 && cell_dragging && readyToDragCellHorizontally > 0) {
1748            Graphics JavaDoc gg = this.getGraphics();
1749            gg.setXORMode(Color.WHITE);
1750            gg.drawLine( mouse.x, 0, mouse.x, this.getHeight());
1751            gg.setPaintMode();
1752
1753            // Calculate DELTA...
1754
int oldPosition = ((Integer JavaDoc)getColumns().get(readyToDragCellHorizontally)).intValue();
1755            int delta = getRealDim( mouseX -10 - getZoomedDim(oldPosition) );
1756
1757            if (oldPosition + delta <= ((Integer JavaDoc)getColumns().get(readyToDragCellHorizontally-1)).intValue())
1758            {
1759               delta = ((Integer JavaDoc)getColumns().get(readyToDragCellHorizontally-1)).intValue() - oldPosition;
1760            }
1761
1762            // Max height = Document height - Crosstab position...
1763
int maxWidth = getParentReportFrame().getReport().getWidth() - getCrosstabElement().getPosition().x;
1764
1765            if ( ((Integer JavaDoc)getColumns().get( getColumns().size()-1)).intValue() + delta > maxWidth)
1766            {
1767                delta = maxWidth-((Integer JavaDoc)getColumns().get( getColumns().size()-1)).intValue();
1768            }
1769            if (delta == 0) return;
1770
1771            int newPosition = ((Integer JavaDoc)getColumns().get(readyToDragCellHorizontally)).intValue() + delta;
1772
1773            // Save relative position for all elements...
1774
for (int j=0; j<getCrosstabElement().getElements().size(); ++j)
1775            {
1776                ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
1777                re.setRelativePosition(new Point JavaDoc( re.getPosition().x - re.getCell().getLeft() - 10, re.getPosition().y - re.getCell().getTop() - 10 ));
1778            }
1779
1780            if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0)
1781            {
1782                // 1. Perform a reverse search for readyToDragCellVertically
1783

1784
1785                for (int i=getColumns().size()-1; i>0; --i)
1786                {
1787                    int position = ((Integer JavaDoc)getColumns().get(i)).intValue();
1788                    if (oldPosition == position)
1789                    {
1790                        readyToDragCellHorizontally = i;
1791                        break;
1792                    }
1793                }
1794            }
1795
1796            // Modify hight of all cell in band readyToDragCellVertically...
1797
Vector JavaDoc cells = (Vector JavaDoc)getColumnBands().elementAt(readyToDragCellHorizontally-1);
1798            for (int i=0; i<cells.size(); ++i)
1799            {
1800                CrosstabCell cell = (CrosstabCell)cells.elementAt(i);
1801                cell.setWidth(cell.getWidth() + delta );
1802            }
1803            for (int j=readyToDragCellHorizontally; j<getRowBands().size(); ++j)
1804            {
1805                cells = (Vector JavaDoc)getColumnBands().elementAt(j);
1806                for (int i=0; i<cells.size(); ++i)
1807                {
1808                    CrosstabCell cell = (CrosstabCell)cells.elementAt(i);
1809                    if (cell.getLeftIndex() >= readyToDragCellHorizontally)
1810                    {
1811                        cell.setLeft(cell.getLeft() + delta );
1812                    }
1813                    else
1814                    {
1815                        cell.setWidth(cell.getWidth() + delta );
1816                    }
1817                }
1818            }
1819
1820            // Adjust size value of all groups...
1821
for (int i=0; i< getCrosstabElement().getRowGroups().size(); ++i)
1822            {
1823                CrosstabGroup group = (CrosstabGroup)getCrosstabElement().getRowGroups().elementAt(i);
1824                group.setSize( group.getHeaderCell().getWidth() );
1825            }
1826
1827
1828            // Adjust all elements position with new cell positions...
1829
for (int j=0; j<getCrosstabElement().getElements().size(); ++j)
1830            {
1831                ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j);
1832                re.getPosition().x = re.getRelativePosition().x + re.getCell().getLeft()+10;
1833                re.getPosition().y = re.getRelativePosition().y + re.getCell().getTop()+10;
1834
1835                re.setPosition(re.position);
1836                re.trasform(new java.awt.Point JavaDoc(0,0),TransformationType.TRANSFORMATION_RESIZE_SE);
1837            }
1838
1839
1840            for (int i=readyToDragCellHorizontally; i<getColumns().size(); ++i)
1841            {
1842                int rowPosition = ((Integer JavaDoc)getColumns().get(i)).intValue() + delta;
1843                getColumns().set(i, new Integer JavaDoc(rowPosition));
1844            }
1845
1846            cell_dragging = false;
1847            updateSize();
1848            repaint();
1849            getParentReportFrame().addUndoOperation(new CrosstabColumnDraggedOperation(this,getCrosstabElement(),readyToDragCellHorizontally,delta));
1850        }
1851        else if (evt.getButton() == evt.BUTTON1)
1852        {
1853            if (newObjectType != ReportElementType.NONE) {
1854                // The second point was clicked
1855

1856                firstXORDraw = true;
1857
1858                // Find the band to associate to the new element...
1859

1860                int delta_w = evt.getX()-newObjectOrigin.x; //gridMultiple(evt.getX()-newObjectOrigin.x);
1861
int delta_h = evt.getY()-newObjectOrigin.y; //gridMultiple(evt.getY()-newObjectOrigin.y);
1862
int delta_x = (delta_w < 0) ? delta_w : 0;
1863                int delta_y = (delta_h < 0) ? delta_h : 0;
1864
1865                int originX = getRealDim( Math.min(newObjectOrigin.x-10,
1866                        newObjectOrigin.x+delta_x-10))+10;
1867                int originY = getRealDim( Math.min(newObjectOrigin.y-10,
1868                        newObjectOrigin.y+delta_y-10))+10;
1869                int width = getRealDim( Math.abs(delta_w) );
1870                int height = getRealDim( Math.abs(delta_h) );
1871
1872
1873                if (newObjectType == ReportElementType.LINE_ELEMENT) {
1874                    /* When shift button is pressed too, then there will be no align ment on the grid */
1875                    if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) {
1876                        Point JavaDoc straight = straighten( delta_w, delta_h);
1877                        delta_w = straight.x;
1878                        delta_h = straight.y;
1879                    }
1880                }
1881
1882                CrosstabCell bname = getCellByPoint( new Point JavaDoc( getRealDim(evt.getX()-10), getRealDim( evt.getY()-10)));
1883
1884                if (bname != null)
1885                {
1886                    ReportElement re = ReportElementFactory.create( newObjectType, originX, originY, getRealDim(delta_w), getRealDim(delta_h));
1887
1888                    if (getParentReportFrame().getReport().getStyles().size() > 0)
1889                    {
1890                        for (int i=0; i<getParentReportFrame().getReport().getStyles().size(); ++i )
1891                        {
1892                           Style s = (Style)getParentReportFrame().getReport().getStyles().elementAt(i);
1893
1894                           if (s.getAttributeBoolean(s.ATTRIBUTE_isDefault,false) == true)
1895                           {
1896                               re.setStyle( s );
1897                           }
1898                        }
1899                    }
1900                    /* Begin Code Robert Lamping, 13 july 2004 */
1901                    // Element does not know about other elements, the frame does, so here we reset the key.
1902
// barcode becomes barcode-1, or higher depending on what the highest sub number is.
1903
// Same for graphcs image, or whatever initial name
1904
re.setKey( getParentReportFrame().getNextElementKey( re.getKey()) ) ;
1905
1906                    /* End Code Robert Lamping, 13 july 2004 */
1907
1908                    re.setCell( bname );
1909                    re.setRelativePosition( new Point JavaDoc(re.getPosition().x - re.getCell().getLeft() - 10, re.getPosition().y - re.getCell().getTop() - 10));
1910                    for (int elnum = getCrosstabElement().getElements().size()-1; elnum >= 0; --elnum)
1911                    {
1912                        ReportElement container_re = (ReportElement)getCrosstabElement().getElements().elementAt(elnum);
1913                        if (container_re instanceof FrameReportElement && container_re.getCell() == re.getCell())
1914                        {
1915                            if ( container_re.getBounds().contains( re.getBounds()))
1916                            {
1917                                re.setParentElement( container_re);
1918                                break;
1919                            }
1920                        }
1921                    }
1922
1923
1924                    getCrosstabElement().getElements().addElement(re);
1925
1926                    getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), re , ReportElementChangedEvent.ADDED));
1927
1928                    getParentReportFrame().addUndoOperation( new InsertElementOperation( getParentReportFrame(), getCrosstabElement(), re ) );
1929                    setSelectedElement(re);
1930
1931                }
1932                else
1933                {
1934                    setSelectedElement(null);
1935                }
1936                newObjectOrigin = null;
1937
1938                newObjectType = ReportElementType.NONE;
1939
1940                this.setCursor( Cursor.getDefaultCursor());
1941                getMainFrame().setActiveTool(0);
1942
1943
1944            }
1945            else if (trasforming) {
1946                trasforming = false;
1947
1948                this.setCursor( Cursor.getDefaultCursor());
1949
1950                if (transformation_type != TransformationType.TRANSFORMATION_MOVE || resistenceExceeded == true) {
1951                    Point JavaDoc p = new Point JavaDoc(transformation_origin_end);
1952                    p.x = getRealDim(p.x);
1953                    p.y = getRealDim(p.y);
1954                    p.x -= getRealDim(transformation_origin.x);
1955                    p.y -= getRealDim(transformation_origin.y);
1956
1957                    Enumeration JavaDoc e = getSelectedElements().elements();
1958                    TransformElementsOperation undoOp = new TransformElementsOperation(getMainFrame().getMainInstance().getActiveReportFrame(), this.getCrosstabElement());
1959                    Vector JavaDoc changed_elements = new Vector JavaDoc();
1960                    while (e.hasMoreElements()) {
1961                        ReportElement re = (ReportElement)e.nextElement();
1962
1963                        undoOp.addElement( re );
1964
1965                        re.trasform(p, transformation_type);
1966                        re.adjustCell(getCrosstabElement().getCells());
1967                        undoOp.captureUniqueModified(re);
1968                        getParentReportFrame().addUndoOperation(undoOp);
1969
1970                        changed_elements.add( re );
1971
1972                    }
1973                    if (changed_elements.size() > 0) {
1974                        getMainFrame().getMainInstance().getActiveReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getMainFrame().getMainInstance().getActiveReportFrame(), getCrosstabElement(), changed_elements , ReportElementChangedEvent.CHANGED));
1975                    }
1976
1977                    this.repaint();
1978                }
1979
1980                transformation_undo_delta = new Point JavaDoc(0,0);
1981                transformation_type = TransformationType.TRANSFORMATION_NONE;
1982                getMainFrame().getElementPropertiesDialog().updateSelection();
1983            }
1984        }
1985
1986
1987
1988        mouse.y = mouseY;
1989        mouse.x = mouseX;
1990
1991    }//GEN-LAST:event_formMouseReleased
1992

1993    private void formMouseDragged(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_formMouseDragged
1994

1995        int mouseX = (int)evt.getPoint().getX();
1996        int mouseY = (int)evt.getPoint().getY();
1997
1998        if (drag_selection_mode == true) {
1999            Graphics2D JavaDoc gg = (Graphics2D JavaDoc)this.getGraphics();
2000            gg.setXORMode(Color.GREEN);
2001            Stroke JavaDoc s = gg.getStroke();
2002            gg.setStroke(selectionStroke);
2003            if (!first_draw_selection_rect) {
2004                gg.drawRect((int)Math.min( drag_selection_origin.x, drag_selection_end.x),
2005                        (int)Math.min( drag_selection_origin.y, drag_selection_end.y),
2006                        (int)Math.abs( drag_selection_origin.x - drag_selection_end.x),
2007                        (int)Math.abs( drag_selection_origin.y - drag_selection_end.y));
2008            }
2009
2010            drag_selection_end = new java.awt.Point JavaDoc(evt.getX(), evt.getY());
2011            // Draw the new rectangle...
2012
gg.drawRect((int)Math.min( drag_selection_origin.x, drag_selection_end.x),
2013                    (int)Math.min( drag_selection_origin.y, drag_selection_end.y),
2014                    (int)Math.abs( drag_selection_origin.x - drag_selection_end.x),
2015                    (int)Math.abs( drag_selection_origin.y - drag_selection_end.y));
2016            gg.setPaintMode();
2017            first_draw_selection_rect = false;
2018            if (s != null) gg.setStroke(s);
2019        }
2020        else if (cell_dragging && readyToDragCellVertically>0) {
2021            Graphics JavaDoc gg = this.getGraphics();
2022            gg.setXORMode(Color.WHITE);
2023            gg.drawLine( 0, mouse.y , this.getWidth(), mouse.y);
2024            gg.drawLine( 0, mouseY, this.getWidth(), mouseY);
2025            gg.setPaintMode();
2026        }
2027        else if (cell_dragging && readyToDragCellHorizontally>0) {
2028            Graphics JavaDoc gg = this.getGraphics();
2029            gg.setXORMode(Color.WHITE);
2030            gg.drawLine( mouse.x, 0 , mouse.x, this.getHeight());
2031            gg.drawLine( mouseX, 0, mouseX, this.getHeight());
2032            gg.setPaintMode();
2033        }
2034        else if (newObjectType != ReportElementType.NONE && newObjectOrigin!= null) {
2035
2036            /* In the process of defing the second point. */
2037
2038            Graphics JavaDoc gg = this.getGraphics();
2039            gg.setXORMode(Color.WHITE);
2040            int delta_x = 0;
2041            int delta_y = 0;
2042
2043            if (newObjectType != ReportElementType.LINE_ELEMENT && !firstXORDraw) {
2044                delta_x = mouse.x- newObjectOrigin.x;
2045                delta_y = mouse.y-newObjectOrigin.y;
2046
2047                delta_x = (delta_x <0) ? delta_x : 0;
2048                delta_y = (delta_y<0) ? delta_y : 0;
2049            }
2050
2051
2052            int delta_w = 0;
2053            int delta_h = 0;
2054            if (!firstXORDraw) {
2055                delta_w = mouse.x-newObjectOrigin.x;
2056                delta_h = mouse.y-newObjectOrigin.y;
2057                delta_x = (delta_w<0) ? delta_w: 0;
2058                delta_y = (delta_h<0) ? delta_h : 0;
2059            }
2060
2061            if (newObjectType == ReportElementType.LINE_ELEMENT) {
2062
2063                /* overwrite the other one, so that it disappears */
2064                if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) {
2065                    Point JavaDoc straight = straighten( delta_w, delta_h);
2066                    delta_w = straight.x;
2067                    delta_h = straight.y;
2068                }
2069
2070
2071                if (!firstXORDraw) {
2072                    gg.drawLine( newObjectOrigin.x, newObjectOrigin.y, newObjectOrigin.x+delta_w,newObjectOrigin.y+delta_h);
2073                }
2074
2075                delta_w = evt.getX()-newObjectOrigin.x;
2076                delta_h = evt.getY()-newObjectOrigin.y;
2077
2078                if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) {
2079                    Point JavaDoc straight = straighten( delta_w, delta_h);
2080                    delta_w = straight.x;
2081                    delta_h = straight.y;
2082                }
2083
2084                gg.drawLine( newObjectOrigin.x, newObjectOrigin.y, newObjectOrigin.x+delta_w,newObjectOrigin.y+delta_h);
2085                mouse.x = newObjectOrigin.x+delta_w;
2086                mouse.y = newObjectOrigin.x+delta_y;
2087
2088            } else if (newObjectType == ReportElementType.ELLIPSE_ELEMENT) {
2089                if (!firstXORDraw) gg.drawOval( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h));
2090
2091                delta_w = gridMultiple(evt.getX()-newObjectOrigin.x);
2092                delta_h = gridMultiple(evt.getY()-newObjectOrigin.y);
2093                delta_x = (delta_w<0) ? delta_w: 0;
2094                delta_y = (delta_h<0) ? delta_h : 0;
2095                gg.drawOval( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h));
2096            } else if (newObjectType == ReportElementType.ROUND_RECTANGLE_ELEMENT) {
2097                if (!firstXORDraw) {
2098                    gg.drawRoundRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h),20,20);
2099                }
2100                delta_w = gridMultiple(evt.getX()-newObjectOrigin.x);
2101                delta_h = gridMultiple(evt.getY()-newObjectOrigin.y);
2102                delta_x = (delta_w<0) ? delta_w: 0;
2103                delta_y = (delta_h<0) ? delta_h : 0;
2104                //gg.drawRect( snapToGridOrizzontally(newObjectOrigin.x+w_delta_x), snapToGridVertically(newObjectOrigin.y+delta_y), gridMultiple(Math.abs(evt.getX()-newObjectOrigin.x)), gridMultiple(Math.abs(evt.getY()-newObjectOrigin.y)));
2105
gg.drawRoundRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h),20,20);
2106            } else {
2107                if (!firstXORDraw) {
2108                    gg.drawRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h));
2109                }
2110                delta_w = gridMultiple(evt.getX()-newObjectOrigin.x);
2111                delta_h = gridMultiple(evt.getY()-newObjectOrigin.y);
2112                delta_x = (delta_w<0) ? delta_w: 0;
2113                delta_y = (delta_h<0) ? delta_h : 0;
2114                //gg.drawRect( snapToGridOrizzontally(newObjectOrigin.x+w_delta_x), snapToGridVertically(newObjectOrigin.y+delta_y), gridMultiple(Math.abs(evt.getX()-newObjectOrigin.x)), gridMultiple(Math.abs(evt.getY()-newObjectOrigin.y)));
2115
gg.drawRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h));
2116                //gg.drawRect( newObjectOrigin.x+delta_x, newObjectOrigin.y+delta_y, Math.abs(delta_from_origin), Math.abs(evt.getY()-newObjectOrigin.y));
2117
}
2118
2119            firstXORDraw = false;
2120            gg.setPaintMode();
2121
2122            //mouse.x = mouse.x + delta_from_origin;
2123
//mouse.y = evt.getY();
2124
//return;
2125
}
2126        else if (selectedElements.size() >0 && newObjectType == ReportElementType.NONE && transformation_origin_end != null) {
2127            int new_transformation_origin_end_x = transformation_origin_end.x;
2128            int new_transformation_origin_end_y = transformation_origin_end.y;
2129
2130            if (transformation_type >=0 && trasforming) {
2131                Graphics JavaDoc gg = this.getGraphics();
2132                gg.setXORMode(Color.WHITE);
2133                if (!firstXORDrawTransforming) {
2134                    // redraw old rectangles...
2135
// transformation_origin
2136
// transformation_origin_end
2137
// Pain a rectangle....
2138

2139                    // if no modifications is needed, return...
2140

2141                    // MAGNET EFFECT
2142
new_transformation_origin_end_y = evt.getY();
2143                    new_transformation_origin_end_x = evt.getX();
2144
2145                    //if (this.isSnapToGrid()) {
2146
// if (Math.abs( transformation_origin_end.x - evt.getX())%(getGridSize()*getZoomFactor()) == 0)
2147
// new_transformation_origin_end_x = evt.getX();
2148
// if (Math.abs( transformation_origin_end.y - evt.getY() )%(getGridSize()*getZoomFactor()) == 0)
2149
// new_transformation_origin_end_y = evt.getY();
2150
//
2151
// if (new_transformation_origin_end_x == transformation_origin_end.x &&
2152
// new_transformation_origin_end_y == transformation_origin_end.y) {
2153
// return;
2154
// }
2155
//} else {
2156
// new_transformation_origin_end_x = evt.getX();
2157
// new_transformation_origin_end_y = evt.getY();
2158
//}
2159
Enumeration JavaDoc e = getSelectedElements().elements();
2160                    while (e.hasMoreElements()) {
2161                        ReportElement re = (ReportElement)e.nextElement();
2162                        Rectangle JavaDoc bounds = new Rectangle JavaDoc(getZoomedDim(re.getPosition().x-10)+10,
2163                                getZoomedDim(re.getPosition().y-10)+10,
2164                                getZoomedDim(re.getWidth()),
2165                                getZoomedDim(re.getHeight()));
2166                        // Scale rectangle...
2167
if (transformation_type == TransformationType.TRANSFORMATION_MOVE) {
2168                            // First of all we must see if the resistence was Exceeded...
2169
if (resistenceExceeded) {
2170                                // Change location...
2171
bounds.translate( transformation_origin_end.x-transformation_origin.x,
2172                                        transformation_origin_end.y-transformation_origin.y);
2173                                gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2174                            }
2175                        } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE ||
2176                                transformation_type == TransformationType.TRANSFORMATION_RESIZE_S ||
2177                                transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) {
2178                            // Change location...
2179
int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) ? transformation_origin_end.x-transformation_origin.x : 0;
2180                            int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_S) ? transformation_origin_end.y-transformation_origin.y : 0;
2181                            bounds.setSize( Math.max(0, bounds.width + x_delta),
2182                                    Math.max(0, bounds.height + y_delta));
2183                            gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2184                        } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW ||
2185                                transformation_type == TransformationType.TRANSFORMATION_RESIZE_N ||
2186                                transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) {
2187                            // Change location...
2188
int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) ? transformation_origin_end.x-transformation_origin.x : 0;
2189                            int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_N) ? transformation_origin_end.y-transformation_origin.y : 0;
2190                            int height_grow = Math.min( y_delta,bounds.height);
2191                            int width_grow = Math.min( x_delta,bounds.width);
2192                            bounds.translate(width_grow,height_grow);
2193                            bounds.setSize( bounds.width - width_grow, bounds.height - height_grow);
2194                            gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2195                        } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NE) {
2196                            // Change location...
2197
int x_delta = Math.max(-bounds.width,(transformation_origin_end.x-transformation_origin.x));
2198                            int y_delta = Math.min(bounds.height, (transformation_origin_end.y-transformation_origin.y) );
2199                            bounds.y += y_delta;
2200                            bounds.height -= y_delta;
2201                            bounds.width += x_delta;
2202                            gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2203                        } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SW) {
2204                            // Change location...
2205
int x_delta = Math.min(bounds.width, (transformation_origin_end.x-transformation_origin.x) );
2206                            int y_delta = Math.max(-bounds.height,(transformation_origin_end.y-transformation_origin.y));
2207                            bounds.x += x_delta;
2208                            bounds.width -= x_delta;
2209                            bounds.height += y_delta;
2210                            gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2211                        }
2212                    }
2213                }
2214
2215                    /*
2216                    if (Math.abs( transformation_origin_end.x - evt.getX())%(getGridSize()*getZoomFactor()) == 0)
2217                        transformation_origin_end.x = evt.getX();
2218                    if (Math.abs( transformation_origin_end.y - evt.getY() )%(getGridSize()*getZoomFactor()) == 0)
2219                        transformation_origin_end.y = evt.getY();
2220                     */

2221                transformation_origin_end.x = new_transformation_origin_end_x;
2222                transformation_origin_end.y = new_transformation_origin_end_y;
2223
2224                Enumeration JavaDoc e = getSelectedElements().elements();
2225                while (e.hasMoreElements()) {
2226                    ReportElement re = (ReportElement)e.nextElement();
2227                    Rectangle JavaDoc bounds = new Rectangle JavaDoc(getZoomedDim(re.getPosition().x-10)+10,
2228                            getZoomedDim(re.getPosition().y-10)+10,
2229                            getZoomedDim(re.getWidth()),
2230                            getZoomedDim(re.getHeight()));
2231                    // Scale rectangle...
2232
if (transformation_type == TransformationType.TRANSFORMATION_MOVE) {
2233                        // Change location...
2234
if (Math.abs(transformation_origin_end.x-transformation_origin.x) >5 ||
2235                                Math.abs(transformation_origin_end.y-transformation_origin.y) >5)
2236                            resistenceExceeded = true;
2237                        if (resistenceExceeded) {
2238                            // Search the closest x,y that match a grid intersection...
2239

2240                            int pex = gridMultiple( transformation_origin_end.x-10 )+10;
2241                            int pey = gridMultiple( transformation_origin_end.y-10 )+10;
2242                            int pox = gridMultiple( transformation_origin.x-10 )+10;
2243                            int poy = gridMultiple( transformation_origin.y-10 )+10;
2244
2245                            //System.out.println("x: "+transformation_origin_end + " y:" + transformation_origin_end.y);
2246

2247                            //this.getGraphics().drawOval( grid_multiple_x, grid_multiple_y, 5,5);
2248

2249                            bounds.translate( transformation_origin_end.x-transformation_origin.x,
2250                                    transformation_origin_end.y-transformation_origin.y);
2251                            gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2252                        }
2253                    } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE ||
2254                            transformation_type == TransformationType.TRANSFORMATION_RESIZE_S ||
2255                            transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) {
2256                        // Change location...
2257
int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) ? transformation_origin_end.x-transformation_origin.x : 0;
2258                        int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_S) ? transformation_origin_end.y-transformation_origin.y : 0;
2259                        bounds.setSize( Math.max(0, bounds.width + x_delta),
2260                                Math.max(0, bounds.height + y_delta));
2261                        gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2262                    } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW ||
2263                            transformation_type == TransformationType.TRANSFORMATION_RESIZE_N ||
2264                            transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) {
2265                        // Change location...
2266
int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) ? transformation_origin_end.x-transformation_origin.x : 0;
2267                        int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_N) ? transformation_origin_end.y-transformation_origin.y : 0;
2268                        int height_grow = Math.min( y_delta,bounds.height);
2269                        int width_grow = Math.min( x_delta,bounds.width);
2270                        bounds.translate(width_grow,height_grow);
2271                        bounds.setSize( bounds.width - width_grow, bounds.height - height_grow);
2272                        gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2273                    } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NE) {
2274                        // Change location...
2275
int x_delta = Math.max(-bounds.width,(transformation_origin_end.x-transformation_origin.x));
2276                        int y_delta = Math.min(bounds.height, (transformation_origin_end.y-transformation_origin.y) );
2277                        bounds.y += y_delta;
2278                        bounds.height -= y_delta;
2279                        bounds.width += x_delta;
2280                        gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2281                    } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SW) {
2282                        // Change location...
2283
int x_delta = Math.min(bounds.width, (transformation_origin_end.x-transformation_origin.x) );
2284                        int y_delta = Math.max(-bounds.height , (transformation_origin_end.y-transformation_origin.y));
2285                        bounds.x += x_delta;
2286                        bounds.width -= x_delta;
2287                        bounds.height += y_delta;
2288                        gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height );
2289                    }
2290                }
2291
2292                firstXORDrawTransforming = false;
2293                gg.setPaintMode();
2294            }
2295
2296        }
2297        mouse.y = mouseY;
2298        mouse.x = mouseX;
2299    }//GEN-LAST:event_formMouseDragged
2300

2301    private void formMousePressed(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_formMousePressed
2302

2303        this.requestFocus();
2304        int mouseX = (int)evt.getPoint().getX();
2305        int mouseY = (int)evt.getPoint().getY();
2306
2307
2308        if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() < 2)
2309        {
2310
2311            if (readyToDragCellVertically > 0)
2312            {
2313                Graphics JavaDoc gg = this.getGraphics();
2314                gg.setXORMode(Color.WHITE);
2315                gg.drawLine( 0, mouseY, this.getWidth(), mouseY);
2316                gg.setPaintMode();
2317                // Save
2318
mouse.y = mouseY;
2319                mouse.x = mouseX;
2320                cell_dragging = true;
2321                return;
2322            }
2323            else if (readyToDragCellHorizontally > 0)
2324            {
2325                Graphics JavaDoc gg = this.getGraphics();
2326                gg.setXORMode(Color.WHITE);
2327                gg.drawLine( mouseX, 0, mouseX, this.getHeight());
2328                gg.setPaintMode();
2329                // Save
2330
mouse.y = mouseY;
2331                mouse.x = mouseX;
2332                cell_dragging = true;
2333                return;
2334            }
2335            else if (newObjectType != ReportElementType.NONE)
2336            {
2337                firstXORDraw = false;
2338                newObjectOrigin = new Point JavaDoc(evt.getX(),evt.getY());
2339                mouse.x = newObjectOrigin.x;
2340                mouse.y = newObjectOrigin.y;
2341                return;
2342            }
2343
2344            if (selectedElements.size() > 0 && (( evt.getModifiers() & evt.SHIFT_MASK ) == 0))
2345            {
2346                // We are transformation mode?
2347
if (transformation_type >=0)
2348                {
2349                    trasforming = true;
2350                    firstXORDrawTransforming = true;
2351                    transformation_origin = new Point JavaDoc(evt.getX(),evt.getY());
2352                    transformation_undo_delta = new Point JavaDoc(0,0);
2353                    transformation_origin_end = new Point JavaDoc(evt.getX(),evt.getY());
2354                    return;
2355                }
2356            }
2357
2358            boolean foundElement = false;
2359            // Look if I clicked over an element...
2360
for (int i=getCrosstabElement().getElements().size()-1; i>=0; --i)
2361            {
2362
2363                 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
2364                 if ((isDefaultCellMode() == (re.getCell().getType() == CrosstabCell.NODATA_CELL)) && re.intersects(new Point JavaDoc(getRealDim(evt.getX()-10)+10,
2365                            getRealDim(evt.getY()-10)+10)))
2366                    {
2367                        foundElement = true;
2368                        if (selectedElements.size()>0 && re == ((ReportElement)selectedElements.firstElement())) continue;
2369
2370                        if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0)
2371                        {
2372                            if (getSelectedElements().contains(re))
2373                            {
2374                                getSelectedElements().remove(re);
2375                                repaint();
2376                            }
2377                            else
2378                            {
2379                                addSelectedElement(re);
2380                                repaint();
2381                            }
2382                        }
2383                        else
2384                        {
2385                            setSelectedElement(re);
2386                        }
2387                        trasforming = true;
2388                        firstXORDrawTransforming = true;
2389                        transformation_origin = new Point JavaDoc(evt.getX(),evt.getY());
2390                        transformation_origin_end = new Point JavaDoc(evt.getX(),evt.getY());
2391
2392                        //if (getMainFrame().isEMMActive())
2393
// transformation_type = TransformationType.TRANSFORMATION_NONE;
2394
//else
2395
transformation_type = TransformationType.TRANSFORMATION_MOVE;
2396
2397                        this.setCursor(Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR ));
2398                    }
2399            }
2400
2401            if (!foundElement)
2402            {
2403                if (getSelectedElements().size() > 0 && ( evt.getModifiers() & evt.SHIFT_MASK ) == 0)
2404                {
2405                    setSelectedElement(null);
2406                }
2407
2408                // We can enter in drag selection mode...
2409
drag_selection_mode = true;
2410                first_draw_selection_rect = true;
2411                drag_selection_origin = new Point JavaDoc(evt.getX(),evt.getY());
2412                drag_selection_end = new java.awt.Point JavaDoc(evt.getX(), evt.getY());
2413            }
2414
2415        }
2416        else if (evt.getButton() == evt.BUTTON3)
2417        {
2418
2419            if (getSelectedElements().size() > 0)
2420            {
2421                jMenuItemCellProperties.setEnabled( false );
2422                selectedCell = getCellByPoint( new Point JavaDoc( getRealDim(evt.getX()-10), getRealDim( evt.getY()-10)));
2423                jMenuItemCellProperties.setEnabled( selectedCell != null );
2424
2425                jMenuItemCopy.setEnabled(true);
2426                jMenuItemCut.setEnabled(true);
2427                jMenuItemDelete.setEnabled(true);
2428                jMenuItemCopyStyle.setEnabled(true);
2429                jMenuItemPasteStyle.setEnabled(getMainFrame().getStyleClipboard() != null);
2430
2431                jMenuItemPaste.setEnabled(getMainFrame().getClipBoard().size() > 0);
2432                jCheckBoxMenuItemDefaultCellEdit.setSelected( isDefaultCellMode() );
2433
2434                jPopupMenuCrosstabReporteElement.show(this,evt.getX(),evt.getY());
2435
2436            }
2437            else
2438            {
2439                jMenuItemCellProperties1.setEnabled( true );
2440                selectedCell = getCellByPoint( new Point JavaDoc( getRealDim(evt.getX()-10), getRealDim( evt.getY()-10)));
2441                jMenuItemCellProperties1.setEnabled( selectedCell != null );
2442                jMenuItemPaste1.setEnabled(getMainFrame().getClipBoard().size() > 0);
2443                jCheckBoxMenuItemDefaultCellEdit1.setSelected( isDefaultCellMode() );
2444
2445                jPopupMenuCrosstab.show(this,evt.getX(),evt.getY());
2446            }
2447
2448        }
2449
2450    }//GEN-LAST:event_formMousePressed
2451

2452    private void formMouseClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_formMouseClicked
2453

2454        if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() == 2)
2455        {
2456            if (getSelectedElements().size() > 0 ) getParentReportFrame().openElementPropertiesDialog();
2457        }
2458
2459    }//GEN-LAST:event_formMouseClicked
2460

2461    private void formMouseMoved(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_formMouseMoved
2462

2463        double mouseX = evt.getPoint().getX();
2464        double mouseY = evt.getPoint().getY();
2465
2466        readyToDragCellVertically = -1;
2467        readyToDragCellHorizontally = -1;
2468
2469        try {
2470
2471            if (newObjectType == ReportElementType.NONE)
2472            {
2473                if (getSelectedElements().size() == 0)
2474                {
2475                    // Check if we are near to a cell line...
2476
for (int i=1; i<getRows().size(); ++i)
2477                    {
2478                        int position = ((Integer JavaDoc)getRows().get(i)).intValue();
2479                        position = getZoomedDim( position ) + 10;
2480                        if (mouseY > position -2 && mouseY < position +2)
2481                        {
2482                            readyToDragCellVertically = i;
2483                            this.setCursor( Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
2484                            break;
2485                        }
2486                    }
2487
2488                    // Check if we are near to a cell line...
2489
for (int i=1; readyToDragCellVertically < 0 && i< getColumns().size(); ++i)
2490                    {
2491                        int position = ((Integer JavaDoc)getColumns().get(i)).intValue();
2492                        position = getZoomedDim( position ) + 10;
2493                        if (mouseX > position -2 && mouseX < position +2)
2494                        {
2495                            readyToDragCellHorizontally = i;
2496                            this.setCursor( Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
2497                            break;
2498                        }
2499                    }
2500
2501                    if (readyToDragCellVertically <=0 && readyToDragCellHorizontally <= 0)
2502                    {
2503                        this.setCursor( Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
2504                    }
2505                }
2506
2507                if (selectedElements.size() >0 && newObjectType == ReportElementType.NONE) {
2508                // We are trasformation mode?
2509
{
2510                    // Vediamo se siamo sopra la figura...
2511
Enumeration JavaDoc e = selectedElements.elements();
2512                    boolean found = false;
2513                    boolean sizeall = false;
2514                    while (!found && e.hasMoreElements() ) {
2515
2516                        ReportElement selectedRe = (ReportElement)e.nextElement();
2517                        Rectangle JavaDoc grip = new Rectangle JavaDoc(getZoomedDim(selectedRe.position.x-10)-5+10, getZoomedDim(selectedRe.position.y-10)-5+10,
2518                                getZoomedDim(selectedRe.width)+10,getZoomedDim(selectedRe.height)+10);
2519                        Rectangle JavaDoc cursor = new Rectangle JavaDoc(evt.getX(),
2520                                evt.getY(),
2521                                1,1);
2522
2523                        if (cursor.intersects(grip)) {
2524                            sizeall = true;
2525                            // Vediamo se interseca una grip...
2526
grip.width = 5;
2527                            grip.height = 5;
2528
2529                            if (cursor.intersects(grip)) {
2530                                this.setCursor(Cursor.getPredefinedCursor( Cursor.NW_RESIZE_CURSOR ));
2531                                found =true;
2532                                transformation_type = TransformationType.TRANSFORMATION_RESIZE_NW;
2533                            }
2534
2535                            if (!found) {
2536                                grip.x = getZoomedDim(selectedRe.position.x-10+selectedRe.width)+10;
2537                                grip.y = getZoomedDim(selectedRe.position.y-10)+10-5;
2538                                grip.width = 5;
2539                                grip.height = 5;
2540                                if (cursor.intersects(grip)) {
2541                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.NE_RESIZE_CURSOR ));
2542                                    found =true;
2543                                    transformation_type = TransformationType.TRANSFORMATION_RESIZE_NE;
2544                                }
2545                            }
2546
2547                            if (!found) {
2548                                grip.x = getZoomedDim(selectedRe.position.x-10)+10-5;
2549                                grip.y = getZoomedDim(selectedRe.position.y+(selectedRe.height/2)-10)+10-2;
2550                                grip.width = 5;
2551                                grip.height = 5;
2552                                if (cursor.intersects(grip)) {
2553                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.W_RESIZE_CURSOR));
2554                                    found =true;
2555                                    transformation_type = TransformationType.TRANSFORMATION_RESIZE_W;
2556                                }
2557                            }
2558
2559                            if (!found) {
2560                                grip.x = getZoomedDim(selectedRe.position.x-10)+10-5;
2561                                grip.y = getZoomedDim(selectedRe.position.y-10+selectedRe.height)+10;
2562                                grip.width = 5;
2563                                grip.height = 5;
2564                                if (cursor.intersects(grip)) {
2565                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.SW_RESIZE_CURSOR));
2566                                    found =true;
2567                                    transformation_type = TransformationType.TRANSFORMATION_RESIZE_SW;
2568                                }
2569                            }
2570
2571                            if (!found) {
2572                                grip.x = getZoomedDim(selectedRe.position.x+(selectedRe.width/2)-10)+10-2;
2573                                grip.y = getZoomedDim(selectedRe.position.y-10)+10-5;
2574                                grip.width = 5;
2575                                grip.height = 5;
2576                                if (cursor.intersects(grip)) {
2577                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.N_RESIZE_CURSOR));
2578                                    found =true;
2579                                    transformation_type = TransformationType.TRANSFORMATION_RESIZE_N;
2580                                }
2581                            }
2582
2583                            if (!found) {
2584                                grip.x = getZoomedDim(selectedRe.position.x+(selectedRe.width/2)-10)+10-2;
2585                                grip.y = getZoomedDim(selectedRe.position.y+selectedRe.height-10)+10;
2586                                grip.width = 5;
2587                                grip.height = 5;
2588                                if (cursor.intersects(grip)) {
2589                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.S_RESIZE_CURSOR));
2590                                    found =true;
2591                                    transformation_type = TransformationType.TRANSFORMATION_RESIZE_S;
2592                                }
2593                            }
2594
2595                            if (!found) {
2596                                grip.x = getZoomedDim(selectedRe.position.x+selectedRe.width-10)+10;
2597                                grip.y = getZoomedDim(selectedRe.position.y+selectedRe.height-10)+10;
2598                                grip.width = 5;
2599                                grip.height = 5;
2600                                if (cursor.intersects(grip)) {
2601                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.SE_RESIZE_CURSOR));
2602                                    found =true;
2603                                    transformation_type = TransformationType.TRANSFORMATION_RESIZE_SE;
2604                                }
2605                            }
2606
2607                            if (!found) {
2608                                grip.x = getZoomedDim(selectedRe.position.x+selectedRe.width-10)+10;
2609                                    grip.y = getZoomedDim(selectedRe.position.y+(selectedRe.height/2)-10)+10-2;
2610                                    grip.width = 5;
2611                                    grip.height = 5;
2612                                    if (cursor.intersects(grip)) {
2613                                        this.setCursor(Cursor.getPredefinedCursor( Cursor.E_RESIZE_CURSOR));
2614                                        found =true;
2615                                        transformation_type = TransformationType.TRANSFORMATION_RESIZE_E;
2616                                    }
2617                                }
2618
2619                                if (!found) {
2620                                    this.setCursor(Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR));
2621
2622                                    if (getMainFrame().isEMMActive())
2623                                        transformation_type = TransformationType.TRANSFORMATION_NONE;
2624                                    else {
2625                                        transformation_type = TransformationType.TRANSFORMATION_MOVE;
2626                                        resistenceExceeded = false;
2627                                    }
2628                                }
2629                            }
2630                        }
2631                        if (!sizeall) {
2632                            this.setCursor(Cursor.getDefaultCursor());
2633                            transformation_type = TransformationType.TRANSFORMATION_NONE;
2634                        }
2635                    }
2636                }
2637
2638            }
2639            else
2640            {
2641
2642            }
2643
2644        } catch (Exception JavaDoc ex) {
2645            ex.printStackTrace();
2646        }
2647    }//GEN-LAST:event_formMouseMoved
2648

2649
2650    // Variables declaration - do not modify//GEN-BEGIN:variables
2651
private javax.swing.JCheckBoxMenuItem JavaDoc jCheckBoxMenuItemDefaultCellEdit;
2652    private javax.swing.JCheckBoxMenuItem JavaDoc jCheckBoxMenuItemDefaultCellEdit1;
2653    private javax.swing.JMenuItem JavaDoc jMenuItemCellProperties;
2654    private javax.swing.JMenuItem JavaDoc jMenuItemCellProperties1;
2655    private javax.swing.JMenuItem JavaDoc jMenuItemCopy;
2656    private javax.swing.JMenuItem JavaDoc jMenuItemCopyStyle;
2657    private javax.swing.JMenuItem JavaDoc jMenuItemCrosstabProperties;
2658    private javax.swing.JMenuItem JavaDoc jMenuItemCrosstabProperties1;
2659    private javax.swing.JMenuItem JavaDoc jMenuItemCut;
2660    private javax.swing.JMenuItem JavaDoc jMenuItemDelete;
2661    private javax.swing.JMenuItem JavaDoc jMenuItemElementProperties;
2662    private javax.swing.JMenuItem JavaDoc jMenuItemPaste;
2663    private javax.swing.JMenuItem JavaDoc jMenuItemPaste1;
2664    private javax.swing.JMenuItem JavaDoc jMenuItemPasteStyle;
2665    private javax.swing.JMenuItem JavaDoc jMenuItemPattern;
2666    private javax.swing.JMenuItem JavaDoc jMenuItemTransformStaticText;
2667    private javax.swing.JPopupMenu JavaDoc jPopupMenuCrosstab;
2668    private javax.swing.JPopupMenu JavaDoc jPopupMenuCrosstabReporteElement;
2669    private javax.swing.JSeparator JavaDoc jSeparator1;
2670    private javax.swing.JSeparator JavaDoc jSeparator3;
2671    private javax.swing.JSeparator JavaDoc jSeparator4;
2672    // End of variables declaration//GEN-END:variables
2673

2674
2675    public List JavaDoc getColumns() {
2676        return columns;
2677    }
2678
2679    public void setColumns(List JavaDoc columns) {
2680        this.columns = columns;
2681    }
2682
2683    public List JavaDoc getRows() {
2684        return rows;
2685    }
2686
2687    public void setRows(List JavaDoc rows) {
2688        this.rows = rows;
2689    }
2690
2691    /**
2692     * This method fill all not defined cells with defaults taken by inherited cell...
2693     * The alghoritm to find the cell from wich a cell inherits its defaults works as follow:
2694     * 1. Check for the previos row cell with the same width
2695     * 2. Check for the previos column cell with the same height
2696     * An updateGrid on CrosstabReportPanel will fix all positions...
2697     * In this case it's not important the total position (Start/End/Node)
2698     **/

2699    public void addNotDefinedCells()
2700    {
2701        if (getCrosstabElement() == null) return;
2702
2703        // First of all we have to calc what cells we have and in what position they are...
2704
int cellGridWidth = getCrosstabElement().getColumnGroups().size();
2705        int cellGridHeight = getCrosstabElement().getRowGroups().size();
2706
2707        // We assume that cell D/D (detail/detail) is defined.
2708
// Cell x,y is the cell with totalColumnGroup = colums(x) and totalRowGroup the rows(y)
2709

2710        for (int y = cellGridHeight; y >= 0; --y)
2711        {
2712
2713
2714            for (int x = cellGridWidth; x >= 0; --x)
2715            {
2716
2717                    String JavaDoc totalRowGroupName = "";
2718                    if (y < cellGridHeight) totalRowGroupName = ((CrosstabGroup)getCrosstabElement().getRowGroups().get(y)).getName();
2719
2720                    String JavaDoc totalColumnGroupName = "";
2721                    if (x < cellGridWidth) totalColumnGroupName = ((CrosstabGroup)getCrosstabElement().getColumnGroups().get(x)).getName();
2722
2723                    CrosstabCell cell = findCell( totalRowGroupName,
2724                                                  totalColumnGroupName);
2725
2726                    if (cell == null)
2727                    {
2728                       // we have to find a cell on the same row that matchs the width to inherit by...
2729
int cellHeight = getRowHeight( totalRowGroupName );
2730                       int cellWidth = getColumnWidth( totalColumnGroupName );
2731
2732
2733                       // look for a good row cell with the same width on the same row...
2734
CrosstabCell templateCell = null;
2735                       for (int k=x+1; k < cellGridWidth; ++k)
2736                       {
2737                            templateCell = findCell( totalRowGroupName,
2738                                                     ((CrosstabGroup)getCrosstabElement().getColumnGroups().get(k)).getName());
2739                            if (templateCell == null)
2740                            {
2741                                continue;
2742                            }
2743
2744                            if (templateCell.getWidth() == cellWidth)
2745                            {
2746                                break;
2747                            }
2748                            else
2749                            {
2750                                templateCell = null;
2751                            }
2752                       }
2753                       if (templateCell == null)
2754                       {
2755                           templateCell = findCell( totalRowGroupName, "");
2756                           if (templateCell != null && templateCell.getWidth() != cellWidth) templateCell = null;
2757                       }
2758
2759                       if (templateCell == null) // Look on the same column...
2760
{
2761                           for (int k=y+1; k < cellGridHeight; ++k)
2762                           {
2763                                templateCell = findCell( ((CrosstabGroup)getCrosstabElement().getRowGroups().get(k)).getName(),
2764                                                         totalColumnGroupName);
2765
2766                                if (templateCell.getHeight() == cellHeight)
2767                                {
2768                                    // FOUND IT!
2769
break;
2770                                }
2771                                else
2772                                {
2773                                    templateCell = null;
2774                                }
2775                           }
2776                           if (templateCell == null)
2777                           {
2778                               templateCell = findCell( "", totalColumnGroupName);
2779                               if (templateCell != null && templateCell.getHeight() != cellHeight) templateCell = null;
2780                           }
2781                       }
2782
2783                       if (templateCell == null)
2784                       {
2785                           // Default not found!!!! Our cell will be void!
2786
cell = new CrosstabCell();
2787                           cell.setParent( this.getCrosstabElement());
2788                           cell.setWidth(cellWidth);
2789                           cell.setHeight(cellHeight);
2790                           cell.setColumnTotalGroup( totalColumnGroupName);
2791                           cell.setRowTotalGroup( totalRowGroupName );
2792                       }
2793                       else
2794                       {
2795                           cell = templateCell.cloneMe();
2796                           cell.setColumnTotalGroup( totalColumnGroupName);
2797                           cell.setRowTotalGroup( totalRowGroupName );
2798                           cell.setParent( this.getCrosstabElement());
2799
2800                           // Duplicate all elements of this cell, and reassign parent cell...
2801
int currentElements = getCrosstabElement().getElements().size();
2802                           for (int i=0; i<currentElements; ++i)
2803                           {
2804                               ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
2805                               // WARNING this copy does not support container and group elements!!!
2806
if (re.getCell() == templateCell)
2807                               {
2808                                   re = re.cloneMe();
2809                                   cell.setColumnTotalGroup(totalColumnGroupName );
2810                                   cell.setRowTotalGroup(totalRowGroupName );
2811                                   re.setCell( cell );
2812                                   getCrosstabElement().getElements().add(re);
2813                               }
2814                           }
2815                       }
2816
2817                       getCrosstabElement().getCells().add( cell );
2818                    }
2819            }
2820        }
2821
2822    }
2823
2824    public Vector JavaDoc getSelectedElements() {
2825        return selectedElements;
2826    }
2827
2828    public void setSelectedElements(Vector JavaDoc selectedElements) {
2829        this.selectedElements = selectedElements;
2830    }
2831
2832    /**
2833     * Point is a point il logical coordinates, so you have to perform a conversion before call it:
2834     * getCellByPoint( new Point( getRealDim(x), getRealDim(y)))
2835     * this if you are using mouse coordinates...
2836     **/

2837    public CrosstabCell getCellByPoint(Point JavaDoc p) {
2838
2839        for (int i=0; i<getCrosstabElement().getCells().size(); ++i)
2840        {
2841            CrosstabCell cell = (CrosstabCell)this.getCrosstabElement().getCells().elementAt(i);
2842            if (cell.getBounds().contains(p) && (isDefaultCellMode() == (cell.getType() == CrosstabCell.NODATA_CELL)))
2843            {
2844                return cell;
2845            }
2846        }
2847
2848        return null;
2849    }
2850
2851    public Vector JavaDoc getRowBands() {
2852        return rowBands;
2853    }
2854
2855    public Vector JavaDoc getColumnBands() {
2856        return columnBands;
2857    }
2858
2859
2860    /**
2861     * This method remove from selection vector elements no longer part of this crosstab
2862     */

2863    public void validateSelection()
2864    {
2865        for (int i = 0; i<getSelectedElements().size(); ++i)
2866        {
2867           ReportElement re = (ReportElement)getSelectedElements().elementAt(i);
2868           if (!getCrosstabElement().getElements().contains( re ))
2869           {
2870               getSelectedElements().remove(re);
2871               --i;
2872           }
2873        }
2874        // UPDATE SELECTION NOW!!!
2875
}
2876
2877    /**
2878     * Shortcut for MainFrame.getMainInstance();
2879     **/

2880    public MainFrame getMainFrame()
2881    {
2882        return MainFrame.getMainInstance();
2883    }
2884
2885
2886    public void setSelectedElement(ReportElement e) {
2887        setSelectedElement(e, true);
2888    }
2889
2890    /**
2891     * Set the selected element
2892     *
2893     */

2894    public void setSelectedElement(ReportElement el, boolean fireEvent) {
2895
2896        getSelectedElements().removeAllElements();
2897
2898
2899        if (el != null && (isDefaultCellMode() == (el.getCell().getType() == CrosstabCell.NODATA_CELL))) {
2900
2901            selectedElements.addElement(el);
2902            getMainFrame().setCutCopyEnabled(true);
2903        } else {
2904            getMainFrame().setCutCopyEnabled(false);
2905        }
2906        repaint();
2907
2908        if (fireEvent) {
2909            fireSelectionChangedEvent();
2910        }
2911    }
2912
2913
2914    public void addSelectedElement(ReportElement el) {
2915        addSelectedElement(el, true);
2916    }
2917
2918    /**
2919     * Add an element to the selection...
2920     *
2921     */

2922    public void addSelectedElement(ReportElement el, boolean fireEvent) {
2923        if (selectedElements.contains(el)) return;
2924
2925        if (isDefaultCellMode() != (el.getCell().getType() == CrosstabCell.NODATA_CELL)) return;
2926        //label1.setText("ADDED");
2927
// Faccio una corona non selected attorno al nuovo elemento...
2928
Rectangle JavaDoc rect = new Rectangle JavaDoc(el.position.x-5,el.position.y-5,el.width+10, el.height+10);
2929        selectedElements.addElement(el);
2930
2931        this.repaint();
2932        if (fireEvent) {
2933            fireSelectionChangedEvent();
2934        }
2935
2936        getMainFrame().setCutCopyEnabled(true);
2937    }
2938
2939    public int gridMultiple( int zoomedDim) {
2940        //if (!isSnapToGrid()) {
2941
return zoomedDim;
2942        //}
2943

2944        //int zoomedGridSize = getZoomedDim(this.gridSize);
2945
//double val = Math.abs(zoomedDim);
2946
//if ( zoomedGridSize > 1.0 ) {
2947
// val = Math.floor( ( val + (0.5 * zoomedGridSize)) / zoomedGridSize ) * zoomedGridSize;
2948
//}
2949

2950        //return (int) ( (zoomedDim >= 0) ? val : -val );
2951
}
2952
2953    public int magnetEffect(List JavaDoc spots, int position)
2954    {
2955        for (int i=0; i<spots.size(); ++i)
2956        {
2957            int spotPoint = ((Integer JavaDoc)spots.get(i)).intValue();
2958            spotPoint = getZoomedDim(spotPoint)+10;
2959            if (position > spotPoint - 5 && position < spotPoint + 5)
2960            {
2961                return spotPoint;
2962            }
2963        }
2964        return position;
2965    }
2966
2967
2968    /** Getter for property newObjectType.
2969     * @return Value of property newObjectType.
2970     *
2971     */

2972    public int getNewObjectType() {
2973        return newObjectType;
2974    }
2975
2976    /** Setter for property newObjectType.
2977     * @param newObjectType New value of property newObjectType.
2978     *
2979     */

2980    public void setNewObjectType(int newObjectType) {
2981
2982        if (this.newObjectType == newObjectType) return;
2983
2984        if (newObjectType == ReportElementType.NONE) {
2985            this.setCursor( java.awt.Cursor.getDefaultCursor());
2986        } else {
2987            this.setCursor( java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.CROSSHAIR_CURSOR));
2988        }
2989        this.newObjectType = newObjectType;
2990    }
2991
2992    public Point JavaDoc straighten( int delta_w, int delta_h ){
2993        // straighten on 90 % degrees
2994
double clipAngle = 15;
2995
2996        double R = Math.sqrt( (delta_w * delta_w) + (delta_h*delta_h) );
2997        double cos = delta_w / R;
2998        double angle = 180 * Math.acos( cos )/ Math.PI ;
2999
3000        int repeat = (int) Math.floor((angle + (0.5 * clipAngle)) / clipAngle) ;
3001
3002        double newAngle = repeat * clipAngle ;
3003
3004        // keep the sign the same!
3005
delta_h = (int) (Math.abs(( R * Math.sin( (newAngle / 180 )* Math.PI))) * delta_h / Math.abs(delta_h) );
3006
3007        delta_w = (int) ( Math.abs(( R * Math.cos( (newAngle / 180) * Math.PI))) * delta_w / Math.abs(delta_w) ) ;
3008
3009        /*
3010        // aligning on the grid if necessary
3011        if (Math.abs(delta_h) == Math.abs(delta_w) ) {
3012            delta_h = gridMultiple( delta_h);
3013            delta_w = gridMultiple( delta_w);
3014        } else {
3015            if (delta_w == 0) {
3016                delta_h = gridMultiple( delta_h);
3017            }
3018            if (delta_h == 0) {
3019                delta_w = gridMultiple( delta_w);
3020            }
3021        }
3022        */

3023
3024        return new Point JavaDoc( delta_w, delta_h);
3025    }
3026
3027
3028    /**
3029     * Not implemented, just returns p.
3030     **/

3031    public int snapToGridVertically(int p)
3032    {
3033        return p;
3034    }
3035
3036    public void deleteSelectedElements() {
3037        // Remove selected elements...
3038
Enumeration JavaDoc e = selectedElements.elements();
3039
3040        DeleteElementsOperation undoOp = new DeleteElementsOperation(getParentReportFrame(), getCrosstabElement());
3041        Vector JavaDoc deletedElements = new Vector JavaDoc();
3042
3043        while (e.hasMoreElements()) {
3044
3045
3046            ReportElement re = (ReportElement) e.nextElement();
3047
3048            if ( getCrosstabElement().getElements().contains( re))
3049            {
3050                undoOp.addElement( re, getCrosstabElement().getElements().indexOf(re));
3051                //System.out.println("Deleting " + re + " " + getCrosstabElement().getElements().indexOf(re));
3052
getCrosstabElement().getElements().remove( re );
3053                deletedElements.add(re);
3054                if (re instanceof FrameReportElement)
3055                {
3056                    removeSubElements(re, undoOp, deletedElements);
3057                }
3058            }
3059            //fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, re , ReportElementChangedEvent.REMOVED));
3060
}
3061
3062        getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(),getCrosstabElement(), deletedElements, ReportElementChangedEvent.REMOVED ));
3063        this.setSelectedElement(null);
3064        getParentReportFrame().addUndoOperation(undoOp);
3065        //selectedElements.removeAllElements();
3066

3067        this.repaint();
3068    }
3069
3070    protected void removeSubElements(ReportElement parentElement, DeleteElementsOperation undoOp, Vector JavaDoc deletedElements)
3071    {
3072        for (int i=0; i<getCrosstabElement().getElements().size(); ++i)
3073        {
3074            ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
3075            if (re.getParentElement() == parentElement)
3076            {
3077                undoOp.addElement( re, getCrosstabElement().getElements().indexOf(re));
3078                getCrosstabElement().getElements().remove( re );
3079                i--;
3080                deletedElements.add(re);
3081                if (re instanceof FrameReportElement)
3082                {
3083                    removeSubElements(re, undoOp, deletedElements);
3084                }
3085            }
3086        }
3087    }
3088
3089    public void fireSelectionChangedEvent() {
3090
3091        ReportElementsSelectionEvent rece = new ReportElementsSelectionEvent(getParentReportFrame(),getCrosstabElement(), this.getSelectedElements()) ;
3092        this.getParentReportFrame().fireReportListenerReportElementsSelectionChanged(rece );
3093        getMainFrame().getElementPropertiesDialog().updateSelection();
3094
3095    }
3096
3097
3098    public void copyStyle() {
3099        // We should copy this element to use it as style template...
3100
if (this.getSelectedElements().size() == 0) return;
3101        this.getMainFrame().setStyleClipbardContent( ((ReportElement)this.getSelectedElements().elementAt(0)).cloneMe() );
3102
3103    }
3104
3105    public void pasteStyle() {
3106        if (this.getSelectedElements().size() == 0) return;
3107        if (this.getMainFrame().getStyleClipboard() == null) return;
3108
3109        // Style are relative to:
3110
ReportElement templateElement = this.getMainFrame().getStyleClipboard();
3111
3112        PasteStyleOperation undoOp = new PasteStyleOperation(getParentReportFrame(), getCrosstabElement());
3113
3114        Enumeration JavaDoc elements = getSelectedElements().elements();
3115        while (elements.hasMoreElements()) {
3116            ReportElement re = (ReportElement)elements.nextElement();
3117            undoOp.addElement(re, re.cloneMe(), templateElement);
3118            getParentReportFrame().applyStyle(re, templateElement);
3119        }
3120        getParentReportFrame().addUndoOperation(undoOp);
3121        getParentReportFrame().fireReportListenerReportElementsSelectionChanged(new ReportElementsSelectionEvent( getParentReportFrame(),getCrosstabElement(), getSelectedElements()));
3122        this.repaint();
3123    }
3124
3125
3126    public void transformStaticInTextFields() {
3127
3128        String JavaDoc keyStaticText = (new StaticTextReportElement(0,0,0,0)).getKey();
3129        String JavaDoc keyTextField = (new TextFieldReportElement(0,0,0,0)).getKey();
3130        // End code Robert Lamping, 13 july 2004
3131

3132
3133        // Edit static Text
3134
Enumeration JavaDoc e = selectedElements.elements();
3135
3136        ReplacedElementsOperation undoOp = new ReplacedElementsOperation(getParentReportFrame(), this.getCrosstabElement());
3137
3138        while (e.hasMoreElements()) {
3139            ReportElement re = (ReportElement) e.nextElement();
3140            if(re instanceof StaticTextReportElement){
3141                // 1.
3142
TextFieldReportElement tfre = new TextFieldReportElement(re.getPosition().x, re.getPosition().y, re.width, re.height);
3143                tfre.setRelativePosition(new Point JavaDoc(re.getRelativePosition().x, re.getRelativePosition().y));
3144                // Set base characteristics...
3145
tfre.copyBaseReportElement(tfre, re);
3146                // Set Text characteristics...
3147
tfre.setBold(((TextReportElement)re).isBold() );
3148                tfre.setUnderline( ((TextReportElement)re).isUnderline() );
3149                tfre.setStrikeTrought( ((TextReportElement)re).isStrikeTrought() );
3150                tfre.setItalic( ((TextReportElement)re).isItalic() );
3151
3152                tfre.setLineSpacing( ((TextReportElement)re).getLineSpacing() );
3153                tfre.setPDFFontName( ((TextReportElement)re).getPDFFontName() );
3154                tfre.setPdfEncoding( ((TextReportElement)re).getPdfEncoding() );
3155                tfre.setReportFont( ((TextReportElement)re).getReportFont() );
3156                tfre.setRotate( ((TextReportElement)re).getRotate() );
3157                tfre.setTTFFont( ((TextReportElement)re).getTTFFont() );
3158                tfre.setVerticalAlign( ((TextReportElement)re).getVerticalAlign());
3159                tfre.setFont( ((TextReportElement)re).getFont() );
3160                tfre.setFontName( ((TextReportElement)re).getFontName() );
3161                tfre.setFontSize(((TextReportElement)re).getFontSize() );
3162
3163                tfre.setClassExpression( "java.lang.String" );
3164
3165                // Begin code Robert Lamping, 13 july 2004
3166
// Changing key element name
3167
if (re.getKey().indexOf( keyStaticText + "-" ) == 0 ) {
3168                    // key indeed begins with "staticText-"
3169
//Okay then request the next available key for a normal field text
3170
tfre.setKey( getParentReportFrame().getNextElementKey( keyTextField ) );
3171                }
3172
3173                // End code Robert Lamping, 13 july 2004
3174

3175                String JavaDoc te = ((TextReportElement)re).getText();
3176                String JavaDoc result = javax.swing.JOptionPane.showInputDialog(this, I18n.getString("messages.enterNewValue","Please enter a new Value"), "\"" +te + "\"");
3177                if(result != null && !result.equals("")){
3178                    ((TextReportElement)tfre).setText(result);
3179                    // 1. remove element
3180
int index = getCrosstabElement().getElements().indexOf( re );
3181                    getCrosstabElement().getElements().remove( re );
3182                    getCrosstabElement().getElements().add( index, tfre);
3183
3184                    int index2 = getSelectedElements().indexOf( re );
3185                    getSelectedElements().remove( re );
3186                    getSelectedElements().add( index2, tfre);
3187
3188                    // 2. add element
3189
undoOp.addElement( re, tfre);
3190                    getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), re , ReportElementChangedEvent.REMOVED));
3191                    getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), tfre , ReportElementChangedEvent.ADDED));
3192
3193                }
3194            }
3195        }
3196        getParentReportFrame().addUndoOperation(undoOp);
3197        getParentReportFrame().fireReportListenerReportElementsSelectionChanged(new ReportElementsSelectionEvent( getParentReportFrame(), getCrosstabElement(), getSelectedElements()));
3198        repaint();
3199    }
3200
3201
3202     /**
3203     *
3204     */

3205    public void bringToFront() {
3206        Enumeration JavaDoc e = this.getSelectedElements().elements();
3207
3208        ChangeEmentsOrderOperation undoOp = new ChangeEmentsOrderOperation(getParentReportFrame(), getCrosstabElement());
3209
3210        while (e.hasMoreElements()) {
3211            ReportElement element = (ReportElement)e.nextElement();
3212
3213            int oldPosition = getCrosstabElement().getElements().indexOf(element);
3214            getCrosstabElement().getElements().remove(element);
3215            getCrosstabElement().getElements().addElement(element);
3216            int newPosition = getCrosstabElement().getElements().indexOf(element);
3217            undoOp.addElement(element,oldPosition, newPosition);
3218        }
3219
3220        if (undoOp.getElements().size() > 0) {
3221            getParentReportFrame().addUndoOperation(undoOp);
3222        }
3223        this.repaint();
3224        // We must update the tree... the order i changed...
3225
/* TODO */
3226    }
3227
3228    public void sendToBack() {
3229        Enumeration JavaDoc e = this.getSelectedElements().elements();
3230
3231        ChangeEmentsOrderOperation undoOp = new ChangeEmentsOrderOperation(getParentReportFrame(), getCrosstabElement());
3232
3233        while (e.hasMoreElements()) {
3234            ReportElement element = (ReportElement)e.nextElement();
3235
3236            int oldPosition = getCrosstabElement().getElements().indexOf(element);
3237            getCrosstabElement().getElements().remove(element);
3238            if (element.getParentElement() != null)
3239            {
3240                getCrosstabElement().getElements().insertElementAt( element, getCrosstabElement().getElements().indexOf(element.getParentElement())+1);
3241            }
3242            else
3243            {
3244                 getCrosstabElement().getElements().insertElementAt(element,0);
3245            }
3246            int newPosition = 0;
3247            undoOp.addElement(element,oldPosition, newPosition);
3248        }
3249
3250        if (undoOp.getElements().size() > 0) {
3251            getParentReportFrame().addUndoOperation(undoOp);
3252        }
3253        this.repaint();
3254        // We must update the tree... the order is changed...
3255
/* TODO */
3256    }
3257
3258
3259    public void dragEnter(java.awt.dnd.DropTargetDragEvent JavaDoc dtde) {
3260        dtde.acceptDrag(dtde.getDropAction());
3261    }
3262
3263    public void dragExit(java.awt.dnd.DropTargetEvent JavaDoc dte) {
3264    }
3265
3266    public void dragOver(java.awt.dnd.DropTargetDragEvent JavaDoc dtde) {
3267        dtde.acceptDrag(dtde.getDropAction());
3268    }
3269
3270    public void drop(java.awt.dnd.DropTargetDropEvent JavaDoc dtde) {
3271       try {
3272
3273            DropTargetContext JavaDoc context = dtde.getDropTargetContext();
3274
3275            Transferable JavaDoc tr = dtde.getTransferable();
3276
3277            DataFlavor JavaDoc[] df = tr.getTransferDataFlavors();
3278
3279
3280            if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.crosstab.Measure"))
3281            {
3282                java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(it.businesslogic.ireport.crosstab.Measure.class, it.businesslogic.ireport.crosstab.Measure.class.getName());
3283                it.businesslogic.ireport.crosstab.Measure field = (it.businesslogic.ireport.crosstab.Measure)tr.getTransferData( myFlavor );
3284                // Add a field!!!
3285
//System.out.println("Field name:" + field.getName() +" from "+ field.getClassType() );
3286

3287                // Create a standard field...
3288
this.dropNewTextField( dtde.getLocation(), "$V{"+ field.getName() +"}", field.getClassType(),"Now" );
3289            }
3290            else if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.crosstab.CrosstabRowGroup"))
3291            {
3292                java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(it.businesslogic.ireport.crosstab.CrosstabRowGroup.class, it.businesslogic.ireport.crosstab.CrosstabRowGroup.class.getName());
3293                it.businesslogic.ireport.crosstab.CrosstabGroup field = (it.businesslogic.ireport.crosstab.CrosstabGroup)tr.getTransferData( myFlavor );
3294                this.dropNewTextField( dtde.getLocation(), "$V{"+ field.getName() +"}", field.getBucketExpressionClass(),"Now" );
3295            }
3296            else if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.crosstab.CrosstabColumnGroup"))
3297            {
3298                java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(it.businesslogic.ireport.crosstab.CrosstabColumnGroup.class, it.businesslogic.ireport.crosstab.CrosstabColumnGroup.class.getName());
3299                it.businesslogic.ireport.crosstab.CrosstabGroup field = (it.businesslogic.ireport.crosstab.CrosstabGroup)tr.getTransferData( myFlavor );
3300                this.dropNewTextField( dtde.getLocation(), "$V{"+ field.getName() +"}", field.getBucketExpressionClass(),"Now" );
3301            }
3302            else if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.crosstab.GroupTotal"))
3303            {
3304                java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(it.businesslogic.ireport.crosstab.GroupTotal.class, it.businesslogic.ireport.crosstab.GroupTotal.class.getName());
3305                it.businesslogic.ireport.crosstab.GroupTotal field = (it.businesslogic.ireport.crosstab.GroupTotal)tr.getTransferData( myFlavor );
3306                this.dropNewTextField( dtde.getLocation(), "$V{"+ field.getVarName() +"}", field.getClassType(),"Now" );
3307            }
3308            else if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.crosstab.CrosstabParameter"))
3309            {
3310                java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(it.businesslogic.ireport.crosstab.CrosstabParameter.class, it.businesslogic.ireport.crosstab.CrosstabParameter.class.getName());
3311                it.businesslogic.ireport.crosstab.CrosstabParameter field = (it.businesslogic.ireport.crosstab.CrosstabParameter)tr.getTransferData( myFlavor );
3312                this.dropNewTextField( dtde.getLocation(), "$P{"+ field.getName() +"}", field.getClassType(),"Now" );
3313            }
3314            else if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.Style"))
3315            {
3316                java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(it.businesslogic.ireport.Style.class, it.businesslogic.ireport.JRParameter.class.getName());
3317                it.businesslogic.ireport.Style var = (it.businesslogic.ireport.Style)tr.getTransferData( myFlavor );
3318                // Add a field!!!
3319

3320
3321                ReportElement re = this.getElementAt(dtde.getLocation());
3322                if (re != null)
3323                {
3324
3325                    if (!getParentReportFrame().getReport().getStyles().contains( var ))
3326                    {
3327                        boolean found = false;
3328                        // Look for a style with the same name...
3329
for (int i=0; i<getParentReportFrame().getReport().getStyles().size(); ++i)
3330                        {
3331                            Style s = (Style)getParentReportFrame().getReport().getStyles().elementAt(i);
3332                            if (s.getName() != null && s.getName().equals( var.getName()))
3333                            {
3334                                var = s;
3335                                found = true;
3336                                break;
3337                            }
3338                        }
3339                        if (!found)
3340                        {
3341                            var = new Style(var);
3342                            getParentReportFrame().getReport().addStyle( var );
3343                        }
3344                    }
3345
3346                    re.setStyle( var );
3347                    getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(), getCrosstabElement(), re, ReportElementChangedEvent.CHANGED));
3348                    this.repaint();
3349                }
3350            }
3351            else
3352            {
3353                Class JavaDoc c = Class.forName( df[0].getHumanPresentableName() );
3354                if (it.businesslogic.ireport.gui.library.AbstractLibraryObject.class.isAssignableFrom( c ))
3355                {
3356                    java.awt.datatransfer.DataFlavor JavaDoc myFlavor = new java.awt.datatransfer.DataFlavor JavaDoc(c, df[0].getHumanPresentableName());
3357                   Object JavaDoc obj = tr.getTransferData( myFlavor );
3358                    ((it.businesslogic.ireport.gui.library.AbstractLibraryObject )obj).drop(dtde);
3359                }
3360                else // if (.equals("it.businesslogic.ireport.JRParameter"))
3361
{
3362                    //System.out.println("Dropped a "+df[0].getHumanPresentableName());
3363
}
3364            }
3365
3366            context.dropComplete(true);
3367        } catch (Exception JavaDoc ex)
3368        {
3369
3370            ex.printStackTrace();
3371        }
3372    }
3373
3374    public void dropActionChanged(java.awt.dnd.DropTargetDragEvent JavaDoc dtde) {
3375    }
3376
3377    public TextFieldReportElement dropNewTextField(Point JavaDoc newObjectOrigin, String JavaDoc textfieldExpression, String JavaDoc classExpression, String JavaDoc time) {
3378        TextFieldReportElement re = null;
3379        // Find the band to associate to the new element...
3380

3381        CrosstabCell cell = getCellByPoint( new Point JavaDoc( getRealDim(newObjectOrigin.x-10), getRealDim( newObjectOrigin.y-10)) );
3382        if (cell == null) {
3383
3384            javax.swing.JOptionPane.showMessageDialog(this,I18n.getString("messages.dropObjectInsideTheCell","Please drop the object inside a cell."),"",javax.swing.JOptionPane.WARNING_MESSAGE);
3385            return null;
3386        }
3387
3388        int originX = cell.getLeft()+10;
3389        int originY = cell.getTop()+10;
3390        int width = cell.getWidth();
3391        int height = cell.getHeight();
3392
3393        re = new TextFieldReportElement( originX,originY,width,height);
3394        re.setRelativePosition(new Point JavaDoc(0,0));
3395
3396        re.setCell( cell );
3397        re.setText(textfieldExpression);
3398        re.setMatchingClassExpression( classExpression , true);
3399        re.setEvaluationTime( time );
3400
3401        getCrosstabElement().getElements().addElement(re);
3402        getParentReportFrame().addUndoOperation( new InsertElementOperation( getParentReportFrame(), getCrosstabElement(), re ) );
3403        this.setSelectedElement(re);
3404        this.repaint();
3405        return re;
3406    }
3407
3408    public boolean isDefaultCellMode() {
3409        return defaultCellMode;
3410    }
3411
3412    public void setDefaultCellMode(boolean defaultCellMode) {
3413        this.defaultCellMode = defaultCellMode;
3414
3415        if (defaultCellMode)
3416        {
3417            CrosstabCell noDataCell = getWhenNoDataCell();
3418            noDataCell.setPaintSelection(false);
3419
3420            CellAnimationEffect ae = new CellAnimationEffect();
3421            ae.setNoDataCell(noDataCell );
3422            ae.setEditor( this );
3423            javax.swing.SwingUtilities.invokeLater( ae );
3424        }
3425
3426        if (this.getSelectedElements().size() > 0)
3427        {
3428            this.setSelectedElement(null);
3429        }
3430        else
3431        {
3432            this.invalidate();
3433            this.repaint();
3434        }
3435
3436
3437
3438
3439    }
3440
3441
3442    /**
3443     * This method returns the WhenNoDataCell (that *should* be ever present after an updateGgrid...
3444     *
3445     */

3446    public CrosstabCell getWhenNoDataCell()
3447    {
3448        for (int i=0; i<getCrosstabElement().getCells().size(); ++i)
3449        {
3450            CrosstabCell cell = (CrosstabCell)getCrosstabElement().getCells().elementAt(i);
3451            if (cell.getType() == cell.NODATA_CELL)
3452            {
3453                return cell;
3454            }
3455        }
3456        return null;
3457    }
3458
3459    public java.util.List JavaDoc getOpenedNodesDocumentStructure() {
3460        return openedNodesDocumentStructure;
3461    }
3462
3463    public void setOpenedNodesDocumentStructure(java.util.List JavaDoc openedNodesDocumentStructure) {
3464        this.openedNodesDocumentStructure = openedNodesDocumentStructure;
3465    }
3466
3467
3468    /**
3469     * This method adds to the standard popup menu for elements all the format tool items
3470     *
3471     */

3472    private void addFormatItemsToMenu(javax.swing.JComponent JavaDoc m){
3473
3474
3475        jMenuItemFillCell = new javax.swing.JMenuItem JavaDoc();
3476        jMenuItemFillCell.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_maximise.png")));
3477        jMenuItemFillCell.setText(it.businesslogic.ireport.util.I18n.getString("fillCell", "Fill the cell"));
3478        jMenuItemFillCell.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3479            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3480                FormatCommand.getCommand( OperationType.ELEMENT_MAXIMIZE).execute();
3481            }
3482        });
3483
3484        m.add(jMenuItemFillCell);
3485
3486        jMenuItemFillCellH = new javax.swing.JMenuItem JavaDoc();
3487        jMenuItemFillCellH.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_hmaximise.png")));
3488        jMenuItemFillCellH.setText(it.businesslogic.ireport.util.I18n.getString("fillCellHorizontally", "Fill the cell (horizontally)"));
3489        jMenuItemFillCellH.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3490            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3491                FormatCommand.getCommand( OperationType.ELEMENT_MAXIMIZE_H).execute();
3492            }
3493        });
3494
3495        m.add(jMenuItemFillCellH);
3496
3497        jMenuItemFillCellV = new javax.swing.JMenuItem JavaDoc();
3498
3499        jMenuItemFillCellV.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_vmaximise.png")));
3500        jMenuItemFillCellV.setText(it.businesslogic.ireport.util.I18n.getString("fillCellVertically", "Fill the cell (vertically)"));
3501        jMenuItemFillCellV.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3502            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3503                FormatCommand.getCommand( OperationType.ELEMENT_MAXIMIZE_V).execute();
3504            }
3505        });
3506
3507        m.add(jMenuItemFillCellV);
3508
3509
3510        jMenuAlign = new javax.swing.JMenu JavaDoc();
3511        jMenuAlign.setText(it.businesslogic.ireport.util.I18n.getString("align", "Align..."));
3512
3513        jMenuItemAlignLeft = new javax.swing.JMenuItem JavaDoc();
3514
3515        jMenuItemAlignLeft.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_left.png")));
3516        jMenuItemAlignLeft.setText(it.businesslogic.ireport.util.I18n.getString("alignLeft", "Align left"));
3517        jMenuItemAlignLeft.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3518            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3519                getMainFrame().jMenuItemAlignLeftActionPerformed(evt);
3520            }
3521        });
3522
3523        jMenuAlign.add(jMenuItemAlignLeft);
3524
3525        jMenuItemAlignRight = new javax.swing.JMenuItem JavaDoc();
3526        jMenuItemAlignRight.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_right.png")));
3527        jMenuItemAlignRight.setText(it.businesslogic.ireport.util.I18n.getString("alignRight", "Align right"));
3528        jMenuItemAlignRight.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3529            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3530                getMainFrame().jMenuItemAlignRightActionPerformed(evt);
3531            }
3532        });
3533
3534        jMenuAlign.add(jMenuItemAlignRight);
3535
3536        jMenuItemAlignTop = new javax.swing.JMenuItem JavaDoc();
3537        jMenuItemAlignTop.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_top.png")));
3538        jMenuItemAlignTop.setText(it.businesslogic.ireport.util.I18n.getString("alignTop", "Align top"));
3539        jMenuItemAlignTop.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3540            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3541                getMainFrame().jMenuItemAlignTopActionPerformed(evt);
3542            }
3543        });
3544
3545        jMenuAlign.add(jMenuItemAlignTop);
3546
3547        jMenuItemAlignBottom = new javax.swing.JMenuItem JavaDoc();
3548        jMenuItemAlignBottom.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_bottom.png")));
3549        jMenuItemAlignBottom.setText(it.businesslogic.ireport.util.I18n.getString("alignBottom", "Align bottom"));
3550        jMenuItemAlignBottom.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3551            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3552                getMainFrame().jMenuItemAlignBottomActionPerformed(evt);
3553            }
3554        });
3555
3556        jMenuAlign.add(jMenuItemAlignBottom);
3557
3558        jSeparator19 = new javax.swing.JSeparator JavaDoc();
3559        jMenuAlign.add(jSeparator19);
3560
3561        jMenuItemAlignVerticalAxis = new javax.swing.JMenuItem JavaDoc();
3562        jMenuItemAlignVerticalAxis.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_center_axis.png")));
3563        jMenuItemAlignVerticalAxis.setText(it.businesslogic.ireport.util.I18n.getString("alignVerticalAxis", "Align vertical axis"));
3564        jMenuItemAlignVerticalAxis.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3565            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3566                getMainFrame().jMenuItemAlignVerticalAxisActionPerformed(evt);
3567            }
3568        });
3569
3570        jMenuAlign.add(jMenuItemAlignVerticalAxis);
3571
3572        jMenuItemAlignHorizontalAxis = new javax.swing.JMenuItem JavaDoc();
3573        jMenuItemAlignHorizontalAxis.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_vcenter_axis.png")));
3574        jMenuItemAlignHorizontalAxis.setText(it.businesslogic.ireport.util.I18n.getString("alignHorizontalAxis", "Align horizontal axis"));
3575        jMenuItemAlignHorizontalAxis.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3576            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3577                getMainFrame().jMenuItemAlignHorizontalAxisActionPerformed(evt);
3578            }
3579        });
3580
3581        jMenuAlign.add(jMenuItemAlignHorizontalAxis);
3582
3583        m.add(jMenuAlign);
3584
3585        jMenuSize = new javax.swing.JMenu JavaDoc();
3586        jMenuSize.setText(it.businesslogic.ireport.util.I18n.getString("size", "Size..."));
3587        jMenuItemSameWidth = new javax.swing.JMenuItem JavaDoc();
3588        jMenuItemSameWidth.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_hsize.png")));
3589        jMenuItemSameWidth.setText(it.businesslogic.ireport.util.I18n.getString("sameWidth", "Same width"));
3590        jMenuItemSameWidth.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3591            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3592                getMainFrame().jMenuItemSameWidthActionPerformed(evt);
3593            }
3594        });
3595
3596        jMenuSize.add(jMenuItemSameWidth);
3597
3598        jMenuItemSameWidthMax = new javax.swing.JMenuItem JavaDoc();
3599        jMenuItemSameWidthMax.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_hsize_plus.png")));
3600        jMenuItemSameWidthMax.setText(it.businesslogic.ireport.util.I18n.getString("sameWidthMax", "Same width (max)"));
3601        jMenuItemSameWidthMax.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3602            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3603                getMainFrame().jMenuItemSameWidthMaxActionPerformed(evt);
3604            }
3605        });
3606
3607        jMenuSize.add(jMenuItemSameWidthMax);
3608
3609        jMenuItemSameWidthMin = new javax.swing.JMenuItem JavaDoc();
3610        jMenuItemSameWidthMin.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_hsize_min.png")));
3611        jMenuItemSameWidthMin.setText(it.businesslogic.ireport.util.I18n.getString("sameWidthMin", "Same width (min)"));
3612        jMenuItemSameWidthMin.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3613            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3614                getMainFrame().jMenuItemSameWidthMinActionPerformed(evt);
3615            }
3616        });
3617
3618        jMenuSize.add(jMenuItemSameWidthMin);
3619
3620        jSeparator17 = new javax.swing.JSeparator JavaDoc();
3621        jMenuSize.add(jSeparator17);
3622
3623        jMenuItemSameHeight = new javax.swing.JMenuItem JavaDoc();
3624        jMenuItemSameHeight.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_vsize.png")));
3625        jMenuItemSameHeight.setText(it.businesslogic.ireport.util.I18n.getString("sameHeight", "Same height"));
3626        jMenuItemSameHeight.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3627            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3628                getMainFrame().jMenuItemSameHeightActionPerformed(evt);
3629            }
3630        });
3631
3632        jMenuSize.add(jMenuItemSameHeight);
3633
3634        jMenuItemSameHeightMin = new javax.swing.JMenuItem JavaDoc();
3635        jMenuItemSameHeightMin.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_vsize_min.png")));
3636        jMenuItemSameHeightMin.setText(it.businesslogic.ireport.util.I18n.getString("sameHeightMin", "Same height (min)"));
3637        jMenuItemSameHeightMin.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3638            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3639                getMainFrame().jMenuItemSameHeightMinActionPerformed(evt);
3640            }
3641        });
3642
3643        jMenuSize.add(jMenuItemSameHeightMin);
3644
3645        jMenuItemSameHeightMax = new javax.swing.JMenuItem JavaDoc();
3646        jMenuItemSameHeightMax.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_vsize_plus.png")));
3647        jMenuItemSameHeightMax.setText(it.businesslogic.ireport.util.I18n.getString("sameHeightMax", "Same height (max)"));
3648        jMenuItemSameHeightMax.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3649            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3650                getMainFrame().jMenuItemSameHeightMaxActionPerformed(evt);
3651            }
3652        });
3653
3654        jMenuSize.add(jMenuItemSameHeightMax);
3655
3656        jSeparator18 = new javax.swing.JSeparator JavaDoc();
3657        jMenuSize.add(jSeparator18);
3658
3659        jMenuItemSameSize = new javax.swing.JMenuItem JavaDoc();
3660        jMenuItemSameSize.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_size.png")));
3661        jMenuItemSameSize.setText(it.businesslogic.ireport.util.I18n.getString("sameSize", "Same size"));
3662        jMenuItemSameSize.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3663            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3664                getMainFrame().jMenuItemSameSizeActionPerformed(evt);
3665            }
3666        });
3667
3668        jMenuSize.add(jMenuItemSameSize);
3669
3670        m.add(jMenuSize);
3671
3672        jMenuPosition = new javax.swing.JMenu JavaDoc();
3673        jMenuPosition.setText(it.businesslogic.ireport.util.I18n.getString("position", "Position..."));
3674        jMenuItemCenterH = new javax.swing.JMenuItem JavaDoc();
3675        jMenuItemCenterH.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_hcenter.png")));
3676        jMenuItemCenterH.setText(it.businesslogic.ireport.util.I18n.getString("centerHorizontallyCellBased", "Center horizontally (cell based)"));
3677        jMenuItemCenterH.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3678            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3679                getMainFrame().jMenuItemCenterHActionPerformed(evt);
3680            }
3681        });
3682
3683        jMenuPosition.add(jMenuItemCenterH);
3684
3685        jMenuItemCenterV = new javax.swing.JMenuItem JavaDoc();
3686        jMenuItemCenterV.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_vcenter.png")));
3687        jMenuItemCenterV.setText(it.businesslogic.ireport.util.I18n.getString("centerVerticallyCellBased", "Center vertically (cell based)"));
3688        jMenuItemCenterV.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3689            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3690                getMainFrame().jMenuItemCenterVActionPerformed(evt);
3691            }
3692        });
3693
3694        jMenuPosition.add(jMenuItemCenterV);
3695
3696        jMenuItemCenterInCell = new javax.swing.JMenuItem JavaDoc();
3697        jMenuItemCenterInCell.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_ccenter.png")));
3698        jMenuItemCenterInCell.setText(it.businesslogic.ireport.util.I18n.getString("centerInCell", "Center in cell"));
3699        jMenuItemCenterInCell.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3700            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3701                getMainFrame().jMenuItemCenterInBandActionPerformed(evt);
3702            }
3703        });
3704
3705        jMenuPosition.add(jMenuItemCenterInCell);
3706
3707        jMenuItemJoinLeft = new javax.swing.JMenuItem JavaDoc();
3708        jMenuItemJoinLeft.setText(it.businesslogic.ireport.util.I18n.getString("joinSidesLeft", "Join sides left"));
3709        jMenuItemJoinLeft.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3710            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3711                getMainFrame().jMenuItemJoinLeftActionPerformed(evt);
3712            }
3713        });
3714
3715        jMenuPosition.add(jMenuItemJoinLeft);
3716
3717        jMenuItemJoinRight = new javax.swing.JMenuItem JavaDoc();
3718        jMenuItemJoinRight.setText(it.businesslogic.ireport.util.I18n.getString("joinSidesRight", "Join sides right"));
3719        jMenuItemJoinRight.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3720            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3721                getMainFrame().jMenuItemJoinRightActionPerformed(evt);
3722            }
3723        });
3724
3725        jMenuPosition.add(jMenuItemJoinRight);
3726
3727        m.add(jMenuPosition);
3728
3729        jSeparator5 = new javax.swing.JSeparator JavaDoc();
3730        m.add(jSeparator5);
3731
3732        jMenuHSpacing = new javax.swing.JMenu JavaDoc();
3733        jMenuHSpacing.setText(it.businesslogic.ireport.util.I18n.getString("horizontalSpacing", "Horizontal spacing..."));
3734
3735        jMenuItemHSMakeEqual = new javax.swing.JMenuItem JavaDoc();
3736        jMenuItemHSMakeEqual.setText(it.businesslogic.ireport.util.I18n.getString("makeEqual", "Make equal"));
3737        jMenuItemHSMakeEqual.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3738            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3739                getMainFrame().jMenuItemHSMakeEqualActionPerformed(evt);
3740            }
3741        });
3742
3743        jMenuHSpacing.add(jMenuItemHSMakeEqual);
3744
3745        jMenuItemHSIncrease = new javax.swing.JMenuItem JavaDoc();
3746        jMenuItemHSIncrease.setText(it.businesslogic.ireport.util.I18n.getString("increase", "Increase"));
3747        jMenuItemHSIncrease.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3748            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3749                getMainFrame().jMenuItemHSIncreaseActionPerformed(evt);
3750            }
3751        });
3752
3753        jMenuHSpacing.add(jMenuItemHSIncrease);
3754
3755        jMenuItemHSDecrease = new javax.swing.JMenuItem JavaDoc();
3756        jMenuItemHSDecrease.setText(it.businesslogic.ireport.util.I18n.getString("decrease", "Decrease"));
3757        jMenuItemHSDecrease.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3758            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3759                getMainFrame().jMenuItemHSDecreaseActionPerformed(evt);
3760            }
3761        });
3762
3763        jMenuHSpacing.add(jMenuItemHSDecrease);
3764
3765        jMenuItemHSRemove = new javax.swing.JMenuItem JavaDoc();
3766        jMenuItemHSRemove.setText(it.businesslogic.ireport.util.I18n.getString("remove", "Remove"));
3767        jMenuItemHSRemove.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3768            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3769                getMainFrame().jMenuItemHSRemoveActionPerformed(evt);
3770            }
3771        });
3772
3773        jMenuHSpacing.add(jMenuItemHSRemove);
3774
3775        m.add(jMenuHSpacing);
3776
3777        jMenuVSpacing = new javax.swing.JMenu JavaDoc();
3778        jMenuVSpacing.setText(it.businesslogic.ireport.util.I18n.getString("verticalSpacing", "Vertical spacing"));
3779        jMenuItemVSMakeEqual = new javax.swing.JMenuItem JavaDoc();
3780        jMenuItemVSMakeEqual.setText(it.businesslogic.ireport.util.I18n.getString("makeEqual", "Make equal"));
3781        jMenuItemVSMakeEqual.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3782            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3783                getMainFrame().jMenuItemVSMakeEqualActionPerformed(evt);
3784            }
3785        });
3786
3787        jMenuVSpacing.add(jMenuItemVSMakeEqual);
3788
3789        jMenuItemVSIncrease = new javax.swing.JMenuItem JavaDoc();
3790        jMenuItemVSIncrease.setText(it.businesslogic.ireport.util.I18n.getString("increase", "Increase"));
3791        jMenuItemVSIncrease.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3792            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3793                getMainFrame().jMenuItemVSIncreaseActionPerformed(evt);
3794            }
3795        });
3796
3797        jMenuVSpacing.add(jMenuItemVSIncrease);
3798
3799        jMenuItemVSDecrease = new javax.swing.JMenuItem JavaDoc();
3800        jMenuItemVSDecrease.setText(it.businesslogic.ireport.util.I18n.getString("decrease", "Decrease"));
3801        jMenuItemVSDecrease.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3802            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3803                getMainFrame().jMenuItemVSDecreaseActionPerformed(evt);
3804            }
3805        });
3806
3807        jMenuVSpacing.add(jMenuItemVSDecrease);
3808
3809        jMenuItemVSRemove = new javax.swing.JMenuItem JavaDoc();
3810        jMenuItemVSRemove.setText(it.businesslogic.ireport.util.I18n.getString("remove", "Remove"));
3811        jMenuItemVSRemove.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3812            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3813                getMainFrame().jMenuItemVSRemoveActionPerformed(evt);
3814            }
3815        });
3816
3817        jMenuVSpacing.add(jMenuItemVSRemove);
3818
3819        m.add(jMenuVSpacing);
3820
3821        jSeparator8 = new javax.swing.JSeparator JavaDoc();
3822        m.add(jSeparator8);
3823
3824        jMenuItemBringToFront = new javax.swing.JMenuItem JavaDoc();
3825        jMenuItemBringToFront.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/sendtofront.png")));
3826        jMenuItemBringToFront.setText(it.businesslogic.ireport.util.I18n.getString("bringToFront", "Bring to front"));
3827        jMenuItemBringToFront.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3828            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3829                getMainFrame().jMenuItemBringToFrontActionPerformed(evt);
3830            }
3831        });
3832
3833        m.add(jMenuItemBringToFront);
3834
3835        jMenuItemSendToBack = new javax.swing.JMenuItem JavaDoc();
3836        jMenuItemSendToBack.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/sendtoback.png")));
3837        jMenuItemSendToBack.setText(it.businesslogic.ireport.util.I18n.getString("sendToBack", "Send to back"));
3838        jMenuItemSendToBack.addActionListener(new java.awt.event.ActionListener JavaDoc() {
3839            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
3840                getMainFrame().jMenuItemSendToBackActionPerformed(evt);
3841            }
3842        });
3843
3844        m.add(jMenuItemSendToBack);
3845
3846    }
3847
3848    public JReportFrame getParentReportFrame() {
3849
3850        if (parentReportFrame == null)
3851        {
3852            parentReportFrame = getMainFrame().getActiveReportFrame( );
3853        }
3854
3855        return parentReportFrame;
3856    }
3857
3858    public void setParentReportFrame(JReportFrame parentReportFrame) {
3859        this.parentReportFrame = parentReportFrame;
3860    }
3861
3862
3863    /**
3864     * Return the element at the point location (if any...)
3865     */

3866    public ReportElement getElementAt(Point JavaDoc location)
3867    {
3868        Point JavaDoc p = new Point JavaDoc(getRealDim((int)location.getX()-10)+10,
3869                            getRealDim((int)location.getY()-10)+10);
3870
3871        for (int i=getCrosstabElement().getElements().size()-1; i>=0; --i)
3872        {
3873            ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i);
3874            if ((isDefaultCellMode() == (re.getCell().getType() == CrosstabCell.NODATA_CELL)) && re.intersects(p))
3875            {
3876                return re;
3877            }
3878        }
3879
3880        return null;
3881    }
3882
3883    public void applyI18n(){
3884                // Start autogenerated code ----------------------
3885
jCheckBoxMenuItemDefaultCellEdit.setText(I18n.getString("crosstabEditorPanel.checkBoxMenuItemDefaultCellEdit","Edit When-No-Data default cell"));
3886                jCheckBoxMenuItemDefaultCellEdit1.setText(I18n.getString("crosstabEditorPanel.checkBoxMenuItemDefaultCellEdit1","Edit When-No-Data default cell"));
3887                // End autogenerated code ----------------------
3888
// Start autogenerated code ----------------------
3889
jMenuItemCellProperties.setText(I18n.getString("crosstabEditorPanel.menuItemCellProperties","Cell properties"));
3890                jMenuItemCellProperties1.setText(I18n.getString("crosstabEditorPanel.menuItemCellProperties1","Cell properties"));
3891                jMenuItemCopy.setText(I18n.getString("crosstabEditorPanel.menuItemCopy","Copy"));
3892                jMenuItemCrosstabProperties.setText(I18n.getString("crosstabEditorPanel.menuItemCrosstabProperties","Crosstab properties"));
3893                jMenuItemCrosstabProperties1.setText(I18n.getString("crosstabEditorPanel.menuItemCrosstabProperties1","Crosstab properties"));
3894                jMenuItemCut.setText(I18n.getString("crosstabEditorPanel.menuItemCut","Cut"));
3895                jMenuItemDelete.setText(I18n.getString("crosstabEditorPanel.menuItemDelete","Delete"));
3896                jMenuItemPaste.setText(I18n.getString("crosstabEditorPanel.menuItemPaste","Paste"));
3897                jMenuItemPaste1.setText(I18n.getString("crosstabEditorPanel.menuItemPaste1","Paste"));
3898                jMenuItemPattern.setText(I18n.getString("crosstabEditorPanel.menuItemPattern","Field pattern"));
3899                // End autogenerated code ----------------------
3900
}
3901}
3902
Popular Tags