1 32 33 package it.businesslogic.ireport.gui; 34 import bsh.Interpreter; 35 import it.businesslogic.ireport.CrosstabReportElement; 36 import it.businesslogic.ireport.FrameReportElement; 37 import it.businesslogic.ireport.IReportFont; 38 import it.businesslogic.ireport.SubReportElement; 39 import it.businesslogic.ireport.TransformationType; 40 import it.businesslogic.ireport.chart.gui.ChartSelectionJDialog; 41 import it.businesslogic.ireport.crosstab.gui.CrosstabEditor; 42 import it.businesslogic.ireport.gui.event.*; 43 import it.businesslogic.ireport.gui.wizard.SubreportWizard; 44 import it.businesslogic.ireport.undo.*; 45 import it.businesslogic.ireport.util.*; 46 import it.businesslogic.ireport.*; 47 import it.businesslogic.ireport.crosstab.CrosstabCell; 48 import it.businesslogic.ireport.crosstab.gui.CrosstabEditorPanel; 49 import it.businesslogic.ireport.crosstab.gui.CrosstabWizardDialog; 50 import it.businesslogic.ireport.gui.command.FormatCommand; 51 import java.awt.event.FocusEvent ; 52 import java.awt.event.FocusListener ; 53 import java.awt.event.KeyEvent ; 54 import java.awt.event.KeyListener ; 55 import java.awt.geom.*; 56 import java.util.*; 57 import java.awt.*; 58 import java.awt.image.*; 59 import java.io.File ; 60 import java.net.URL ; 61 import javax.swing.JOptionPane ; 62 import javax.swing.JTextArea ; 63 import javax.swing.JTextPane ; 64 import javax.swing.text.SimpleAttributeSet ; 65 import javax.swing.text.StyleConstants ; 66 import javax.swing.text.StyledDocument ; 67 68 72 public class JReportFrame extends JMDIFrame implements LanguageChangedListener { 73 74 static int id = 0; 75 static java.awt.Cursor hsplit = null; 76 private int offscreenWidth = 0; 81 private Dimension offscreenDimension = null; 82 private boolean isDocDirty = true; 83 84 private MainFrame mf = null; 85 private BufferedImage[] shadowsImages = null; 86 87 88 private java.awt.Point popup_opened_at = null; 89 90 91 private boolean transforming = false; 92 93 94 boolean band_dragging=false; 95 96 int band_dragging_origin=0; 97 98 Band band_dragging_band=null; 99 100 boolean first_draw_band=true; 101 boolean firstXORDraw = false ; boolean firstXORDrawTransforming = false; 103 104 int tabs = 0; 105 106 private TexturePaint mGridTexture = null; 107 108 111 private boolean drag_selection_mode = false; 112 115 private java.awt.Point drag_selection_origin = null; 116 119 private java.awt.Point drag_selection_end = null; 120 123 private boolean first_draw_selection_rect = true; 124 125 128 private java.awt.Stroke selectionStroke = null; 129 130 private JRulePanel jVerticalRule = null; 131 132 private javax.swing.JMenu jMenuAlign; 134 private javax.swing.JMenuItem jMenuItemAlignLeft; 135 private javax.swing.JMenuItem jMenuItemAlignRight; 136 private javax.swing.JMenuItem jMenuItemAlignTop; 137 private javax.swing.JMenuItem jMenuItemAlignBottom; 138 private javax.swing.JSeparator jSeparator19; 139 private javax.swing.JMenuItem jMenuItemAlignVerticalAxis; 140 private javax.swing.JMenuItem jMenuItemAlignHorizontalAxis ; 141 private javax.swing.JSeparator jSeparator20; 142 private javax.swing.JMenuItem jMenuItemAlignToBandTop; 143 private javax.swing.JMenuItem jMenuItemAlignToBandBottom; 144 private javax.swing.JMenu jMenuSize; 145 private javax.swing.JMenuItem jMenuItemSameWidth; 146 private javax.swing.JMenuItem jMenuItemSameWidthMax; 147 private javax.swing.JMenuItem jMenuItemSameWidthMin; 148 private javax.swing.JSeparator jSeparator17; 149 private javax.swing.JMenuItem jMenuItemSameHeight; 150 private javax.swing.JMenuItem jMenuItemSameHeightMax; 151 private javax.swing.JMenuItem jMenuItemSameHeightMin; 152 private javax.swing.JSeparator jSeparator18; 153 private javax.swing.JMenuItem jMenuItemSameSize; 154 private javax.swing.JMenu jMenuPosition; 155 private javax.swing.JMenuItem jMenuItemCenterH; 156 private javax.swing.JMenuItem jMenuItemCenterV; 157 private javax.swing.JMenuItem jMenuItemCenterInBand; 158 private javax.swing.JMenuItem jMenuItemCenterBackground; 159 private javax.swing.JMenuItem jMenuItemJoinLeft; 160 private javax.swing.JMenuItem jMenuItemJoinRight; 161 private javax.swing.JSeparator jSeparator5; 162 private javax.swing.JMenuItem jMenuHSpacing; 163 private javax.swing.JMenuItem jMenuItemHSMakeEqual; 164 private javax.swing.JMenuItem jMenuItemHSIncrease; 165 private javax.swing.JMenuItem jMenuItemHSDecrease; 166 private javax.swing.JMenuItem jMenuItemHSRemove; 167 private javax.swing.JMenuItem jMenuVSpacing; 168 private javax.swing.JMenuItem jMenuItemVSMakeEqual; 169 private javax.swing.JMenuItem jMenuItemVSIncrease; 170 private javax.swing.JMenuItem jMenuItemVSDecrease; 171 private javax.swing.JMenuItem jMenuItemVSRemove; 172 private javax.swing.JSeparator jSeparator8; 173 private javax.swing.JMenuItem jMenuItemBringToFront; 174 private javax.swing.JMenuItem jMenuItemSendToBack; 175 private javax.swing.JPopupMenu jPopupMenuElementMS; 176 private javax.swing.JMenuItem jMenuItemOrganize; 177 private javax.swing.JMenuItem jMenuItemRightMargin; 178 private javax.swing.JMenuItem jMenuItemLeftMargin; 179 180 private JTextPane floatingTextArea = new JTextPane (); private String previousFloatingTextAreaValue = ""; 182 183 private java.util.List openedNodesDocumentStructure = null; 184 185 private TextReportElement onlineEditingTextReportElement = null; 186 187 188 189 193 boolean resistenceExceeded = false; 194 195 Point newObjectOrigin = null; 196 197 boolean trasforming = false; 198 int transformation_type= -1; 199 Point transformation_origin=null; 200 Point transformation_origin_end=null; 201 Point transformation_undo_delta=null; 202 203 204 public JReportFrame(Report report) { 205 206 initComponents(); 207 208 jHorizontalRule.setJReportFrame( this ); 209 jHorizontalRule.repaint(); 210 jPanelReportContainer.setIgnoreRepaint(true); 211 212 jVerticalRule = new JRulePanel(); 213 jVerticalRule.setType(jVerticalRule.TYPE_VERTICAL); 214 jVerticalRule.setJReportFrame( this ); 215 jPanelVRule.add(jVerticalRule, java.awt.BorderLayout.CENTER); 216 jVerticalRule.repaint(); 217 218 addFormatItemsToMenu(jPopupMenuElement); 219 this.windowID = id++; 220 221 floatingTextArea.setOpaque(true); 222 floatingTextArea.addFocusListener( new FocusListener () { 223 public void focusGained(FocusEvent e) { 224 225 } 226 public void focusLost(FocusEvent e) { 227 floatingTextAreaFocusLost(); 228 } 229 }); 230 231 floatingTextArea.addKeyListener( new KeyListener () 232 { 233 public void keyPressed(KeyEvent e) { 234 if (e.getKeyCode() == e.VK_ENTER && (e.getModifiers() & e.SHIFT_DOWN_MASK) == 0) 235 { 236 e.consume(); 237 floatingTextAreaFocusLost(); 238 } 239 if (e.getKeyCode() == e.VK_ESCAPE) 240 { 241 e.consume(); 242 floatingTextAreaFocusLost(false); 243 } 244 } 245 public void keyReleased(KeyEvent e) { 246 } 247 public void keyTyped(KeyEvent e) { 248 } 249 }); 250 251 252 253 floatingTextArea.getDocument().addDocumentListener( new javax.swing.event.DocumentListener () { 254 public void changedUpdate(javax.swing.event.DocumentEvent evt) { 255 floatingTextChanged(); 256 } 257 public void insertUpdate(javax.swing.event.DocumentEvent evt) { 258 floatingTextChanged(); 259 } 260 public void removeUpdate(javax.swing.event.DocumentEvent evt) { 261 floatingTextChanged(); 262 } 263 }); 264 265 selectionStroke = new java.awt.BasicStroke ( 266 (float)(2f), 267 java.awt.BasicStroke.CAP_BUTT, 268 java.awt.BasicStroke.JOIN_BEVEL, 269 0f, 270 new float[]{5f, 3f}, 271 0f 272 ); 273 this.setPreferredSize(new Dimension(350,400)); 274 this.setNormalSize(new Dimension(350,400)); 275 if (hsplit == null) { 276 hsplit = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR); 277 } 278 this.jPanelReport.setJrf(this); 279 this.report = report; 280 281 this.newObjectType = ReportElementType.NONE; 282 this.report=report; 283 this.report.setReportFrame(this); 284 this.setTitle(this.report.getName()+" "+this.report.getWidth()+"x"+this.report.getDesignHeight()+" ["+Misc.nvl(this.report.getFilename(),"unnamed")+"]"); 285 287 undoOperations = new Vector(); 288 clipboardObjects = new Vector(); 289 selectedElements = new Vector(); 290 transformation_undo_delta = new Point(0,0); 291 292 zoomFactor = 1.0; 293 294 transformationMinSize =5; 295 296 undoIndex = -1; 297 298 shadowsImages = new BufferedImage[5]; 300 301 shadowsImages[0] = Misc.loadBufferedImageFromResources(this,"it/businesslogic/ireport/icons/layout/sh_ur.gif"); 302 shadowsImages[1] = Misc.loadBufferedImageFromResources(this,"it/businesslogic/ireport/icons/layout/sh_r.gif"); 303 shadowsImages[2] = Misc.loadBufferedImageFromResources(this,"it/businesslogic/ireport/icons/layout/sh_lr.gif"); 304 shadowsImages[3] = Misc.loadBufferedImageFromResources(this,"it/businesslogic/ireport/icons/layout/sh_d.gif"); 305 shadowsImages[4] = Misc.loadBufferedImageFromResources(this,"it/businesslogic/ireport/icons/layout/sh_dl.gif"); 306 307 331 350 351 offscreenDimension = Toolkit.getDefaultToolkit().getScreenSize(); 355 359 365 373 375 377 this.jHorizontalScrollBar.setValue(0); 378 this.jVerticalScrollBar.setValue(0); 379 380 updateTabs(); 381 382 for (int i=0; i<report.getElements().size(); ++i) 383 { 384 ReportElement re = (ReportElement)report.getElements().elementAt(i); 385 if (re instanceof CrosstabReportElement) 386 { 387 addCrosstabEditor( (CrosstabReportElement)re); 388 } 389 } 390 391 this.applyI18n(); 392 } 393 394 public void floatingTextAreaFocusLost() 395 { 396 floatingTextAreaFocusLost(true); 397 } 398 399 public void floatingTextAreaFocusLost(boolean acceptModifications) 400 { 401 402 try { 403 if (onlineEditingTextReportElement != null) 404 { 405 if (acceptModifications) 406 { 407 onlineEditingTextReportElement.setText( floatingTextArea.getText() ); 408 ReportElementChangedEvent changedEvent = new ReportElementChangedEvent(this , getSelectedElements() , ReportElementChangedEvent.CHANGED); 409 changedEvent.setEventSource( this ); 410 changedEvent.setPropertyChanged( "text" ); 411 changedEvent.setNewValue( floatingTextArea.getText() ); 412 fireReportListenerReportElementsChanged(changedEvent); 413 getMainFrame().getElementPropertiesDialog().updateSelection(); 414 } 415 else 416 { 417 floatingTextArea.setText( onlineEditingTextReportElement.getText()); 418 } 419 } 420 421 onlineEditingTextReportElement = null; 422 getReportPanel().remove( floatingTextArea ); 423 getReportPanel().updateUI(); 424 425 } catch (Exception ex) {} 426 } 427 428 429 432 public ReportElement getElementAt(Point location) 433 { 434 Point p = new Point(getLogicalDim((int)location.getX()+jHorizontalScrollBar.getValue()-10)+10, 435 getLogicalDim((int)location.getY()+jVerticalScrollBar.getValue()-10)+10); 436 437 for (int i=report.getElements().size()-1; i>=0; --i) 438 { 439 440 ReportElement re = (ReportElement)report.getElements().elementAt(i); 441 if (re.intersects(p)) 442 { 443 return re; 444 } 445 } 446 447 return null; 448 } 449 450 public void floatingTextChanged() 451 { 452 453 } 454 455 456 461 private void initComponents() { 463 jPopupMenuBand = new javax.swing.JPopupMenu (); 464 jMenuItemPasteOnBand = new javax.swing.JMenuItem (); 465 jSeparator2 = new javax.swing.JSeparator (); 466 jMenuItemBandProperties = new javax.swing.JMenuItem (); 467 jPopupMenuElement = new javax.swing.JPopupMenu (); 468 jMenuItemElementProperties = new javax.swing.JMenuItem (); 469 jMenuItemElementChartProperties = new javax.swing.JMenuItem (); 470 jMenuItemElementCrosstabProperties = new javax.swing.JMenuItem (); 471 jMenuItemElementCrosstabDesignProperties = new javax.swing.JMenuItem (); 472 jMenuItemElementOpenSubreport = new javax.swing.JMenuItem (); 473 jMenuItemBandProperties1 = new javax.swing.JMenuItem (); 474 jSeparator1 = new javax.swing.JSeparator (); 475 jMenuItemCut = new javax.swing.JMenuItem (); 476 jMenuItemCopy = new javax.swing.JMenuItem (); 477 jMenuItemPaste = new javax.swing.JMenuItem (); 478 jMenuItemDelete = new javax.swing.JMenuItem (); 479 jSeparator3 = new javax.swing.JSeparator (); 480 jMenuItemGroup = new javax.swing.JMenuItem (); 481 jMenuItemUngroup = new javax.swing.JMenuItem (); 482 jSeparator6 = new javax.swing.JSeparator (); 483 jMenuItemCopyStyle = new javax.swing.JMenuItem (); 484 jMenuItemPasteStyle = new javax.swing.JMenuItem (); 485 jMenuItemTransformStaticText = new javax.swing.JMenuItem (); 486 jMenuItemPattern = new javax.swing.JMenuItem (); 487 jSeparator4 = new javax.swing.JSeparator (); 488 jTabbedPane1 = new javax.swing.JTabbedPane (); 489 jPanelSuperContainer = new javax.swing.JPanel (); 490 jPanelReportContainer = new javax.swing.JPanel (); 491 jPanelVRule = new javax.swing.JPanel (); 492 jPanelHContainerRule = new javax.swing.JPanel (); 493 jPanelCorner = new javax.swing.JPanel (); 494 jHorizontalRule = new it.businesslogic.ireport.gui.JRulePanel(); 495 jPanelReport = new it.businesslogic.ireport.gui.JReportPanel(); 496 jVerticalScrollBar = new javax.swing.JScrollBar (); 497 jPanelHScroll = new javax.swing.JPanel (); 498 jHorizontalScrollBar = new javax.swing.JScrollBar (); 499 jPanel1 = new javax.swing.JPanel (); 500 501 jMenuItemPasteOnBand.setIcon(new javax.swing.ImageIcon ("")); 502 jMenuItemPasteOnBand.setText("Paste here..."); 503 jMenuItemPasteOnBand.addActionListener(new java.awt.event.ActionListener () { 504 public void actionPerformed(java.awt.event.ActionEvent evt) { 505 jMenuItemPasteOnBandActionPerformed(evt); 506 } 507 }); 508 jMenuItemPasteOnBand.addMouseListener(new java.awt.event.MouseAdapter () { 509 public void mouseClicked(java.awt.event.MouseEvent evt) { 510 jMenuItemPasteOnBandMouseClicked(evt); 511 } 512 }); 513 514 jPopupMenuBand.add(jMenuItemPasteOnBand); 515 516 jPopupMenuBand.add(jSeparator2); 517 518 jMenuItemBandProperties.setIcon(new javax.swing.ImageIcon ("")); 519 jMenuItemBandProperties.setText("Band properties"); 520 jMenuItemBandProperties.addActionListener(new java.awt.event.ActionListener () { 521 public void actionPerformed(java.awt.event.ActionEvent evt) { 522 jMenuItemBandPropertiesActionPerformed(evt); 523 } 524 }); 525 526 jPopupMenuBand.add(jMenuItemBandProperties); 527 528 jMenuItemElementProperties.setIcon(new javax.swing.ImageIcon ("")); 529 jMenuItemElementProperties.setText("Properties"); 530 jMenuItemElementProperties.addActionListener(new java.awt.event.ActionListener () { 531 public void actionPerformed(java.awt.event.ActionEvent evt) { 532 jMenuItemElementPropertiesActionPerformed(evt); 533 } 534 }); 535 jMenuItemElementProperties.addMouseListener(new java.awt.event.MouseAdapter () { 536 public void mouseClicked(java.awt.event.MouseEvent evt) { 537 jMenuItemElementPropertiesMouseClicked(evt); 538 } 539 }); 540 541 jPopupMenuElement.add(jMenuItemElementProperties); 542 543 jMenuItemElementChartProperties.setIcon(new javax.swing.ImageIcon ("")); 544 jMenuItemElementChartProperties.setText("Chart properties"); 545 jMenuItemElementChartProperties.addActionListener(new java.awt.event.ActionListener () { 546 public void actionPerformed(java.awt.event.ActionEvent evt) { 547 jMenuItemElementChartPropertiesActionPerformed(evt); 548 } 549 }); 550 551 jPopupMenuElement.add(jMenuItemElementChartProperties); 552 553 jMenuItemElementCrosstabProperties.setIcon(new javax.swing.ImageIcon ("")); 554 jMenuItemElementCrosstabProperties.setText("Crosstab properties"); 555 jMenuItemElementCrosstabProperties.addActionListener(new java.awt.event.ActionListener () { 556 public void actionPerformed(java.awt.event.ActionEvent evt) { 557 jMenuItemElementCrosstabPropertiesActionPerformed(evt); 558 } 559 }); 560 561 jPopupMenuElement.add(jMenuItemElementCrosstabProperties); 562 563 jMenuItemElementCrosstabDesignProperties.setIcon(new javax.swing.ImageIcon ("")); 564 jMenuItemElementCrosstabDesignProperties.setText("Go to crosstab design tab...."); 565 jMenuItemElementCrosstabDesignProperties.addActionListener(new java.awt.event.ActionListener () { 566 public void actionPerformed(java.awt.event.ActionEvent evt) { 567 jMenuItemElementCrosstabPropertiesActionPerformed1(evt); 568 } 569 }); 570 571 jPopupMenuElement.add(jMenuItemElementCrosstabDesignProperties); 572 573 jMenuItemElementOpenSubreport.setIcon(new javax.swing.ImageIcon ("")); 574 jMenuItemElementOpenSubreport.setText("Open subreport"); 575 jMenuItemElementOpenSubreport.addActionListener(new java.awt.event.ActionListener () { 576 public void actionPerformed(java.awt.event.ActionEvent evt) { 577 jMenuItemElementOpenSubreportActionPerformed1(evt); 578 } 579 }); 580 581 jPopupMenuElement.add(jMenuItemElementOpenSubreport); 582 583 jMenuItemBandProperties1.setIcon(new javax.swing.ImageIcon ("")); 584 jMenuItemBandProperties1.setText("Band properties"); 585 jMenuItemBandProperties1.addActionListener(new java.awt.event.ActionListener () { 586 public void actionPerformed(java.awt.event.ActionEvent evt) { 587 jMenuItemBandPropertiesActionPerformed1(evt); 588 } 589 }); 590 591 jPopupMenuElement.add(jMenuItemBandProperties1); 592 593 jPopupMenuElement.add(jSeparator1); 594 595 jMenuItemCut.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/cut.png"))); 596 jMenuItemCut.setText("Cut"); 597 jMenuItemCut.setEnabled(false); 598 jMenuItemCut.addActionListener(new java.awt.event.ActionListener () { 599 public void actionPerformed(java.awt.event.ActionEvent evt) { 600 jMenuItemCutActionPerformed(evt); 601 } 602 }); 603 604 jPopupMenuElement.add(jMenuItemCut); 605 606 jMenuItemCopy.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/copy.png"))); 607 jMenuItemCopy.setText("Copy"); 608 jMenuItemCopy.setEnabled(false); 609 jMenuItemCopy.addActionListener(new java.awt.event.ActionListener () { 610 public void actionPerformed(java.awt.event.ActionEvent evt) { 611 jMenuItemCopyActionPerformed(evt); 612 } 613 }); 614 615 jPopupMenuElement.add(jMenuItemCopy); 616 617 jMenuItemPaste.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/paste.png"))); 618 jMenuItemPaste.setText("Paste"); 619 jMenuItemPaste.setEnabled(false); 620 jMenuItemPaste.addActionListener(new java.awt.event.ActionListener () { 621 public void actionPerformed(java.awt.event.ActionEvent evt) { 622 jMenuItemPasteActionPerformed(evt); 623 } 624 }); 625 626 jPopupMenuElement.add(jMenuItemPaste); 627 628 jMenuItemDelete.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/delete.png"))); 629 jMenuItemDelete.setText("Delete"); 630 jMenuItemDelete.setEnabled(false); 631 jMenuItemDelete.addActionListener(new java.awt.event.ActionListener () { 632 public void actionPerformed(java.awt.event.ActionEvent evt) { 633 jMenuItemDeleteActionPerformed(evt); 634 } 635 }); 636 637 jPopupMenuElement.add(jMenuItemDelete); 638 639 jPopupMenuElement.add(jSeparator3); 640 641 jMenuItemGroup.setText("Group selected element(s)"); 642 jMenuItemGroup.setEnabled(false); 643 jMenuItemGroup.addActionListener(new java.awt.event.ActionListener () { 644 public void actionPerformed(java.awt.event.ActionEvent evt) { 645 jMenuItemGroupActionPerformed(evt); 646 } 647 }); 648 649 jPopupMenuElement.add(jMenuItemGroup); 650 651 jMenuItemUngroup.setText("Ungroup selected element(s)"); 652 jMenuItemUngroup.setEnabled(false); 653 jMenuItemUngroup.addActionListener(new java.awt.event.ActionListener () { 654 public void actionPerformed(java.awt.event.ActionEvent evt) { 655 jMenuItemUngroupActionPerformed(evt); 656 } 657 }); 658 659 jPopupMenuElement.add(jMenuItemUngroup); 660 661 jPopupMenuElement.add(jSeparator6); 662 663 jMenuItemCopyStyle.setEnabled(false); 664 jMenuItemCopyStyle.setLabel("Copy style"); 665 jMenuItemCopyStyle.addActionListener(new java.awt.event.ActionListener () { 666 public void actionPerformed(java.awt.event.ActionEvent evt) { 667 jMenuItemCopyStyleActionPerformed(evt); 668 } 669 }); 670 671 jPopupMenuElement.add(jMenuItemCopyStyle); 672 673 jMenuItemPasteStyle.setEnabled(false); 674 jMenuItemPasteStyle.setLabel("Paste style"); 675 jMenuItemPasteStyle.addActionListener(new java.awt.event.ActionListener () { 676 public void actionPerformed(java.awt.event.ActionEvent evt) { 677 jMenuItemPasteStyleActionPerformed(evt); 678 } 679 }); 680 681 jPopupMenuElement.add(jMenuItemPasteStyle); 682 683 jMenuItemTransformStaticText.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0)); 684 jMenuItemTransformStaticText.setLabel("Transform in Textfield"); 685 jMenuItemTransformStaticText.addActionListener(new java.awt.event.ActionListener () { 686 public void actionPerformed(java.awt.event.ActionEvent evt) { 687 jMenuItemTransformStaticTextActionPerformed(evt); 688 } 689 }); 690 691 jPopupMenuElement.add(jMenuItemTransformStaticText); 692 693 jMenuItemPattern.setText("Field pattern"); 694 jMenuItemPattern.addActionListener(new java.awt.event.ActionListener () { 695 public void actionPerformed(java.awt.event.ActionEvent evt) { 696 jMenuItemPatternActionPerformed(evt); 697 } 698 }); 699 700 jPopupMenuElement.add(jMenuItemPattern); 701 702 jPopupMenuElement.add(jSeparator4); 703 704 try { 705 setSelected(true); 706 } catch (java.beans.PropertyVetoException e1) { 707 e1.printStackTrace(); 708 } 709 addKeyListener(new java.awt.event.KeyAdapter () { 710 public void keyPressed(java.awt.event.KeyEvent evt) { 711 formKeyPressed(evt); 712 } 713 }); 714 715 jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener () { 716 public void stateChanged(javax.swing.event.ChangeEvent evt) { 717 jTabbedPane1StateChanged(evt); 718 } 719 }); 720 721 jPanelSuperContainer.setLayout(new java.awt.BorderLayout ()); 722 723 jPanelReportContainer.setLayout(new java.awt.BorderLayout ()); 724 725 jPanelVRule.setLayout(new java.awt.BorderLayout ()); 726 727 jPanelVRule.setBackground(new java.awt.Color (255, 255, 255)); 728 jPanelVRule.setMaximumSize(new java.awt.Dimension (16, 32000)); 729 jPanelVRule.setMinimumSize(new java.awt.Dimension (16, 16)); 730 jPanelVRule.setPreferredSize(new java.awt.Dimension (16, 32767)); 731 jPanelReportContainer.add(jPanelVRule, java.awt.BorderLayout.WEST); 732 733 jPanelHContainerRule.setLayout(new java.awt.BorderLayout ()); 734 735 jPanelHContainerRule.setBackground(new java.awt.Color (255, 255, 255)); 736 jPanelHContainerRule.setMaximumSize(new java.awt.Dimension (32767, 16)); 737 jPanelHContainerRule.setMinimumSize(new java.awt.Dimension (16, 16)); 738 jPanelHContainerRule.setPreferredSize(new java.awt.Dimension (32767, 16)); 739 jPanelCorner.setLayout(null); 740 741 jPanelCorner.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); 742 jPanelCorner.setMaximumSize(new java.awt.Dimension (16, 16)); 743 jPanelCorner.setMinimumSize(new java.awt.Dimension (16, 16)); 744 jPanelCorner.setPreferredSize(new java.awt.Dimension (16, 16)); 745 jPanelHContainerRule.add(jPanelCorner, java.awt.BorderLayout.WEST); 746 747 jPanelHContainerRule.add(jHorizontalRule, java.awt.BorderLayout.CENTER); 748 749 jPanelReportContainer.add(jPanelHContainerRule, java.awt.BorderLayout.NORTH); 750 751 jPanelReport.setLayout(null); 752 753 jPanelReport.setToolTipText(""); 754 jPanelReport.addComponentListener(new java.awt.event.ComponentAdapter () { 755 public void componentResized(java.awt.event.ComponentEvent evt) { 756 jPanelReportComponentResized(evt); 757 } 758 }); 759 jPanelReport.addMouseMotionListener(new java.awt.event.MouseMotionAdapter () { 760 public void mouseDragged(java.awt.event.MouseEvent evt) { 761 jPanelReportMouseDragged(evt); 762 } 763 public void mouseMoved(java.awt.event.MouseEvent evt) { 764 jPanelReportMouseMoved(evt); 765 } 766 }); 767 jPanelReport.addKeyListener(new java.awt.event.KeyAdapter () { 768 public void keyPressed(java.awt.event.KeyEvent evt) { 769 jPanelReportKeyPressed(evt); 770 } 771 }); 772 jPanelReport.addMouseListener(new java.awt.event.MouseAdapter () { 773 public void mousePressed(java.awt.event.MouseEvent evt) { 774 jPanelReportMousePressed(evt); 775 } 776 public void mouseReleased(java.awt.event.MouseEvent evt) { 777 jPanelReportMouseReleased(evt); 778 } 779 }); 780 jPanelReport.addAncestorListener(new javax.swing.event.AncestorListener () { 781 public void ancestorMoved(javax.swing.event.AncestorEvent evt) { 782 } 783 public void ancestorAdded(javax.swing.event.AncestorEvent evt) { 784 jPanelReportAncestorAdded(evt); 785 } 786 public void ancestorRemoved(javax.swing.event.AncestorEvent evt) { 787 } 788 }); 789 jPanelReport.addMouseWheelListener(new java.awt.event.MouseWheelListener () { 790 public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) { 791 jPanelReportMouseWheelMoved(evt); 792 } 793 }); 794 795 jPanelReportContainer.add(jPanelReport, java.awt.BorderLayout.CENTER); 796 797 jPanelSuperContainer.add(jPanelReportContainer, java.awt.BorderLayout.CENTER); 798 799 jVerticalScrollBar.setMaximum(0); 800 jVerticalScrollBar.addKeyListener(new java.awt.event.KeyAdapter () { 801 public void keyPressed(java.awt.event.KeyEvent evt) { 802 jVerticalScrollBarKeyPressed(evt); 803 } 804 }); 805 jVerticalScrollBar.addMouseListener(new java.awt.event.MouseAdapter () { 806 public void mouseReleased(java.awt.event.MouseEvent evt) { 807 jVerticalScrollBarMouseReleased(evt); 808 } 809 }); 810 jVerticalScrollBar.addAdjustmentListener(new java.awt.event.AdjustmentListener () { 811 public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { 812 jVerticalScrollBarAdjustmentValueChanged(evt); 813 } 814 }); 815 jVerticalScrollBar.addMouseWheelListener(new java.awt.event.MouseWheelListener () { 816 public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) { 817 jVerticalScrollBarMouseWheelMoved(evt); 818 } 819 }); 820 821 jPanelSuperContainer.add(jVerticalScrollBar, java.awt.BorderLayout.EAST); 822 823 jPanelHScroll.setLayout(new java.awt.BorderLayout ()); 824 825 jHorizontalScrollBar.setMaximum(0); 826 jHorizontalScrollBar.setOrientation(javax.swing.JScrollBar.HORIZONTAL); 827 jHorizontalScrollBar.addAdjustmentListener(new java.awt.event.AdjustmentListener () { 828 public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { 829 jHorizontalScrollBarAdjustmentValueChanged(evt); 830 } 831 }); 832 833 jPanelHScroll.add(jHorizontalScrollBar, java.awt.BorderLayout.CENTER); 834 835 jPanel1.setMaximumSize(new java.awt.Dimension (17, 17)); 836 jPanel1.setMinimumSize(new java.awt.Dimension (17, 17)); 837 jPanel1.setPreferredSize(new java.awt.Dimension (17, 17)); 838 jPanelHScroll.add(jPanel1, java.awt.BorderLayout.EAST); 839 840 jPanelSuperContainer.add(jPanelHScroll, java.awt.BorderLayout.SOUTH); 841 842 jTabbedPane1.addTab("Main report", new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/mainreport.png")), jPanelSuperContainer); 843 844 getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER); 845 846 pack(); 847 } 849 private void jPanelReportMouseWheelMoved(java.awt.event.MouseWheelEvent evt) { jVerticalScrollBarMouseWheelMoved(evt); 851 } 853 private void jVerticalScrollBarMouseWheelMoved(java.awt.event.MouseWheelEvent evt) { 855 int notches = evt.getWheelRotation(); 856 857 jVerticalScrollBar.setValue( jVerticalScrollBar.getValue() + ( notches * 30 ) ); 858 859 } 861 private void jMenuItemBandPropertiesActionPerformed1(java.awt.event.ActionEvent evt) { jMenuItemBandPropertiesActionPerformed(evt); 863 } 865 private void jMenuItemElementOpenSubreportActionPerformed1(java.awt.event.ActionEvent evt) { 867 if (getSelectedElements().size() > 0) 868 { 869 ReportElement re = (ReportElement)getSelectedElements().elementAt(0); 870 871 873 if (re instanceof SubReportElement) 874 { 875 SubReportElement sre = (SubReportElement)re; 876 877 String subreportExp = sre.getSubreportExpression(); 878 String subreportExpClass = sre.getSubreportExpressionClass(); 879 880 if (subreportExpClass.equals("java.lang.String")) 881 { 882 try { 883 Interpreter interpreter = prepareExpressionEvaluator(); 884 885 subreportExp = ""+ReportQueryDialog.recursiveInterpreter( interpreter, subreportExp, getReport().getParameters()); 886 887 888 if (subreportExp != null) 889 { 890 String fileName = subreportExp+""; 891 892 894 if (fileName.toLowerCase().endsWith(".jasper")) 895 { 896 java.util.List possibleSourceFiles = new java.util.ArrayList (); 897 898 possibleSourceFiles.add(fileName.substring(0, fileName.length() - 7) + ".jrxml"); 899 possibleSourceFiles.add(fileName.substring(0, fileName.length() - 7) + ".xml"); 900 901 File f = new File (fileName); 903 String fname = f.getName(); 904 if (fname.length() > 7 && getReport().getFilename() != null && getReport().getFilename().length() > 0) 905 { 906 f = new File ( getReport().getFilename()); 907 possibleSourceFiles.add( f.getParent() + File.separator + fname.substring(0, fname.length() - 7) + ".jrxml"); 908 possibleSourceFiles.add( f.getParent() + File.separator + fname.substring(0, fname.length() - 7) + ".xml"); 909 } 910 911 f = getFirstValidFile(possibleSourceFiles); 912 913 if (f == null) 914 { 915 String message = "No one of the following possible source files for this subreport were found:\n\n"; 916 for (int i=0; i<possibleSourceFiles.size(); ++i) 917 { 918 message += possibleSourceFiles.get(i)+"\n"; 919 } 920 921 throw new Exception (message); 922 } 923 924 JReportFrame rf = MainFrame.getMainInstance().openFile(f); 925 rf.setSelected(true); 926 } 927 928 } 929 930 } catch (Exception ex) 931 { 932 JOptionPane.showMessageDialog(this, 933 I18n.getFormattedString( "messages.jReportFrame.errorOpeningSubreport","I have got a problem finding the subreport:\n{0}", new Object []{ ex.getMessage()}) ); 934 } 935 } 936 } 937 938 } 939 } 941 private File getFirstValidFile(java.util.List list) 942 { 943 for (int i=0; i<list.size(); ++i) 944 { 945 String fileName = list.get(i)+""; 946 File f = new File (fileName); 947 948 if (!f.exists()) 949 { 950 ReportClassLoader rcl = MainFrame.getMainInstance().getReportClassLoader(); 951 if (this.getReport().getFilename() != null) 952 { 953 File rfn = new File ( this.getReport().getFilename() ); 954 rcl.addNoRelodablePath( rfn.getParent() ); 955 } 956 try { 957 URL url = rcl.getResource(fileName); 958 959 if (url != null) 960 { 961 f = new File (url.getPath()); 962 if (!f.exists()) 963 { 964 continue; 965 } 966 } 967 else 968 { 969 continue; 970 } 971 } catch (Exception ex) 972 { 973 continue; 974 } 975 } 976 977 978 return f; 979 } 980 981 return null; 982 } 983 984 private Interpreter prepareExpressionEvaluator() throws bsh.EvalError { 985 Interpreter interpreter = new Interpreter(); 986 interpreter.setClassLoader(interpreter.getClass().getClassLoader()); 987 return interpreter; 988 989 } 991 992 private void jMenuItemElementCrosstabPropertiesActionPerformed1(java.awt.event.ActionEvent evt) { 994 995 if (getSelectedElements().size() > 0) 996 { 997 ReportElement re = (ReportElement)getSelectedElements().elementAt(0); 998 999 if (re instanceof CrosstabReportElement ) 1000 { 1001 try { 1002 jTabbedPane1.setSelectedComponent( getCrosstabEditor((CrosstabReportElement)re) ); 1003 } catch (Exception ex){} 1004 } 1005 } 1006 1007 } 1009 private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) { 1011 1012 1013 if (jTabbedPane1 == null || !jTabbedPane1.isVisible() || jTabbedPane1.getSelectedIndex() == 0) 1015 { 1016 MainFrame.getMainInstance().setCrosstabActive(null); 1017 MainFrame.getMainInstance().setComboBoxZoomFactor( this.zoomFactor * 100 ); 1018 } 1019 else 1020 { 1021 MainFrame.getMainInstance().setCrosstabActive(getSelectedCrosstabEditorPanel().getCrosstabElement()); 1022 MainFrame.getMainInstance().setComboBoxZoomFactor( this.getSelectedCrosstabEditorPanel().getZoomFactor() * 100 ); 1023 } 1024 1025 MainFrame.getMainInstance().getElementPropertiesDialog().updateSelection(); 1026 try { 1027 MainFrame.getMainInstance().updateCutAndPasteMenu(this); 1028 } catch (Exception ex) 1029 { 1030 ex.printStackTrace(); 1031 } 1032 1033 1034 } 1036 private void jMenuItemElementCrosstabPropertiesActionPerformed(java.awt.event.ActionEvent evt) { if (getSelectedElements().size() > 0) 1038 { 1039 ReportElement re = (ReportElement)getSelectedElements().elementAt(0); 1040 1041 if (re instanceof CrosstabReportElement ) 1042 { 1043 it.businesslogic.ireport.crosstab.gui.CrosstabPropertiesDialog cpd = new it.businesslogic.ireport.crosstab.gui.CrosstabPropertiesDialog(getMainFrame(),true); 1044 cpd.setCurrentCrosstabReportElement( (CrosstabReportElement)re); 1045 cpd.setVisible(true); 1046 } 1047 } 1048 } 1050 private void jMenuItemUngroupActionPerformed(java.awt.event.ActionEvent evt) { ungroupSelectedElements(); 1052 } 1054 private void jMenuItemGroupActionPerformed(java.awt.event.ActionEvent evt) { groupSelectedElements(); 1056 } 1058 public boolean groupSelectedElements() 1059 { 1060 if (getSelectedElements().size() == 0) return false; 1061 boolean sameBand = true; 1062 Band theBand = null; 1063 Enumeration selectedElementEnum = getSelectedElements().elements(); 1064 1065 while (selectedElementEnum.hasMoreElements()) 1066 { 1067 ReportElement re = (ReportElement)selectedElementEnum.nextElement(); 1068 if (theBand == null) theBand = re.getBand(); 1069 else if (sameBand && theBand != re.getBand()) sameBand = false; 1070 1071 if (!sameBand) return false; 1072 } 1073 1074 selectedElementEnum = getSelectedElements().elements(); 1075 String newGroup = getReport().createChildGroup(""); 1076 1077 while (selectedElementEnum.hasMoreElements()) 1078 { 1079 ReportElement re = (ReportElement)selectedElementEnum.nextElement(); 1080 String oldGroup = re.getElementGroup(); 1081 if (oldGroup.length() > 0) oldGroup = "." + oldGroup; 1082 re.setElementGroup(newGroup + oldGroup); 1083 } 1084 1085 1086 GroupEmentsOperation undoOp = new GroupEmentsOperation(this); 1087 undoOp.setAddedGroup(newGroup); 1088 1089 PositionedElement[] newPositionedElements = new PositionedElement[this.getSelectedElements().size()]; 1090 1091 for (int i=0; i<this.getSelectedElements().size(); ++i) 1092 { 1093 ReportElement element = (ReportElement)getSelectedElements().elementAt(i); 1094 int oldPosition = getReport().getElements().indexOf(element); 1095 newPositionedElements[i] = new PositionedElement(element,oldPosition,oldPosition); 1096 } 1097 1098 for (int i=0; i<this.getSelectedElements().size(); ++i) 1100 { 1101 ReportElement element = (ReportElement)getSelectedElements().elementAt(i); 1102 int newPosition = getReport().getElements().indexOf(element); 1103 undoOp.addElement(newPositionedElements[i].getElement(),newPositionedElements[i].getOldPosition() , newPosition); 1104 } 1105 1106 addUndoOperation(undoOp); 1107 getReportPanel().repaint(); 1108 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, new Vector() , ReportElementChangedEvent.REMOVED )); 1109 return true; 1110 1111 } 1112 1113 1114 public boolean ungroupSelectedElements() 1115 { 1116 if (getSelectedElements().size() == 0) return false; 1117 boolean sameBand = true; 1118 Band theBand = null; 1119 Enumeration selectedElementEnum = getSelectedElements().elements(); 1120 1121 while (selectedElementEnum.hasMoreElements()) 1122 { 1123 ReportElement re = (ReportElement)selectedElementEnum.nextElement(); 1124 if (theBand == null) theBand = re.getBand(); 1125 else if (sameBand && theBand != re.getBand()) sameBand = false; 1126 1127 if (!sameBand) return false; 1128 } 1129 1130 selectedElementEnum = getSelectedElements().elements(); 1131 1132 UnGroupEmentsOperation undoOp = new UnGroupEmentsOperation(this); 1133 1134 GroupPositionedElement[] newPositionedElements = new GroupPositionedElement[this.getSelectedElements().size()]; 1135 1136 for (int i=0; i<this.getSelectedElements().size(); ++i) 1137 { 1138 ReportElement element = (ReportElement)getSelectedElements().elementAt(i); 1139 String oldGroup = element.getElementGroup(); 1140 String newGroup = oldGroup; 1141 if (newGroup.lastIndexOf(".")>=0) 1142 { 1143 newGroup = newGroup.substring(0,newGroup.lastIndexOf(".")); 1144 } 1145 else 1146 { 1147 newGroup = ""; 1148 } 1149 element.setElementGroup(newGroup); 1150 int oldPosition = getReport().getElements().indexOf(element); 1151 newPositionedElements[i] = new GroupPositionedElement(element,oldPosition,oldPosition, oldGroup,newGroup); 1152 } 1153 1154 for (int i=0; i<this.getSelectedElements().size(); ++i) 1156 { 1157 ReportElement element = (ReportElement)getSelectedElements().elementAt(i); 1158 int newPosition = getReport().getElements().indexOf(element); 1159 undoOp.addElement(newPositionedElements[i].getElement(),newPositionedElements[i].getOldPosition() , newPosition, newPositionedElements[i].getOldElementGroup(), newPositionedElements[i].getNewElementGroup()); 1160 } 1161 1162 addUndoOperation(undoOp); 1163 getReportPanel().repaint(); 1164 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, new Vector() , ReportElementChangedEvent.REMOVED )); 1165 return true; 1166 1167 } 1168 1169 private void jMenuItemElementChartPropertiesActionPerformed(java.awt.event.ActionEvent evt) { 1171 if (getSelectedElements().size() > 0) 1172 { 1173 ReportElement re = (ReportElement)getSelectedElements().elementAt(0); 1174 1175 if (re instanceof ChartReportElement2 ) 1176 { 1177 it.businesslogic.ireport.chart.gui.ChartPropertiesDialog cpd = new it.businesslogic.ireport.chart.gui.ChartPropertiesDialog(getMainFrame(),true); 1178 cpd.setChartElement( (ChartReportElement2)re); 1179 cpd.setVisible(true); 1180 } 1181 } 1182 1183 1184 } 1186 private void jMenuItemPatternActionPerformed(java.awt.event.ActionEvent evt) { 1188 String pattern = ""; 1189 FieldPatternDialog pd = new FieldPatternDialog( MainFrame.getMainInstance() ,true); 1190 pd.setVisible(true); 1191 if (pd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION ) { 1192 1193 1194 Enumeration selectedElementEnum = getSelectedElements().elements(); 1195 1196 while (selectedElementEnum.hasMoreElements()) { 1197 ReportElement re = (ReportElement)selectedElementEnum.nextElement(); 1198 if (re instanceof TextFieldReportElement) { 1199 ((TextFieldReportElement)re).setPattern( pd.getPattern() ); 1200 } 1201 } 1202 } 1203 1204 1205 } 1207 private void jMenuItemPasteStyleActionPerformed(java.awt.event.ActionEvent evt) { 1209 pasteStyle(); 1210 1211 } 1213 private void jMenuItemCopyStyleActionPerformed(java.awt.event.ActionEvent evt) { 1215 copyStyle(); 1216 1217 } 1219 private void jMenuItemTransformStaticTextActionPerformed(java.awt.event.ActionEvent evt) { transformStaticInTextFields(); 1221 } 1223 private void jMenuItemDeleteActionPerformed(java.awt.event.ActionEvent evt) { this.deleteSelectedElements(); 1226 } 1228 public void delete() 1229 { 1230 if (getSelectedCrosstabEditorPanel() != null) 1231 { 1232 getSelectedCrosstabEditorPanel().deleteSelectedElements(); 1233 } 1234 else 1235 { 1236 this.deleteSelectedElements(); 1237 } 1238 } 1239 1240 private void jMenuItemPasteActionPerformed(java.awt.event.ActionEvent evt) { paste(); 1242 } 1244 private void jMenuItemCopyActionPerformed(java.awt.event.ActionEvent evt) { copy(); 1246 } 1248 private void jMenuItemCutActionPerformed(java.awt.event.ActionEvent evt) { cut(); 1250 } 1252 private void jMenuItemBandPropertiesActionPerformed(java.awt.event.ActionEvent evt) { 1254 if ( popup_opened_at != null ) { 1255 1256 int y = getLogicalDim( popup_opened_at.y - 10 + jVerticalScrollBar.getValue() ) + 10; 1258 Band myBand = getReport().getBandByPosition( y ); 1259 1260 if ( myBand != null ) { 1261 getMainFrame().jMenuItemBandsActionPerformed( evt ); 1262 getMainFrame().getBandsDialog().setSelectedBand( myBand.getName() ); 1263 } 1264 1265 } 1266 } 1268 private void addFormatItemsToMenu(javax.swing.JComponent m){ 1269 1270 jMenuAlign = new javax.swing.JMenu (); 1271 jMenuAlign.setText(it.businesslogic.ireport.util.I18n.getString("align", "Align...")); 1272 jMenuItemAlignLeft = new javax.swing.JMenuItem (); 1273 jMenuItemAlignLeft.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_left.png"))); 1274 jMenuItemAlignLeft.setText(it.businesslogic.ireport.util.I18n.getString("alignLeft", "Align left")); 1275 jMenuItemAlignLeft.addActionListener(new java.awt.event.ActionListener () { 1276 public void actionPerformed(java.awt.event.ActionEvent evt) { 1277 getMainFrame().jMenuItemAlignLeftActionPerformed(evt); 1278 } 1279 }); 1280 1281 jMenuAlign.add(jMenuItemAlignLeft); 1282 1283 jMenuItemAlignRight = new javax.swing.JMenuItem (); 1284 jMenuItemAlignRight.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_right.png"))); 1285 jMenuItemAlignRight.setText(it.businesslogic.ireport.util.I18n.getString("alignRight", "Align right")); 1286 jMenuItemAlignRight.addActionListener(new java.awt.event.ActionListener () { 1287 public void actionPerformed(java.awt.event.ActionEvent evt) { 1288 getMainFrame().jMenuItemAlignRightActionPerformed(evt); 1289 } 1290 }); 1291 1292 jMenuAlign.add(jMenuItemAlignRight); 1293 1294 jMenuItemAlignTop = new javax.swing.JMenuItem (); 1295 jMenuItemAlignTop.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_top.png"))); 1296 jMenuItemAlignTop.setText(it.businesslogic.ireport.util.I18n.getString("alignTop", "Align top")); 1297 jMenuItemAlignTop.addActionListener(new java.awt.event.ActionListener () { 1298 public void actionPerformed(java.awt.event.ActionEvent evt) { 1299 getMainFrame().jMenuItemAlignTopActionPerformed(evt); 1300 } 1301 }); 1302 1303 jMenuAlign.add(jMenuItemAlignTop); 1304 1305 jMenuItemAlignBottom = new javax.swing.JMenuItem (); 1306 jMenuItemAlignBottom.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_align_bottom.png"))); 1307 jMenuItemAlignBottom.setText(it.businesslogic.ireport.util.I18n.getString("alignBottom", "Align bottom")); 1308 jMenuItemAlignBottom.addActionListener(new java.awt.event.ActionListener () { 1309 public void actionPerformed(java.awt.event.ActionEvent evt) { 1310 getMainFrame().jMenuItemAlignBottomActionPerformed(evt); 1311 } 1312 }); 1313 1314 jMenuAlign.add(jMenuItemAlignBottom); 1315 1316 jSeparator19 = new javax.swing.JSeparator (); 1317 jMenuAlign.add(jSeparator19); 1318 1319 jMenuItemAlignVerticalAxis = new javax.swing.JMenuItem (); 1320 jMenuItemAlignVerticalAxis.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_center_axis.png"))); 1321 jMenuItemAlignVerticalAxis.setText(it.businesslogic.ireport.util.I18n.getString("alignVerticalAxis", "Align vertical axis")); 1322 jMenuItemAlignVerticalAxis.addActionListener(new java.awt.event.ActionListener () { 1323 public void actionPerformed(java.awt.event.ActionEvent evt) { 1324 getMainFrame().jMenuItemAlignVerticalAxisActionPerformed(evt); 1325 } 1326 }); 1327 1328 jMenuAlign.add(jMenuItemAlignVerticalAxis); 1329 1330 jMenuItemAlignHorizontalAxis = new javax.swing.JMenuItem (); 1331 jMenuItemAlignHorizontalAxis.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_vcenter_axis.png"))); 1332 jMenuItemAlignHorizontalAxis.setText(it.businesslogic.ireport.util.I18n.getString("alignHorizontalAxis", "Align horizontal axis")); 1333 jMenuItemAlignHorizontalAxis.addActionListener(new java.awt.event.ActionListener () { 1334 public void actionPerformed(java.awt.event.ActionEvent evt) { 1335 getMainFrame().jMenuItemAlignHorizontalAxisActionPerformed(evt); 1336 } 1337 }); 1338 1339 jMenuAlign.add(jMenuItemAlignHorizontalAxis); 1340 1341 jSeparator20 = new javax.swing.JSeparator (); 1342 jMenuAlign.add(jSeparator20); 1343 1344 jMenuItemAlignToBandTop = new javax.swing.JMenuItem (); 1345 jMenuItemAlignToBandTop.setText(it.businesslogic.ireport.util.I18n.getString("alignToBandTop", "Align to band top")); 1346 jMenuItemAlignToBandTop.addActionListener(new java.awt.event.ActionListener () { 1347 public void actionPerformed(java.awt.event.ActionEvent evt) { 1348 getMainFrame().jMenuItemAlignToBandTopActionPerformed(evt); 1349 } 1350 }); 1351 1352 jMenuAlign.add(jMenuItemAlignToBandTop); 1353 1354 jMenuItemAlignToBandBottom = new javax.swing.JMenuItem (); 1355 jMenuItemAlignToBandBottom.setText(it.businesslogic.ireport.util.I18n.getString("alignToBandBottom", "Align to band bottom")); 1356 jMenuItemAlignToBandBottom.addActionListener(new java.awt.event.ActionListener () { 1357 public void actionPerformed(java.awt.event.ActionEvent evt) { 1358 getMainFrame().jMenuItemAlignToBandBottomActionPerformed(evt); 1359 } 1360 }); 1361 1362 jMenuAlign.add(jMenuItemAlignToBandBottom); 1363 1364 m.add(jMenuAlign); 1365 1366 jMenuSize = new javax.swing.JMenu (); 1367 jMenuSize.setText(it.businesslogic.ireport.util.I18n.getString("size", "Size...")); 1368 jMenuItemSameWidth = new javax.swing.JMenuItem (); 1369 jMenuItemSameWidth.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_hsize.png"))); 1370 jMenuItemSameWidth.setText(it.businesslogic.ireport.util.I18n.getString("sameWidth", "Same width")); 1371 jMenuItemSameWidth.addActionListener(new java.awt.event.ActionListener () { 1372 public void actionPerformed(java.awt.event.ActionEvent evt) { 1373 getMainFrame().jMenuItemSameWidthActionPerformed(evt); 1374 } 1375 }); 1376 1377 jMenuSize.add(jMenuItemSameWidth); 1378 1379 jMenuItemSameWidthMax = new javax.swing.JMenuItem (); 1380 jMenuItemSameWidthMax.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_hsize_plus.png"))); 1381 jMenuItemSameWidthMax.setText(it.businesslogic.ireport.util.I18n.getString("sameWidthMax", "Same width (max)")); 1382 jMenuItemSameWidthMax.addActionListener(new java.awt.event.ActionListener () { 1383 public void actionPerformed(java.awt.event.ActionEvent evt) { 1384 getMainFrame().jMenuItemSameWidthMaxActionPerformed(evt); 1385 } 1386 }); 1387 1388 jMenuSize.add(jMenuItemSameWidthMax); 1389 1390 jMenuItemSameWidthMin = new javax.swing.JMenuItem (); 1391 jMenuItemSameWidthMin.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_hsize_min.png"))); 1392 jMenuItemSameWidthMin.setText(it.businesslogic.ireport.util.I18n.getString("sameWidthMin", "Same width (min)")); 1393 jMenuItemSameWidthMin.addActionListener(new java.awt.event.ActionListener () { 1394 public void actionPerformed(java.awt.event.ActionEvent evt) { 1395 getMainFrame().jMenuItemSameWidthMinActionPerformed(evt); 1396 } 1397 }); 1398 1399 jMenuSize.add(jMenuItemSameWidthMin); 1400 1401 jSeparator17 = new javax.swing.JSeparator (); 1402 jMenuSize.add(jSeparator17); 1403 1404 jMenuItemSameHeight = new javax.swing.JMenuItem (); 1405 jMenuItemSameHeight.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_vsize.png"))); 1406 jMenuItemSameHeight.setText(it.businesslogic.ireport.util.I18n.getString("sameHeight", "Same height")); 1407 jMenuItemSameHeight.addActionListener(new java.awt.event.ActionListener () { 1408 public void actionPerformed(java.awt.event.ActionEvent evt) { 1409 getMainFrame().jMenuItemSameHeightActionPerformed(evt); 1410 } 1411 }); 1412 1413 jMenuSize.add(jMenuItemSameHeight); 1414 1415 jMenuItemSameHeightMin = new javax.swing.JMenuItem (); 1416 jMenuItemSameHeightMin.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_vsize_min.png"))); 1417 jMenuItemSameHeightMin.setText(it.businesslogic.ireport.util.I18n.getString("sameHeightMin", "Same height (min)")); 1418 jMenuItemSameHeightMin.addActionListener(new java.awt.event.ActionListener () { 1419 public void actionPerformed(java.awt.event.ActionEvent evt) { 1420 getMainFrame().jMenuItemSameHeightMinActionPerformed(evt); 1421 } 1422 }); 1423 1424 jMenuSize.add(jMenuItemSameHeightMin); 1425 1426 jMenuItemSameHeightMax = new javax.swing.JMenuItem (); 1427 jMenuItemSameHeightMax.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_vsize_plus.png"))); 1428 jMenuItemSameHeightMax.setText(it.businesslogic.ireport.util.I18n.getString("sameHeightMax", "Same height (max)")); 1429 jMenuItemSameHeightMax.addActionListener(new java.awt.event.ActionListener () { 1430 public void actionPerformed(java.awt.event.ActionEvent evt) { 1431 getMainFrame().jMenuItemSameHeightMaxActionPerformed(evt); 1432 } 1433 }); 1434 1435 jMenuSize.add(jMenuItemSameHeightMax); 1436 1437 jSeparator18 = new javax.swing.JSeparator (); 1438 jMenuSize.add(jSeparator18); 1439 1440 jMenuItemSameSize = new javax.swing.JMenuItem (); 1441 jMenuItemSameSize.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_same_size.png"))); 1442 jMenuItemSameSize.setText(it.businesslogic.ireport.util.I18n.getString("sameSize", "Same size")); 1443 jMenuItemSameSize.addActionListener(new java.awt.event.ActionListener () { 1444 public void actionPerformed(java.awt.event.ActionEvent evt) { 1445 getMainFrame().jMenuItemSameSizeActionPerformed(evt); 1446 } 1447 }); 1448 1449 jMenuSize.add(jMenuItemSameSize); 1450 1451 m.add(jMenuSize); 1452 1453 jMenuPosition = new javax.swing.JMenu (); 1454 jMenuPosition.setText(it.businesslogic.ireport.util.I18n.getString("position", "Position...")); 1455 jMenuItemCenterH = new javax.swing.JMenuItem (); 1456 jMenuItemCenterH.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_hcenter.png"))); 1457 jMenuItemCenterH.setText(it.businesslogic.ireport.util.I18n.getString("centerHorizontallyBandBased", "Center horizontally (band based)")); 1458 jMenuItemCenterH.addActionListener(new java.awt.event.ActionListener () { 1459 public void actionPerformed(java.awt.event.ActionEvent evt) { 1460 getMainFrame().jMenuItemCenterHActionPerformed(evt); 1461 } 1462 }); 1463 1464 jMenuPosition.add(jMenuItemCenterH); 1465 1466 jMenuItemCenterV = new javax.swing.JMenuItem (); 1467 jMenuItemCenterV.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_vcenter.png"))); 1468 jMenuItemCenterV.setText(it.businesslogic.ireport.util.I18n.getString("centerVerticallyBandBased", "Center vertically (band based)")); 1469 jMenuItemCenterV.addActionListener(new java.awt.event.ActionListener () { 1470 public void actionPerformed(java.awt.event.ActionEvent evt) { 1471 getMainFrame().jMenuItemCenterVActionPerformed(evt); 1472 } 1473 }); 1474 1475 jMenuPosition.add(jMenuItemCenterV); 1476 1477 jMenuItemCenterInBand = new javax.swing.JMenuItem (); 1478 jMenuItemCenterInBand.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_ccenter.png"))); 1479 jMenuItemCenterInBand.setText(it.businesslogic.ireport.util.I18n.getString("centerInBand", "Center in band")); 1480 jMenuItemCenterInBand.addActionListener(new java.awt.event.ActionListener () { 1481 public void actionPerformed(java.awt.event.ActionEvent evt) { 1482 getMainFrame().jMenuItemCenterInBandActionPerformed(evt); 1483 } 1484 }); 1485 1486 jMenuPosition.add(jMenuItemCenterInBand); 1487 1488 jMenuItemCenterBackground = new javax.swing.JMenuItem (); 1489 jMenuItemCenterBackground.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/elem_bcenter.png"))); 1490 jMenuItemCenterBackground.setText(it.businesslogic.ireport.util.I18n.getString("centerInBackground", "Center in background")); 1491 jMenuItemCenterBackground.addActionListener(new java.awt.event.ActionListener () { 1492 public void actionPerformed(java.awt.event.ActionEvent evt) { 1493 getMainFrame().jMenuItemCenterBackgroundActionPerformed(evt); 1494 } 1495 }); 1496 1497 jMenuPosition.add(jMenuItemCenterBackground); 1498 1499 jMenuItemJoinLeft = new javax.swing.JMenuItem (); 1500 jMenuItemJoinLeft.setText(it.businesslogic.ireport.util.I18n.getString("joinSidesLeft", "Join sides left")); 1501 jMenuItemJoinLeft.addActionListener(new java.awt.event.ActionListener () { 1502 public void actionPerformed(java.awt.event.ActionEvent evt) { 1503 getMainFrame().jMenuItemJoinLeftActionPerformed(evt); 1504 } 1505 }); 1506 1507 jMenuPosition.add(jMenuItemJoinLeft); 1508 1509 jMenuItemJoinRight = new javax.swing.JMenuItem (); 1510 jMenuItemJoinRight.setText(it.businesslogic.ireport.util.I18n.getString("joinSidesRight", "Join sides right")); 1511 jMenuItemJoinRight.addActionListener(new java.awt.event.ActionListener () { 1512 public void actionPerformed(java.awt.event.ActionEvent evt) { 1513 getMainFrame().jMenuItemJoinRightActionPerformed(evt); 1514 } 1515 }); 1516 1517 jMenuPosition.add(jMenuItemJoinRight); 1518 1519 jMenuItemLeftMargin = new javax.swing.JMenuItem (); 1520 jMenuItemLeftMargin.setText("Join left page margin"); 1521 jMenuItemLeftMargin.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_HOME, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); 1522 jMenuItemLeftMargin.addActionListener(new java.awt.event.ActionListener () { 1523 public void actionPerformed(java.awt.event.ActionEvent evt) { 1524 getMainFrame().jMenuItemLeftMarginActionPerformed(evt); 1525 } 1526 }); 1527 1528 jMenuPosition.add(jMenuItemLeftMargin); 1529 1530 jMenuItemRightMargin = new javax.swing.JMenuItem (); 1531 jMenuItemRightMargin.setText("Join right page margin"); 1532 jMenuItemRightMargin.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_END, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); 1533 jMenuItemRightMargin.addActionListener(new java.awt.event.ActionListener () { 1534 public void actionPerformed(java.awt.event.ActionEvent evt) { 1535 getMainFrame().jMenuItemRightMarginActionPerformed(evt); 1536 } 1537 }); 1538 1539 jMenuPosition.add(jMenuItemRightMargin); 1540 1541 m.add(jMenuPosition); 1542 1543 jSeparator5 = new javax.swing.JSeparator (); 1544 m.add(jSeparator5); 1545 1546 jMenuHSpacing = new javax.swing.JMenu (); 1547 jMenuHSpacing.setText(it.businesslogic.ireport.util.I18n.getString("horizontalSpacing", "Horizontal spacing...")); 1548 1549 jMenuItemHSMakeEqual = new javax.swing.JMenuItem (); 1550 jMenuItemHSMakeEqual.setText(it.businesslogic.ireport.util.I18n.getString("makeEqual", "Make equal")); 1551 jMenuItemHSMakeEqual.addActionListener(new java.awt.event.ActionListener () { 1552 public void actionPerformed(java.awt.event.ActionEvent evt) { 1553 getMainFrame().jMenuItemHSMakeEqualActionPerformed(evt); 1554 } 1555 }); 1556 1557 jMenuHSpacing.add(jMenuItemHSMakeEqual); 1558 1559 jMenuItemHSIncrease = new javax.swing.JMenuItem (); 1560 jMenuItemHSIncrease.setText(it.businesslogic.ireport.util.I18n.getString("increase", "Increase")); 1561 jMenuItemHSIncrease.addActionListener(new java.awt.event.ActionListener () { 1562 public void actionPerformed(java.awt.event.ActionEvent evt) { 1563 getMainFrame().jMenuItemHSIncreaseActionPerformed(evt); 1564 } 1565 }); 1566 1567 jMenuHSpacing.add(jMenuItemHSIncrease); 1568 1569 jMenuItemHSDecrease = new javax.swing.JMenuItem (); 1570 jMenuItemHSDecrease.setText(it.businesslogic.ireport.util.I18n.getString("decrease", "Decrease")); 1571 jMenuItemHSDecrease.addActionListener(new java.awt.event.ActionListener () { 1572 public void actionPerformed(java.awt.event.ActionEvent evt) { 1573 getMainFrame().jMenuItemHSDecreaseActionPerformed(evt); 1574 } 1575 }); 1576 1577 jMenuHSpacing.add(jMenuItemHSDecrease); 1578 1579 jMenuItemHSRemove = new javax.swing.JMenuItem (); 1580 jMenuItemHSRemove.setText(it.businesslogic.ireport.util.I18n.getString("remove", "Remove")); 1581 jMenuItemHSRemove.addActionListener(new java.awt.event.ActionListener () { 1582 public void actionPerformed(java.awt.event.ActionEvent evt) { 1583 getMainFrame().jMenuItemHSRemoveActionPerformed(evt); 1584 } 1585 }); 1586 1587 jMenuHSpacing.add(jMenuItemHSRemove); 1588 1589 m.add(jMenuHSpacing); 1590 1591 jMenuVSpacing = new javax.swing.JMenu (); 1592 jMenuVSpacing.setText(it.businesslogic.ireport.util.I18n.getString("verticalSpacing", "Vertical spacing")); 1593 jMenuItemVSMakeEqual = new javax.swing.JMenuItem (); 1594 jMenuItemVSMakeEqual.setText(it.businesslogic.ireport.util.I18n.getString("makeEqual", "Make equal")); 1595 jMenuItemVSMakeEqual.addActionListener(new java.awt.event.ActionListener () { 1596 public void actionPerformed(java.awt.event.ActionEvent evt) { 1597 getMainFrame().jMenuItemVSMakeEqualActionPerformed(evt); 1598 } 1599 }); 1600 1601 jMenuVSpacing.add(jMenuItemVSMakeEqual); 1602 1603 jMenuItemVSIncrease = new javax.swing.JMenuItem (); 1604 jMenuItemVSIncrease.setText(it.businesslogic.ireport.util.I18n.getString("increase", "Increase")); 1605 jMenuItemVSIncrease.addActionListener(new java.awt.event.ActionListener () { 1606 public void actionPerformed(java.awt.event.ActionEvent evt) { 1607 getMainFrame().jMenuItemVSIncreaseActionPerformed(evt); 1608 } 1609 }); 1610 1611 jMenuVSpacing.add(jMenuItemVSIncrease); 1612 1613 jMenuItemVSDecrease = new javax.swing.JMenuItem (); 1614 jMenuItemVSDecrease.setText(it.businesslogic.ireport.util.I18n.getString("decrease", "Decrease")); 1615 jMenuItemVSDecrease.addActionListener(new java.awt.event.ActionListener () { 1616 public void actionPerformed(java.awt.event.ActionEvent evt) { 1617 getMainFrame().jMenuItemVSDecreaseActionPerformed(evt); 1618 } 1619 }); 1620 1621 jMenuVSpacing.add(jMenuItemVSDecrease); 1622 1623 jMenuItemVSRemove = new javax.swing.JMenuItem (); 1624 jMenuItemVSRemove.setText(it.businesslogic.ireport.util.I18n.getString("remove", "Remove")); 1625 jMenuItemVSRemove.addActionListener(new java.awt.event.ActionListener () { 1626 public void actionPerformed(java.awt.event.ActionEvent evt) { 1627 getMainFrame().jMenuItemVSRemoveActionPerformed(evt); 1628 } 1629 }); 1630 1631 jMenuVSpacing.add(jMenuItemVSRemove); 1632 1633 m.add(jMenuVSpacing); 1634 1635 jSeparator8 = new javax.swing.JSeparator (); 1636 m.add(jSeparator8); 1637 1638 jMenuItemOrganize = new javax.swing.JMenuItem (); 1639 jMenuItemOrganize.setText(it.businesslogic.ireport.util.I18n.getString("organizeAsTable","Organize as table")); 1641 jMenuItemOrganize.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); 1642 jMenuItemOrganize.setIcon(new javax.swing.ImageIcon ("")); 1643 jMenuItemOrganize.addActionListener(new java.awt.event.ActionListener () { 1644 public void actionPerformed(java.awt.event.ActionEvent evt) { 1645 getMainFrame().jMenuItemOrganizeActionPerformed(evt); 1646 } 1647 }); 1648 1649 m.add(jMenuItemOrganize); 1650 1651 jMenuItemBringToFront = new javax.swing.JMenuItem (); 1652 jMenuItemBringToFront.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/sendtofront.png"))); 1653 jMenuItemBringToFront.setText(it.businesslogic.ireport.util.I18n.getString("bringToFront", "Bring to front")); 1654 jMenuItemBringToFront.addActionListener(new java.awt.event.ActionListener () { 1655 public void actionPerformed(java.awt.event.ActionEvent evt) { 1656 getMainFrame().jMenuItemBringToFrontActionPerformed(evt); 1657 } 1658 }); 1659 1660 m.add(jMenuItemBringToFront); 1661 1662 jMenuItemSendToBack = new javax.swing.JMenuItem (); 1663 jMenuItemSendToBack.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/sendtoback.png"))); 1664 jMenuItemSendToBack.setText(it.businesslogic.ireport.util.I18n.getString("sendToBack", "Send to back")); 1665 jMenuItemSendToBack.addActionListener(new java.awt.event.ActionListener () { 1666 public void actionPerformed(java.awt.event.ActionEvent evt) { 1667 getMainFrame().jMenuItemSendToBackActionPerformed(evt); 1668 } 1669 }); 1670 1671 m.add(jMenuItemSendToBack); 1672 1673 } 1674 private void jMenuItemElementPropertiesActionPerformed(java.awt.event.ActionEvent evt) { openElementPropertiesDialog(); 1676 } 1678 private void jMenuItemPasteOnBandActionPerformed(java.awt.event.ActionEvent evt) { 1680 if (this.popup_opened_at != null) { 1681 pasteHere( popup_opened_at ); 1682 } 1683 } 1685 private void jMenuItemPasteOnBandMouseClicked(java.awt.event.MouseEvent evt) { 1687 } 1689 private void jMenuItemElementPropertiesMouseClicked(java.awt.event.MouseEvent evt) { 1691 } 1693 private void jVerticalScrollBarKeyPressed(java.awt.event.KeyEvent evt) { 1695 } 1697 private void formKeyPressed(java.awt.event.KeyEvent evt) { 1699 1700 } 1702 private void jPanelReportKeyPressed(java.awt.event.KeyEvent evt) { 1704 1710 1725 1726 int x=1, y=1; 1728 1729 if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0) { 1731 x = 10; 1732 y = 10; 1733 } 1734 1735 1736 if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) { 1739 this.deleteSelectedElements(); 1740 return; 1741 } 1742 1743 1744 else if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && 1745 (( evt.getModifiers() & evt.CTRL_MASK) != 0) ) { 1746 1747 1748 1749 1750 1753 switch ( evt.getKeyCode()) { 1754 case java.awt.event.KeyEvent.VK_S: 1755 1756 FormatCommand.getCommand(OperationType.SHRINK).execute(); 1757 break; 1758 1759 } 1805 1806 } 1807 1808 1809 else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP) { 1810 y *= -1; 1811 x = 0; 1812 1813 Vector changed_elements = new Vector(); 1816 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1817 ReportElement element = (ReportElement) i.next(); 1818 element.trasform(new Point(x,y), TransformationType.TRANSFORMATION_MOVE); 1819 element.adjustBand(); 1820 changed_elements.add(element); 1821 } 1822 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, changed_elements , ReportElementChangedEvent.CHANGED)); 1823 1824 this.getMainFrame().getElementPropertiesDialog().updateSelection(); 1825 jPanelReport.repaint(); 1826 } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT) { 1827 x *= -1; 1828 y = 0; 1829 1830 Vector changed_elements = new Vector(); 1832 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1833 ReportElement element = (ReportElement) i.next(); 1834 element.trasform(new Point(x,y), TransformationType.TRANSFORMATION_MOVE); 1835 element.adjustBand(); 1836 changed_elements.add(element); 1837 } 1838 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, changed_elements , ReportElementChangedEvent.CHANGED)); 1839 this.getMainFrame().getElementPropertiesDialog().updateSelection(); 1840 jPanelReport.repaint(); 1841 } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT) { 1842 y=0; 1843 Vector changed_elements = new Vector(); 1846 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1847 ReportElement element = (ReportElement) i.next(); 1848 element.trasform(new Point(x,y), TransformationType.TRANSFORMATION_MOVE); 1849 element.adjustBand(); 1850 changed_elements.add(element); 1851 } 1852 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, changed_elements , ReportElementChangedEvent.CHANGED)); 1853 this.getMainFrame().getElementPropertiesDialog().updateSelection(); 1854 1855 jPanelReport.repaint(); 1856 } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN) { 1857 x = 0; 1858 Vector changed_elements = new Vector(); 1861 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1862 ReportElement element = (ReportElement) i.next(); 1863 element.trasform(new Point(x,y), TransformationType.TRANSFORMATION_MOVE); 1864 element.adjustBand(); 1865 changed_elements.add(element); 1866 } 1867 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, changed_elements , ReportElementChangedEvent.CHANGED)); 1868 this.getMainFrame().getElementPropertiesDialog().updateSelection(); 1869 jPanelReport.repaint(); 1870 } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_F2) { 1871 1873 DeleteElementsOperation undoOp = new DeleteElementsOperation(this); 1874 for (Iterator i = selectedElements.iterator(); i.hasNext(); ) { 1875 ReportElement re = (ReportElement) i.next(); 1876 if(re instanceof TextReportElement){ 1877 String te = ((TextReportElement)re).getText(); 1878 String result = javax.swing.JOptionPane.showInputDialog(this, 1879 I18n.getString("messages.jReportFrame.insertValue", "Please enter new Value"), 1880 te); 1881 if(result != null && !result.equals("")){ 1882 ((TextReportElement)re).setText(result); 1883 undoOp.addElement( re, getReport().getElements().indexOf(re)); 1884 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, re , ReportElementChangedEvent.CHANGED)); 1885 } 1886 } 1887 } 1888 this.addUndoOperation(undoOp); 1889 this.getMainFrame().getElementPropertiesDialog().updateSelection(); 1890 jPanelReport.repaint(); 1891 } else if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_F3) { 1892 1893 transformStaticInTextFields(); 1894 this.getMainFrame().getElementPropertiesDialog().updateSelection(); 1895 } 1896 1897 1898 else if ( (( evt.getModifiers() & evt.CTRL_MASK) != 0 ) && evt.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) { 1899 copy(); 1900 } else if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && evt.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) { 1901 paste(); 1902 } 1903 1904 1905 1906 } 1908 private void jPanelReportMouseReleased(java.awt.event.MouseEvent evt) { 1910 if (drag_selection_mode && evt.getButton() == evt.BUTTON1) { 1911 1912 Graphics2D gg = (Graphics2D)jPanelReport.getGraphics(); 1913 gg.setXORMode(Color.GREEN); 1914 1915 Stroke s = gg.getStroke(); 1916 gg.setStroke(selectionStroke); 1917 1918 if (!first_draw_selection_rect) { 1919 gg.drawRect((int)Math.min( drag_selection_origin.x, drag_selection_end.x), 1920 (int)Math.min( drag_selection_origin.y, drag_selection_end.y), 1921 (int)Math.abs( drag_selection_origin.x - drag_selection_end.x), 1922 (int)Math.abs( drag_selection_origin.y - drag_selection_end.y)); 1923 } 1924 1925 gg.setPaintMode(); 1926 if (s != null) { 1927 gg.setStroke(s); 1928 } 1929 drag_selection_mode = false; 1930 first_draw_selection_rect = true; 1931 1932 if (( evt.getModifiers() & evt.SHIFT_MASK ) == 0){ 1933 setSelectedElement(null); 1934 } 1935 1936 int delta_w = evt.getX()- drag_selection_origin.x; 1937 int delta_h = evt.getY()- drag_selection_origin.y; 1938 int delta_x = (delta_w < 0) ? delta_w: 0; 1939 int delta_y = (delta_h < 0) ? delta_h : 0; 1940 1941 if (jHorizontalScrollBar == null || 1942 jVerticalScrollBar == null || 1943 drag_selection_origin == null || 1944 drag_selection_end == null) { 1945 return; 1946 } 1947 1948 int originX = getLogicalDim( Math.min( drag_selection_origin.x-10+jHorizontalScrollBar.getValue(), 1949 drag_selection_end.x-10+jHorizontalScrollBar.getValue()))+10; 1950 int originY = getLogicalDim( Math.min( drag_selection_origin.y-10+jVerticalScrollBar.getValue(), 1951 drag_selection_end.y-10+jVerticalScrollBar.getValue()))+10; 1952 int width = getLogicalDim( Math.abs( delta_w ) ); 1953 int height = getLogicalDim( Math.abs( delta_h ) ); 1954 1955 java.awt.Rectangle rect = new java.awt.Rectangle ( originX, originY, width, height ); 1957 boolean selection_changed = false; 1958 for (Iterator i = getReport().getElements().iterator(); i.hasNext(); ) { 1959 ReportElement re = (ReportElement) i.next(); 1960 if ( re.intersects( rect ) ) { 1961 if (!selection_changed) selection_changed = true; 1962 addSelectedElement(re,false); 1963 } 1964 } 1965 if (selection_changed) { 1966 fireSelectionChangedEvent(); 1967 } 1968 1969 } else if (band_dragging && evt.getButton() == evt.BUTTON1 ) { 1970 1971 band_dragging = false; 1972 jPanelReport.setCursor( Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); 1973 1974 int delta = getLogicalDim( evt.getY()-band_dragging_origin ); 1977 1978 int okHeight = band_dragging_band.getHeight(); 1979 int requestedHeight = okHeight + delta; 1980 1981 if (delta != 0) { 1982 BandDraggedOperation undoOp = new BandDraggedOperation(this,band_dragging_band); 1983 1985 int band_h = report.getBandYLocation(band_dragging_band) +10; 1986 1987 int available_height = report.getHeight() - report.getTopMargin()- report.getBottomMargin(); 1988 1989 if (!band_dragging_band.getName().equals("background") && 1990 !( band_dragging_band.getName().equals("title") && getReport().isIsTitleNewPage()) && 1991 !( band_dragging_band.getName().equals("summary") && getReport().isIsSummaryNewPage())) 1992 { 1993 for (int i=0; i<report.getBands().size(); ++i) 1994 { 1995 Band aBand = (Band)report.getBands().elementAt(i); 1996 1997 if (!(aBand.getName().equals("background")) && 1998 !(aBand.getName().equals("title") && getReport().isIsTitleNewPage()) && 1999 !(aBand.getName().equals("summary") && getReport().isIsSummaryNewPage()) && 2000 !(aBand == band_dragging_band)) 2001 { 2002 available_height -= aBand.getHeight(); 2003 } 2004 } 2005 } 2006 2007 okHeight = Math.max(0, Math.min(available_height, requestedHeight)); 2008 2009 2011 delta = okHeight - band_dragging_band.getHeight(); 2012 2013 band_dragging_band.setHeight( band_dragging_band.getHeight() + delta ); 2015 2016 this.jPanelReportComponentResized( new java.awt.event.ComponentEvent ( jPanelReport, 0 )); 2017 2018 int edge_y = Math.min(report.getBandYLocation(band_dragging_band)+band_dragging_band.getHeight(), 2020 report.getBandYLocation(band_dragging_band)+band_dragging_band.getHeight()-delta); 2021 2022 2024 undoOp.setBandDelta(delta); 2025 2026 Vector containers = new Vector(); 2029 for (Iterator i = report.getElements().iterator(); i.hasNext(); ) { 2030 ReportElement re = (ReportElement) i.next(); 2031 if (re.getParentElement() != null && 2032 re.getParentElement().position.y < edge_y+10 ) continue; 2033 2034 if (re instanceof FrameReportElement) 2035 { 2036 containers.add(re); 2037 } 2038 2039 if (re.position.y >= edge_y+10 || 2040 (re.getParentElement() != null && 2041 re.getParentElement().position.y >= edge_y+10) ) { 2042 Rectangle oldBounds = new Rectangle( re.getPosition().x, re.getPosition().y, re.getWidth(), re.getHeight()); 2044 2045 int space_before_band = band_h - re.position.y - re.height; 2046 if (band_h <= report.getBandYLocation(re.band) +10){ 2047 space_before_band = 0; 2048 } 2049 re.setPosition(new Point(re.position.x,re.position.y+delta)); 2050 Rectangle newBounds = new Rectangle( re.getPosition().x, re.getPosition().y, re.getWidth(), re.getHeight()); 2052 undoOp.addElement(re, oldBounds, newBounds ); 2053 } 2054 } 2055 addUndoOperation(undoOp); 2056 } 2057 2068 this.getMainFrame().getDocumentStructurePanel().updateUI(); 2069 2070 jPanelReport.repaint(); 2071 2087 } 2088 2089 if (newObjectType != ReportElementType.NONE) { 2090 2092 firstXORDraw = true; 2093 2094 2096 int evtX = snapToGridOrizzontally(evt.getX()); 2097 int evtY = snapToGridVertically(evt.getY()); 2098 2099 int delta_w = evtX - newObjectOrigin.x; int delta_h = evtY - newObjectOrigin.y; int delta_x = (delta_w < 0) ? delta_w : 0; 2102 int delta_y = (delta_h < 0) ? delta_h : 0; 2103 2104 int originX = getLogicalDim( Math.min(newObjectOrigin.x-10+jHorizontalScrollBar.getValue(), 2105 newObjectOrigin.x+delta_x-10+jHorizontalScrollBar.getValue()))+10; 2106 int originY = getLogicalDim( Math.min(newObjectOrigin.y-10+jVerticalScrollBar.getValue(), 2107 newObjectOrigin.y+delta_y-10+jVerticalScrollBar.getValue()))+10; 2108 int width = getLogicalDim( Math.abs(delta_w) ); 2109 int height = getLogicalDim( Math.abs(delta_h) ); 2110 2111 2112 if (newObjectType == ReportElementType.LINE_ELEMENT) { 2113 2114 if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) { 2115 Point straight = straighten( delta_w, delta_h); 2116 delta_w = straight.x; 2117 delta_h = straight.y; 2118 } 2119 } 2120 2121 Band bname = getReport().getBandByPosition( originY ); 2122 2123 ReportElement re = ReportElementFactory.create( newObjectType, originX, originY, getLogicalDim(delta_w), getLogicalDim(delta_h)); 2124 2125 if (getReport().getStyles().size() > 0) 2126 { 2127 for (int i=0; i<getReport().getStyles().size(); ++i ) 2128 { 2129 Style s = (Style)getReport().getStyles().elementAt(i); 2130 2131 if (s.getAttributeBoolean(s.ATTRIBUTE_isDefault,false) == true) 2132 { 2133 re.setStyle( s ); 2134 } 2135 } 2136 } 2137 2138 re.setKey( getNextElementKey( re.getKey()) ) ; 2142 2143 2144 2145 re.setBand( bname ); 2146 2147 for (int elnum = getReport().getElements().size()-1; elnum >= 0; --elnum) 2148 { 2149 ReportElement container_re = (ReportElement)getReport().getElements().elementAt(elnum); 2150 if (container_re instanceof FrameReportElement && container_re.getBand() == re.getBand()) 2151 { 2152 if ( container_re.getBounds().contains( re.getBounds())) 2153 { 2154 re.setParentElement( container_re); 2155 break; 2156 } 2157 } 2158 } 2159 2160 2161 2162 2163 boolean ok = true; 2164 if ( newObjectType == ReportElementType.CROSSTAB_ELEMENT ) { 2165 2166 CrosstabWizardDialog cw = new CrosstabWizardDialog(getMainFrame(),true); 2167 cw.setCrosstabReportElement((CrosstabReportElement)re); 2168 cw.setReport( this.getReport()); 2169 cw.setVisible(true); 2170 ((CrosstabReportElement)re).setReport(this.getReport()); 2171 addCrosstabEditor( (CrosstabReportElement)re ); 2172 2173 } 2174 if ( newObjectType == ReportElementType.SUBREPORT_ELEMENT ) { 2175 2176 SubreportWizard sr = new SubreportWizard(); 2177 sr.setSubReportElement((SubReportElement)re); 2178 sr.startWizard(); 2179 2180 } 2181 if ( newObjectType == ReportElementType.CHART_ELEMENT ) { 2182 2183 ChartSelectionJDialog csd = new ChartSelectionJDialog(this.getMainFrame(),true); 2185 csd.setVisible(true); 2186 if (csd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION) { 2187 ChartReportElement2 cre = (ChartReportElement2)re ; 2188 cre.setChart( csd.getChart() ); 2189 } else { 2190 ok = false; 2191 } 2192 } 2193 if ( newObjectType == ReportElementType.BREAK_ELEMENT ) { 2194 2195 re.setWidth( this.getReport().getWidth() - getReport().getLeftMargin() - getReport().getRightMargin() ); 2197 re.getPosition().x = getReport().getLeftMargin()+10; 2198 re.setHeight(0); 2199 re.updateBounds(); 2200 if (re.getBand() == null) ok=false; 2201 } 2202 2203 if (ok) { 2204 2205 report.getElements().addElement(re); 2206 2207 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, re , ReportElementChangedEvent.ADDED)); 2208 2209 addUndoOperation( new InsertElementOperation( this, re ) ); 2210 2211 2212 2232 setSelectedElement(re); 2233 } 2234 newObjectOrigin = null; 2235 2240 2244 newObjectType = ReportElementType.NONE; 2245 2246 jPanelReport.setCursor( Cursor.getDefaultCursor()); 2247 getMainFrame().setActiveTool(0); 2248 2249 2250 } 2251 2252 if (trasforming) { 2253 trasforming = false; 2254 2255 jPanelReport.setCursor( Cursor.getDefaultCursor()); 2256 2257 if (transformation_type != TransformationType.TRANSFORMATION_MOVE || resistenceExceeded == true) { 2258 Point p = new Point(transformation_origin_end); 2259 p.x = getLogicalDim(p.x); 2260 p.y = getLogicalDim(p.y); 2261 p.x -= getLogicalDim(transformation_origin.x); 2262 p.y -= getLogicalDim(transformation_origin.y); 2263 2264 2268 2269 Vector selectedElementsToChange = new Vector(); 2270 2271 Enumeration e = getSelectedElements().elements(); 2272 while (e.hasMoreElements()) { 2273 ReportElement re = (ReportElement)e.nextElement(); 2274 if (!selectedElementsToChange.contains(re)) 2275 { 2276 selectedElementsToChange.add(re); 2277 if (transformation_type == TransformationType.TRANSFORMATION_MOVE) 2278 { 2279 if (re instanceof FrameReportElement) 2280 { 2281 addChildElements(re, selectedElementsToChange); 2283 } 2284 } 2285 } 2286 } 2287 e = selectedElementsToChange.elements(); 2288 TransformElementsOperation undoOp = new TransformElementsOperation(this); 2289 Vector changed_elements = new Vector(); 2290 2291 while (e.hasMoreElements()) { 2292 ReportElement re = (ReportElement)e.nextElement(); 2293 2294 2295 2296 undoOp.addElement( re ); 2297 2298 2300 if (re instanceof BreakReportElement) 2301 { 2302 Point specialP = new Point(0, p.y); 2303 if (transformation_type == TransformationType.TRANSFORMATION_MOVE || 2304 transformation_type == TransformationType.TRANSFORMATION_RESIZE_N) 2305 { 2306 re.trasform(specialP, TransformationType.TRANSFORMATION_MOVE); 2307 } 2308 else 2309 { 2310 continue; 2311 } 2312 } 2313 else 2314 { 2315 re.trasform(p, transformation_type); 2316 } 2317 2318 2319 if (re.getParentElement() == null) 2321 { 2322 re.adjustBand(); 2323 } 2324 2328 undoOp.captureUniqueModified(re); 2329 changed_elements.add( re ); 2330 2331 } 2332 addUndoOperation(undoOp); 2333 if (changed_elements.size() > 0) { 2334 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, changed_elements , ReportElementChangedEvent.CHANGED)); 2335 } 2336 2337 jPanelReport.repaint(); 2338 } 2339 2340 2354 transformation_undo_delta = new Point(0,0); 2355 transformation_type = TransformationType.TRANSFORMATION_NONE; 2356 2368 getMainFrame().getElementPropertiesDialog().updateSelection(); 2369 } 2370 2371 } 2373 2374 2388 private void jPanelReportMousePressed(java.awt.event.MouseEvent evt) { 2390 jPanelReport.requestFocus(); 2391 if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() < 2) 2392 { 2393 2394 if (newObjectType != ReportElementType.NONE) 2395 { 2396 firstXORDraw = false; 2397 newObjectOrigin = new Point(snapToGridOrizzontally(evt.getX()),snapToGridVertically(evt.getY())); 2398 mouse.x = newObjectOrigin.x; 2399 mouse.y = newObjectOrigin.y; 2400 return; 2401 } 2402 2403 if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && 2406 (( evt.getModifiers() & evt.CTRL_MASK) != 0) ) 2407 { 2408 Point clickPoint = this.realPoint( evt.getX(), evt.getY() ); 2411 setZoomFactor( getZoomFactor() * 2 ); 2412 getMainFrame().setComboBoxZoomFactor( getZoomFactor() * 100 ); 2413 centerSelectedElements( clickPoint ); return; 2415 } 2416 2418 2419 if (selectedElements.size() > 0 && (( evt.getModifiers() & evt.SHIFT_MASK ) == 0)) 2420 { 2421 if (transformation_type >=0) 2423 { 2424 trasforming = true; 2425 firstXORDrawTransforming = true; 2426 transformation_origin = new Point(evt.getX(),evt.getY()); 2427 transformation_undo_delta = new Point(0,0); 2428 transformation_origin_end = new Point(evt.getX(),evt.getY()); 2429 return; 2430 } 2431 } 2432 2433 if (jPanelReport.getCursor() == hsplit) 2434 { 2435 2436 first_draw_band=true; 2437 int bl = evt.getY() + jVerticalScrollBar.getValue(); 2438 int y=report.getTopMargin(); 2439 boolean found=false; 2440 Band band=null; 2441 2442 if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0) 2443 { 2444 y = report.getDesignHeight()-report.getBottomMargin(); 2446 for (int b =report.getBands().size()-1; b>=0; --b) 2447 { 2448 band = (Band)report.getBands().elementAt(b); 2449 if (bl>getZoomedDim(y)+10-3 && bl < getZoomedDim(y)+10+3) 2450 { 2451 break; 2452 } 2453 y -= band.getHeight(); 2454 } 2455 } 2456 else 2457 { 2458 for (Iterator i = getReport().getBands().iterator(); i.hasNext(); ) 2459 { 2460 band = (Band) i.next(); 2461 y += band.getHeight(); 2462 if (bl>getZoomedDim(y)+10-3 && bl < getZoomedDim(y)+10+3) 2463 { 2464 break; 2465 } 2466 } 2467 } 2468 if (band != null) 2469 { 2470 band_dragging = true; 2471 band_dragging_origin = evt.getY(); 2472 band_dragging_band = band; 2473 2474 return; 2476 } 2477 } 2478 for (int i=report.getElements().size()-1; i>=0; --i) 2479 { 2480 2481 ReportElement re = (ReportElement)report.getElements().elementAt(i); 2482 if (re.intersects(new Point(getLogicalDim(evt.getX()+jHorizontalScrollBar.getValue()-10)+10, 2483 getLogicalDim(evt.getY()+jVerticalScrollBar.getValue()-10)+10)) || 2484 (re instanceof BreakReportElement && re.intersects(new Rectangle( 2485 0, getLogicalDim(evt.getY()+jVerticalScrollBar.getValue()-10)+10, 2486 getReport().getWidth(), 1) 2487 )) 2488 ) 2489 { 2490 if (selectedElements.size()>0 && re == ((ReportElement)selectedElements.firstElement())) return; 2491 2493 if (selectedElements.size() > 0 && (( evt.getModifiers() & evt.SHIFT_MASK ) == 0)) 2494 { 2495 setSelectedElement(null); 2496 } 2497 2498 if ((( evt.getModifiers() & evt.SHIFT_MASK ) == 0) || selectedElements.size()==0) 2499 { 2500 setSelectedElement(re); 2502 jPanelReport.repaint(); 2503 } 2504 else if (( evt.getModifiers() & evt.SHIFT_MASK ) != 0) 2505 { 2506 if (getSelectedElements().contains(re)) 2507 { 2508 getSelectedElements().remove(re); 2509 jPanelReport.repaint(); 2510 } 2511 else 2512 { 2513 addSelectedElement(re); 2514 } 2515 } 2516 else 2517 { 2518 setSelectedElement(re); 2519 } 2520 trasforming = true; 2521 firstXORDrawTransforming = true; 2522 transformation_origin = new Point(evt.getX(),evt.getY()); 2523 transformation_origin_end = new Point(evt.getX(),evt.getY()); 2524 2525 if (getMainFrame().isEMMActive()) 2526 transformation_type = TransformationType.TRANSFORMATION_NONE; 2527 else 2528 transformation_type = TransformationType.TRANSFORMATION_MOVE; 2529 2530 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR )); 2531 return; 2532 2533 } 2534 } 2535 getMainFrame().getElementPropertiesDialog().updateSelection(); 2536 2537 2548 2549 if (( evt.getModifiers() & evt.SHIFT_MASK ) == 0 && getSelectedElements().size() > 0) 2550 setSelectedElement(null); 2551 2552 drag_selection_mode = true; 2554 first_draw_selection_rect = true; 2555 drag_selection_origin = new Point(evt.getX(),evt.getY()); 2556 } 2557 else if (evt.getButton() == evt.BUTTON3) 2558 { 2559 2560 if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && 2563 (( evt.getModifiers() & evt.CTRL_MASK) != 0) ) 2564 { 2565 Point clickPoint = this.realPoint( evt.getX(), evt.getY() ); 2568 setZoomFactor( getZoomFactor() / 2 ); 2569 getMainFrame().setComboBoxZoomFactor( getZoomFactor() * 100 ); 2570 centerSelectedElements( clickPoint ); return; 2572 } 2573 2575 popup_opened_at = evt.getPoint(); 2576 boolean found = false; 2577 for (int i=report.getElements().size()-1; i>=0; --i) 2579 { 2580 ReportElement re = (ReportElement)report.getElements().elementAt(i); 2581 if (re.intersects(new Point(getLogicalDim(evt.getX()+jHorizontalScrollBar.getValue()-10)+10,getLogicalDim(evt.getY()+jVerticalScrollBar.getValue()-10)+10))) 2582 { 2583 2584 if ( this.getSelectedElements().size() <= 1 ) 2585 setSelectedElement(re); 2586 2593 found = true; 2594 break; 2595 } 2596 } 2597 2598 jMenuItemElementChartProperties.setVisible(false); 2599 jMenuItemElementCrosstabProperties.setVisible(false); 2600 jMenuItemElementCrosstabDesignProperties.setVisible(false); 2601 jMenuItemElementOpenSubreport.setVisible(false); 2602 if (getSelectedElements().size() > 0) 2603 { 2604 if (getSelectedElements().elementAt(0) instanceof ChartReportElement2) 2605 { 2606 jMenuItemElementChartProperties.setVisible(true); 2607 } 2608 2609 if (getSelectedElements().elementAt(0) instanceof CrosstabReportElement) 2610 { 2611 jMenuItemElementCrosstabProperties.setVisible(true); 2612 jMenuItemElementCrosstabDesignProperties.setVisible(true); 2613 } 2614 2615 if (getSelectedElements().elementAt(0) instanceof SubReportElement) 2616 { 2617 jMenuItemElementOpenSubreport.setVisible(true); 2618 } 2619 2620 this.jMenuItemCopy.setEnabled(true); 2621 this.jMenuItemCut.setEnabled(true); 2622 this.jMenuItemDelete.setEnabled(true); 2623 this.jMenuItemCopyStyle.setEnabled(true); 2624 } 2625 else 2626 { 2627 this.jMenuItemCopy.setEnabled(false); 2628 this.jMenuItemCut.setEnabled(false); 2629 this.jMenuItemDelete.setEnabled(false); 2630 this.jMenuItemCopyStyle.setEnabled(false); 2631 } 2632 2633 2634 if (getMainFrame().getStyleClipboard() != null) 2635 { 2636 this.jMenuItemPasteStyle.setEnabled(true); 2637 } 2638 else 2639 { 2640 this.jMenuItemPasteStyle.setEnabled(false); 2641 } 2642 2643 if (getMainFrame().getClipBoard().size() > 0) 2644 { 2645 this.jMenuItemPaste.setEnabled(true); 2646 } 2647 else 2648 { 2649 this.jMenuItemPaste.setEnabled(false); 2650 } 2651 2652 Enumeration selectedElementEnum = getSelectedElements().elements(); 2653 boolean allTextFields = true; 2654 boolean onGroup = false; boolean sameBand = true; 2656 Band theBand = null; 2657 while (selectedElementEnum.hasMoreElements()) 2658 { 2659 ReportElement re = (ReportElement)selectedElementEnum.nextElement(); 2660 if (allTextFields && !(re instanceof TextFieldReportElement)) 2661 { 2662 allTextFields = false; 2663 } 2664 2665 if (!onGroup && !re.getElementGroup().equals("")) onGroup = true; 2666 2667 if (theBand == null) theBand = re.getBand(); 2668 else if (sameBand && theBand != re.getBand()) sameBand = false; 2669 2670 if (!allTextFields && onGroup && !sameBand) break; 2671 } 2672 2673 jMenuItemPattern.setEnabled( allTextFields ); 2674 2675 jMenuItemGroup.setEnabled( sameBand ); 2676 jMenuItemUngroup.setEnabled( onGroup ); 2677 2678 if(found) 2679 { 2680 2682 if ( this.getSelectedElements().size() == 1 ) 2683 { 2684 jMenuHSpacing.setEnabled(false); 2686 jMenuVSpacing.setEnabled(false); 2687 jPopupMenuElement.show(jPanelReport,evt.getX(),evt.getY()); 2688 2689 return; 2690 } 2691 if ( this.getSelectedElements().size() > 1 ) 2692 { 2693 jMenuHSpacing.setEnabled(true); 2695 jMenuVSpacing.setEnabled(true); 2696 jPopupMenuElement.show(jPanelReport,evt.getX(),evt.getY()); 2697 return; 2698 } 2699 2700 2701 } 2702 jPopupMenuBand.show(jPanelReport,evt.getX(),evt.getY()); 2704 return; 2705 } 2706 else if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() == 2) 2707 { 2708 2709 if ( (( evt.getModifiers() & evt.SHIFT_MASK) != 0) && 2714 (( evt.getModifiers() & evt.CTRL_MASK) != 0) ) 2715 { 2716 Point clickPoint = this.realPoint( evt.getX(), evt.getY() ); 2717 setZoomFactor( getZoomFactor() * 2 ); 2718 getMainFrame().setComboBoxZoomFactor( getZoomFactor() * 100 ); 2719 centerSelectedElements( clickPoint); return; 2721 } 2722 2724 2725 2731 if (getSelectedElements().size() == 0) 2732 { 2733 2734 2738 2742 2744 Band band = null; 2745 int y = report.getTopMargin(); 2746 int clicked_y = evt.getY() + jVerticalScrollBar.getValue(); 2747 int proximity = 3 ; 2748 2749 for (Iterator i = getReport().getBands().iterator(); i.hasNext(); ) 2750 { 2751 band = (Band) i.next(); 2752 y += band.getHeight(); 2753 if ( clicked_y > getZoomedDim(y) + 10 - proximity && clicked_y < getZoomedDim(y) + 10 + proximity) 2754 { 2755 break; 2756 } 2757 } 2758 2759 if ( band != null ) 2760 { 2761 int bandHeight = band.getHeight(); 2762 shrinkBand( band ); 2763 if ( bandHeight != band.getHeight() ) 2764 { 2765 jPanelReport.repaint(); 2766 return; 2767 } 2768 } 2769 2770 } 2771 else 2772 { 2773 2777 2781 2782 2788 Rectangle cursor = new Rectangle(evt.getX()+jHorizontalScrollBar.getValue(), 2789 evt.getY()+jVerticalScrollBar.getValue(), 2790 1,1); 2791 Rectangle grip = new Rectangle(); 2792 grip.width = 5; 2793 grip.height = 5; 2794 2795 ReportElement clickedRe = null; 2796 2797 for (Iterator i = report.getElements().iterator(); i.hasNext(); ) 2798 { 2799 ReportElement re = (ReportElement) i.next(); 2800 2801 grip.x = getZoomedDim(re.position.x+(re.width/2)-10)+10-2; 2803 grip.y = getZoomedDim(re.position.y+re.height-10)+10; 2804 2805 if (cursor.intersects(grip)) 2806 { 2807 clickedRe = re; 2808 break ; 2809 } 2810 } 2811 2812 if ( clickedRe != null && getMainFrame().getProperties().getProperty("EnableTextResizeClick","true").equals("true") ) 2813 { 2814 if (clickedRe instanceof TextReportElement ) 2816 { 2817 TransformElementsOperation undoOp = new TransformElementsOperation(this); 2818 TextReportElement tre = (TextReportElement) clickedRe; 2819 2820 undoOp.addElement(tre); 2821 2822 tre.setHeight( tre.getFontSize() + 3 ); 2824 tre.updateBounds(); 2825 2826 2828 undoOp.captureUniqueModified(tre); 2830 2833 addUndoOperation(undoOp); 2835 2836 jPanelReport.repaint(); 2838 return; 2839 } 2840 } 2841 else 2842 { 2843 if (getSelectedElements().size() == 1) 2845 { 2846 ReportElement re = (ReportElement)getSelectedElements().elementAt(0); 2847 if (re instanceof TextReportElement) 2848 { 2849 TextReportElement tre = (TextReportElement) re; 2850 2851 Rectangle textArea = new Rectangle(); 2852 textArea.width = getZoomedDim(re.getWidth()); 2853 textArea.height = getZoomedDim(re.getHeight()); 2854 textArea.x = getZoomedDim(re.position.x-10)+10; 2855 textArea.y = getZoomedDim(re.position.y-10)+10; 2856 2857 2858 try { 2859 2860 if (cursor.intersects( textArea)) 2861 { 2862 onlineEditingTextReportElement = tre; 2863 floatingTextArea.setText( tre.getText() ); 2864 floatingTextArea.setOpaque( true ); 2865 2866 textArea.x -= jHorizontalScrollBar.getValue(); 2867 textArea.y -= jVerticalScrollBar.getValue(); 2868 2869 floatingTextArea.setForeground( tre.getFgcolor()); 2871 floatingTextArea.setBackground( tre.getBgcolor()); 2872 this.getReportPanel().add(floatingTextArea); 2873 floatingTextArea.setBounds( textArea ); 2874 floatingTextArea.setSelectionStart(0); 2875 floatingTextArea.setSelectionEnd(tre.getText().length()); 2876 SimpleAttributeSet set=new SimpleAttributeSet (); 2877 2878 StyledDocument doc=floatingTextArea.getStyledDocument(); 2879 if (tre.getAlign().equals("Center")) 2880 { 2881 StyleConstants.setAlignment(set,StyleConstants.ALIGN_CENTER); 2882 } 2883 else if (tre.getAlign().equals("Right")) 2884 { 2885 StyleConstants.setAlignment(set,StyleConstants.ALIGN_RIGHT); 2886 } 2887 else if (tre.getAlign().equals("Left")) 2888 { 2889 StyleConstants.setAlignment(set,StyleConstants.ALIGN_LEFT); 2890 } 2891 else if (tre.getAlign().equals("Justified")) 2892 { 2893 StyleConstants.setAlignment(set,StyleConstants.ALIGN_JUSTIFIED); 2894 } 2895 2896 StyleConstants.setFontFamily(set, tre.getFontName() ); 2897 StyleConstants.setFontSize(set, (int)getZoomedDim(tre.getFontSize()) ); 2898 StyleConstants.setBold(set,tre.isBold()); 2899 StyleConstants.setBold(set,tre.isItalic()); 2900 StyleConstants.setStrikeThrough(set,tre.isStrikeTrought()); 2901 StyleConstants.setUnderline(set,tre.isUnderline()); 2902 2903 floatingTextArea.setParagraphAttributes(set,true); 2904 2905 this.getReportPanel().updateUI(); 2906 floatingTextArea.requestFocusInWindow(); 2907 2908 } 2912 } catch (Exception ex) 2913 { 2914 ex.printStackTrace(); 2915 } 2916 } 2917 else 2918 { 2919 openElementPropertiesDialog(); 2920 } 2921 } 2922 else 2923 { 2924 openElementPropertiesDialog(); 2925 } 2926 } 2927 } 2928 2930 } 2933 } 2935 private void jHorizontalScrollBarAdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { floatingTextAreaFocusLost(); 2937 isDocDirty = true; 2938 jPanelReport.repaint(); 2940 jHorizontalRule.repaint(); 2941 } 2943 private void jPanelReportComponentResized(java.awt.event.ComponentEvent evt) { if (jPanelReport.getWidth() >= (getZoomedDim( report.getWidth())+19)) { 2945 jHorizontalScrollBar.setMaximum(report.getWidth()); 2946 jHorizontalScrollBar.setVisibleAmount( jHorizontalScrollBar.getMaximum()); 2947 jHorizontalScrollBar.setValue(0); 2948 } else { 2950 jHorizontalScrollBar.setMaximum((getZoomedDim( report.getWidth()) +19)); 2951 this.jHorizontalScrollBar.setVisibleAmount(jPanelReport.getWidth()); 2952 this.jHorizontalScrollBar.setBlockIncrement( this.jHorizontalScrollBar.getVisibleAmount() ); 2953 } 2954 2955 if (jPanelReport.getHeight() >= getZoomedDim(report.getDesignHeight())+19) { 2956 jVerticalScrollBar.setMaximum(report.getDesignHeight()); 2957 jVerticalScrollBar.setVisibleAmount( jVerticalScrollBar.getMaximum()); 2958 jVerticalScrollBar.setValue(0); 2959 } else { 2961 jVerticalScrollBar.setMaximum(getZoomedDim( report.getDesignHeight())+19); 2962 this.jVerticalScrollBar.setVisibleAmount(jPanelReport.getHeight()); 2963 this.jVerticalScrollBar.setBlockIncrement( this.jVerticalScrollBar.getVisibleAmount() ); 2964 } 2965 2967 jPanelReport.repaint(); 2968 } 2970 private void jVerticalScrollBarMouseReleased(java.awt.event.MouseEvent evt) { 2972 } 2974 private void jVerticalScrollBarAdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { 2976 floatingTextAreaFocusLost(); 2977 isDocDirty = true; 2978 jPanelReport.repaint(); 2979 jVerticalRule.repaint(); 2980 } 2982 private void jPanelReportMouseDragged(java.awt.event.MouseEvent evt) { 2984 this.jHorizontalRule.setCursorPosition(evt.getX()); 2985 this.jVerticalRule.setCursorPosition(evt.getY()); 2986 if (mouse == null) { 2987 mouse = new Point(); 2988 } 2989 2990 if (drag_selection_mode == true) { 2991 Graphics2D gg = (Graphics2D)jPanelReport.getGraphics(); 2992 gg.setXORMode(Color.GREEN); 2993 Stroke s = gg.getStroke(); 2994 gg.setStroke(selectionStroke); 2995 if (!first_draw_selection_rect) { 2996 gg.drawRect((int)Math.min( drag_selection_origin.x, drag_selection_end.x), 2997 (int)Math.min( drag_selection_origin.y, drag_selection_end.y), 2998 (int)Math.abs( drag_selection_origin.x - drag_selection_end.x), 2999 (int)Math.abs( drag_selection_origin.y - drag_selection_end.y)); 3000 } 3001 3002 drag_selection_end = new java.awt.Point (evt.getX(), evt.getY()); 3003 gg.drawRect((int)Math.min( drag_selection_origin.x, drag_selection_end.x), 3005 (int)Math.min( drag_selection_origin.y, drag_selection_end.y), 3006 (int)Math.abs( drag_selection_origin.x - drag_selection_end.x), 3007 (int)Math.abs( drag_selection_origin.y - drag_selection_end.y)); 3008 gg.setPaintMode(); 3009 first_draw_selection_rect = false; 3010 if (s != null) gg.setStroke(s); 3011 } 3012 3013 if (newObjectType == ReportElementType.NONE && !transforming) { 3014 if (band_dragging) { 3016 int delta = getLogicalDim( evt.getY() - band_dragging_origin ); 3018 if (delta != 0) { 3020 3021 3025 int min_logical_base = report.getTopMargin()+10; 3026 int base_position=0; base_position = getZoomedDim(report.getBandYLocation(band_dragging_band))+10- jVerticalScrollBar.getValue(); 3028 Graphics gg = jPanelReport.getGraphics(); 3029 gg.setXORMode(Color.WHITE); 3030 if (!first_draw_band) { 3031 gg.drawLine( 0,Math.max(mouse.y,base_position),jPanelReport.getWidth(),Math.max(mouse.y,base_position) ); 3032 3033 } 3034 gg.drawLine(0,Math.max(evt.getY(),base_position),jPanelReport.getWidth(),Math.max(evt.getY(),base_position) ); 3035 gg.setPaintMode(); 3036 first_draw_band = false; 3037 } 3039 } 3040 } 3041 3042 if (newObjectType != ReportElementType.NONE && newObjectOrigin!= null) { 3043 3044 3045 3046 Graphics gg = jPanelReport.getGraphics(); 3047 gg.setXORMode(Color.WHITE); 3048 int delta_x = 0; 3049 int delta_y = 0; 3050 3051 if (newObjectType != ReportElementType.LINE_ELEMENT && !firstXORDraw) { 3052 delta_x = mouse.x- newObjectOrigin.x; 3053 delta_y = mouse.y-newObjectOrigin.y; 3054 3055 delta_x = (delta_x <0) ? delta_x : 0; 3056 delta_y = (delta_y<0) ? delta_y : 0; 3057 } 3058 3059 3060 int delta_w = 0; 3061 int delta_h = 0; 3062 if (!firstXORDraw) { 3063 int mevtX = snapToGridOrizzontally(mouse.x); 3064 int mevtY = snapToGridVertically(mouse.y); 3065 3066 delta_w = mevtX - newObjectOrigin.x; delta_h = mevtY - newObjectOrigin.y; delta_x = (delta_w<0) ? delta_w: 0; 3069 delta_y = (delta_h<0) ? delta_h : 0; 3070 } 3071 3072 int evtX = snapToGridOrizzontally(evt.getX()); 3073 int evtY = snapToGridVertically(evt.getY()); 3074 3075 if (newObjectType == ReportElementType.LINE_ELEMENT) { 3076 3077 3088 3089 3090 if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) { 3091 Point straight = straighten( delta_w, delta_h); 3092 delta_w = straight.x; 3093 delta_h = straight.y; 3094 } 3095 3096 3097 if (!firstXORDraw) { 3098 gg.drawLine( newObjectOrigin.x, newObjectOrigin.y, newObjectOrigin.x+delta_w,newObjectOrigin.y+delta_h); 3099 } 3100 3101 delta_w = evtX-newObjectOrigin.x; delta_h = evtY-newObjectOrigin.y; 3104 3105 if ( ( evt.getModifiers() & evt.SHIFT_MASK) != 0) { 3106 Point straight = straighten( delta_w, delta_h); 3107 delta_w = straight.x; 3108 delta_h = straight.y; 3109 } 3110 3111 3112 3123 gg.drawLine( newObjectOrigin.x, newObjectOrigin.y, newObjectOrigin.x+delta_w,newObjectOrigin.y+delta_h); 3124 mouse.x = newObjectOrigin.x+delta_w; 3125 mouse.y = newObjectOrigin.x+delta_y; 3126 3127 } else if (newObjectType == ReportElementType.ELLIPSE_ELEMENT) { 3128 if (!firstXORDraw) gg.drawOval( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h)); 3129 3130 delta_w = evtX-newObjectOrigin.x; delta_h = evtY-newObjectOrigin.y; 3135 delta_x = (delta_w<0) ? delta_w: 0; 3136 delta_y = (delta_h<0) ? delta_h : 0; 3137 gg.drawOval( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h)); 3138 } else if (newObjectType == ReportElementType.ROUND_RECTANGLE_ELEMENT) { 3139 if (!firstXORDraw) { 3140 gg.drawRoundRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h),20,20); 3141 } 3142 delta_w = evtX-newObjectOrigin.x; delta_h = evtY-newObjectOrigin.y; delta_x = (delta_w<0) ? delta_w: 0; 3147 delta_y = (delta_h<0) ? delta_h : 0; 3148 gg.drawRoundRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h),20,20); 3150 } else { 3151 if (!firstXORDraw) { 3152 gg.drawRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h)); 3153 } 3154 delta_w = evtX-newObjectOrigin.x; delta_h = evtY-newObjectOrigin.y; delta_x = (delta_w<0) ? delta_w: 0; 3159 delta_y = (delta_h<0) ? delta_h : 0; 3160 gg.drawRect( newObjectOrigin.x+delta_x, snapToGridVertically(newObjectOrigin.y+delta_y), Math.abs(delta_w), Math.abs(delta_h)); 3162 } 3164 3165 firstXORDraw = false; 3166 gg.setPaintMode(); 3167 3168 } 3172 if (selectedElements.size() >0 && newObjectType == ReportElementType.NONE && transformation_origin_end != null) { 3173 int new_transformation_origin_end_x = transformation_origin_end.x; 3174 int new_transformation_origin_end_y = transformation_origin_end.y; 3175 3176 if (transformation_type >=0 && trasforming) { 3177 Graphics gg = jPanelReport.getGraphics(); 3178 gg.setXORMode(Color.WHITE); 3179 if (!firstXORDrawTransforming) { 3180 3185 3187 3189 new_transformation_origin_end_x = evt.getX(); 3190 new_transformation_origin_end_y = evt.getY(); 3191 3192 new_transformation_origin_end_x = optimizeX(evt.getX(), transformation_origin.x, transformation_type, (ReportElement)getSelectedElements().elementAt(0)); 3194 new_transformation_origin_end_y = optimizeY(evt.getY(), transformation_origin.y, transformation_type, (ReportElement)getSelectedElements().elementAt(0)); 3195 3202 3203 if (new_transformation_origin_end_x == transformation_origin_end.x && 3204 new_transformation_origin_end_y == transformation_origin_end.y) { 3205 return; 3206 } 3207 3208 3213 Enumeration e = getSelectedElements().elements(); 3214 while (e.hasMoreElements()) { 3215 ReportElement re = (ReportElement)e.nextElement(); 3216 Rectangle bounds = new Rectangle(getZoomedDim(re.getPosition().x-10)+10, 3217 getZoomedDim(re.getPosition().y-10)+10, 3218 getZoomedDim(re.getWidth()), 3219 getZoomedDim(re.getHeight())); 3220 if (transformation_type == TransformationType.TRANSFORMATION_MOVE) { 3222 if (resistenceExceeded) { 3224 bounds.translate( transformation_origin_end.x-transformation_origin.x, 3226 transformation_origin_end.y-transformation_origin.y); 3227 gg.drawRect(bounds.x-jHorizontalScrollBar.getValue(), bounds.y-jVerticalScrollBar.getValue(),bounds.width, bounds.height ); 3228 } 3229 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || 3230 transformation_type == TransformationType.TRANSFORMATION_RESIZE_S || 3231 transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) { 3232 int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) ? transformation_origin_end.x-transformation_origin.x : 0; 3234 int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_S) ? transformation_origin_end.y-transformation_origin.y : 0; 3235 bounds.setSize( Math.max(0, bounds.width + x_delta), 3236 Math.max(0, bounds.height + y_delta)); 3237 gg.drawRect(bounds.x-jHorizontalScrollBar.getValue(), bounds.y-jVerticalScrollBar.getValue(),bounds.width, bounds.height ); 3238 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || 3239 transformation_type == TransformationType.TRANSFORMATION_RESIZE_N || 3240 transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) { 3241 int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) ? transformation_origin_end.x-transformation_origin.x : 0; 3243 int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_N) ? transformation_origin_end.y-transformation_origin.y : 0; 3244 int height_grow = Math.min( y_delta,bounds.height); 3245 int width_grow = Math.min( x_delta,bounds.width); 3246 bounds.translate(width_grow,height_grow); 3247 bounds.setSize( bounds.width - width_grow, bounds.height - height_grow); 3248 gg.drawRect(bounds.x-jHorizontalScrollBar.getValue(), bounds.y-jVerticalScrollBar.getValue(),bounds.width, bounds.height ); 3249 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NE) { 3250 int x_delta = Math.max(-bounds.width,(transformation_origin_end.x-transformation_origin.x)); 3252 int y_delta = Math.min(bounds.height, (transformation_origin_end.y-transformation_origin.y) ); 3253 bounds.y += y_delta; 3254 bounds.height -= y_delta; 3255 bounds.width += x_delta; 3256 gg.drawRect(bounds.x-jHorizontalScrollBar.getValue(), bounds.y-jVerticalScrollBar.getValue(),bounds.width, bounds.height ); 3257 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SW) { 3258 int x_delta = Math.min(bounds.width, (transformation_origin_end.x-transformation_origin.x) ); 3260 int y_delta = Math.max(-bounds.height,(transformation_origin_end.y-transformation_origin.y)); 3261 bounds.x += x_delta; 3262 bounds.width -= x_delta; 3263 bounds.height += y_delta; 3264 gg.drawRect(bounds.x-jHorizontalScrollBar.getValue(), bounds.y-jVerticalScrollBar.getValue(),bounds.width, bounds.height ); 3265 } 3266 } 3267 } 3268 3269 3275 transformation_origin_end.x = new_transformation_origin_end_x; 3276 transformation_origin_end.y = new_transformation_origin_end_y; 3277 3278 Enumeration e = getSelectedElements().elements(); 3279 while (e.hasMoreElements()) { 3280 ReportElement re = (ReportElement)e.nextElement(); 3281 Rectangle bounds = new Rectangle(getZoomedDim(re.getPosition().x-10)+10-jHorizontalScrollBar.getValue(), 3282 getZoomedDim(re.getPosition().y-10)+10-jVerticalScrollBar.getValue(), 3283 getZoomedDim(re.getWidth()), 3284 getZoomedDim(re.getHeight())); 3285 if (transformation_type == TransformationType.TRANSFORMATION_MOVE) { 3287 if (Math.abs(transformation_origin_end.x-transformation_origin.x) >5 || 3289 Math.abs(transformation_origin_end.y-transformation_origin.y) >5) 3290 resistenceExceeded = true; 3291 if (resistenceExceeded) { 3292 3294 int pex = gridMultiple( transformation_origin_end.x-10 )+10; 3295 int pey = gridMultiple( transformation_origin_end.y-10 )+10; 3296 int pox = gridMultiple( transformation_origin.x-10 )+10; 3297 int poy = gridMultiple( transformation_origin.y-10 )+10; 3298 3299 3301 3303 bounds.translate( transformation_origin_end.x-transformation_origin.x, 3304 transformation_origin_end.y-transformation_origin.y); 3305 gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height ); 3306 } 3307 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || 3308 transformation_type == TransformationType.TRANSFORMATION_RESIZE_S || 3309 transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) { 3310 int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) ? transformation_origin_end.x-transformation_origin.x : 0; 3312 int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || transformation_type == TransformationType.TRANSFORMATION_RESIZE_S) ? transformation_origin_end.y-transformation_origin.y : 0; 3313 bounds.setSize( Math.max(0, bounds.width + x_delta), 3314 Math.max(0, bounds.height + y_delta)); 3315 gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height ); 3316 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || 3317 transformation_type == TransformationType.TRANSFORMATION_RESIZE_N || 3318 transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) { 3319 int x_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) ? transformation_origin_end.x-transformation_origin.x : 0; 3321 int y_delta = ( transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || transformation_type == TransformationType.TRANSFORMATION_RESIZE_N) ? transformation_origin_end.y-transformation_origin.y : 0; 3322 int height_grow = Math.min( y_delta,bounds.height); 3323 int width_grow = Math.min( x_delta,bounds.width); 3324 bounds.translate(width_grow,height_grow); 3325 bounds.setSize( bounds.width - width_grow, bounds.height - height_grow); 3326 gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height ); 3327 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NE) { 3328 int x_delta = Math.max(-bounds.width,(transformation_origin_end.x-transformation_origin.x)); 3330 int y_delta = Math.min(bounds.height, (transformation_origin_end.y-transformation_origin.y) ); 3331 bounds.y += y_delta; 3332 bounds.height -= y_delta; 3333 bounds.width += x_delta; 3334 gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height ); 3335 } else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SW) { 3336 int x_delta = Math.min(bounds.width, (transformation_origin_end.x-transformation_origin.x) ); 3338 int y_delta = Math.max(-bounds.height , (transformation_origin_end.y-transformation_origin.y)); 3339 bounds.x += x_delta; 3340 bounds.width -= x_delta; 3341 bounds.height += y_delta; 3342 gg.drawRect(bounds.x, bounds.y,bounds.width, bounds.height ); 3343 } 3344 } 3345 3346 firstXORDrawTransforming = false; 3347 gg.setPaintMode(); 3348 } 3349 3350 } 3351 mouse.x = evt.getX(); 3352 mouse.y = evt.getY(); 3353 3354 } 3356 private void jPanelReportMouseMoved(java.awt.event.MouseEvent evt) { this.jHorizontalRule.setCursorPosition(evt.getX()); 3358 this.jVerticalRule.setCursorPosition(evt.getY()); 3359 if (mouse == null) mouse = new Point(); 3360 if (newObjectType == ReportElementType.NONE && !transforming) { 3361 int bl = evt.getY() + jVerticalScrollBar.getValue(); 3363 Enumeration e = report.getBands().elements(); 3364 int y= report.getTopMargin(); 3365 boolean found=false; 3366 while (!found && e.hasMoreElements()) { 3367 Band band = (Band)e.nextElement(); 3368 y += band.getHeight(); 3369 if (bl>getZoomedDim(y)+10-3 && bl < getZoomedDim(y)+3+10) { 3370 jPanelReport.setCursor( hsplit); 3371 found = true; 3373 } 3374 } 3375 if (!found && jPanelReport.getCursor() == hsplit) { 3376 jPanelReport.setCursor( Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); 3377 } 3378 } 3379 3380 if (selectedElements.size() >0 && newObjectType == ReportElementType.NONE) { 3381 { 3383 Enumeration e = selectedElements.elements(); 3385 boolean found = false; 3386 boolean sizeall = false; 3387 while (!found && e.hasMoreElements() ) { 3388 3389 ReportElement selectedRe = (ReportElement)e.nextElement(); 3390 Rectangle grip = new Rectangle(getZoomedDim(selectedRe.position.x-10)-5+10, getZoomedDim(selectedRe.position.y-10)-5+10, 3391 getZoomedDim(selectedRe.width)+10,getZoomedDim(selectedRe.height)+10); 3392 Rectangle cursor = new Rectangle(evt.getX()+jHorizontalScrollBar.getValue(), 3393 evt.getY()+jVerticalScrollBar.getValue(), 3394 1,1); 3395 3396 if (cursor.intersects(grip)) { 3397 sizeall = true; 3398 grip.width = 5; 3400 grip.height = 5; 3401 3402 if (cursor.intersects(grip)) { 3403 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.NW_RESIZE_CURSOR )); 3404 found =true; 3405 transformation_type = TransformationType.TRANSFORMATION_RESIZE_NW; 3406 } 3407 3408 if (!found) { 3409 grip.x = getZoomedDim(selectedRe.position.x-10+selectedRe.width)+10; 3410 grip.y = getZoomedDim(selectedRe.position.y-10)+10-5; 3411 grip.width = 5; 3412 grip.height = 5; 3413 if (cursor.intersects(grip)) { 3414 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.NE_RESIZE_CURSOR )); 3415 found =true; 3416 transformation_type = TransformationType.TRANSFORMATION_RESIZE_NE; 3417 } 3418 } 3419 3420 if (!found) { 3421 grip.x = getZoomedDim(selectedRe.position.x-10)+10-5; 3422 grip.y = getZoomedDim(selectedRe.position.y+(selectedRe.height/2)-10)+10-2; 3423 grip.width = 5; 3424 grip.height = 5; 3425 if (cursor.intersects(grip)) { 3426 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.W_RESIZE_CURSOR)); 3427 found =true; 3428 transformation_type = TransformationType.TRANSFORMATION_RESIZE_W; 3429 } 3430 } 3431 3432 if (!found) { 3433 grip.x = getZoomedDim(selectedRe.position.x-10)+10-5; 3434 grip.y = getZoomedDim(selectedRe.position.y-10+selectedRe.height)+10; 3435 grip.width = 5; 3436 grip.height = 5; 3437 if (cursor.intersects(grip)) { 3438 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.SW_RESIZE_CURSOR)); 3439 found =true; 3440 transformation_type = TransformationType.TRANSFORMATION_RESIZE_SW; 3441 } 3442 } 3443 3444 if (!found) { 3445 grip.x = getZoomedDim(selectedRe.position.x+(selectedRe.width/2)-10)+10-2; 3446 grip.y = getZoomedDim(selectedRe.position.y-10)+10-5; 3447 grip.width = 5; 3448 grip.height = 5; 3449 if (cursor.intersects(grip)) { 3450 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.N_RESIZE_CURSOR)); 3451 found =true; 3452 transformation_type = TransformationType.TRANSFORMATION_RESIZE_N; 3453 } 3454 } 3455 3456 if (!found) { 3457 grip.x = getZoomedDim(selectedRe.position.x+(selectedRe.width/2)-10)+10-2; 3458 grip.y = getZoomedDim(selectedRe.position.y+selectedRe.height-10)+10; 3459 grip.width = 5; 3460 grip.height = 5; 3461 if (cursor.intersects(grip)) { 3462 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.S_RESIZE_CURSOR)); 3463 found =true; 3464 transformation_type = TransformationType.TRANSFORMATION_RESIZE_S; 3465 } 3466 } 3467 3468 if (!found) { 3469 grip.x = getZoomedDim(selectedRe.position.x+selectedRe.width-10)+10; 3470 grip.y = getZoomedDim(selectedRe.position.y+selectedRe.height-10)+10; 3471 grip.width = 5; 3472 grip.height = 5; 3473 if (cursor.intersects(grip)) { 3474 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.SE_RESIZE_CURSOR)); 3475 found =true; 3476 transformation_type = TransformationType.TRANSFORMATION_RESIZE_SE; 3477 } 3478 } 3479 3480 if (!found) { 3481 grip.x = getZoomedDim(selectedRe.position.x+selectedRe.width-10)+10; 3482 grip.y = getZoomedDim(selectedRe.position.y+(selectedRe.height/2)-10)+10-2; 3483 grip.width = 5; 3484 grip.height = 5; 3485 if (cursor.intersects(grip)) { 3486 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.E_RESIZE_CURSOR)); 3487 found =true; 3488 transformation_type = TransformationType.TRANSFORMATION_RESIZE_E; 3489 } 3490 } 3491 3492 if (!found) { 3493 jPanelReport.setCursor(Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR)); 3494 3495 if (getMainFrame().isEMMActive()) 3496 transformation_type = TransformationType.TRANSFORMATION_NONE; 3497 else { 3498 transformation_type = TransformationType.TRANSFORMATION_MOVE; 3499 resistenceExceeded = false; 3500 } 3501 } 3502 } 3503 } 3504 if (!sizeall) { 3505 jPanelReport.setCursor(Cursor.getDefaultCursor()); 3506 transformation_type = TransformationType.TRANSFORMATION_NONE; 3507 } 3508 } 3509 } 3510 3511 if (getMainFrame().getProperties().getProperty("ShowToolTipsInDesign","false").equals("true")) 3512 { 3513 Band bbb = getReport().getBandByPosition( getLogicalDim(evt.getY()+jVerticalScrollBar.getValue()-10)+10); 3514 if ( ((ReportPanelToolTip)getReportPanel().createToolTip()).getBand() == null || 3515 ((ReportPanelToolTip)getReportPanel().createToolTip()).getBand() != bbb ) 3516 { 3517 ((ReportPanelToolTip)getReportPanel().createToolTip()).setBand(bbb); 3518 getReportPanel().setToolTipText( ((ReportPanelToolTip)getReportPanel().createToolTip()).getTipText()); 3519 } 3520 } 3521 else 3522 { 3523 getReportPanel().setToolTipText( null ); 3524 } 3525 3526 mouse.x = evt.getX(); 3527 mouse.y = evt.getY(); 3528 3529 3530 3531 } 3533 3552 private void jPanelReportAncestorAdded(javax.swing.event.AncestorEvent evt) { } 3556 3560 public it.businesslogic.ireport.Report getReport() { 3561 return report; 3562 } 3563 3564 3565 3569 public java.util.Vector getSelectedElements() { 3570 return selectedElements; 3571 } 3572 3573 3577 public void setSelectedElements(java.util.Vector selectedElements) { 3578 this.selectedElements = selectedElements; 3579 } 3580 3581 3585 public java.util.Vector getClipboardObjects() { 3586 return clipboardObjects; 3587 } 3588 3589 3593 public void setClipboardObjects(java.util.Vector clipboardObjects) { 3594 this.clipboardObjects = clipboardObjects; 3595 } 3596 3597 private it.businesslogic.ireport.gui.JRulePanel jHorizontalRule; 3599 private javax.swing.JScrollBar jHorizontalScrollBar; 3600 private javax.swing.JMenuItem jMenuItemBandProperties; 3601 private javax.swing.JMenuItem jMenuItemBandProperties1; 3602 private javax.swing.JMenuItem jMenuItemCopy; 3603 private javax.swing.JMenuItem jMenuItemCopyStyle; 3604 private javax.swing.JMenuItem jMenuItemCut; 3605 private javax.swing.JMenuItem jMenuItemDelete; 3606 private javax.swing.JMenuItem jMenuItemElementChartProperties; 3607 private javax.swing.JMenuItem jMenuItemElementCrosstabDesignProperties; 3608 private javax.swing.JMenuItem jMenuItemElementCrosstabProperties; 3609 private javax.swing.JMenuItem jMenuItemElementOpenSubreport; 3610 private javax.swing.JMenuItem jMenuItemElementProperties; 3611 private javax.swing.JMenuItem jMenuItemGroup; 3612 private javax.swing.JMenuItem jMenuItemPaste; 3613 private javax.swing.JMenuItem jMenuItemPasteOnBand; 3614 private javax.swing.JMenuItem jMenuItemPasteStyle; 3615 private javax.swing.JMenuItem jMenuItemPattern; 3616 private javax.swing.JMenuItem jMenuItemTransformStaticText; 3617 private javax.swing.JMenuItem jMenuItemUngroup; 3618 private javax.swing.JPanel jPanel1; 3619 private javax.swing.JPanel jPanelCorner; 3620 private javax.swing.JPanel jPanelHContainerRule; 3621 private javax.swing.JPanel jPanelHScroll; 3622 private it.businesslogic.ireport.gui.JReportPanel jPanelReport; 3623 private javax.swing.JPanel jPanelReportContainer; 3624 private javax.swing.JPanel jPanelSuperContainer; 3625 private javax.swing.JPanel jPanelVRule; 3626 private javax.swing.JPopupMenu jPopupMenuBand; 3627 private javax.swing.JPopupMenu jPopupMenuElement; 3628 private javax.swing.JSeparator jSeparator1; 3629 private javax.swing.JSeparator jSeparator2; 3630 private javax.swing.JSeparator jSeparator3; 3631 private javax.swing.JSeparator jSeparator4; 3632 private javax.swing.JSeparator jSeparator6; 3633 private javax.swing.JTabbedPane jTabbedPane1; 3634 private javax.swing.JScrollBar jVerticalScrollBar; 3635 3637 private Report report; 3638 3639 private int undoIndex = -1; 3640 private Vector undoOperations; 3641 private Vector clipboardObjects; 3642 private Vector selectedElements; 3643 3644 3647 private double zoomFactor; 3648 3649 3652 private Point mouse = null; 3653 3654 private boolean lensMode; 3655 3656 private int newObjectType; 3657 3658 private boolean showGrid; 3659 3660 private int transformationMinSize; 3661 3662 private boolean snapToGrid; 3663 3664 private int windowID; 3665 3666 3667 private javax.swing.event.EventListenerList listenerList = null; 3668 3669 public JReportPanel getReportPanel() { 3670 return this.jPanelReport; 3671 } 3672 public void drawVoidDoc(Graphics2D g) { 3673 g.setColor(new Color(128, 128, 128)); 3675 g.fillRect(0, 0, 100000, 100000); 3678 3679 3687 3688 int horizontal_scroll = jHorizontalScrollBar.getValue(); 3690 int vertical_scroll = jVerticalScrollBar.getValue(); 3691 int zoomed_width = getZoomedDim(report.getWidth()); 3692 int design_height = report.getDesignHeight(); 3693 int zoomed_height = getZoomedDim(design_height); 3694 3695 3696 g.setColor(Color.WHITE); 3697 g.fillRect( 10- horizontal_scroll,10-vertical_scroll,zoomed_width , zoomed_height); 3698 g.setColor(Color.BLACK); 3699 g.drawRect( 9-horizontal_scroll, 9-vertical_scroll, zoomed_width,zoomed_height ); 3700 3701 g.setPaint( new TexturePaint( shadowsImages[0], new Rectangle2D.Double( zoomed_width+10-horizontal_scroll,9-vertical_scroll,9,9))); 3703 g.fillRect(zoomed_width+10-horizontal_scroll,9-vertical_scroll,9,9); 3704 3705 g.setPaint( new TexturePaint( shadowsImages[1], new Rectangle2D.Double( zoomed_width+10-horizontal_scroll,18-vertical_scroll,9,9))); 3707 g.fillRect( zoomed_width+10-horizontal_scroll,18-vertical_scroll, 9,zoomed_height-8); 3708 3709 g.setPaint(new TexturePaint( shadowsImages[2], new Rectangle2D.Double( zoomed_width+10-horizontal_scroll,zoomed_height+10-vertical_scroll,9,9))); 3710 g.fillRect( zoomed_width+10-horizontal_scroll,zoomed_height+10-vertical_scroll,9,9); 3711 3712 g.setPaint(new TexturePaint( shadowsImages[3], new Rectangle2D.Double( 9-horizontal_scroll,zoomed_height+10-vertical_scroll, zoomed_width+2,9))); 3713 g.fillRect( 9-horizontal_scroll,zoomed_height+10-vertical_scroll, zoomed_width+1,9); 3714 3715 g.setPaint(new TexturePaint( shadowsImages[4], new Rectangle2D.Double( 9-horizontal_scroll,zoomed_height+10-vertical_scroll,9,9))); 3716 g.fillRect( 9-horizontal_scroll,zoomed_height+10-vertical_scroll,9,9); 3717 3718 3720 g.setColor(new Color(230,230,230)); 3721 if (this.isShowGrid()) { 3722 3763 Stroke defaultStroke = g.getStroke(); 3764 float[] fArray = {2f,2f}; 3765 BasicStroke m_Dashed3 = new BasicStroke(1, 3766 BasicStroke.CAP_SQUARE, 3767 BasicStroke.JOIN_BEVEL, 1.0f, fArray, 0.0f); 3768 g.setStroke(m_Dashed3); 3769 3770 int zoomed_grid_size = getZoomedDim(this.getGridSize()); 3771 3772 if ( mGridTexture == null || 3774 mGridTexture.getImage().getWidth() != zoomed_grid_size ) { 3775 BufferedImage img = new BufferedImage( 3776 zoomed_grid_size, zoomed_grid_size, 3777 BufferedImage.TYPE_INT_RGB ); 3778 3779 Graphics2D g2 = img.createGraphics(); 3780 3781 g2.setColor(Color.WHITE); 3782 g2.fillRect( 0, 0, zoomed_grid_size, 3783 zoomed_grid_size ); 3784 3785 g2.setColor( new Color(230,230,230) ); 3786 g2.setStroke( m_Dashed3 ); 3787 3788 g2.drawLine( zoomed_grid_size-1, 0, 3789 zoomed_grid_size-1, zoomed_grid_size-1 ); 3790 3791 g2.drawLine( 0, zoomed_grid_size-1, 3792 zoomed_grid_size-1, zoomed_grid_size-1 ); 3793 3794 mGridTexture = new TexturePaint( img, new 3795 Rectangle( 10, 10, zoomed_grid_size, zoomed_grid_size ) ); 3796 3797 } 3799 Paint oldPaint = g.getPaint(); 3800 g.setPaint( mGridTexture ); 3801 3802 g.translate( -horizontal_scroll, -vertical_scroll); 3803 3804 g.fillRect( 10, 10, zoomed_width-1, zoomed_height-1 ); 3805 3806 g.translate( horizontal_scroll, vertical_scroll ); 3807 3808 g.setPaint(oldPaint); 3809 g.setStroke(defaultStroke); 3810 } 3811 3812 3813 3814 g.setColor(new Color(170,170,255)); 3816 g.drawLine( getZoomedDim(report.getLeftMargin())+10-horizontal_scroll, 3818 10-vertical_scroll, 3819 getZoomedDim(report.getLeftMargin())+10-horizontal_scroll, 3820 zoomed_height+10-vertical_scroll-2); 3821 3822 g.drawLine(getZoomedDim(report.getWidth()- report.getRightMargin())+10-horizontal_scroll, 3824 10-vertical_scroll, 3825 getZoomedDim(report.getWidth()-report.getRightMargin())+10-horizontal_scroll, 3826 zoomed_height+10-vertical_scroll-2); 3827 3828 g.drawLine( 10-horizontal_scroll, 3829 getZoomedDim(report.getTopMargin())+10-vertical_scroll, 3830 zoomed_width+10-horizontal_scroll-2, 3831 getZoomedDim(report.getTopMargin())+10-vertical_scroll); 3832 3833 g.drawLine( 10-horizontal_scroll, 3834 getZoomedDim(design_height-report.getBottomMargin())+10-vertical_scroll, 3835 zoomed_width+10-horizontal_scroll-2, 3836 getZoomedDim(design_height- report.getBottomMargin())+10-vertical_scroll); 3837 3838 int y=report.getTopMargin(); 3839 3840 Band page_header=null; 3841 Band page_footer=null; 3842 3843 Enumeration e = report.getBands().elements(); 3844 while (e.hasMoreElements()) { 3845 g.setColor(new Color(170,170,170)); 3846 Band band = (Band)e.nextElement(); 3847 y += band.getHeight(); 3848 g.drawLine( 10-horizontal_scroll, 3849 getZoomedDim(y)+10-vertical_scroll, 3850 zoomed_width+10-horizontal_scroll-2, 3851 getZoomedDim(y)+10-vertical_scroll); 3852 3853 g.setFont( new Font( "Arial", Font.PLAIN, getZoomedDim(20))); 3854 int txt_width = g.getFontMetrics().stringWidth(band.getName())/2; 3856 int txt_height = g.getFontMetrics().getHeight()/2; 3857 txt_height -= g.getFontMetrics().getMaxDescent(); 3858 g.setColor(new Color(220,220,255)); 3859 3865 3867 Java2DUtil.setClip(g, 3868 getZoomedDim(report.getLeftMargin())+10-horizontal_scroll, 3869 getZoomedDim(y-band.getHeight())+10-vertical_scroll, 3870 getZoomedDim(report.getWidth()), 3871 getZoomedDim(band.getHeight())); 3872 3878 3879 g.drawString( band.getName(), 3880 getZoomedDim(report.getWidth()/2)+10-horizontal_scroll - txt_width, 3881 getZoomedDim(y)+10-vertical_scroll + txt_height - getZoomedDim(band.getHeight()/2) ); 3885 3886 3887 Java2DUtil.resetClip(g); 3889 3890 if (band.getName().equals("pageHeader")) page_header = band; 3891 if (band.getName().equals("pageFooter")) page_footer = band; 3892 } 3893 3894 int y1 = report.getBandYLocation(report.getBandByName("columnHeader") ); 3896 int y2 = report.getBandYLocation(page_footer); 3897 3898 for (int i=0; i< report.getColumnCount()-1; ++i) { 3899 int x = 10+getZoomedDim(report.getLeftMargin()+report.getColumnWidth() + i*(report.getColumnWidth()+report.getColumnSpacing())); 3900 if (x<10+zoomed_width) 3903 g.drawLine( x-horizontal_scroll, getZoomedDim(y1)+10-vertical_scroll, 3904 x-horizontal_scroll, getZoomedDim(y2)+10-vertical_scroll); 3905 x = 10 + getZoomedDim(report.getLeftMargin() + report.getColumnWidth()+report.getColumnSpacing() + i *(report.getColumnWidth()+report.getColumnSpacing())); 3906 3907 if (x<10+zoomed_width) 3908 g.drawLine( x-horizontal_scroll, getZoomedDim(y1)+10-vertical_scroll, 3909 x-horizontal_scroll, getZoomedDim(y2)+10-vertical_scroll); 3910 } 3911 3916 3918 Stroke oldStroke = g.getStroke(); 3920 g.setStroke(jHorizontalRule.getDottedStroke()); 3921 g.setColor(Color.BLACK); 3922 g.setXORMode(java.awt.Color.YELLOW); 3923 for (int i=0; i<jHorizontalRule.getGuideLines().size(); ++i) 3924 { 3925 Integer pos = (Integer )jHorizontalRule.getGuideLines().get(i); 3926 int posI = pos.intValue(); 3927 posI = 10 + (int)(posI*getZoomFactor()) - getHScroll(); 3929 g.drawLine(posI, 0,posI,getHeight()); 3930 } 3931 3932 for (int i=0; i<jVerticalRule.getGuideLines().size(); ++i) 3933 { 3934 Integer pos = (Integer )jVerticalRule.getGuideLines().get(i); 3935 int posI = pos.intValue(); 3936 posI = 10 + (int)(posI*getZoomFactor()) - getVScroll(); 3938 g.drawLine(0, posI, getWidth(),posI); 3939 } 3940 g.setPaintMode(); 3941 g.setStroke(oldStroke); 3942 3943 isDocDirty = false; 3944 } 3945 3946 public int getReversedZoomedDim(int dim) { 3947 if (zoomFactor == 1.0) return dim; 3948 return (int)((double)dim/zoomFactor); 3949 } 3950 3951 public int getZoomedDim(int dim) { 3952 if (zoomFactor == 1.0) return dim; 3953 return (int)((double)dim*zoomFactor); 3956 } 3958 3959 public int getLogicalDim(int dim) { 3960 if (zoomFactor == 1.0) return dim; 3961 return (int)((double)dim/zoomFactor); 3965 } 3967 3968 3972 public double getZoomFactor() { 3973 return zoomFactor; 3974 } 3975 3976 3980 public void setZoomFactor(double zoomFactor) { 3981 3982 floatingTextAreaFocusLost(); 3983 if (getSelectedCrosstabEditorPanel() != null) 3984 { 3985 getSelectedCrosstabEditorPanel().setZoomFactor(zoomFactor); 3986 } 3987 else 3988 { 3989 if (this.zoomFactor != zoomFactor) { 3990 this.zoomFactor = zoomFactor; 3991 this.jPanelReportComponentResized( new java.awt.event.ComponentEvent ( jPanelReport,0)); 3992 isDocDirty = true; 3993 this.getReportPanel().repaint(); 3994 this.jHorizontalRule.repaint(); 3995 this.jVerticalRule.repaint(); 3996 } 3997 } 3998 } 3999 4000 public void updateAntialiasMode() 4001 { 4002 this.getReportPanel().repaint(); 4003 } 4004 public void paintReportPanel(Graphics g) { 4005 4009 4010 try { 4011 Graphics2D g2 = (Graphics2D) g; 4012 4013 4014 if (this.getMainFrame().getProperties().getProperty("Antialias","true").equals("false")) 4015 { 4016 4017 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 4018 RenderingHints.VALUE_ANTIALIAS_OFF); 4019 g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, 4020 RenderingHints.VALUE_STROKE_PURE); 4021 g2.setRenderingHint(RenderingHints.KEY_DITHERING, 4022 RenderingHints.VALUE_DITHER_DISABLE); 4023 } 4024 else 4025 { 4026 4027 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 4028 RenderingHints.VALUE_ANTIALIAS_ON); 4029 g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, 4030 RenderingHints.VALUE_STROKE_DEFAULT); 4031 g2.setRenderingHint(RenderingHints.KEY_DITHERING, 4032 RenderingHints.VALUE_DITHER_ENABLE); 4033 } 4034 4035 redrawAll(g2, g2.getClipRect(), 0); 4041 4045 } catch (Throwable ex) 4046 { 4047 ex.printStackTrace(); 4048 } 4049 } 4050 4051 4052 private void redrawAll(Graphics2D g, Rectangle clipRect, int margin) { 4053 if (clipRect ==null) { 4056 clipRect = new Rectangle(0,0,this.getReport().getWidth(),this.getReport().getDesignHeight()); 4057 } 4058 4059 4063 g.clearRect(0,0, (int) clipRect.getWidth(), (int) clipRect.getHeight()); 4064 4070 Rectangle realRect = new Rectangle( 4071 getReversedZoomedDim(clipRect.x-10-margin+jHorizontalScrollBar.getValue())+ margin +10, 4072 getReversedZoomedDim(clipRect.y-10-margin+jVerticalScrollBar.getValue())+ margin +10, 4073 getReversedZoomedDim(clipRect.width-2*margin)+2*margin, 4074 getReversedZoomedDim(clipRect.height-2*margin)+2*margin); 4075 4076 4083 4084 drawVoidDoc(g); 4090 4091 4095 Enumeration e = report.getElements().elements(); 4099 while (e.hasMoreElements()) { 4100 ReportElement re = (ReportElement)e.nextElement(); 4101 if (re.intersects(realRect) || re instanceof BreakReportElement) 4102 re.drawObject(g, getZoomFactor(), jHorizontalScrollBar.getValue(), jVerticalScrollBar.getValue()); 4103 } 4104 4105 if (selectedElements.size()>0) { 4107 e = selectedElements.elements(); 4112 boolean master=true; 4113 while (e.hasMoreElements()) { 4114 ReportElement re = (ReportElement)e.nextElement(); 4115 if (re.intersects(realRect)) 4116 re.drawCorona( g,getZoomFactor(), jHorizontalScrollBar.getValue(), jVerticalScrollBar.getValue(), master); 4117 master = false; 4118 } 4119 } 4120 4121 4124 } 4125 4126 public MainFrame getMainFrame() { 4127 if (mf != null) return mf; 4128 Container parent = this.getDesktopPane().getParent(); 4130 while (parent != null && !(parent instanceof MainFrame)) { 4131 parent = parent.getParent(); 4132 } 4133 if (parent != null) { 4134 mf = (MainFrame)parent; 4135 return mf; 4136 } else 4137 return null; 4138 } 4139 4140 4144 public boolean isLensMode() { 4145 return lensMode; 4146 } 4147 4148 4152 public void setLensMode(boolean lensMode) { 4153 if (this.lensMode == lensMode) return; 4155 if (lensMode == true) 4156 jPanelReport.setCursor( java.awt.Cursor.getDefaultCursor()); 4157 else { 4158 } 4164 this.lensMode = lensMode; 4165 } 4166 4167 4171 public int getNewObjectType() { 4172 return newObjectType; 4173 } 4174 4175 4179 public void setNewObjectType(int newObjectType) { 4180 4181 4182 if (this.newObjectType == newObjectType) return; 4183 4184 if (newObjectType == ReportElementType.NONE) { 4185 4191 jPanelReport.setCursor( java.awt.Cursor.getDefaultCursor()); 4192 } else { 4193 jPanelReport.setCursor( java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.CROSSHAIR_CURSOR)); 4194 } 4195 this.newObjectType = newObjectType; 4196 4197 for (int i=1; i<jTabbedPane1.getTabCount(); ++i) 4198 { 4199 if ( jTabbedPane1.getComponentAt(i) instanceof CrosstabEditor) 4200 { 4201 CrosstabEditor ce= (CrosstabEditor)jTabbedPane1.getComponentAt(i); 4202 ce.getPanelEditor().setNewObjectType(newObjectType ); 4203 } 4204 } 4205 } 4206 4207 4208 4209 public void setSelectedElement(ReportElement el, boolean fireEvent) { 4210 boolean makerefreshAll = false; 4212 makerefreshAll=true; 4214 getSelectedElements().removeAllElements(); 4215 4240 4241 if (el != null) { 4242 Rectangle rect = new Rectangle(el.position.x-5,el.position.y-5,el.width+10, el.height+10); 4243 selectedElements.addElement(el); 4244 4245 getMainFrame().setCutCopyEnabled(true); 4246 4261 } else { 4262 getMainFrame().setCutCopyEnabled(false); 4263 } 4264 if (makerefreshAll) { 4265 jPanelReport.repaint(); 4266 } 4267 4268 4280 4281 if (fireEvent) { 4282 ReportElementsSelectionEvent rece = new ReportElementsSelectionEvent(this, this.getSelectedElements()) ; 4283 4284 this.fireReportListenerReportElementsSelectionChanged(rece ); 4285 getMainFrame().getElementPropertiesDialog().updateSelection(); 4286 } 4287 } 4288 4289 public void setSelectedElement(ReportElement el) { 4290 setSelectedElement(el, true); 4291 } 4292 4293 public void fireSelectionChangedEvent() { 4294 ReportElementsSelectionEvent rece = new ReportElementsSelectionEvent(this, this.getSelectedElements()) ; 4295 4296 this.fireReportListenerReportElementsSelectionChanged(rece ); 4297 getMainFrame().getElementPropertiesDialog().updateSelection(); 4298 } 4299 4300 public void addSelectedElement(ReportElement el) { 4301 addSelectedElement(el, true); 4302 } 4303 4304 public void addSelectedElement(ReportElement el, boolean fireEvent) { 4305 if (selectedElements.contains(el)) return; 4306 Rectangle rect = new Rectangle(el.position.x-5,el.position.y-5,el.width+10, el.height+10); 4309 selectedElements.addElement(el); 4310 4321 jPanelReport.repaint(); 4322 4323 if (fireEvent) { 4324 fireSelectionChangedEvent(); 4325 } 4326 4327 getMainFrame().setCutCopyEnabled(true); 4328 } 4329 4330 4334 public it.businesslogic.ireport.gui.JReportPanel getJPanelReport() { 4335 return jPanelReport; 4336 } 4337 4338 4342 public void setJPanelReport(it.businesslogic.ireport.gui.JReportPanel jPanelReport) { 4343 this.jPanelReport = jPanelReport; 4344 } 4345 4346 4350 public boolean isShowGrid() { 4351 return showGrid; 4352 } 4353 4354 4358 public void setShowGrid(boolean showGrid) { 4359 4360 if (this.showGrid == showGrid) return; 4361 4362 this.showGrid = showGrid; 4363 isDocDirty = true; 4364 jPanelReport.repaint(); 4365 } 4366 4367 4371 public int getGridSize() { 4372 try { 4373 return Integer.parseInt(MainFrame.getMainInstance().getProperties().getProperty("GridSize","10")); 4374 } catch (Exception ex) 4375 { 4376 return 60; 4377 } 4378 } 4379 4380 4384 public int getTransformationMinSize() { 4385 return transformationMinSize; 4386 } 4387 4388 4392 public void setTransformationMinSize(int transformationMinSize) { 4393 this.transformationMinSize = transformationMinSize; 4394 } 4395 4396 public int snapToGridVertically(int scaledYPoint) { 4397 4398 int real_o_y = getLogicalDim((int)(scaledYPoint + jVerticalScrollBar.getValue() - 10)) + 10; 4399 4400 return getZoomedDim(closestXMagneticElement(real_o_y,getGridSize(), jVerticalRule.getGuideLines()) -10)+10-getVScroll(); 4401 4402 4423 } 4424 4425 public int snapToGridOrizzontally(int scaledXPoint) { 4426 4427 int real_o_x = getLogicalDim((int)(scaledXPoint + jHorizontalScrollBar.getValue() - 10)) + 10; 4428 4429 return getZoomedDim(closestXMagneticElement(real_o_x,getGridSize(), jHorizontalRule.getGuideLines()) -10)+10-getHScroll(); 4430 4455 } 4456 4457 public int gridMultiple( int zoomedDim) { 4458 if (!isSnapToGrid()) { 4459 return zoomedDim; 4460 } 4461 4462 int zoomedGridSize = getZoomedDim(this.getGridSize()); 4463 double val = Math.abs(zoomedDim); 4464 if ( zoomedGridSize > 1.0 ) { 4465 val = Math.floor( ( val + (0.5 * zoomedGridSize)) / zoomedGridSize ) * zoomedGridSize; 4466 } 4467 4468 return (int) ( (zoomedDim >= 0) ? val : -val ); 4469 } 4470 4471 4497 4498 4499 4503 public boolean isSnapToGrid() { 4504 return snapToGrid; 4505 } 4506 4507 4511 public void setSnapToGrid(boolean snapToGrid) { 4512 this.snapToGrid = snapToGrid; 4513 } 4514 4515 4519 public boolean isIsDocDirty() { 4520 return isDocDirty; 4521 } 4522 4523 4527 public void setIsDocDirty(boolean isDocDirty) { 4528 this.isDocDirty = isDocDirty; 4529 } 4530 4531 public void checkSelection(boolean repaint) { 4532 boolean needRepaint = false; 4533 for (int i=0; i< getSelectedElements().size(); ++i) { 4534 ReportElement selected = (ReportElement)getSelectedElements().get(i); 4536 if (!this.getReport().getElements().contains(selected)) { 4537 getSelectedElements().removeElementAt(i); 4538 i--; 4539 needRepaint = true; 4540 } 4541 } 4542 if (repaint && needRepaint) { 4543 jPanelReport.repaint(); 4544 } 4545 } 4546 4547 4551 public int getWindowID() { 4552 return windowID; 4553 } 4554 4555 4559 public void setWindowID(int windowID) { 4560 this.windowID = windowID; 4561 } 4562 4563 4567 public synchronized void addReportListener(it.businesslogic.ireport.gui.event.ReportListener listener) { 4568 if (listenerList == null ) { 4569 listenerList = new javax.swing.event.EventListenerList (); 4570 } 4571 listenerList.add(it.businesslogic.ireport.gui.event.ReportListener.class, listener); 4572 } 4573 4574 4578 synchronized void removeReportListener(it.businesslogic.ireport.gui.event.ReportListener listener) { 4579 listenerList.remove(it.businesslogic.ireport.gui.event.ReportListener.class, listener); 4580 } 4581 4582 4587 public void fireReportListenerReportElementsSelectionChanged(it.businesslogic.ireport.gui.event.ReportElementsSelectionEvent event) { 4588 if (listenerList == null) return; 4589 Object [] listeners = listenerList.getListenerList(); 4590 for (int i = listeners.length-2; i>=0; i-=2) { 4591 if (listeners[i]==it.businesslogic.ireport.gui.event.ReportListener.class) { 4592 ((it.businesslogic.ireport.gui.event.ReportListener)listeners[i+1]).reportElementsSelectionChanged(event); 4593 } 4594 } 4595 } 4596 4597 4602 public void fireReportListenerReportElementsChanged(it.businesslogic.ireport.gui.event.ReportElementChangedEvent event) { 4603 if (listenerList == null) return; 4604 Object [] listeners = listenerList.getListenerList(); 4605 for (int i = listeners.length-2; i>=0; i-=2) { 4606 if (listeners[i]==it.businesslogic.ireport.gui.event.ReportListener.class) { 4607 ((it.businesslogic.ireport.gui.event.ReportListener)listeners[i+1]).reportElementsChanged(event); 4608 } 4609 } 4610 } 4611 4612 4617 public void fireReportListenerReportBandChanged(it.businesslogic.ireport.gui.event.ReportBandChangedEvent event) { 4618 if (listenerList == null) return; 4619 Object [] listeners = listenerList.getListenerList(); 4620 for (int i = listeners.length-2; i>=0; i-=2) { 4621 if (listeners[i]==it.businesslogic.ireport.gui.event.ReportListener.class) { 4622 ((it.businesslogic.ireport.gui.event.ReportListener)listeners[i+1]).reportBandChanged(event); 4623 } 4624 } 4625 } 4626 4627 4628 4631 public UndoOperation getUndoOperation() { 4632 if (this.undoOperations.size() > 0 && undoIndex >= 0) 4633 return (UndoOperation)this.undoOperations.elementAt(undoIndex); 4634 return null; 4635 } 4636 4637 4640 public void undo() { 4641 if (getUndoOperation() != null) { 4642 UndoOperation u = getUndoOperation(); 4643 u.undo(); 4644 this.undoIndex--; 4645 4646 this.getReport().decrementReportChanges(); 4647 getMainFrame().updateOpenedDocumentsList(); 4648 } 4649 } 4650 4651 4654 public void redo() { 4655 if (getRedoOperation() != null) { 4656 getRedoOperation().redo(); 4657 this.undoIndex++; 4658 4659 this.getReport().incrementReportChanges(); 4660 getMainFrame().updateOpenedDocumentsList(); 4661 } 4662 } 4663 4664 4667 public UndoOperation getRedoOperation() { 4668 if (this.undoOperations.size() > undoIndex+1) 4669 return (UndoOperation)this.undoOperations.elementAt(undoIndex+1); 4670 return null; 4671 } 4672 4673 public void addUndoOperation(UndoOperation undo) { 4674 while (this.undoOperations.size() > undoIndex+1) { 4676 this.undoOperations.removeElementAt( undoIndex+1 ); 4677 } 4678 undoOperations.addElement(undo); 4679 undoIndex++; 4680 4681 getReport().incrementReportChanges(); 4682 4683 4691 try { 4692 getMainFrame().updateUndoMenu(this); 4693 } catch (Exception ex) { 4694 System.out.println( "[2]" + ex); 4695 ex.printStackTrace(); 4696 } 4697 } 4698 4699 public void deleteSelectedElements() { 4700 Enumeration e = selectedElements.elements(); 4702 4703 DeleteElementsOperation undoOp = new DeleteElementsOperation(this); 4704 Vector deletedElements = new Vector(); 4705 4706 while (e.hasMoreElements()) { 4707 4708 ReportElement re = (ReportElement) e.nextElement(); 4709 if ( getReport().getElements().contains( re)) 4710 { 4711 undoOp.addElement( re, getReport().getElements().indexOf(re)); 4712 getReport().getElements().remove( re ); 4713 deletedElements.add(re); 4714 if (re instanceof FrameReportElement) 4715 { 4716 removeSubElements(re, undoOp, deletedElements); 4717 } 4718 if (re instanceof CrosstabReportElement) 4719 { 4720 removeCrosstabEditor((CrosstabReportElement)re); 4721 } 4722 } 4723 } 4725 4726 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, deletedElements, ReportElementChangedEvent.REMOVED )); 4727 this.setSelectedElement(null); 4728 this.addUndoOperation(undoOp); 4729 4731 jPanelReport.repaint(); 4732 } 4733 4734 protected void removeSubElements(ReportElement parentElement, DeleteElementsOperation undoOp, Vector deletedElements) 4735 { 4736 for (int i=0; i<getReport().getElements().size(); ++i) 4737 { 4738 ReportElement re = (ReportElement)getReport().getElements().elementAt(i); 4739 if (re.getParentElement() == parentElement) 4740 { 4741 undoOp.addElement( re, getReport().getElements().indexOf(re)); 4742 getReport().getElements().remove( re ); 4743 i--; 4744 deletedElements.add(re); 4745 if (re instanceof FrameReportElement) 4746 { 4747 removeSubElements(re, undoOp, deletedElements); 4748 } 4749 if (re instanceof CrosstabReportElement) 4750 { 4751 removeCrosstabEditor((CrosstabReportElement)re); 4752 } 4753 4754 } 4755 } 4756 } 4757 4758 public void cut() { 4759 Vector copiedElements = new Vector(); 4760 4761 Vector tmpSelectedElements = null; 4762 if (getSelectedCrosstabEditorPanel() != null) 4763 { 4764 tmpSelectedElements = getSelectedCrosstabEditorPanel().getSelectedElements(); 4765 } 4766 else 4767 { 4768 tmpSelectedElements = this.getSelectedElements(); 4769 } 4770 4771 Enumeration e = tmpSelectedElements.elements(); 4772 while (e.hasMoreElements()) { 4773 ReportElement er = (ReportElement)e.nextElement(); 4774 copiedElements.add(er.cloneMe()); 4775 } 4776 4777 4778 if (copiedElements.size() > 0) { 4779 getMainFrame().setClipBoardContent(copiedElements); 4780 } 4781 4782 if (getSelectedCrosstabEditorPanel() != null) 4784 { 4785 getSelectedCrosstabEditorPanel().deleteSelectedElements(); 4786 } 4787 else 4788 { 4789 this.deleteSelectedElements(); 4790 } 4791 getMainFrame().updateCutAndPasteMenu(this); 4792 4793 } 4794 4795 public void copy() { 4796 Vector copiedElements = new Vector(); 4797 4798 Vector tmpSelectedElements = null; 4799 if (getSelectedCrosstabEditorPanel() != null) 4800 { 4801 tmpSelectedElements = getSelectedCrosstabEditorPanel().getSelectedElements(); 4802 } 4803 else 4804 { 4805 tmpSelectedElements = this.getSelectedElements(); 4806 } 4807 4808 Enumeration e = tmpSelectedElements.elements(); 4809 while (e.hasMoreElements()) { 4810 ReportElement er = (ReportElement)e.nextElement(); 4811 if (!(er instanceof CrosstabReportElement)) 4812 { 4813 copiedElements.add(er.cloneMe()); 4814 } 4815 } 4816 if (copiedElements.size() > 0) { 4817 getMainFrame().setClipBoardContent(copiedElements); 4818 } 4819 4820 getMainFrame().updateCutAndPasteMenu(this); 4821 } 4822 4823 public void paste() { 4824 pasteHere(null); 4826 } 4827 4828 public void pasteHere(Point p) { 4829 4831 Enumeration e = getMainFrame().getClipBoard().elements(); 4832 ReportElement container = null; 4833 4834 Vector tmpSelectedElements = null; 4835 if (getSelectedCrosstabEditorPanel() != null) 4836 { 4837 tmpSelectedElements = getSelectedCrosstabEditorPanel().getSelectedElements(); 4838 } 4839 else 4840 { 4841 tmpSelectedElements = this.getSelectedElements(); 4842 } 4843 4844 if (tmpSelectedElements.size() > 0) 4845 { 4846 container = (ReportElement)tmpSelectedElements.elementAt(0); 4847 if (!(container instanceof FrameReportElement)) 4848 { 4849 container = null; 4850 } 4851 } 4852 4853 if (getSelectedCrosstabEditorPanel() != null) 4854 { 4855 getSelectedCrosstabEditorPanel().setSelectedElement(null); 4856 } 4857 else 4858 { 4859 setSelectedElement(null); 4860 } 4861 4862 Vector addedElements = new Vector(); 4863 4864 4865 int y = 0; 4866 if (p != null){ 4867 4868 if (getSelectedCrosstabEditorPanel() != null) 4869 { 4870 y = getSelectedCrosstabEditorPanel().getZoomedDim(p.y-10); 4871 } 4872 else 4873 { 4874 y= getLogicalDim( p.y-10+jVerticalScrollBar.getValue())+10; 4875 } 4876 } 4877 4878 CrosstabReportElement crReportElement = null; 4879 if (getSelectedCrosstabEditorPanel() != null) crReportElement = getSelectedCrosstabEditorPanel().getCrosstabElement(); 4880 4881 while (e.hasMoreElements()) { 4882 ReportElement re = ((ReportElement)e.nextElement()).cloneMe(); 4883 4884 re.setKey( getNextElementKey(re.getKey()) ); 4885 4886 4887 if (getSelectedCrosstabEditorPanel() != null) 4888 { 4889 if (re instanceof BreakReportElement || 4890 re instanceof ChartReportElement || 4891 re instanceof ChartReportElement2 || 4892 re instanceof CrosstabReportElement || 4893 re instanceof SubReportElement) continue; 4894 4895 CrosstabCell cell = null; 4896 if (getSelectedCrosstabEditorPanel().isDefaultCellMode()) 4897 { 4898 cell = getSelectedCrosstabEditorPanel().getWhenNoDataCell(); 4899 4900 } 4901 else if (p != null) 4902 { 4903 cell = getSelectedCrosstabEditorPanel().getCellByPoint(p); 4904 if (cell == null) cell = (CrosstabCell)getSelectedCrosstabEditorPanel().getCrosstabElement().getCells().elementAt(0); 4905 } 4906 re.setBand(null); 4907 if (re.getCell() != null) 4908 { 4909 re.setRelativePosition(new Point(re.getPosition().x - re.getCell().getLeft()-10, 4911 re.getPosition().y - re.getCell().getTop()-10)); 4912 } 4913 else 4914 { 4915 re.setRelativePosition(new Point(0,0)); 4916 } 4917 4918 4920 if (cell != null) 4922 { 4923 re.setCell(cell); 4924 re.getPosition().x = re.getRelativePosition().x + re.getCell().getLeft()+10; 4925 re.getPosition().y = re.getRelativePosition().y + re.getCell().getTop()+10; 4926 } 4927 else if (getSelectedCrosstabEditorPanel().getCrosstabElement().getCells().contains( re.getCell())) 4928 { 4929 re.getPosition().x += 10; 4930 re.getRelativePosition().x += 10; 4931 re.getPosition().y += 10; 4932 re.getRelativePosition().y += 10; 4933 } 4934 else 4935 { 4936 cell = (CrosstabCell)getSelectedCrosstabEditorPanel().getCrosstabElement().getCells().elementAt(0); 4937 re.setCell(cell); 4938 re.getPosition().x = re.getRelativePosition().x + re.getCell().getLeft()+10; 4939 re.getPosition().y = re.getRelativePosition().y + re.getCell().getTop()+10; 4940 } 4941 4942 } 4943 else 4944 { 4945 String bandName = (re.getBand() == null) ? "" : re.getBand().getName(); 4946 Band b = getReport().getBandByName( bandName ); 4947 re.setBand( b ); 4948 4949 4950 if (p !=null) 4951 { 4952 int ylocation = getReport().getBandYLocation( b ); 4953 Band myBand = null; 4954 4955 Enumeration enum_bands = getReport().getBands().elements(); 4956 while (enum_bands.hasMoreElements()) { 4957 Band bb = (Band)enum_bands.nextElement(); 4958 if (report.getBandYLocation(bb)+10 <= y) { 4959 myBand = bb; 4960 } 4961 } 4962 4963 if (myBand == null) return; 4964 4965 int ylocation2 = getReport().getBandYLocation( myBand ); 4966 4967 Point location = re.getPosition(); 4968 location.y += ylocation2 - ylocation; 4969 4970 re.setBand( myBand ); 4971 re.setPosition(location); 4972 } 4973 else 4974 { 4975 if (re.getPosition().y > getReport().getDesignHeight()-getReport().getBottomMargin()) 4976 { 4977 re.getPosition().y = getReport().getDesignHeight()-1-getReport().getBottomMargin(); 4978 } 4979 if (b == null) b = getReport().getBandByPosition( re.getPosition().y ); 4980 re.setBand( b ); 4981 java.awt.Point p2 = re.getPosition(); 4982 int add_x = this.getGridSize(); 4983 if (re instanceof BreakReportElement) add_x = 0; 4984 re.setPosition(new java.awt.Point (p2.x+add_x,p2.y+this.getGridSize())); 4985 } 4986 4987 if (container != null) 4988 { 4989 re.setBand( container.getBand()); 4990 re.setParentElement( container); 4991 } 4992 else 4993 { 4994 re.setParentElement( null ); 4995 } 4996 4997 } 4998 4999 if (re instanceof CrosstabReportElement) 5000 { 5001 addCrosstabEditor((CrosstabReportElement)re); 5002 } 5003 re.updateBounds(); 5004 5005 5009 addUndoOperation( new InsertElementOperation(this, crReportElement, re) ); 5010 5011 if (getSelectedCrosstabEditorPanel() != null) 5012 { 5013 crReportElement.getElements().addElement(re); 5014 getSelectedCrosstabEditorPanel().addSelectedElement(re); 5015 } 5016 else 5017 { 5018 report.getElements().addElement(re); 5019 addSelectedElement(re, false); 5020 } 5021 addedElements.add(re); 5022 } 5023 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, crReportElement, addedElements , ReportElementChangedEvent.ADDED)); 5024 5025 if (crReportElement != null) 5026 { 5027 getSelectedCrosstabEditorPanel().fireSelectionChangedEvent(); 5028 } 5029 else 5030 { 5031 fireSelectionChangedEvent(); 5032 } 5033 5034 getMainFrame().updateCutAndPasteMenu(this); 5035 5036 } 5037 5038 public void openElementPropertiesDialog(){ 5039 MainFrame mainFrame = getMainFrame(); 5041 5042 5043 if ((getSelectedCrosstabEditorPanel() != null && getSelectedCrosstabEditorPanel().getSelectedElements().size() > 0) || 5044 getSelectedElements().size() > 0) 5045 { 5046 if (!mainFrame.getElementPropertiesDialog().isVisible()) { 5047 mainFrame.getElementPropertiesDialog().setVisible(true); 5049 } 5050 } 5051 5052 if (getSelectedCrosstabEditorPanel() != null) getSelectedCrosstabEditorPanel().requestFocus(); 5053 else jPanelReport.requestFocus(); 5054 } 5055 5056 public void updateTitle() { 5057 5058 this.setTitle(this.report.getName()+" "+this.report.getWidth()+"x"+this.report.getDesignHeight()+" ["+Misc.nvl(this.report.getFilename(),"unnamed")+"]"); 5059 5060 } 5061 5062 5065 public void bringToFront() { 5066 Enumeration e = this.getSelectedElements().elements(); 5067 5068 ChangeEmentsOrderOperation undoOp = new ChangeEmentsOrderOperation(this); 5069 5070 while (e.hasMoreElements()) { 5071 ReportElement element = (ReportElement)e.nextElement(); 5072 5073 int oldPosition = getReport().getElements().indexOf(element); 5074 getReport().getElements().remove(element); 5075 getReport().getElements().addElement(element); 5076 int newPosition = getReport().getElements().indexOf(element); 5077 undoOp.addElement(element,oldPosition, newPosition); 5078 } 5079 5080 if (undoOp.getElements().size() > 0) { 5081 addUndoOperation(undoOp); 5082 } 5083 getReportPanel().repaint(); 5084 5086 } 5087 5088 public void sendToBack() { 5089 Enumeration e = this.getSelectedElements().elements(); 5090 5091 ChangeEmentsOrderOperation undoOp = new ChangeEmentsOrderOperation(this); 5092 5093 while (e.hasMoreElements()) { 5094 ReportElement element = (ReportElement)e.nextElement(); 5095 5096 int oldPosition = getReport().getElements().indexOf(element); 5097 getReport().getElements().remove(element); 5098 if (element.getParentElement() != null) 5099 { 5100 getReport().getElements().insertElementAt( element, getReport().getElements().indexOf(element.getParentElement())+1); 5101 } 5102 else 5103 { 5104 getReport().getElements().insertElementAt(element,0); 5105 } 5106 int newPosition = 0; 5107 undoOp.addElement(element,oldPosition, newPosition); 5108 } 5109 5110 if (undoOp.getElements().size() > 0) { 5111 addUndoOperation(undoOp); 5112 } 5113 getReportPanel().repaint(); 5114 5116 } 5117 5118 5915 5916 public TextFieldReportElement dropNewTextField(Point newObjectOrigin, String textfieldExpression, String classExpression) { 5917 5918 return dropNewTextField(newObjectOrigin, textfieldExpression, classExpression, "Now"); 5919 } 5920 5921 public Band getBandAt(Point newObjectOrigin) { 5922 Enumeration enum_bands = report.getBands().elements(); 5923 Band bname = null; 5924 5925 int delta_h = 0; 5926 delta_h = gridMultiple(18); 5927 int delta_y = (delta_h<0) ? delta_h : 0; 5928 int originY = getLogicalDim( Math.min(newObjectOrigin.y-10+jVerticalScrollBar.getValue(),newObjectOrigin.y+delta_y-10+jVerticalScrollBar.getValue()))+10; 5929 5930 while (enum_bands.hasMoreElements()) { 5931 Band b = (Band)enum_bands.nextElement(); 5932 if (report.getBandYLocation(b)+10 <= originY) { 5933 bname = b; 5934 } 5935 } 5936 5937 return bname; 5938 5939 } 5940 5941 public TextFieldReportElement dropNewTextField(Point newObjectOrigin, String textfieldExpression, String classExpression, String time) { 5942 TextFieldReportElement re = null; 5943 5945 re = new TextFieldReportElement( 0, 0, 10, 10); 5946 re.setText(textfieldExpression); 5947 re.setMatchingClassExpression( classExpression , true); 5948 5949 if (re.getClassExpression().equals("java.math.BigDecimal") || 5950 re.getClassExpression().equals("java.lang.Double") || 5951 re.getClassExpression().equals("java.lang.Float")) 5952 { 5953 re.setPattern("##0.00"); 5954 } 5955 5956 re.setEvaluationTime( time ); 5957 return (TextFieldReportElement)dropReportElement(newObjectOrigin,re); 5958 } 5959 5960 5964 public ReportElement dropReportElement(Point newObjectOrigin, ReportElement re) 5965 { 5966 return dropReportElement(newObjectOrigin, re, 100, 18); 5967 } 5968 5969 5973 public ReportElement dropReportElement(Point newObjectOrigin, ReportElement re, int defaultWidth, int defaultHeight) { 5974 5975 Enumeration enum_bands = report.getBands().elements(); 5976 Band bname = null; 5977 5978 int delta_w = 0; 5979 int delta_h = 0; 5980 delta_w = gridMultiple(defaultWidth); 5981 delta_h = gridMultiple(defaultHeight); 5982 int delta_x = (delta_w<0) ? delta_w: 0; 5983 int delta_y = (delta_h<0) ? delta_h : 0; 5984 5985 int originX = getLogicalDim( Math.min(newObjectOrigin.x-10+jHorizontalScrollBar.getValue(),newObjectOrigin.x+delta_x-10+jHorizontalScrollBar.getValue()))+10; 5986 int originY = getLogicalDim( Math.min(newObjectOrigin.y-10+jVerticalScrollBar.getValue(),newObjectOrigin.y+delta_y-10+jVerticalScrollBar.getValue()))+10; 5987 int width = getLogicalDim( Math.abs( delta_w) ); 5988 int height = getLogicalDim( Math.abs(delta_h) ); 5989 while (enum_bands.hasMoreElements()) { 5990 Band b = (Band)enum_bands.nextElement(); 5991 if (report.getBandYLocation(b)+10 <= originY) { 5992 bname = b; 5993 } 5994 } 5995 re.setPosition( new Point(originX,originY)); 5996 re.setHeight(height); 5997 re.setWidth(width); 5998 5999 re.setBand( bname ); 6000 6001 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, re , ReportElementChangedEvent.ADDED)); 6002 addUndoOperation( new InsertElementOperation(this, re) ); 6003 6004 report.getElements().addElement(re); 6005 setSelectedElement(re); 6006 jPanelReport.setCursor( Cursor.getDefaultCursor()); 6007 getMainFrame().setActiveTool(0); 6008 6009 return re; 6010 6011 } 6012 6013 public void moveUp() { 6014 if (this.getSelectedElements().size() == 0) return; 6015 6016 Enumeration e = this.getSelectedElements().elements(); 6017 6018 ChangeEmentsOrderOperation undoOp = new ChangeEmentsOrderOperation(this); 6019 6020 while (e.hasMoreElements()) { 6021 ReportElement element = (ReportElement)e.nextElement(); 6022 6023 int oldPosition = getReport().getElements().indexOf(element); 6024 getReport().moveElementUp( element ); 6025 6030 int newPosition = getReport().getElements().indexOf(element); 6031 undoOp.addElement(element,oldPosition, newPosition); 6032 } 6034 6035 addUndoOperation(undoOp); 6036 getReportPanel().repaint(); 6037 6039 } 6040 6041 public void moveDown() { 6042 if (getSelectedElements().size() == 0) return; 6043 6044 ChangeEmentsOrderOperation undoOp = new ChangeEmentsOrderOperation(this); 6045 6046 Vector selected = getSelectedElements(); 6047 for(int i = selected.size() - 1; i >= 0; i--) { 6048 ReportElement element = (ReportElement) selected.get(i); 6049 6050 int oldPosition = getReport().getElements().indexOf(element); 6051 6052 getReport().moveElementDown(element); 6054 6055 6056 int newPosition = getReport().getElements().indexOf(element); 6057 undoOp.addElement(element,oldPosition, newPosition); 6058 6059 } 6061 6062 6063 6064 addUndoOperation(undoOp); 6065 getReportPanel().repaint(); 6066 6067 6069 } 6070 6071 public void transformStaticInTextFields() { 6072 String keyStaticText = (new StaticTextReportElement(0,0,0,0)).getKey(); 6074 String keyTextField = (new TextFieldReportElement(0,0,0,0)).getKey(); 6075 6077 6078 Enumeration e = selectedElements.elements(); 6080 6081 ReplacedElementsOperation undoOp = new ReplacedElementsOperation(this); 6082 6083 while (e.hasMoreElements()) { 6084 ReportElement re = (ReportElement) e.nextElement(); 6085 if(re instanceof StaticTextReportElement){ 6086 TextFieldReportElement tfre = new TextFieldReportElement(re.getPosition().x, re.getPosition().y, re.width, re.height); 6088 tfre.copyBaseReportElement(tfre, re); 6090 tfre.setBold(((TextReportElement)re).isBold() ); 6092 tfre.setUnderline( ((TextReportElement)re).isUnderline() ); 6093 tfre.setStrikeTrought( ((TextReportElement)re).isStrikeTrought() ); 6094 tfre.setItalic( ((TextReportElement)re).isItalic() ); 6095 6096 tfre.setLineSpacing( ((TextReportElement)re).getLineSpacing() ); 6097 tfre.setPDFFontName( ((TextReportElement)re).getPDFFontName() ); 6098 tfre.setPdfEncoding( ((TextReportElement)re).getPdfEncoding() ); 6099 tfre.setReportFont( ((TextReportElement)re).getReportFont() ); 6100 tfre.setRotate( ((TextReportElement)re).getRotate() ); 6101 tfre.setTTFFont( ((TextReportElement)re).getTTFFont() ); 6102 tfre.setVerticalAlign( ((TextReportElement)re).getVerticalAlign()); 6103 tfre.setFont( ((TextReportElement)re).getFont() ); 6104 tfre.setFontName( ((TextReportElement)re).getFontName() ); 6105 tfre.setFontSize(((TextReportElement)re).getFontSize() ); 6106 6107 tfre.setClassExpression( "java.lang.String" ); 6108 6109 if (re.getKey().indexOf( keyStaticText + "-" ) == 0 ) { 6112 tfre.setKey( getNextElementKey( keyTextField ) ); 6115 } 6116 6122 6124 String te = ((TextReportElement)re).getText(); 6125 String result = javax.swing.JOptionPane.showInputDialog(this, 6126 I18n.getString("messages.jReportFrame.insertValue", "Please enter new Value"), 6127 "\"" +te + "\""); 6128 if(result != null && !result.equals("")){ 6129 ((TextReportElement)tfre).setText(result); 6130 int index = getReport().getElements().indexOf( re ); 6132 getReport().getElements().remove( re ); 6133 getReport().getElements().add( index, tfre); 6134 6135 int index2 = getSelectedElements().indexOf( re ); 6136 getSelectedElements().remove( re ); 6137 getSelectedElements().add( index2, tfre); 6138 6139 undoOp.addElement( re, tfre); 6141 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, re , ReportElementChangedEvent.REMOVED)); 6142 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this, tfre , ReportElementChangedEvent.ADDED)); 6143 6144 } 6145 } 6146 } 6147 this.addUndoOperation(undoOp); 6148 fireReportListenerReportElementsSelectionChanged(new ReportElementsSelectionEvent( this, getSelectedElements())); 6149 jPanelReport.repaint(); 6150 } 6151 6152 public void pasteStyle() { 6153 if (this.getSelectedElements().size() == 0) return; 6154 if (this.getMainFrame().getStyleClipboard() == null) return; 6155 6156 ReportElement templateElement = this.getMainFrame().getStyleClipboard(); 6158 6159 PasteStyleOperation undoOp = new PasteStyleOperation(this); 6160 6161 Enumeration elements = getSelectedElements().elements(); 6162 Vector changedElements = new Vector(); 6163 while (elements.hasMoreElements()) { 6164 ReportElement re = (ReportElement)elements.nextElement(); 6165 undoOp.addElement(re, re.cloneMe(), templateElement); 6166 changedElements.add(re); 6167 applyStyle(re, templateElement); 6168 } 6169 this.addUndoOperation(undoOp); 6170 fireReportListenerReportElementsChanged(new ReportElementChangedEvent(this , changedElements , ReportElementChangedEvent.CHANGED)); 6171 jPanelReport.repaint(); 6172 6173 } 6174 6175 public static void applyStyle(ReportElement re, ReportElement templateElement) { 6176 if (re == null || templateElement == null) return; 6177 if (templateElement.getPropertyValue( re.BGCOLOR ) != null) 6179 { 6180 re.setBgcolor(templateElement.getBgcolor()); 6181 } 6182 if (templateElement.getPropertyValue( re.FGCOLOR ) != null) 6183 { 6184 re.setFgcolor(templateElement.getFgcolor()); 6185 } 6186 6187 System.out.println("Applying style s:" + templateElement.getStyle()); 6188 re.setStyle( templateElement.getStyle() ); 6189 6190 if (re instanceof GraphicReportElement && templateElement instanceof GraphicReportElement ) { 6191 re.setPropertyValue(((GraphicReportElement)templateElement).FILL, templateElement.getPropertyValue( ((GraphicReportElement)templateElement).FILL )); 6192 re.setPropertyValue(((GraphicReportElement)templateElement).PEN, templateElement.getPropertyValue( ((GraphicReportElement)templateElement).PEN )); 6193 6194 6195 } 6196 if (re instanceof TextReportElement && templateElement instanceof TextReportElement ) { 6197 ((TextReportElement)re).setFont(((TextReportElement)templateElement).getFont()); 6198 6199 ((TextReportElement)re).setReportFont(((TextReportElement)templateElement).getReportFont()); 6200 6201 if ( ((TextReportElement)templateElement).getPropertyValue( TextReportElement.VERTICAL_ALIGN) != null) 6202 { 6203 ((TextReportElement)re).setVerticalAlign(((TextReportElement)templateElement).getVerticalAlign()); 6204 } 6205 if ( ((TextReportElement)templateElement).getPropertyValue( TextReportElement.IS_STYLED_TEXT) != null) 6206 { 6207 ((TextReportElement)re).setIsStyledText(((TextReportElement)templateElement).isIsStyledText()); 6208 } 6209 if ( ((TextReportElement)templateElement).getPropertyValue( TextReportElement.LINE_SPACING) != null) 6210 { 6211 ((TextReportElement)re).setLineSpacing(((TextReportElement)templateElement).getLineSpacing()); 6212 } 6213 6214 if ( ((TextReportElement)templateElement).getPropertyValue( TextReportElement.ROTATE) != null) 6215 { 6216 ((TextReportElement)re).setRotate(((TextReportElement)templateElement).getRotate()); 6217 } 6218 if ( ((TextReportElement)templateElement).getPropertyValue( TextReportElement.ALIGN) != null) 6219 { 6220 ((TextReportElement)re).setAlign(((TextReportElement)templateElement).getAlign()); 6221 } 6222 ((TextReportElement)re).setIReportFont( ( IReportFont) ((TextReportElement)templateElement).getIReportFont().clone() ); 6223 6224 6225 } 6226 6227 } 6228 6229 public void copyStyle() { 6230 if (this.getSelectedElements().size() == 0) return; 6232 this.getMainFrame().setStyleClipbardContent( ((ReportElement)this.getSelectedElements().elementAt(0)).cloneMe() ); 6233 6234 } 6235 6236 public void updateScrollBars() { 6237 jPanelReportComponentResized(null); 6238 } 6239 6240 public String getNextElementKey(String keyElement) { 6242 int maxKey = 0; 6243 String prefix = keyElement; 6244 6245 if ( prefix.indexOf( "-") > 0 ){ 6248 prefix = prefix.substring(0, prefix.indexOf("-") ); 6249 } 6250 prefix = prefix + "-" ; 6251 6252 int pos = prefix.indexOf( "-") + 1; 6253 6254 for (Iterator i = report.getElements().iterator(); i.hasNext(); ) { 6255 ReportElement re = (ReportElement) i.next(); 6256 if ( re.getKey().indexOf( prefix ) == 0 ) { 6257 try { 6258 int elementNum = (int) Integer.valueOf( re.getKey().substring(pos) ).intValue(); 6259 maxKey = maxKey < elementNum ? elementNum: maxKey; 6260 } catch (NumberFormatException err) { 6261 } 6264 } 6265 } 6266 6267 6275 6276 return ( prefix + (maxKey+1) ) ; 6277 } 6278 6280 public void centerSelectedElements( ) { 6282 centerSelectedElements( null); 6283 } 6284 6285 public void centerSelectedElements( Point center ) { 6286 6287 if ( getSelectedElements().size() > 0) { 6290 double minX = 999999999.0; double minY = 999999999.0; double maxX = 0.0; 6293 double maxY = 0.0; 6294 double centerX = 0.0; 6295 double centerY = 0.0; 6296 boolean intersects = true; 6297 Rectangle rect = new Rectangle( realPoint( 0.0, 0.0 ), new Dimension( this.getWidth(), this.getHeight() ) ) ; 6298 6299 for (Iterator i = this.getSelectedElements().iterator(); i.hasNext(); ) { 6300 ReportElement re = (ReportElement) i.next(); 6301 6302 minY = Math.min( minY, re.getPosition().y -10) ; 6303 minX = Math.min( minX, re.getPosition().x -10); 6304 6305 maxY = Math.max( maxY, re.getPosition().y + re.getHeight() -10 ) ; 6306 maxX = Math.max( maxX, re.getPosition().x + re.getWidth() -10 ); 6307 6308 } 6309 centerX = ((minX + maxX)/2); 6310 centerY = ((minY + maxY)/2); 6311 6312 repositionScrollBars( new Point( (int) centerX, (int) centerY)); 6313 6314 } else { 6315 if ( center != null ) { 6318 repositionScrollBars( center ); 6319 } 6320 6321 } 6322 this.setIsDocDirty(false); 6323 6324 } 6325 6330 6331 public void repositionScrollBars(Point center) { 6332 try{ 6333 if (jHorizontalScrollBar.getVisibleAmount() < jHorizontalScrollBar.getMaximum() ) { 6334 double horbarvalue = this.jHorizontalScrollBar.getMaximum() * center.x / this.report.getWidth(); 6335 this.jHorizontalScrollBar.setValue( (int) ( horbarvalue - ( 0.5 * jHorizontalScrollBar.getVisibleAmount() )) ); 6336 } 6337 if (jVerticalScrollBar.getVisibleAmount() < jVerticalScrollBar.getMaximum() ) { 6338 double verbarvalue = this.jVerticalScrollBar.getMaximum() * center.y / this.report.getDesignHeight(); 6339 this.jVerticalScrollBar.setValue( (int) ( verbarvalue - ( 0.5 * jVerticalScrollBar.getVisibleAmount() ) ) ); 6340 } 6341 } catch (Exception ex) { 6342 6343 } 6344 } 6345 6346 6349 public Point getCurrentCenter(){ 6350 double centerX = 0.0 ; 6351 double centerY = 0.0 ; 6352 6353 if (jVerticalScrollBar.getVisibleAmount() >= jVerticalScrollBar.getMaximum() ) { 6354 centerY = 0 ; } else { 6356 centerY = (double) this.jVerticalScrollBar.getValue(); 6357 centerY += 0.5 * (double) this.jVerticalScrollBar.getVisibleAmount(); 6358 centerY /= (double) this.jVerticalScrollBar.getMaximum(); 6359 centerY *= (double) this.getReport().getDesignHeight(); 6360 } 6361 6362 if (jHorizontalScrollBar.getVisibleAmount() >= jHorizontalScrollBar.getMaximum() ) { 6363 centerX = 0 ; } else { 6367 centerX = (double) this.jHorizontalScrollBar.getValue(); 6368 centerX += 0.5 * (double) this.jHorizontalScrollBar.getVisibleAmount(); 6369 centerX /= (double) this.jHorizontalScrollBar.getMaximum(); 6370 centerX *= (double) this.getReport().getWidth(); 6371 } 6372 return new Point( (int) centerX, (int) centerY); 6373 6374 } 6375 6376 public void logOnConsole(String s) { 6377 this.getMainFrame().logOnConsole(s); 6378 } 6379 6380 public Point realPoint( double deltaX, double deltaY ){; 6381 double centerX = 0.0; 6382 double centerY = 0.0; 6383 6384 centerX = (double) this.jHorizontalScrollBar.getValue(); 6385 centerX += (double) deltaX; 6386 centerX /= (double) this.jHorizontalScrollBar.getMaximum(); 6387 centerX *= (double) this.getReport().getWidth(); 6388 6389 centerY = (double) this.jVerticalScrollBar.getValue(); 6390 centerY += (double) deltaY; 6391 centerY /= (double) this.jVerticalScrollBar.getMaximum(); 6392 centerY *= (double) this.getReport().getDesignHeight(); 6393 6394 return new Point( (int) centerX, (int) centerY ); 6395 } 6396 6397 public java.util.Vector getBandElements(Band band) { 6398 Vector bandElements = new Vector(); 6399 6400 for (Iterator i = getReport().getElements().iterator(); i.hasNext(); ) { 6401 ReportElement re = (ReportElement) i.next(); 6402 if ( re.getBand().equals(band) ) { 6403 bandElements.addElement(re); 6404 } 6405 } 6406 return bandElements; 6407 } 6408 6409 6410 6417 public void resizeBand( Band band, int delta, boolean include ) { 6418 6419 BandDraggedOperation undoOp = new BandDraggedOperation(this, band ); 6420 band.setHeight( band.getHeight() + delta ); 6422 undoOp.setBandDelta(delta); 6424 6425 int edge_y = 0 ; 6427 6428 if ( include ) { 6429 edge_y = band.getBandYLocation() + band.getHeight() + delta; 6430 } else { 6431 edge_y = band.getBandYLocation() + band.getHeight(); 6432 } 6433 6434 for (Iterator i = report.getElements().iterator(); i.hasNext(); ) { 6435 ReportElement re = (ReportElement) i.next(); 6436 if (re.getParentElement() != null) continue; 6437 if (re.position.y >= edge_y + 10 ) { 6441 Rectangle oldBounds = re.getBounds(); 6443 re.setPosition( new Point( re.getPosition().x, re.getPosition().y + delta) ); 6444 Rectangle newBounds = re.getBounds(); 6446 undoOp.addElement(re, oldBounds, newBounds ); 6448 } 6449 } 6450 addUndoOperation(undoOp); 6452 } 6453 6454 6460 public void shrinkBand( Band band ) { 6461 6462 int maxY = 0; 6463 for (Iterator i = getBandElements( band ).iterator(); i.hasNext(); ) { 6465 ReportElement re = (ReportElement) i.next(); 6466 maxY = Math.max( maxY , re.position.y + re.height ); 6467 if (re instanceof LineReportElement) { 6468 6469 6470 maxY = Math.max( maxY , re.position.y + re.height + 1); 6471 6472 } else { 6473 maxY = Math.max( maxY , re.position.y + re.height ); 6474 6475 } 6476 } 6477 6478 if (maxY > 0 ) { 6479 6480 int delta = maxY - band.getBandYLocation() - 10 - band.getHeight(); 6482 resizeBand( band , delta, false); } 6485 } 6486 6487 6488 public Point straighten( int delta_w, int delta_h ){ 6489 double clipAngle = 15; 6491 6492 double R = Math.sqrt( (delta_w * delta_w) + (delta_h*delta_h) ); 6493 double cos = delta_w / R; 6494 double angle = 180 * Math.acos( cos )/ Math.PI ; 6495 6496 int repeat = (int) Math.floor((angle + (0.5 * clipAngle)) / clipAngle) ; 6497 6498 double newAngle = repeat * clipAngle ; 6499 6500 delta_h = (int) (Math.abs(( R * Math.sin( (newAngle / 180 )* Math.PI))) * delta_h / Math.abs(delta_h) ); 6502 6503 delta_w = (int) ( Math.abs(( R * Math.cos( (newAngle / 180) * Math.PI))) * delta_w / Math.abs(delta_w) ) ; 6504 6505 if (Math.abs(delta_h) == Math.abs(delta_w) ) { 6507 delta_h = gridMultiple( delta_h); 6508 delta_w = gridMultiple( delta_w); 6509 } else { 6510 if (delta_w == 0) { 6511 delta_h = gridMultiple( delta_h); 6512 } 6513 if (delta_h == 0) { 6514 delta_w = gridMultiple( delta_w); 6515 } 6516 } 6517 6518 return new Point( delta_w, delta_h); 6519 } 6520 6521 public java.awt.Image getImage() 6522 { 6523 java.awt.image.BufferedImage img = new BufferedImage(getReport().getWidth()*2+20, getReport().getDesignHeight()*2+20, BufferedImage.TYPE_INT_ARGB); 6524 GraphicsEnvironment grenv = GraphicsEnvironment.getLocalGraphicsEnvironment(); 6525 Graphics2D g2d = grenv.createGraphics(img ); 6526 int oldVscroll = jVerticalScrollBar.getValue(); 6527 int oldHscroll = jHorizontalScrollBar.getValue(); 6528 6529 jVerticalScrollBar.setValue(0); 6530 jHorizontalScrollBar.setValue(0); 6531 6532 double oldZoom = this.zoomFactor; 6533 this.zoomFactor = 2; 6534 6535 try { 6536 6537 g2d.setClip(0,0,getReport().getWidth()*2+20, getReport().getDesignHeight()*2+20); 6538 this.paintReportPanel(g2d); 6539 6546 } catch (Exception ex) 6547 { 6548 ex.printStackTrace(); 6549 } 6550 this.zoomFactor = oldZoom; 6551 jVerticalScrollBar.setValue(oldVscroll); 6552 jHorizontalScrollBar.setValue(oldHscroll); 6553 6554 return img; 6555 6556 } 6557 6558 public java.util.List getOpenedNodesDocumentStructure() { 6559 return openedNodesDocumentStructure; 6560 } 6561 6562 public void setOpenedNodesDocumentStructure(java.util.List openedNodesDocumentStructure) { 6563 this.openedNodesDocumentStructure = openedNodesDocumentStructure; 6564 } 6565 6566 public void addCrosstabEditor( CrosstabReportElement re) 6567 { 6568 CrosstabEditor crosstabEditor = new CrosstabEditor(re); 6569 jTabbedPane1.addTab(re.getName(), new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/crosstab.png")),crosstabEditor); 6570 tabs++; 6571 updateTabs(); 6572 } 6573 6574 public CrosstabEditor getCrosstabEditor( CrosstabReportElement re) 6575 { 6576 if (re != null) 6577 { 6578 for (int i=1; i<jTabbedPane1.getTabCount(); ++i) 6579 { 6580 if ( jTabbedPane1.getComponentAt(i) instanceof CrosstabEditor) 6581 { 6582 CrosstabEditor ce= (CrosstabEditor)jTabbedPane1.getComponentAt(i); 6583 if (ce.getCrosstabElement() == re) 6584 { 6585 return ce; 6586 } 6587 } 6588 } 6589 } 6590 return null; 6591 } 6592 6593 public void removeCrosstabEditor(CrosstabReportElement re) 6594 { 6595 6596 6597 if (re != null) 6598 { 6599 for (int i=1; i<jTabbedPane1.getTabCount(); ++i) 6600 { 6601 if ( jTabbedPane1.getComponentAt(i) instanceof CrosstabEditor) 6602 { 6603 CrosstabEditor ce= (CrosstabEditor)jTabbedPane1.getComponentAt(i); 6604 if (ce.getCrosstabElement() == re) 6605 { 6606 jTabbedPane1.remove(i); 6607 tabs--; 6608 break; 6609 } 6610 } 6611 } 6612 } 6613 6614 updateTabs(); 6615 6616 } 6617 6618 public void updateTabs() 6619 { 6620 if (tabs == 0 && jTabbedPane1.isVisible()) 6621 { 6622 jTabbedPane1.setVisible(false); 6623 getContentPane().remove(jTabbedPane1); 6624 getContentPane().add(jPanelSuperContainer, java.awt.BorderLayout.CENTER); 6625 jPanelSuperContainer.updateUI(); 6626 } 6627 else if (tabs > 0 && !jTabbedPane1.isVisible()) 6628 { 6629 jTabbedPane1.setVisible(true); 6630 getContentPane().remove(jPanelSuperContainer); 6631 jTabbedPane1.insertTab(I18n.getString("jReportFrame.mainReport","Main report"), 6632 new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/mainreport.png")), 6633 jPanelSuperContainer, 6634 I18n.getString("jReportFrame.mainReport.tooltip","Main report editor"), 6635 0); 6636 jTabbedPane1.setSelectedIndex(0); 6637 getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER); 6638 jTabbedPane1.updateUI(); 6639 } 6640 6641 this.updateUI(); 6642 try { 6644 if (this.isMaximum()) 6645 { 6646 this.setMaximum(false); 6647 this.setMaximum(true); 6648 } 6649 } catch (Exception ex) 6650 { 6651 ex.printStackTrace(); 6652 } 6653 } 6654 6655 6656 public CrosstabEditorPanel getSelectedCrosstabEditorPanel() 6657 { 6658 if (tabs > 0) 6659 { 6660 int i = jTabbedPane1.getSelectedIndex(); 6661 if ( jTabbedPane1.getComponentAt(i) instanceof CrosstabEditor) 6662 { 6663 CrosstabEditor ce= (CrosstabEditor)jTabbedPane1.getComponentAt(i); 6664 return ce.getPanelEditor(); 6665 } 6666 } 6667 return null; 6668 } 6669 public void applyI18n() { 6671 jMenuItemRightMargin.setText(I18n.getString("jReportFrame.menuItemRightMargin","Join right page margin")); 6673 jMenuItemLeftMargin.setText(I18n.getString("jReportFrame.menuItemLeftMargin","Join left page margin")); 6674 jMenuItemBandProperties1.setText(I18n.getString("jReportFrame.menuItemBandProperties1","Band properties")); 6675 jMenuItemElementChartProperties.setText(I18n.getString("jReportFrame.menuItemElementChartProperties","Chart properties")); 6676 jMenuItemElementCrosstabDesignProperties.setText(I18n.getString("jReportFrame.menuItemElementCrosstabDesignProperties","Go to crosstab design tab....")); 6677 jMenuItemElementCrosstabProperties.setText(I18n.getString("jReportFrame.menuItemElementCrosstabProperties","Crosstab properties")); 6678 jMenuItemElementOpenSubreport.setText(I18n.getString("jReportFrame.menuItemElementOpenSubreport","Open subreport")); 6679 jMenuItemPasteOnBand.setText(it.businesslogic.ireport.util.I18n.getString("pasteHere", "Paste here")); 6681 jMenuItemBandProperties.setText(it.businesslogic.ireport.util.I18n.getString("bandProperties", "Band properties")); 6682 jMenuItemCut.setText(it.businesslogic.ireport.util.I18n.getString("cut", "Cut")); 6683 jMenuItemCopy.setText(it.businesslogic.ireport.util.I18n.getString("copy", "Copy")); 6684 jMenuItemPaste.setText(it.businesslogic.ireport.util.I18n.getString("paste", "Paste")); 6685 jMenuItemDelete.setText(it.businesslogic.ireport.util.I18n.getString("delete", "Delete")); 6686 jMenuItemGroup.setText(it.businesslogic.ireport.util.I18n.getString("groupSelectedElements", "Group selected elements")); 6687 jMenuItemUngroup.setText(it.businesslogic.ireport.util.I18n.getString("ungroupSelectedElements", "Ungroup selected elements")); 6688 jMenuItemCopyStyle.setText(it.businesslogic.ireport.util.I18n.getString("copyStyle", "Copy style")); 6689 jMenuItemPasteStyle.setText(it.businesslogic.ireport.util.I18n.getString("pasteStyle", "Paste style")); 6690 jMenuItemElementProperties.setText(it.businesslogic.ireport.util.I18n.getString("properties", "Properties")); 6691 jMenuItemPattern.setText(it.businesslogic.ireport.util.I18n.getString("fieldPattern", "Field pattern")); 6692 6693 if (jTabbedPane1.getTabCount() >= 1) 6694 { 6695 jTabbedPane1.setTitleAt(0, I18n.getString("jReportFrame.mainReport","Main report")); 6696 jTabbedPane1.setToolTipTextAt(0, I18n.getString("jReportFrame.mainReport.tooltip","Main report editor")); 6697 } 6698 } 6699 6700 public void languageChanged(LanguageChangedEvent evt) { 6701 6702 this.applyI18n(); 6703 } 6705 6706 6707 6716 protected int optimizeX(int mouse_x, int original_x, int transformation_type, ReportElement referenceElement) 6717 { 6718 int real_o_x = getLogicalDim((int)(original_x + jHorizontalScrollBar.getValue() - 10)); 6719 int real_x = getLogicalDim(mouse_x + jHorizontalScrollBar.getValue() - 10); 6720 int gz = getGridSize(); 6721 int x_delta = real_x - real_o_x; 6722 6723 if ( transformation_type == TransformationType.TRANSFORMATION_MOVE || 6725 transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || 6726 transformation_type == TransformationType.TRANSFORMATION_RESIZE_SW || 6727 transformation_type == TransformationType.TRANSFORMATION_RESIZE_W) { 6728 int x_mag_ele = closestXMagneticElement( referenceElement.getPosition().x + x_delta, gz, jHorizontalRule.getGuideLines()); 6731 x_delta = x_mag_ele - referenceElement.getPosition().x; 6732 } 6733 else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_NE || 6734 transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || 6735 transformation_type == TransformationType.TRANSFORMATION_RESIZE_E) { 6736 6737 int x_mag_ele = closestXMagneticElement( referenceElement.getPosition().x + referenceElement.getWidth() + x_delta, gz, jHorizontalRule.getGuideLines()); 6738 x_delta = x_mag_ele - referenceElement.getPosition().x - referenceElement.getWidth(); 6739 6740 } 6741 6742 6743 real_x = real_o_x + x_delta; 6744 6745 if (real_x != real_o_x) 6746 { 6747 return 10 - jHorizontalScrollBar.getValue() + getZoomedDim(real_x); 6748 } 6749 6750 return original_x; 6751 } 6752 6753 6757 private int closestXMagneticElement(int x, int gsize, java.util.List magneticLines) 6758 { 6759 int optimizedx = x; 6761 6762 if (magneticLines != null) 6763 { 6764 for (int i=0; i<magneticLines.size(); ++i) 6765 { 6766 int line = ((Integer )magneticLines.get(i)).intValue()+10; 6767 if (x < line+5 && x > line -5) return line; 6768 } 6769 } 6770 6771 if (isSnapToGrid()) 6772 { 6773 optimizedx = x - 10; 6774 int grid_positions = optimizedx / gsize; 6775 int rest = optimizedx % gsize; 6776 if (rest > gsize/2) grid_positions++; 6777 optimizedx = 10 + (grid_positions*gsize); 6778 return optimizedx; 6779 } 6780 6781 6784 return x; 6785 } 6786 6787 6788 6797 protected int optimizeY(int mouse_y, int original_y, int transformation_type, ReportElement referenceElement) 6798 { 6799 int real_o_y = getLogicalDim((int)(original_y + jVerticalScrollBar.getValue() - 10)); 6800 int real_y = getLogicalDim(mouse_y + jVerticalScrollBar.getValue() - 10); 6801 int gz = getGridSize(); 6802 int y_delta = real_y - real_o_y; 6803 6804 if ( transformation_type == TransformationType.TRANSFORMATION_MOVE || 6806 transformation_type == TransformationType.TRANSFORMATION_RESIZE_NW || 6807 transformation_type == TransformationType.TRANSFORMATION_RESIZE_NE || 6808 transformation_type == TransformationType.TRANSFORMATION_RESIZE_N) { 6809 int y_mag_ele = closestYMagneticElement( referenceElement.getPosition().y + y_delta, gz, jVerticalRule.getGuideLines()); 6812 y_delta = y_mag_ele - referenceElement.getPosition().y; 6813 } 6814 else if (transformation_type == TransformationType.TRANSFORMATION_RESIZE_SE || 6815 transformation_type == TransformationType.TRANSFORMATION_RESIZE_SW || 6816 transformation_type == TransformationType.TRANSFORMATION_RESIZE_S) { 6817 6818 int y_mag_ele = closestYMagneticElement( referenceElement.getPosition().y + referenceElement.getHeight() + y_delta, gz, jVerticalRule.getGuideLines()); 6819 y_delta = y_mag_ele - referenceElement.getPosition().y - referenceElement.getHeight(); 6820 6821 } 6822 6823 6824 real_y = real_o_y + y_delta; 6825 6826 if (real_y != real_o_y) 6827 { 6828 return 10 - jVerticalScrollBar.getValue() + getZoomedDim(real_y); 6829 } 6830 6831 return original_y; 6832 } 6833 6834 6838 private int closestYMagneticElement(int y, int gsize, java.util.List magneticLines) 6839 { 6840 int optimizedy = y; 6842 6843 if (magneticLines != null) 6844 { 6845 for (int i=0; i<magneticLines.size(); ++i) 6846 { 6847 int line = ((Integer )magneticLines.get(i)).intValue()+10; 6848 if (y < line+5 && y > line -5) return line; 6849 } 6850 } 6851 6852 if (isSnapToGrid()) 6853 { 6854 optimizedy = y - 10; 6855 int grid_positions = optimizedy / gsize; 6856 int rest = optimizedy % gsize; 6857 if (rest > gsize/2) grid_positions++; 6858 optimizedy = 10 + (grid_positions*gsize); 6859 return optimizedy; 6860 } 6861 6862 6865 return y; 6866 } 6867 6868 6875 public boolean closingFrame(boolean force) 6876 { 6877 if (force) return true; 6878 JReportFrame jrf = this; 6879 MainFrame.getMainInstance().setActiveReportForm( jrf ); 6880 6881 boolean saveIt = false; 6882 if (jrf.getReport().isModified() && !MainFrame.getMainInstance().getProperties().getProperty("AskToSave","true").equals("false")) 6883 { 6884 String message = I18n.getString("messages.jReportFrame.saveReport", "Would you like to save the report before exiting?"); 6885 String caption = I18n.getString("messages.jReportFrame.unsavedFileUnchanged", "Unsaved file (Unchanged)"); 6886 if (jrf.getReport().isModified()) 6887 { 6888 caption = I18n.getString("messages.jReportFrame.unsavedFileChanged", "Unsaved file (Changed)"); 6889 } 6890 6891 int ret = javax.swing.JOptionPane.showConfirmDialog(this, message, caption, javax.swing.JOptionPane.YES_NO_CANCEL_OPTION); 6892 6893 switch(ret) 6894 { 6895 case javax.swing.JOptionPane.YES_OPTION: 6896 saveIt = true; 6897 break; 6898 case javax.swing.JOptionPane.NO_OPTION: 6899 saveIt = false; 6900 break; 6901 default: 6902 return false; 6903 } 6904 } 6905 6906 if (saveIt) 6907 { 6908 java.awt.event.ActionEvent ae = new java.awt.event.ActionEvent (this,0, ""); 6909 MainFrame.getMainInstance().jMenuItemSaveActionPerformed(ae); 6910 if (jrf.getReport().isModified()) return false; 6911 } 6912 return true; 6913 } 6914 6915 public int getHScroll() 6916 { 6917 return jHorizontalScrollBar.getValue(); 6918 } 6919 6920 public int getVScroll() 6921 { 6922 return jVerticalScrollBar.getValue(); 6923 } 6924 6925 public void repaintRules() 6926 { 6927 jHorizontalRule.repaint(); 6928 jVerticalRule.repaint(); 6929 } 6930 6931 public void updateGridSize(int newValue) 6932 { 6933 this.repaint(); 6934 } 6935 6936 public void addChildElements(ReportElement parentRe, Vector elements) 6937 { 6938 Enumeration e = getReport().getElements().elements(); 6939 while (e.hasMoreElements()) { 6940 ReportElement re = (ReportElement)e.nextElement(); 6941 6942 if (re.getParentElement() == parentRe && !elements.contains(re)) 6943 { 6944 elements.add(re); 6945 if (re instanceof FrameReportElement) 6946 { 6947 addChildElements(re, elements); 6949 } 6950 } 6951 } 6952 } 6953} 6954 6955 | Popular Tags |