From 905b55ff0c5d61a337cd0e5f601467614a698c66 Mon Sep 17 00:00:00 2001 From: teo_sarca Date: Mon, 18 May 2009 09:20:26 +0000 Subject: [PATCH] FR [ 2539927 ] Display Zoom combobox https://sourceforge.net/tracker/?func=detail&atid=879335&aid=2539927&group_id=176962 --- .settings/org.eclipse.wst.common.component | 35 ++++++-- base/src/org/compiere/print/View.java | 93 +++++++++++++++++----- client/src/org/compiere/print/Viewer.java | 28 ++++--- 3 files changed, 116 insertions(+), 40 deletions(-) diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index f4034cdb1b..d7f014bee0 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,8 +1,27 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/src/org/compiere/print/View.java b/base/src/org/compiere/print/View.java index 558dc1beec..d4dce78419 100644 --- a/base/src/org/compiere/print/View.java +++ b/base/src/org/compiere/print/View.java @@ -22,6 +22,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; +import java.util.HashMap; import org.compiere.model.MQuery; import org.compiere.print.layout.LayoutEngine; @@ -34,13 +35,17 @@ import org.compiere.util.CLogger; * * @author Jorg Janke * @version $Id: View.java,v 1.2 2006/07/30 00:53:02 jjanke Exp $ + * + * @author Teo Sarca, www.arhipac.ro + *
  • FR [ 2539927 ] Display Zoom combobox + * https://sourceforge.net/tracker/?func=detail&atid=879335&aid=2539927&group_id=176962 */ public class View extends CPanel { /** * */ - private static final long serialVersionUID = 851611162566661576L; + private static final long serialVersionUID = 5640892952739279088L; /** * Print Preview @@ -56,10 +61,18 @@ public class View extends CPanel /** Zoom Level */ - private int m_zoomLevel = 0; + private int m_zoomLevel = 2; /** Zoom Options */ - public static final String[] ZOOM_OPTIONS = new String[] - {"100%", "75%", "50%"}; + public static final String[] ZOOM_OPTIONS = new String[] {"200%", "150%", "100%", "75%", "50%"}; + private static HashMap ZOOM_ScaleValues = new HashMap(); + static { + ZOOM_ScaleValues.put("200%", 2.00); + ZOOM_ScaleValues.put("150%", 1.50); + ZOOM_ScaleValues.put("100%", 1.00); + ZOOM_ScaleValues.put("75%", 0.75); + ZOOM_ScaleValues.put("50%", 0.50); + } + /** Margin around paper */ public static int MARGIN = 5; /** Margin Background Color */ @@ -70,6 +83,12 @@ public class View extends CPanel /*************************************************************************/ + public int getMarginSize(boolean doScale) + { + double scale = (doScale ? getScale() : 1.00); + return (int)(MARGIN * scale); + } + /** * Minimum Size * @return Max Page Size @@ -85,8 +104,8 @@ public class View extends CPanel */ public Dimension getMaximumSize() { - return new Dimension (getPaperWidth()+(2*MARGIN), - (getPaperHeight()+MARGIN)*getPageCount()+MARGIN); + return new Dimension (getPaperWidth()+(2*getMarginSize(true)), + (getPaperHeight()+getMarginSize(true))*getPageCount()+getMarginSize(true)); } // getMaximumSize /** @@ -115,6 +134,7 @@ public class View extends CPanel { // log.fine( "View.paintComponent", g.getClip()); Graphics2D g2D = (Graphics2D)g; + g2D.scale(getScale(), getScale()); Rectangle bounds = g2D.getClipBounds(); // g2D.setColor(COLOR_BACKGROUND); @@ -123,7 +143,7 @@ public class View extends CPanel // for all pages for (int page = 0; page < m_layout.getPages().size(); page++) { - Rectangle pageRectangle = getRectangleOfPage(page+1); + Rectangle pageRectangle = getRectangleOfPage(page+1, false); if (bounds.intersects(pageRectangle)) { Page p = (Page)m_layout.getPages().get(page); @@ -153,7 +173,7 @@ public class View extends CPanel { if (ZOOM_OPTIONS[i].equals(levelString)) { - m_zoomLevel = i; + setZoomLevel(i); break; } } @@ -167,6 +187,15 @@ public class View extends CPanel { return m_zoomLevel; } // getZoomLevel + + private double getScale() + { + Double scale = ZOOM_ScaleValues.get(ZOOM_OPTIONS[m_zoomLevel]); + if (scale != null) + return scale.doubleValue(); + else + return 1.00; + } /** * Get Rectange of Page @@ -175,10 +204,18 @@ public class View extends CPanel */ public Rectangle getRectangleOfPage(int pageNo) { - int y = MARGIN + ((pageNo-1) * (getPaperHeight() + MARGIN)); - return new Rectangle (MARGIN, y, getPaperWidth(), getPaperHeight()); + return getRectangleOfPage(pageNo, true); +// int y = (int)(MARGIN + ((pageNo-1) * (getPaperHeight() + MARGIN))); +// return new Rectangle (MARGIN, y, getPaperWidth(), getPaperHeight()); } // getRectangleOfPage + public Rectangle getRectangleOfPage(int pageNo, boolean doScale) + { + System.out.println("height: "+getPaperHeight(false)+"->"+getPaperHeight(true)); + System.out.println("width: "+getPaperWidth(false)+"->"+getPaperWidth(true)); + int y = (int)(getMarginSize(doScale) + ((pageNo-1) * (getPaperHeight(doScale) + getMarginSize(doScale)))); + return new Rectangle (getMarginSize(doScale), y, getPaperWidth(doScale), getPaperHeight(doScale)); + } // getRectangleOfPage /** * Get Page at Point @@ -187,8 +224,8 @@ public class View extends CPanel */ public float getPageNoAt (Point p) { - float y = p.y; - float pageHeight = getPaperHeight() + MARGIN; + float y = (float)(p.y / getScale()); + float pageHeight = getPaperHeight(false) + getMarginSize(false); return 1f + (y/pageHeight); } // getPageAt @@ -235,7 +272,14 @@ public class View extends CPanel */ public int getPaperHeight() { - return (int)m_layout.getPaper().getHeight(true); + return getPaperHeight(true); +// return (int)(m_layout.getPaper().getHeight(true) * getScale()); + } // getPaperHeight + + public int getPaperHeight(boolean doScale) + { + double scale = (doScale ? getScale() : 1.0); + return (int)(m_layout.getPaper().getHeight(true) * scale); } // getPaperHeight /** @@ -244,7 +288,14 @@ public class View extends CPanel */ public int getPaperWidth() { - return (int)m_layout.getPaper().getWidth(true); + return getPaperWidth(true); +// return (int)(m_layout.getPaper().getWidth(true) * getScale()); + } // getPaperHeight + + public int getPaperWidth(boolean doScale) + { + double scale = (doScale ? getScale() : 1.0); + return (int)(m_layout.getPaper().getWidth(true) * scale); } // getPaperHeight /** @@ -255,9 +306,11 @@ public class View extends CPanel public MQuery getDrillDown (Point absolutePoint) { int pageNo = (int)getPageNoAt(absolutePoint); - Rectangle pageRectangle = getRectangleOfPage(pageNo); - Point relativePoint = new Point (absolutePoint.x-pageRectangle.x, - absolutePoint.y-pageRectangle.y); + Rectangle pageRectangle = getRectangleOfPage(pageNo, false); + Point relativePoint = new Point ( + (int)(absolutePoint.x/getScale()-pageRectangle.x), + (int)(absolutePoint.y/getScale()-pageRectangle.y) + ); Page page = (Page)m_layout.getPages().get(pageNo-1); // log.config("Relative=" + relativePoint + ", " + page); @@ -277,8 +330,10 @@ public class View extends CPanel { int pageNo = (int)getPageNoAt(absolutePoint); Rectangle pageRectangle = getRectangleOfPage(pageNo); - Point relativePoint = new Point (absolutePoint.x-pageRectangle.x, - absolutePoint.y-pageRectangle.y); + Point relativePoint = new Point ( + (int)(absolutePoint.x/getScale()-pageRectangle.x), + (int)(absolutePoint.y/getScale()-pageRectangle.y) + ); Page page = (Page)m_layout.getPages().get(pageNo-1); // log.config("Relative=" + relativePoint + ", " + page); diff --git a/client/src/org/compiere/print/Viewer.java b/client/src/org/compiere/print/Viewer.java index df557baefe..83b4808040 100644 --- a/client/src/org/compiere/print/Viewer.java +++ b/client/src/org/compiere/print/Viewer.java @@ -115,6 +115,8 @@ import org.compiere.util.ValueNamePair; *
  • FR [ 1779403 ] Report Viewer: add PgUp and PgDown key handlers *
  • BF [ 1836908 ] Report customize NPE when no window access *
  • FR [ 1894640 ] Report Engine: Excel Export support + *
  • FR [ 2539927 ] Display Zoom combobox + * https://sourceforge.net/tracker/?func=detail&atid=879335&aid=2539927&group_id=176962 * @author victor.perez@e-evolution.com *
  • FR [ 1966328 ] New Window Info to MRP and CRP into View http://sourceforge.net/tracker/index.php?func=detail&aid=1966328&group_id=176962&atid=879335 *
  • FR [ 2011569 ] Implementing new Summary flag in Report View http://sourceforge.net/tracker/index.php?func=detail&aid=2011569&group_id=176962&atid=879335 @@ -216,7 +218,7 @@ public class Viewer extends CFrame private CComboBox comboDrill = new CComboBox(); //FR 201156 private CCheckBox summary = new CCheckBox(); -// private CComboBox comboZoom = new CComboBox(View.ZOOM_OPTIONS); + private CComboBox comboZoom = new CComboBox(View.ZOOM_OPTIONS); /** @@ -269,8 +271,8 @@ public class Viewer extends CFrame // Zoom Level toolBar.addSeparator(); -// toolBar.add(comboZoom, null); -// comboZoom.setToolTipText(Msg.getMsg(m_ctx, "Zoom")); + toolBar.add(comboZoom, null); + comboZoom.setToolTipText(Msg.getMsg(m_ctx, "Zoom")); // Drill toolBar.addSeparator(); labelDrill.setText(Msg.getMsg(m_ctx, "Drill") + ": "); @@ -313,7 +315,8 @@ public class Viewer extends CFrame private void dynInit() { createMenu(); -// comboZoom.addActionListener(this); + comboZoom.setSelectedIndex(m_viewPanel.getZoomLevel()); + comboZoom.addActionListener(this); // Change Listener to set Page no //pb comment this out so that scrolling works normally //centerScrollPane.getViewport().addChangeListener(this); @@ -454,8 +457,8 @@ public class Viewer extends CFrame centerScrollPane.setPreferredSize(new Dimension (m_viewPanel.getPaperWidth()+30, m_viewPanel.getPaperHeight()+15)); centerScrollPane.getViewport().setViewSize(new Dimension - (m_viewPanel.getPaperWidth()+2*View.MARGIN, - m_viewPanel.getPaperHeight()+2*View.MARGIN)); + (m_viewPanel.getPaperWidth()+2*m_viewPanel.getMarginSize(true), + m_viewPanel.getPaperHeight()+2*m_viewPanel.getMarginSize(true))); // Report Info setTitle(Msg.getMsg(m_ctx, "Report") + ": " + m_reportEngine.getName() + " " + Env.getHeader(m_ctx, 0)); @@ -651,10 +654,9 @@ public class Viewer extends CFrame log.config(cmd); this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); // -// if (e.getSource() == comboZoom) -// cmd_zoom(); -// else - if (e.getSource() == comboReport) + if (e.getSource() == comboZoom) + cmd_zoom(); + else if (e.getSource() == comboReport) cmd_report(); else if (e.getSource() == comboDrill) cmd_drill(); @@ -744,8 +746,8 @@ public class Viewer extends CFrame bNext.setEnabled (m_pageNo != m_pageMax); // Rectangle pageRectangle = m_viewPanel.getRectangleOfPage(m_pageNo); - pageRectangle.x -= View.MARGIN; - pageRectangle.y -= View.MARGIN; + pageRectangle.x -= m_viewPanel.getMarginSize(true); + pageRectangle.y -= m_viewPanel.getMarginSize(true); centerScrollPane.getViewport().setViewPosition(pageRectangle.getLocation()); // System.out.println("scrollTo " + pageRectangle); @@ -1212,7 +1214,7 @@ public class Viewer extends CFrame private void cmd_zoom() { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); -// m_viewPanel.setZoomLevel(comboZoom.getSelectedIndex()); + m_viewPanel.setZoomLevel(comboZoom.getSelectedIndex()); revalidate(); cmd_drill(); // setCursor } // cmd_zoom