1 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 ; 54 import java.awt.Cursor ; 55 import java.awt.Dimension ; 56 import java.awt.Graphics ; 57 import java.awt.Graphics2D ; 58 import java.awt.Point ; 59 import java.awt.Rectangle ; 60 import java.awt.RenderingHints ; 61 import java.awt.Shape ; 62 import java.awt.Stroke ; 63 import java.awt.geom.AffineTransform ; 64 import java.util.ArrayList ; 65 import java.util.Enumeration ; 66 import java.util.Iterator ; 67 import java.util.List ; 68 import java.util.Vector ; 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 ; 81 import java.awt.datatransfer.Transferable ; 82 import java.awt.dnd.DnDConstants ; 83 import java.awt.dnd.DropTarget ; 84 import java.awt.dnd.DropTargetContext ; 85 import it.businesslogic.ireport.util.I18n; 86 87 91 public class CrosstabEditorPanel extends javax.swing.JPanel implements java.awt.dnd.DropTargetListener { 92 93 private javax.swing.JMenu jMenuAlign; 95 private javax.swing.JMenuItem jMenuItemAlignLeft; 96 private javax.swing.JMenuItem jMenuItemAlignRight; 97 private javax.swing.JMenuItem jMenuItemAlignTop; 98 private javax.swing.JMenuItem jMenuItemAlignBottom; 99 private javax.swing.JSeparator jSeparator19; 100 private javax.swing.JMenuItem jMenuItemAlignVerticalAxis; 101 private javax.swing.JMenuItem jMenuItemAlignHorizontalAxis; 102 private javax.swing.JMenu jMenuSize; 103 private javax.swing.JMenuItem jMenuItemSameWidth; 104 private javax.swing.JMenuItem jMenuItemSameWidthMax; 105 private javax.swing.JMenuItem jMenuItemSameWidthMin; 106 private javax.swing.JSeparator jSeparator17; 107 private javax.swing.JMenuItem jMenuItemSameHeight; 108 private javax.swing.JMenuItem jMenuItemSameHeightMax; 109 private javax.swing.JMenuItem jMenuItemSameHeightMin; 110 private javax.swing.JSeparator jSeparator18; 111 private javax.swing.JMenuItem jMenuItemSameSize; 112 private javax.swing.JMenu jMenuPosition; 113 private javax.swing.JMenuItem jMenuItemCenterH; 114 private javax.swing.JMenuItem jMenuItemCenterV; 115 private javax.swing.JMenuItem jMenuItemCenterInCell; 116 private javax.swing.JMenuItem jMenuItemJoinLeft; 117 private javax.swing.JMenuItem jMenuItemJoinRight; 118 private javax.swing.JSeparator jSeparator5; 119 private javax.swing.JMenuItem jMenuHSpacing; 120 private javax.swing.JMenuItem jMenuItemHSMakeEqual; 121 private javax.swing.JMenuItem jMenuItemHSIncrease; 122 private javax.swing.JMenuItem jMenuItemHSDecrease; 123 private javax.swing.JMenuItem jMenuItemHSRemove; 124 private javax.swing.JMenuItem jMenuVSpacing; 125 private javax.swing.JMenuItem jMenuItemVSMakeEqual; 126 private javax.swing.JMenuItem jMenuItemVSIncrease; 127 private javax.swing.JMenuItem jMenuItemVSDecrease; 128 private javax.swing.JMenuItem jMenuItemVSRemove; 129 private javax.swing.JSeparator jSeparator8; 130 private javax.swing.JMenuItem jMenuItemBringToFront; 131 private javax.swing.JMenuItem jMenuItemSendToBack; 132 133 private javax.swing.JMenuItem jMenuItemFillCell; 134 private javax.swing.JMenuItem jMenuItemFillCellH; 135 private javax.swing.JMenuItem jMenuItemFillCellV; 136 137 private double zoomFactor = 2.0; 138 private boolean animation = false; 139 140 private java.util.List openedNodesDocumentStructure = null; 141 142 private boolean defaultCellMode = false; 143 146 private int readyToDragCellVertically = -1; 147 148 151 private int readyToDragCellHorizontally = -1; 152 153 156 private Point dragging_origin = null; 157 158 161 private boolean cell_dragging = false; 162 163 private int newObjectType = ReportElementType.NONE; 164 private boolean resistenceExceeded = false; 165 166 169 private boolean trasforming = false; 170 173 private int transformation_type= TransformationType.TRANSFORMATION_NONE; 174 177 private Point transformation_origin=null; 178 181 private Point transformation_origin_end=null; 182 private Point transformation_undo_delta=null; 183 private boolean firstXORDrawTransforming = true; 184 private boolean firstXORDraw = true ; 185 private Rectangle transformationOldBound = null; 186 187 private JReportFrame parentReportFrame = null; 188 189 192 private Point newObjectOrigin = null; 193 194 197 private boolean drag_selection_mode = false; 198 201 private java.awt.Point drag_selection_origin = null; 202 205 private java.awt.Point drag_selection_end = null; 206 209 private boolean first_draw_selection_rect = true; 210 211 214 private java.awt.Stroke selectionStroke = null; 215 216 219 private Point mouse = new Point (0,0); 220 221 private Vector rowBands = new Vector (); 222 private Vector columnBands = new Vector (); 223 224 228 private List columns = new ArrayList (); 229 233 private List rows = new ArrayList (); 234 235 238 private Vector selectedElements = new Vector (); 239 240 241 244 private CrosstabCell selectedCell = null; 245 246 247 private static final javax.swing.ImageIcon crosstabCornerImage = new javax.swing.ImageIcon (CrosstabEditorPanel.class.getResource("/it/businesslogic/ireport/icons/crosstabcorner.png")); 248 private static final javax.swing.ImageIcon crosstabBorderImage = new javax.swing.ImageIcon (CrosstabEditorPanel.class.getResource("/it/businesslogic/ireport/icons/crosstabborder.png")); 249 private static final javax.swing.ImageIcon crosstabBorderHImage = new javax.swing.ImageIcon (CrosstabEditorPanel.class.getResource("/it/businesslogic/ireport/icons/crosstabborderh.png")); 250 251 private CrosstabEditor editor = null; 252 253 public CrosstabEditorPanel() { 254 initComponents(); 255 256 selectionStroke = new java.awt.BasicStroke ( 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 ( this, DnDConstants.ACTION_COPY_OR_MOVE, this); 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 )getColumns().get( getColumns().size() -1)).intValue(); 283 if (getRows().size() > 0) maxHeight = ((Integer )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 d = new Dimension ( (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 307 public void paintDocument(Graphics2D 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 )getColumns().get( getColumns().size() -1)).intValue(); 318 if (getRows().size() > 0) maxHeight = ((Integer )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 AffineTransform at = new AffineTransform (); 333 at.translate(17,0); 334 at.scale(zoomedCrosstabWidth-14,1); 335 g2.drawImage(crosstabBorderImage.getImage(),at, this); 336 337 at = new AffineTransform (); 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 at = new AffineTransform (); 346 at.translate(0,17); 347 at.scale(1,zoomedCrosstabHeight-14); 348 g2.drawImage(crosstabBorderHImage.getImage(),at, this); 349 350 at = new AffineTransform (); 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 g2.drawImage(crosstabCornerImage.getImage(),0,0, this); 360 at = new AffineTransform (); 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 (); 366 367 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 378 379 380 maxWidth = 0; 381 maxHeight = 0; 382 383 384 385 g2.setColor(new Color (220,220,255)); 386 387 if (getColumns().size() > 0) maxWidth = ((Integer )getColumns().get( getColumns().size() -1)).intValue(); 388 if (getRows().size() > 0) maxHeight = ((Integer )getRows().get( getRows().size() -1)).intValue(); 389 390 for (int i=0; i< getColumns().size(); ++i) { 391 int x = ((Integer )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 )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 406 407 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 )rows.get(getCrosstabElement().getColumnGroups().size())).intValue(), 415 (cell.getType() == cell.HEADER_CELL || cell.getType() == cell.CT_HEADER_CELL) && cell.getLeft() == ((Integer )columns.get(getCrosstabElement().getRowGroups().size())).intValue()); 416 } 417 } 418 419 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 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 } 435 } 436 437 if (isDefaultCellMode()) 438 { 439 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 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 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 g) { 473 if (animation) return; 474 try { 475 super.paint(g); 476 477 478 Graphics2D g2 = (Graphics2D )g; 479 Shape 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 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 542 public int getZoomedDim(int dim) { 543 if (zoomFactor == 1.0 || dim == 0) return dim; 544 return (int)((double)dim*zoomFactor); 545 } 546 547 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 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 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 (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 (current_x) ); 593 } 594 595 ArrayList columnWidths = new ArrayList (); 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 ( getColumnWidth(""))); 602 } 603 if (!cg.getTotalPosition().equals("Start")) 604 { 605 columnWidths.add( new Integer ( getColumnWidth(cg.getName()))); 606 } 607 else 608 { 609 columnWidths.add(0, new Integer ( getColumnWidth(cg.getName()))); 610 } 611 612 } 613 614 for (int i=0; i<columnWidths.size(); ++i) 615 { 616 current_x += ((Integer )columnWidths.get(i)).intValue(); 617 getColumns().add( new Integer (current_x)); 618 } 619 if (getCrosstabElement().getColumnGroups().size() == 0) getColumns().add( new Integer (current_x += getColumnWidth(""))); 620 621 623 getRows().add( new Integer (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 (current_y) ); 630 631 } 632 633 ArrayList rowHeights = new ArrayList (); 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 ( getRowHeight(""))); 640 } 641 if (!cg.getTotalPosition().equals("Start")) 642 { 643 rowHeights.add( new Integer ( getRowHeight(cg.getName()))); 644 } 645 else 646 { 647 rowHeights.add(0, new Integer ( getRowHeight(cg.getName()))); 648 } 649 } 650 651 for (int i=0; i<rowHeights.size(); ++i) 652 { 653 current_y += ((Integer )rowHeights.get(i)).intValue(); 654 getRows().add( new Integer (current_y)); 655 } 656 if (getCrosstabElement().getRowGroups().size() == 0) getRows().add( new Integer (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 )getColumns().get(i)).intValue() ); 672 cg.getHeaderCell().setTopIndex( (cg.getTotalPosition().equals("Start")) ? currentTopRowNumber+1 : currentTopRowNumber ); 673 cg.getHeaderCell().setTop( ((Integer )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 )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 )getRows().get( cg.getTotalCell().getTopIndex() )).intValue() ); 683 cg.getTotalCell().setRightIndex( rowGroups ); 684 cg.getTotalCell().setWidth( ((Integer )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 )getRows().get( cg.getTotalCell().getBottomIndex() )).intValue() - cg.getTotalCell().getTop() ); 687 688 if (cg.getTotalPosition().equals("Start")) currentTopRowNumber++; 689 else currentBottomRowNumber--; 690 691 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 710 cg.getHeaderCell().setLeftIndex( (cg.getTotalPosition().equals("Start")) ? currentLeftColumnNumber+1 : currentLeftColumnNumber ); 711 cg.getHeaderCell().setLeft( ((Integer )getColumns().get( cg.getHeaderCell().getLeftIndex())).intValue() ); 712 cg.getHeaderCell().setTopIndex( i ); 713 cg.getHeaderCell().setTop( ((Integer )getRows().get( i )).intValue() ); 714 cg.getHeaderCell().setRightIndex((cg.isHasTotal() && cg.getTotalPosition().equals("Start")) ? currentRightColumnNumber : currentRightColumnNumber - 1); 715 cg.getHeaderCell().setWidth( ((Integer )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 )getColumns().get( cg.getTotalCell().getLeftIndex() )).intValue() ); 721 cg.getTotalCell().setTopIndex( i ); 722 cg.getTotalCell().setTop( ((Integer )getRows().get( i)).intValue() ); 723 cg.getTotalCell().setRightIndex((cg.isHasTotal() && cg.getTotalPosition().equals("Start")) ? currentLeftColumnNumber +1 : currentRightColumnNumber); 724 cg.getTotalCell().setWidth( ((Integer )getColumns().get( cg.getTotalCell().getRightIndex() )).intValue() - cg.getTotalCell().getLeft() ); 725 cg.getTotalCell().setBottomIndex( columnGroups ); 726 cg.getTotalCell().setHeight( ((Integer )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 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 )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 )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 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 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 )getColumns().get( cell.getRightIndex() )).intValue() ); 847 cell.setBottomIndex( getCrosstabElement().getColumnGroups().size() ); 848 cell.setHeight( ((Integer )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 )getColumns().get( crossTabHeaderCell.getRightIndex() )).intValue() ); 867 crossTabHeaderCell.setBottomIndex( getCrosstabElement().getColumnGroups().size() ); 868 crossTabHeaderCell.setHeight( ((Integer )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 rowBandContents = new Vector (); 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 columnBandContents = new Vector (); 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 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 (0,0),TransformationType.TRANSFORMATION_RESIZE_SE); 913 914 } 915 916 } catch (Exception ex) { 917 ex.printStackTrace(); 918 } 919 updateSize(); 920 921 } 922 923 public CrosstabCell findCell(String rowGroup, String 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 940 public int getColumnWidth(String 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 962 public int getRowHeight(String 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 988 public int getTotalRowTopIndex(String 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 1003 public int getTotalColumnLeftIndex(String 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 1022 private void initComponents() { 1024 jPopupMenuCrosstabReporteElement = new javax.swing.JPopupMenu (); 1025 jMenuItemElementProperties = new javax.swing.JMenuItem (); 1026 jMenuItemCrosstabProperties = new javax.swing.JMenuItem (); 1027 jMenuItemCellProperties = new javax.swing.JMenuItem (); 1028 jCheckBoxMenuItemDefaultCellEdit = new javax.swing.JCheckBoxMenuItem (); 1029 jSeparator1 = new javax.swing.JSeparator (); 1030 jMenuItemCut = new javax.swing.JMenuItem (); 1031 jMenuItemCopy = new javax.swing.JMenuItem (); 1032 jMenuItemPaste = new javax.swing.JMenuItem (); 1033 jMenuItemDelete = new javax.swing.JMenuItem (); 1034 jSeparator3 = new javax.swing.JSeparator (); 1035 jMenuItemCopyStyle = new javax.swing.JMenuItem (); 1036 jMenuItemPasteStyle = new javax.swing.JMenuItem (); 1037 jMenuItemTransformStaticText = new javax.swing.JMenuItem (); 1038 jMenuItemPattern = new javax.swing.JMenuItem (); 1039 jSeparator4 = new javax.swing.JSeparator (); 1040 jPopupMenuCrosstab = new javax.swing.JPopupMenu (); 1041 jMenuItemCrosstabProperties1 = new javax.swing.JMenuItem (); 1042 jMenuItemCellProperties1 = new javax.swing.JMenuItem (); 1043 jCheckBoxMenuItemDefaultCellEdit1 = new javax.swing.JCheckBoxMenuItem (); 1044 jMenuItemPaste1 = new javax.swing.JMenuItem (); 1045 1046 jMenuItemElementProperties.setText(it.businesslogic.ireport.util.I18n.getString("elementProperties","Element properties")); 1047 jMenuItemElementProperties.addActionListener(new java.awt.event.ActionListener () { 1048 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1057 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1066 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1075 public void actionPerformed(java.awt.event.ActionEvent evt) { 1076 jCheckBoxMenuItemDefaultCellEditActionPerformed(evt); 1077 } 1078 }); 1079 1080 jPopupMenuCrosstabReporteElement.add(jCheckBoxMenuItemDefaultCellEdit); 1081 1082 jPopupMenuCrosstabReporteElement.add(jSeparator1); 1083 1084 jMenuItemCut.setIcon(new javax.swing.ImageIcon (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 () { 1088 public void actionPerformed(java.awt.event.ActionEvent evt) { 1089 jMenuItemCutActionPerformed(evt); 1090 } 1091 }); 1092 1093 jPopupMenuCrosstabReporteElement.add(jMenuItemCut); 1094 1095 jMenuItemCopy.setIcon(new javax.swing.ImageIcon (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 () { 1099 public void actionPerformed(java.awt.event.ActionEvent evt) { 1100 jMenuItemCopyActionPerformed(evt); 1101 } 1102 }); 1103 1104 jPopupMenuCrosstabReporteElement.add(jMenuItemCopy); 1105 1106 jMenuItemPaste.setIcon(new javax.swing.ImageIcon (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 () { 1110 public void actionPerformed(java.awt.event.ActionEvent evt) { 1111 jMenuItemPasteActionPerformed(evt); 1112 } 1113 }); 1114 1115 jPopupMenuCrosstabReporteElement.add(jMenuItemPaste); 1116 1117 jMenuItemDelete.setIcon(new javax.swing.ImageIcon (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 () { 1121 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1133 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1143 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1153 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1162 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1173 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1182 public void actionPerformed(java.awt.event.ActionEvent 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 () { 1191 public void actionPerformed(java.awt.event.ActionEvent evt) { 1192 jCheckBoxMenuItemDefaultCellEdit1ActionPerformed(evt); 1193 } 1194 }); 1195 1196 jPopupMenuCrosstab.add(jCheckBoxMenuItemDefaultCellEdit1); 1197 1198 jMenuItemPaste1.setIcon(new javax.swing.ImageIcon (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 () { 1202 public void actionPerformed(java.awt.event.ActionEvent evt) { 1203 jMenuItemPasteActionPerformed1(evt); 1204 } 1205 }); 1206 1207 jPopupMenuCrosstab.add(jMenuItemPaste1); 1208 1209 setLayout(null); 1210 1211 setBackground(new java.awt.Color (204, 204, 204)); 1212 setFocusCycleRoot(true); 1213 addMouseMotionListener(new java.awt.event.MouseMotionAdapter () { 1214 public void mouseDragged(java.awt.event.MouseEvent evt) { 1215 formMouseDragged(evt); 1216 } 1217 public void mouseMoved(java.awt.event.MouseEvent evt) { 1218 formMouseMoved(evt); 1219 } 1220 }); 1221 addFocusListener(new java.awt.event.FocusAdapter () { 1222 public void focusGained(java.awt.event.FocusEvent evt) { 1223 formFocusGained(evt); 1224 } 1225 }); 1226 addKeyListener(new java.awt.event.KeyAdapter () { 1227 public void keyPressed(java.awt.event.KeyEvent evt) { 1228 formKeyPressed(evt); 1229 } 1230 public void keyTyped(java.awt.event.KeyEvent evt) { 1231 formKeyTyped(evt); 1232 } 1233 }); 1234 addMouseListener(new java.awt.event.MouseAdapter () { 1235 public void mouseClicked(java.awt.event.MouseEvent evt) { 1236 formMouseClicked(evt); 1237 } 1238 public void mousePressed(java.awt.event.MouseEvent evt) { 1239 formMousePressed(evt); 1240 } 1241 public void mouseReleased(java.awt.event.MouseEvent evt) { 1242 formMouseReleased(evt); 1243 } 1244 }); 1245 1246 } 1248 private void jCheckBoxMenuItemDefaultCellEdit1ActionPerformed(java.awt.event.ActionEvent evt) { setDefaultCellMode(jCheckBoxMenuItemDefaultCellEdit1.isSelected()); 1250 } 1252 private void jCheckBoxMenuItemDefaultCellEditActionPerformed(java.awt.event.ActionEvent evt) { 1254 setDefaultCellMode(jCheckBoxMenuItemDefaultCellEdit.isSelected()); 1255 1256 } 1258 private void jMenuItemPasteActionPerformed1(java.awt.event.ActionEvent evt) { 1260 getParentReportFrame().paste(); 1261 1262 } 1264 private void jMenuItemCellPropertiesActionPerformed1(java.awt.event.ActionEvent evt) { jMenuItemCellPropertiesActionPerformed(evt); 1266 } 1268 private void jMenuItemCrosstabPropertiesActionPerformed1(java.awt.event.ActionEvent evt) { jMenuItemCrosstabPropertiesActionPerformed(evt); 1270 } 1272 private void jMenuItemPatternActionPerformed(java.awt.event.ActionEvent evt) { String 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 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 } 1290 private void jMenuItemTransformStaticTextActionPerformed(java.awt.event.ActionEvent evt) { transformStaticInTextFields(); 1292 } 1294 private void jMenuItemPasteStyleActionPerformed(java.awt.event.ActionEvent evt) { pasteStyle(); 1296 } 1298 private void jMenuItemCopyStyleActionPerformed(java.awt.event.ActionEvent evt) { copyStyle(); 1300 } 1302 private void jMenuItemDeleteActionPerformed(java.awt.event.ActionEvent evt) { deleteSelectedElements(); 1304 } 1306 private void jMenuItemPasteActionPerformed(java.awt.event.ActionEvent evt) { getParentReportFrame().paste(); 1308 } 1310 private void jMenuItemCopyActionPerformed(java.awt.event.ActionEvent evt) { getParentReportFrame().copy(); 1312 } 1314 private void jMenuItemCutActionPerformed(java.awt.event.ActionEvent evt) { getParentReportFrame().cut(); 1316 } 1318 private void jMenuItemElementPropertiesActionPerformed(java.awt.event.ActionEvent evt) { this.getParentReportFrame().openElementPropertiesDialog(); 1320 } 1322 private void jMenuItemCellPropertiesActionPerformed(java.awt.event.ActionEvent evt) { 1324 if (selectedCell != null) 1325 { 1326 editCell(selectedCell); 1327 } 1328 1329 } 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 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 (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 )columns.get(i)).intValue(); 1376 columnPosition = columnPosition += delta; 1377 columns.set(i,new Integer (columnPosition)); 1378 } 1379 } 1380 1381 if (editCell.getHeight() != ctd.getTmpCell().getHeight()) 1382 { 1383 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 (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 )rows.get(i)).intValue(); 1414 rowPosition = rowPosition += delta; 1415 rows.set(i,new Integer (rowPosition)); 1416 } 1417 } 1418 1419 this.repaint(); 1420 this.getCrosstabElement().notifyChange(); 1421 } 1422 } 1423 1424 private void formFocusGained(java.awt.event.FocusEvent evt) { 1426 } 1428 private void formKeyTyped(java.awt.event.KeyEvent evt) { 1430 } 1432 1433 public void panelKeyPressed(java.awt.event.KeyEvent evt) 1434 { 1435 formKeyPressed(evt); 1436 } 1437 1438 private void formKeyPressed(java.awt.event.KeyEvent evt) { 1440 1441 1442 if (this.getSelectedElements().size() > 0) evt.consume(); 1443 int x=1, y=1; 1445 1446 if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0) { 1448 x = 10; 1449 y = 10; 1450 } 1451 1452 if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) { 1455 this.deleteSelectedElements(); 1456 return; 1457 } 1458 1459 1460 else if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && 1461 (( evt.getModifiers() & evt.CTRL_MASK) != 0) ) { 1462 1463 1464 1465 1466 1469 switch ( evt.getKeyCode()) { 1470 case java.awt.event.KeyEvent.VK_S: 1471 1472 FormatCommand.getCommand(OperationType.SHRINK).execute(); 1473 break; 1474 } 1475 1476 } 1477 1478 1479 else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP) { 1480 y *= -1; 1481 x = 0; 1482 1483 Vector changed_elements = new Vector (); 1486 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1487 ReportElement element = (ReportElement) i.next(); 1488 element.trasform(new Point (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 Vector changed_elements = new Vector (); 1502 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1503 ReportElement element = (ReportElement) i.next(); 1504 element.trasform(new Point (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 Vector changed_elements = new Vector (); 1516 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1517 ReportElement element = (ReportElement) i.next(); 1518 element.trasform(new Point (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 Vector changed_elements = new Vector (); 1531 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1532 ReportElement element = (ReportElement) i.next(); 1533 element.trasform(new Point (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 1543 DeleteElementsOperation undoOp = new DeleteElementsOperation(getParentReportFrame(), getCrosstabElement()); 1544 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1545 ReportElement re = (ReportElement) i.next(); 1546 if(re instanceof TextReportElement){ 1547 String te = ((TextReportElement)re).getText(); 1548 String 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 1565 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 1572 1573 1574 1575 } 1577 private void jMenuItemCrosstabPropertiesActionPerformed(java.awt.event.ActionEvent evt) { 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 } 1586 private void formMouseReleased(java.awt.event.MouseEvent evt) { 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 gg = (Graphics2D )this.getGraphics(); 1595 gg.setXORMode(Color.GREEN); 1596 1597 Stroke 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 java.awt.Rectangle rect = new java.awt.Rectangle ( originX, originY, width, height ); 1630 boolean selection_changed = false; 1631 for (Iterator 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 gg = this.getGraphics(); 1644 gg.setXORMode(Color.WHITE); 1645 gg.drawLine( 0, mouse.y , this.getWidth(), mouse.y); 1646 gg.setPaintMode(); 1647 1648 int oldPosition = ((Integer )getRows().get(readyToDragCellVertically)).intValue(); 1650 int delta = getRealDim( mouseY -10 - getZoomedDim(oldPosition) ); 1651 1652 if (oldPosition + delta <= ((Integer )getRows().get(readyToDragCellVertically-1)).intValue()) 1653 { 1654 delta = ((Integer )getRows().get(readyToDragCellVertically-1)).intValue() - oldPosition; 1655 } 1656 1657 int maxHeight = getParentReportFrame().getReport().getHeight() - getCrosstabElement().getPosition().y; 1659 1660 if ( ((Integer )getRows().get( getRows().size()-1)).intValue() + delta > maxHeight) 1661 { 1662 delta = maxHeight-((Integer )getRows().get( getRows().size()-1)).intValue(); 1663 } 1664 if (delta == 0) return; 1665 1666 int newPosition = ((Integer )getRows().get(readyToDragCellVertically)).intValue() + delta; 1667 1668 for (int j=0; j<getCrosstabElement().getElements().size(); ++j) 1670 { 1671 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j); 1672 re.setRelativePosition(new Point ( 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 1679 1680 for (int i=getRows().size()-1; i>0; --i) 1681 { 1682 int position = ((Integer )getRows().get(i)).intValue(); 1683 if (oldPosition == position) 1684 { 1685 readyToDragCellVertically = i; 1686 break; 1687 } 1688 } 1689 } 1690 1691 Vector cells = (Vector )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 )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 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 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 (0,0),TransformationType.TRANSFORMATION_RESIZE_SE); 1731 } 1732 1733 1734 for (int i=readyToDragCellVertically; i<getRows().size(); ++i) 1735 { 1736 int rowPosition = ((Integer )getRows().get(i)).intValue() + delta; 1737 getRows().set(i, new Integer (rowPosition)); 1738 } 1739 1740 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 gg = this.getGraphics(); 1749 gg.setXORMode(Color.WHITE); 1750 gg.drawLine( mouse.x, 0, mouse.x, this.getHeight()); 1751 gg.setPaintMode(); 1752 1753 int oldPosition = ((Integer )getColumns().get(readyToDragCellHorizontally)).intValue(); 1755 int delta = getRealDim( mouseX -10 - getZoomedDim(oldPosition) ); 1756 1757 if (oldPosition + delta <= ((Integer )getColumns().get(readyToDragCellHorizontally-1)).intValue()) 1758 { 1759 delta = ((Integer )getColumns().get(readyToDragCellHorizontally-1)).intValue() - oldPosition; 1760 } 1761 1762 int maxWidth = getParentReportFrame().getReport().getWidth() - getCrosstabElement().getPosition().x; 1764 1765 if ( ((Integer )getColumns().get( getColumns().size()-1)).intValue() + delta > maxWidth) 1766 { 1767 delta = maxWidth-((Integer )getColumns().get( getColumns().size()-1)).intValue(); 1768 } 1769 if (delta == 0) return; 1770 1771 int newPosition = ((Integer )getColumns().get(readyToDragCellHorizontally)).intValue() + delta; 1772 1773 for (int j=0; j<getCrosstabElement().getElements().size(); ++j) 1775 { 1776 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(j); 1777 re.setRelativePosition(new Point ( 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 1784 1785 for (int i=getColumns().size()-1; i>0; --i) 1786 { 1787 int position = ((Integer )getColumns().get(i)).intValue(); 1788 if (oldPosition == position) 1789 { 1790 readyToDragCellHorizontally = i; 1791 break; 1792 } 1793 } 1794 } 1795 1796 Vector cells = (Vector )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 )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 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 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 (0,0),TransformationType.TRANSFORMATION_RESIZE_SE); 1837 } 1838 1839 1840 for (int i=readyToDragCellHorizontally; i<getColumns().size(); ++i) 1841 { 1842 int rowPosition = ((Integer )getColumns().get(i)).intValue() + delta; 1843 getColumns().set(i, new Integer (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 1856 firstXORDraw = true; 1857 1858 1860 int delta_w = evt.getX()-newObjectOrigin.x; int delta_h = evt.getY()-newObjectOrigin.y; 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 1875 if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) { 1876 Point 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 ( 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 1901 re.setKey( getParentReportFrame().getNextElementKey( re.getKey()) ) ; 1905 1906 1907 1908 re.setCell( bname ); 1909 re.setRelativePosition( new Point (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 p = new Point (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 e = getSelectedElements().elements(); 1958 TransformElementsOperation undoOp = new TransformElementsOperation(getMainFrame().getMainInstance().getActiveReportFrame(), this.getCrosstabElement()); 1959 Vector changed_elements = new Vector (); 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 (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 } 1993 private void formMouseDragged(java.awt.event.MouseEvent evt) { 1995 int mouseX = (int)evt.getPoint().getX(); 1996 int mouseY = (int)evt.getPoint().getY(); 1997 1998 if (drag_selection_mode == true) { 1999 Graphics2D gg = (Graphics2D )this.getGraphics(); 2000 gg.setXORMode(Color.GREEN); 2001 Stroke 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 (evt.getX(), evt.getY()); 2011 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 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 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 2037 2038 Graphics 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 2064 if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) { 2065 Point 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 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.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( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h)); 2116 } 2118 2119 firstXORDraw = false; 2120 gg.setPaintMode(); 2121 2122 } 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 gg = this.getGraphics(); 2132 gg.setXORMode(Color.WHITE); 2133 if (!firstXORDrawTransforming) { 2134 2139 2141 new_transformation_origin_end_y = evt.getY(); 2143 new_transformation_origin_end_x = evt.getX(); 2144 2145 Enumeration e = getSelectedElements().elements(); 2160 while (e.hasMoreElements()) { 2161 ReportElement re = (ReportElement)e.nextElement(); 2162 Rectangle bounds = new Rectangle (getZoomedDim(re.getPosition().x-10)+10, 2163 getZoomedDim(re.getPosition().y-10)+10, 2164 getZoomedDim(re.getWidth()), 2165 getZoomedDim(re.getHeight())); 2166 if (transformation_type == TransformationType.TRANSFORMATION_MOVE) { 2168 if (resistenceExceeded) { 2170 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 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 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 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 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 2221 transformation_origin_end.x = new_transformation_origin_end_x; 2222 transformation_origin_end.y = new_transformation_origin_end_y; 2223 2224 Enumeration e = getSelectedElements().elements(); 2225 while (e.hasMoreElements()) { 2226 ReportElement re = (ReportElement)e.nextElement(); 2227 Rectangle bounds = new Rectangle (getZoomedDim(re.getPosition().x-10)+10, 2228 getZoomedDim(re.getPosition().y-10)+10, 2229 getZoomedDim(re.getWidth()), 2230 getZoomedDim(re.getHeight())); 2231 if (transformation_type == TransformationType.TRANSFORMATION_MOVE) { 2233 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 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 2247 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 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 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 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 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 } 2301 private void formMousePressed(java.awt.event.MouseEvent evt) { 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 gg = this.getGraphics(); 2314 gg.setXORMode(Color.WHITE); 2315 gg.drawLine( 0, mouseY, this.getWidth(), mouseY); 2316 gg.setPaintMode(); 2317 mouse.y = mouseY; 2319 mouse.x = mouseX; 2320 cell_dragging = true; 2321 return; 2322 } 2323 else if (readyToDragCellHorizontally > 0) 2324 { 2325 Graphics gg = this.getGraphics(); 2326 gg.setXORMode(Color.WHITE); 2327 gg.drawLine( mouseX, 0, mouseX, this.getHeight()); 2328 gg.setPaintMode(); 2329 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 (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 if (transformation_type >=0) 2348 { 2349 trasforming = true; 2350 firstXORDrawTransforming = true; 2351 transformation_origin = new Point (evt.getX(),evt.getY()); 2352 transformation_undo_delta = new Point (0,0); 2353 transformation_origin_end = new Point (evt.getX(),evt.getY()); 2354 return; 2355 } 2356 } 2357 2358 boolean foundElement = false; 2359 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 (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 (evt.getX(),evt.getY()); 2390 transformation_origin_end = new Point (evt.getX(),evt.getY()); 2391 2392 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 drag_selection_mode = true; 2410 first_draw_selection_rect = true; 2411 drag_selection_origin = new Point (evt.getX(),evt.getY()); 2412 drag_selection_end = new java.awt.Point (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 ( 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 ( 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 } 2452 private void formMouseClicked(java.awt.event.MouseEvent evt) { 2454 if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() == 2) 2455 { 2456 if (getSelectedElements().size() > 0 ) getParentReportFrame().openElementPropertiesDialog(); 2457 } 2458 2459 } 2461 private void formMouseMoved(java.awt.event.MouseEvent evt) { 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 for (int i=1; i<getRows().size(); ++i) 2477 { 2478 int position = ((Integer )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 for (int i=1; readyToDragCellVertically < 0 && i< getColumns().size(); ++i) 2490 { 2491 int position = ((Integer )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 { 2510 Enumeration 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 grip = new Rectangle (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 cursor = new Rectangle (evt.getX(), 2520 evt.getY(), 2521 1,1); 2522 2523 if (cursor.intersects(grip)) { 2524 sizeall = true; 2525 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 ex) { 2645 ex.printStackTrace(); 2646 } 2647 } 2649 2650 private javax.swing.JCheckBoxMenuItem jCheckBoxMenuItemDefaultCellEdit; 2652 private javax.swing.JCheckBoxMenuItem jCheckBoxMenuItemDefaultCellEdit1; 2653 private javax.swing.JMenuItem jMenuItemCellProperties; 2654 private javax.swing.JMenuItem jMenuItemCellProperties1; 2655 private javax.swing.JMenuItem jMenuItemCopy; 2656 private javax.swing.JMenuItem jMenuItemCopyStyle; 2657 private javax.swing.JMenuItem jMenuItemCrosstabProperties; 2658 private javax.swing.JMenuItem jMenuItemCrosstabProperties1; 2659 private javax.swing.JMenuItem jMenuItemCut; 2660 private javax.swing.JMenuItem jMenuItemDelete; 2661 private javax.swing.JMenuItem jMenuItemElementProperties; 2662 private javax.swing.JMenuItem jMenuItemPaste; 2663 private javax.swing.JMenuItem jMenuItemPaste1; 2664 private javax.swing.JMenuItem jMenuItemPasteStyle; 2665 private javax.swing.JMenuItem jMenuItemPattern; 2666 private javax.swing.JMenuItem jMenuItemTransformStaticText; 2667 private javax.swing.JPopupMenu jPopupMenuCrosstab; 2668 private javax.swing.JPopupMenu jPopupMenuCrosstabReporteElement; 2669 private javax.swing.JSeparator jSeparator1; 2670 private javax.swing.JSeparator jSeparator3; 2671 private javax.swing.JSeparator jSeparator4; 2672 2674 2675 public List getColumns() { 2676 return columns; 2677 } 2678 2679 public void setColumns(List columns) { 2680 this.columns = columns; 2681 } 2682 2683 public List getRows() { 2684 return rows; 2685 } 2686 2687 public void setRows(List rows) { 2688 this.rows = rows; 2689 } 2690 2691 2699 public void addNotDefinedCells() 2700 { 2701 if (getCrosstabElement() == null) return; 2702 2703 int cellGridWidth = getCrosstabElement().getColumnGroups().size(); 2705 int cellGridHeight = getCrosstabElement().getRowGroups().size(); 2706 2707 2710 for (int y = cellGridHeight; y >= 0; --y) 2711 { 2712 2713 2714 for (int x = cellGridWidth; x >= 0; --x) 2715 { 2716 2717 String totalRowGroupName = ""; 2718 if (y < cellGridHeight) totalRowGroupName = ((CrosstabGroup)getCrosstabElement().getRowGroups().get(y)).getName(); 2719 2720 String 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 int cellHeight = getRowHeight( totalRowGroupName ); 2730 int cellWidth = getColumnWidth( totalColumnGroupName ); 2731 2732 2733 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) { 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 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 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 int currentElements = getCrosstabElement().getElements().size(); 2802 for (int i=0; i<currentElements; ++i) 2803 { 2804 ReportElement re = (ReportElement)getCrosstabElement().getElements().elementAt(i); 2805 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 getSelectedElements() { 2825 return selectedElements; 2826 } 2827 2828 public void setSelectedElements(Vector selectedElements) { 2829 this.selectedElements = selectedElements; 2830 } 2831 2832 2837 public CrosstabCell getCellByPoint(Point 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 getRowBands() { 2852 return rowBands; 2853 } 2854 2855 public Vector getColumnBands() { 2856 return columnBands; 2857 } 2858 2859 2860 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 } 2876 2877 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 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 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 Rectangle rect = new Rectangle (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 return zoomedDim; 2942 2944 2950 } 2952 2953 public int magnetEffect(List spots, int position) 2954 { 2955 for (int i=0; i<spots.size(); ++i) 2956 { 2957 int spotPoint = ((Integer )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 2972 public int getNewObjectType() { 2973 return newObjectType; 2974 } 2975 2976 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 straighten( int delta_w, int delta_h ){ 2993 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 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 3023 3024 return new Point ( delta_w, delta_h); 3025 } 3026 3027 3028 3031 public int snapToGridVertically(int p) 3032 { 3033 return p; 3034 } 3035 3036 public void deleteSelectedElements() { 3037 Enumeration e = selectedElements.elements(); 3039 3040 DeleteElementsOperation undoOp = new DeleteElementsOperation(getParentReportFrame(), getCrosstabElement()); 3041 Vector deletedElements = new Vector (); 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 getCrosstabElement().getElements().remove( re ); 3053 deletedElements.add(re); 3054 if (re instanceof FrameReportElement) 3055 { 3056 removeSubElements(re, undoOp, deletedElements); 3057 } 3058 } 3059 } 3061 3062 getParentReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(getParentReportFrame(),getCrosstabElement(), deletedElements, ReportElementChangedEvent.REMOVED )); 3063 this.setSelectedElement(null); 3064 getParentReportFrame().addUndoOperation(undoOp); 3065 3067 this.repaint(); 3068 } 3069 3070 protected void removeSubElements(ReportElement parentElement, DeleteElementsOperation undoOp, Vector 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 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 ReportElement templateElement = this.getMainFrame().getStyleClipboard(); 3111 3112 PasteStyleOperation undoOp = new PasteStyleOperation(getParentReportFrame(), getCrosstabElement()); 3113 3114 Enumeration 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 keyStaticText = (new StaticTextReportElement(0,0,0,0)).getKey(); 3129 String keyTextField = (new TextFieldReportElement(0,0,0,0)).getKey(); 3130 3132 3133 Enumeration 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 TextFieldReportElement tfre = new TextFieldReportElement(re.getPosition().x, re.getPosition().y, re.width, re.height); 3143 tfre.setRelativePosition(new Point (re.getRelativePosition().x, re.getRelativePosition().y)); 3144 tfre.copyBaseReportElement(tfre, re); 3146 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 if (re.getKey().indexOf( keyStaticText + "-" ) == 0 ) { 3168 tfre.setKey( getParentReportFrame().getNextElementKey( keyTextField ) ); 3171 } 3172 3173 3175 String te = ((TextReportElement)re).getText(); 3176 String 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 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 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 3205 public void bringToFront() { 3206 Enumeration 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 3226 } 3227 3228 public void sendToBack() { 3229 Enumeration 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 3256 } 3257 3258 3259 public void dragEnter(java.awt.dnd.DropTargetDragEvent dtde) { 3260 dtde.acceptDrag(dtde.getDropAction()); 3261 } 3262 3263 public void dragExit(java.awt.dnd.DropTargetEvent dte) { 3264 } 3265 3266 public void dragOver(java.awt.dnd.DropTargetDragEvent dtde) { 3267 dtde.acceptDrag(dtde.getDropAction()); 3268 } 3269 3270 public void drop(java.awt.dnd.DropTargetDropEvent dtde) { 3271 try { 3272 3273 DropTargetContext context = dtde.getDropTargetContext(); 3274 3275 Transferable tr = dtde.getTransferable(); 3276 3277 DataFlavor [] df = tr.getTransferDataFlavors(); 3278 3279 3280 if (df[0].getHumanPresentableName().equals("it.businesslogic.ireport.crosstab.Measure")) 3281 { 3282 java.awt.datatransfer.DataFlavor myFlavor = new java.awt.datatransfer.DataFlavor (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 3287 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 myFlavor = new java.awt.datatransfer.DataFlavor (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 myFlavor = new java.awt.datatransfer.DataFlavor (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 myFlavor = new java.awt.datatransfer.DataFlavor (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 myFlavor = new java.awt.datatransfer.DataFlavor (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 myFlavor = new java.awt.datatransfer.DataFlavor (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 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 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 c = Class.forName( df[0].getHumanPresentableName() ); 3354 if (it.businesslogic.ireport.gui.library.AbstractLibraryObject.class.isAssignableFrom( c )) 3355 { 3356 java.awt.datatransfer.DataFlavor myFlavor = new java.awt.datatransfer.DataFlavor (c, df[0].getHumanPresentableName()); 3357 Object obj = tr.getTransferData( myFlavor ); 3358 ((it.businesslogic.ireport.gui.library.AbstractLibraryObject )obj).drop(dtde); 3359 } 3360 else { 3362 } 3364 } 3365 3366 context.dropComplete(true); 3367 } catch (Exception ex) 3368 { 3369 3370 ex.printStackTrace(); 3371 } 3372 } 3373 3374 public void dropActionChanged(java.awt.dnd.DropTargetDragEvent dtde) { 3375 } 3376 3377 public TextFieldReportElement dropNewTextField(Point newObjectOrigin, String textfieldExpression, String classExpression, String time) { 3378 TextFieldReportElement re = null; 3379 3381 CrosstabCell cell = getCellByPoint( new Point ( 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 (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 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 getOpenedNodesDocumentStructure() { 3460 return openedNodesDocumentStructure; 3461 } 3462 3463 public void setOpenedNodesDocumentStructure(java.util.List openedNodesDocumentStructure) { 3464 this.openedNodesDocumentStructure = openedNodesDocumentStructure; 3465 } 3466 3467 3468 3472 private void addFormatItemsToMenu(javax.swing.JComponent m){ 3473 3474 3475 jMenuItemFillCell = new javax.swing.JMenuItem (); 3476 jMenuItemFillCell.setIcon(new javax.swing.ImageIcon (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 () { 3479 public void actionPerformed(java.awt.event.ActionEvent evt) { 3480 FormatCommand.getCommand( OperationType.ELEMENT_MAXIMIZE).execute(); 3481 } 3482 }); 3483 3484 m.add(jMenuItemFillCell); 3485 3486 jMenuItemFillCellH = new javax.swing.JMenuItem (); 3487 jMenuItemFillCellH.setIcon(new javax.swing.ImageIcon (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 () { 3490 public void actionPerformed(java.awt.event.ActionEvent evt) { 3491 FormatCommand.getCommand( OperationType.ELEMENT_MAXIMIZE_H).execute(); 3492 } 3493 }); 3494 3495 m.add(jMenuItemFillCellH); 3496 3497 jMenuItemFillCellV = new javax.swing.JMenuItem (); 3498 3499 jMenuItemFillCellV.setIcon(new javax.swing.ImageIcon (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 () { 3502 public void actionPerformed(java.awt.event.ActionEvent evt) { 3503 FormatCommand.getCommand( OperationType.ELEMENT_MAXIMIZE_V).execute(); 3504 } 3505 }); 3506 3507 m.add(jMenuItemFillCellV); 3508 3509 3510 jMenuAlign = new javax.swing.JMenu (); 3511 jMenuAlign.setText(it.businesslogic.ireport.util.I18n.getString("align", "Align...")); 3512 3513 jMenuItemAlignLeft = new javax.swing.JMenuItem (); 3514 3515 jMenuItemAlignLeft.setIcon(new javax.swing.ImageIcon (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 () { 3518 public void actionPerformed(java.awt.event.ActionEvent evt) { 3519 getMainFrame().jMenuItemAlignLeftActionPerformed(evt); 3520 } 3521 }); 3522 3523 jMenuAlign.add(jMenuItemAlignLeft); 3524 3525 jMenuItemAlignRight = new javax.swing.JMenuItem (); 3526 jMenuItemAlignRight.setIcon(new javax.swing.ImageIcon (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 () { 3529 public void actionPerformed(java.awt.event.ActionEvent evt) { 3530 getMainFrame().jMenuItemAlignRightActionPerformed(evt); 3531 } 3532 }); 3533 3534 jMenuAlign.add(jMenuItemAlignRight); 3535 3536 jMenuItemAlignTop = new javax.swing.JMenuItem (); 3537 jMenuItemAlignTop.setIcon(new javax.swing.ImageIcon (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 () { 3540 public void actionPerformed(java.awt.event.ActionEvent evt) { 3541 getMainFrame().jMenuItemAlignTopActionPerformed(evt); 3542 } 3543 }); 3544 3545 jMenuAlign.add(jMenuItemAlignTop); 3546 3547 jMenuItemAlignBottom = new javax.swing.JMenuItem (); 3548 jMenuItemAlignBottom.setIcon(new javax.swing.ImageIcon (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 () { 3551 public void actionPerformed(java.awt.event.ActionEvent evt) { 3552 getMainFrame().jMenuItemAlignBottomActionPerformed(evt); 3553 } 3554 }); 3555 3556 jMenuAlign.add(jMenuItemAlignBottom); 3557 3558 jSeparator19 = new javax.swing.JSeparator (); 3559 jMenuAlign.add(jSeparator19); 3560 3561 jMenuItemAlignVerticalAxis = new javax.swing.JMenuItem (); 3562 jMenuItemAlignVerticalAxis.setIcon(new javax.swing.ImageIcon (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 () { 3565 public void actionPerformed(java.awt.event.ActionEvent evt) { 3566 getMainFrame().jMenuItemAlignVerticalAxisActionPerformed(evt); 3567 } 3568 }); 3569 3570 jMenuAlign.add(jMenuItemAlignVerticalAxis); 3571 3572 jMenuItemAlignHorizontalAxis = new javax.swing.JMenuItem (); 3573 jMenuItemAlignHorizontalAxis.setIcon(new javax.swing.ImageIcon (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 () { 3576 public void actionPerformed(java.awt.event.ActionEvent evt) { 3577 getMainFrame().jMenuItemAlignHorizontalAxisActionPerformed(evt); 3578 } 3579 }); 3580 3581 jMenuAlign.add(jMenuItemAlignHorizontalAxis); 3582 3583 m.add(jMenuAlign); 3584 3585 jMenuSize = new javax.swing.JMenu (); 3586 jMenuSize.setText(it.businesslogic.ireport.util.I18n.getString("size", "Size...")); 3587 jMenuItemSameWidth = new javax.swing.JMenuItem (); 3588 jMenuItemSameWidth.setIcon(new javax.swing.ImageIcon (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 () { 3591 public void actionPerformed(java.awt.event.ActionEvent evt) { 3592 getMainFrame().jMenuItemSameWidthActionPerformed(evt); 3593 } 3594 }); 3595 3596 jMenuSize.add(jMenuItemSameWidth); 3597 3598 jMenuItemSameWidthMax = new javax.swing.JMenuItem (); 3599 jMenuItemSameWidthMax.setIcon(new javax.swing.ImageIcon (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 () { 3602 public void actionPerformed(java.awt.event.ActionEvent evt) { 3603 getMainFrame().jMenuItemSameWidthMaxActionPerformed(evt); 3604 } 3605 }); 3606 3607 jMenuSize.add(jMenuItemSameWidthMax); 3608 3609 jMenuItemSameWidthMin = new javax.swing.JMenuItem (); 3610 jMenuItemSameWidthMin.setIcon(new javax.swing.ImageIcon (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 () { 3613 public void actionPerformed(java.awt.event.ActionEvent evt) { 3614 getMainFrame().jMenuItemSameWidthMinActionPerformed(evt); 3615 } 3616 }); 3617 3618 jMenuSize.add(jMenuItemSameWidthMin); 3619 3620 jSeparator17 = new javax.swing.JSeparator (); 3621 jMenuSize.add(jSeparator17); 3622 3623 jMenuItemSameHeight = new javax.swing.JMenuItem (); 3624 jMenuItemSameHeight.setIcon(new javax.swing.ImageIcon (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 () { 3627 public void actionPerformed(java.awt.event.ActionEvent evt) { 3628 getMainFrame().jMenuItemSameHeightActionPerformed(evt); 3629 } 3630 }); 3631 3632 jMenuSize.add(jMenuItemSameHeight); 3633 3634 jMenuItemSameHeightMin = new javax.swing.JMenuItem (); 3635 jMenuItemSameHeightMin.setIcon(new javax.swing.ImageIcon (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 () { 3638 public void actionPerformed(java.awt.event.ActionEvent evt) { 3639 getMainFrame().jMenuItemSameHeightMinActionPerformed(evt); 3640 } 3641 }); 3642 3643 jMenuSize.add(jMenuItemSameHeightMin); 3644 3645 jMenuItemSameHeightMax = new javax.swing.JMenuItem (); 3646 jMenuItemSameHeightMax.setIcon(new javax.swing.ImageIcon (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 () { 3649 public void actionPerformed(java.awt.event.ActionEvent evt) { 3650 getMainFrame().jMenuItemSameHeightMaxActionPerformed(evt); 3651 } 3652 }); 3653 3654 jMenuSize.add(jMenuItemSameHeightMax); 3655 3656 jSeparator18 = new javax.swing.JSeparator (); 3657 jMenuSize.add(jSeparator18); 3658 3659 jMenuItemSameSize = new javax.swing.JMenuItem (); 3660 jMenuItemSameSize.setIcon(new javax.swing.ImageIcon (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 () { 3663 public void actionPerformed(java.awt.event.ActionEvent evt) { 3664 getMainFrame().jMenuItemSameSizeActionPerformed(evt); 3665 } 3666 }); 3667 3668 jMenuSize.add(jMenuItemSameSize); 3669 3670 m.add(jMenuSize); 3671 3672 jMenuPosition = new javax.swing.JMenu (); 3673 jMenuPosition.setText(it.businesslogic.ireport.util.I18n.getString("position", "Position...")); 3674 jMenuItemCenterH = new javax.swing.JMenuItem (); 3675 jMenuItemCenterH.setIcon(new javax.swing.ImageIcon (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 () { 3678 public void actionPerformed(java.awt.event.ActionEvent evt) { 3679 getMainFrame().jMenuItemCenterHActionPerformed(evt); 3680 } 3681 }); 3682 3683 jMenuPosition.add(jMenuItemCenterH); 3684 3685 jMenuItemCenterV = new javax.swing.JMenuItem (); 3686 jMenuItemCenterV.setIcon(new javax.swing.ImageIcon (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 () { 3689 public void actionPerformed(java.awt.event.ActionEvent evt) { 3690 getMainFrame().jMenuItemCenterVActionPerformed(evt); 3691 } 3692 }); 3693 3694 jMenuPosition.add(jMenuItemCenterV); 3695 3696 jMenuItemCenterInCell = new javax.swing.JMenuItem (); 3697 jMenuItemCenterInCell.setIcon(new javax.swing.ImageIcon (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 () { 3700 public void actionPerformed(java.awt.event.ActionEvent evt) { 3701 getMainFrame().jMenuItemCenterInBandActionPerformed(evt); 3702 } 3703 }); 3704 3705 jMenuPosition.add(jMenuItemCenterInCell); 3706 3707 jMenuItemJoinLeft = new javax.swing.JMenuItem (); 3708 jMenuItemJoinLeft.setText(it.businesslogic.ireport.util.I18n.getString("joinSidesLeft", "Join sides left")); 3709 jMenuItemJoinLeft.addActionListener(new java.awt.event.ActionListener () { 3710 public void actionPerformed(java.awt.event.ActionEvent evt) { 3711 getMainFrame().jMenuItemJoinLeftActionPerformed(evt); 3712 } 3713 }); 3714 3715 jMenuPosition.add(jMenuItemJoinLeft); 3716 3717 jMenuItemJoinRight = new javax.swing.JMenuItem (); 3718 jMenuItemJoinRight.setText(it.businesslogic.ireport.util.I18n.getString("joinSidesRight", "Join sides right")); 3719 jMenuItemJoinRight.addActionListener(new java.awt.event.ActionListener () { 3720 public void actionPerformed(java.awt.event.ActionEvent evt) { 3721 getMainFrame().jMenuItemJoinRightActionPerformed(evt); 3722 } 3723 }); 3724 3725 jMenuPosition.add(jMenuItemJoinRight); 3726 3727 m.add(jMenuPosition); 3728 3729 jSeparator5 = new javax.swing.JSeparator (); 3730 m.add(jSeparator5); 3731 3732 jMenuHSpacing = new javax.swing.JMenu (); 3733 jMenuHSpacing.setText(it.businesslogic.ireport.util.I18n.getString("horizontalSpacing", "Horizontal spacing...")); 3734 3735 jMenuItemHSMakeEqual = new javax.swing.JMenuItem (); 3736 jMenuItemHSMakeEqual.setText(it.businesslogic.ireport.util.I18n.getString("makeEqual", "Make equal")); 3737 jMenuItemHSMakeEqual.addActionListener(new java.awt.event.ActionListener () { 3738 public void actionPerformed(java.awt.event.ActionEvent evt) { 3739 getMainFrame().jMenuItemHSMakeEqualActionPerformed(evt); 3740 } 3741 }); 3742 3743 jMenuHSpacing.add(jMenuItemHSMakeEqual); 3744 3745 jMenuItemHSIncrease = new javax.swing.JMenuItem (); 3746 jMenuItemHSIncrease.setText(it.businesslogic.ireport.util.I18n.getString("increase", "Increase")); 3747 jMenuItemHSIncrease.addActionListener(new java.awt.event.ActionListener () { 3748 public void actionPerformed(java.awt.event.ActionEvent evt) { 3749 getMainFrame().jMenuItemHSIncreaseActionPerformed(evt); 3750 } 3751 }); 3752 3753 jMenuHSpacing.add(jMenuItemHSIncrease); 3754 3755 jMenuItemHSDecrease = new javax.swing.JMenuItem (); 3756 jMenuItemHSDecrease.setText(it.businesslogic.ireport.util.I18n.getString("decrease", "Decrease")); 3757 jMenuItemHSDecrease.addActionListener(new java.awt.event.ActionListener () { 3758 public void actionPerformed(java.awt.event.ActionEvent evt) { 3759 getMainFrame().jMenuItemHSDecreaseActionPerformed(evt); 3760 } 3761 }); 3762 3763 jMenuHSpacing.add(jMenuItemHSDecrease); 3764 3765 jMenuItemHSRemove = new javax.swing.JMenuItem (); 3766 jMenuItemHSRemove.setText(it.businesslogic.ireport.util.I18n.getString("remove", "Remove")); 3767 jMenuItemHSRemove.addActionListener(new java.awt.event.ActionListener () { 3768 public void actionPerformed(java.awt.event.ActionEvent evt) { 3769 getMainFrame().jMenuItemHSRemoveActionPerformed(evt); 3770 } 3771 }); 3772 3773 jMenuHSpacing.add(jMenuItemHSRemove); 3774 3775 m.add(jMenuHSpacing); 3776 3777 jMenuVSpacing = new javax.swing.JMenu (); 3778 jMenuVSpacing.setText(it.businesslogic.ireport.util.I18n.getString("verticalSpacing", "Vertical spacing")); 3779 jMenuItemVSMakeEqual = new javax.swing.JMenuItem (); 3780 jMenuItemVSMakeEqual.setText(it.businesslogic.ireport.util.I18n.getString("makeEqual", "Make equal")); 3781 jMenuItemVSMakeEqual.addActionListener(new java.awt.event.ActionListener () { 3782 public void actionPerformed(java.awt.event.ActionEvent evt) { 3783 getMainFrame().jMenuItemVSMakeEqualActionPerformed(evt); 3784 } 3785 }); 3786 3787 jMenuVSpacing.add(jMenuItemVSMakeEqual); 3788 3789 jMenuItemVSIncrease = new javax.swing.JMenuItem (); 3790 jMenuItemVSIncrease.setText(it.businesslogic.ireport.util.I18n.getString("increase", "Increase")); 3791 jMenuItemVSIncrease.addActionListener(new java.awt.event.ActionListener () { 3792 public void actionPerformed(java.awt.event.ActionEvent evt) { 3793 getMainFrame().jMenuItemVSIncreaseActionPerformed(evt); 3794 } 3795 }); 3796 3797 jMenuVSpacing.add(jMenuItemVSIncrease); 3798 3799 jMenuItemVSDecrease = new javax.swing.JMenuItem (); 3800 jMenuItemVSDecrease.setText(it.businesslogic.ireport.util.I18n.getString("decrease", "Decrease")); 3801 jMenuItemVSDecrease.addActionListener(new java.awt.event.ActionListener () { 3802 public void actionPerformed(java.awt.event.ActionEvent evt) { 3803 getMainFrame().jMenuItemVSDecreaseActionPerformed(evt); 3804 } 3805 }); 3806 3807 jMenuVSpacing.add(jMenuItemVSDecrease); 3808 3809 jMenuItemVSRemove = new javax.swing.JMenuItem (); 3810 jMenuItemVSRemove.setText(it.businesslogic.ireport.util.I18n.getString("remove", "Remove")); 3811 jMenuItemVSRemove.addActionListener(new java.awt.event.ActionListener () { 3812 public void actionPerformed(java.awt.event.ActionEvent evt) { 3813 getMainFrame().jMenuItemVSRemoveActionPerformed(evt); 3814 } 3815 }); 3816 3817 jMenuVSpacing.add(jMenuItemVSRemove); 3818 3819 m.add(jMenuVSpacing); 3820 3821 jSeparator8 = new javax.swing.JSeparator (); 3822 m.add(jSeparator8); 3823 3824 jMenuItemBringToFront = new javax.swing.JMenuItem (); 3825 jMenuItemBringToFront.setIcon(new javax.swing.ImageIcon (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 () { 3828 public void actionPerformed(java.awt.event.ActionEvent evt) { 3829 getMainFrame().jMenuItemBringToFrontActionPerformed(evt); 3830 } 3831 }); 3832 3833 m.add(jMenuItemBringToFront); 3834 3835 jMenuItemSendToBack = new javax.swing.JMenuItem (); 3836 jMenuItemSendToBack.setIcon(new javax.swing.ImageIcon (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 () { 3839 public void actionPerformed(java.awt.event.ActionEvent 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 3866 public ReportElement getElementAt(Point location) 3867 { 3868 Point p = new Point (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 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 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 } 3901} 3902 | Popular Tags |