Package printplugin.dlgs

Source Code of printplugin.dlgs.PreviewComponent

/*
* TV-Browser
* Copyright (C) 04-2003 Martin Oberhauser (martin@tvbrowser.org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* CVS information:
*  $RCSfile$
*   $Source$
*     $Date: 2010-06-28 19:33:48 +0200 (Mon, 28 Jun 2010) $
*   $Author: bananeweizen $
* $Revision: 6662 $
*/

package printplugin.dlgs;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.util.Properties;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.SwingConstants;

import printplugin.PrintPlugin;
import util.ui.Localizer;
import util.ui.TVBrowserIcons;
import util.ui.UiUtilities;
import util.ui.WindowClosingIf;

import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class PreviewDlg extends JDialog implements ActionListener, WindowClosingIf {
 
  private Printable mPrinter;
  private PageFormat mPageFormat;
  private PreviewComponent mPreviewComponent;
  private JButton mPrevBt, mNextBt;
  private JLabel mSiteLb;
 
  private static final util.ui.Localizer mLocalizer
      = util.ui.Localizer.getLocalizerFor(PreviewDlg.class);

  private Point mMouseDragPoint;
  private JButton mZoomOut;
  private JButton mZoomIn;
 
  public PreviewDlg(Window parent, Printable printer, PageFormat pageFormat,
      int numberOfPages) {
    super(parent);
    setModal(true);
    createGui(printer, pageFormat, numberOfPages);
  }
 
  private void createGui(Printable printer, PageFormat pageFormat, int numberOfPages) {
    setTitle(mLocalizer.msg("preview","preview"));
    mPrinter = printer;
    mPageFormat = pageFormat;
   
    UiUtilities.registerForClosing(this);
   
    JPanel southPn = new JPanel(new FormLayout("left:10dlu:grow, pref, right:10dlu:grow", "pref"));
    CellConstraints cc = new CellConstraints();
   
    mSiteLb = new JLabel();
    mSiteLb.setHorizontalAlignment(SwingConstants.CENTER);
   
    southPn.add(mPrevBt=new JButton(TVBrowserIcons.left(TVBrowserIcons.SIZE_SMALL)), cc.xy(1,1));
    mPrevBt.setToolTipText(mLocalizer.msg("previous", "Previous page"));
    southPn.add(mNextBt=new JButton(TVBrowserIcons.right(TVBrowserIcons.SIZE_SMALL)), cc.xy(3,1));
    mNextBt.setToolTipText(mLocalizer.msg("next", "Next page"));
    southPn.add(mSiteLb, cc.xy(2,1));
   
    mPreviewComponent = new PreviewComponent(mPrinter, mPageFormat, numberOfPages);
   
    mPreviewComponent.addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent evt) {
        mMouseDragPoint = evt.getPoint();
      }
      public void mouseReleased(MouseEvent evt) {
        mMouseDragPoint = null;
        setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
      }
    });
   
    mPreviewComponent.addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent evt) {
        setCursor(new Cursor(Cursor.HAND_CURSOR));
        if (mMouseDragPoint != null && !evt.isShiftDown()) {
          int deltaX = mMouseDragPoint.x - evt.getX();
          int deltaY = mMouseDragPoint.y - evt.getY();
          scrollBy(deltaX, deltaY);
        }
      }
    });
   
    JPanel borderPn = new JPanel(new BorderLayout());
    final JScrollPane scrollPane = new JScrollPane(mPreviewComponent);
    scrollPane.getHorizontalScrollBar().setUnitIncrement(20);
    scrollPane.getVerticalScrollBar().setUnitIncrement(20);
    borderPn.add(scrollPane);
   
    mZoomIn = new JButton(TVBrowserIcons.zoomIn(TVBrowserIcons.SIZE_SMALL));
    mZoomIn.setToolTipText(mLocalizer.msg("zoomIn", "Zoom in"));
    mZoomOut = new JButton(TVBrowserIcons.zoomOut(TVBrowserIcons.SIZE_SMALL));
    mZoomOut.setToolTipText(mLocalizer.msg("zoomOut", "Zoom out"));
   
    mZoomIn.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        mPreviewComponent.zoomIn();
        mZoomIn.setEnabled(!mPreviewComponent.maxZoom());
        mZoomOut.setEnabled(true);
      }
    });
   
    mZoomOut.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        mPreviewComponent.zoomOut();
        mZoomOut.setEnabled(!mPreviewComponent.minZoom());
        mZoomIn.setEnabled(true);
      }
    });

    JPanel panel = new JPanel(new FormLayout("pref, 3dlu, pref", "pref"));
   
    panel.add(mZoomIn, cc.xy(1,1));
    panel.add(mZoomOut, cc.xy(3,1));
   
    JPanel content = (JPanel)getContentPane();
    content.setBorder(Borders.DLU4_BORDER);
    content.setLayout(new FormLayout("fill:default:grow", "pref, 3dlu, fill:default:grow, 3dlu, pref, 3dlu, pref"));
   
    content.add(panel, cc.xy(1, 1));
    content.add(borderPn, cc.xy(1,3));
    content.add(southPn, cc.xy(1,5));
   
    JPanel closePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0));
   
    JButton close = new JButton(Localizer.getLocalization(Localizer.I18N_CLOSE));
    close.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        close();
      }
    });
    closePanel.add(close);
   
    content.add(closePanel, cc.xy(1,7));
   
    updateDialogState();
   
    pack();
   
    Properties prop = PrintPlugin.getInstance().getSettings();

    try {
      if ((prop.getProperty("PreviewDlg.Width") != null) && (prop.getProperty("PreviewDlg.Height") != null)) {
        int width = Integer.parseInt(prop.getProperty("PreviewDlg.Width"));
        int height = Integer.parseInt(prop.getProperty("PreviewDlg.Height"));
        setSize(width, height);
      }
         
      if ((prop.getProperty("PreviewDlg.X") != null) && (prop.getProperty("PreviewDlg.Y") != null)){
        int x = Integer.parseInt(prop.getProperty("PreviewDlg.X"));
        int y = Integer.parseInt(prop.getProperty("PreviewDlg.Y"));
        setLocation(x, y);
      } else {
        setLocationRelativeTo(getParent());
      }
     
      if (prop.getProperty("PreviewDlg.Zoom") != null) {
        double zoom = Double.parseDouble(prop.getProperty("PreviewDlg.Zoom"));
        mPreviewComponent.setZoom(zoom);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  
    mZoomIn.setEnabled(!mPreviewComponent.maxZoom());
    mZoomOut.setEnabled(!mPreviewComponent.minZoom());
   
    mPrevBt.addActionListener(this);
    mNextBt.addActionListener(this);
  }
 
  public void scrollBy(int deltaX, int deltaY) {
    if (mPreviewComponent.getParent() instanceof JViewport) {
      JViewport viewport = (JViewport) mPreviewComponent.getParent();
      Point viewPos = viewport.getViewPosition();

      if (deltaX!=0){
        viewPos.x += deltaX;

        int maxX = mPreviewComponent.getWidth() - viewport.getWidth();

        viewPos.x = Math.min(viewPos.x, maxX);
        viewPos.x = Math.max(viewPos.x, 0);

        viewport.setViewPosition(viewPos);
      }

      if (deltaY !=0){
        viewPos.y += deltaY;
        int maxY = mPreviewComponent.getHeight() - viewport.getHeight();
        viewPos.y = Math.min(viewPos.y, maxY);
        viewPos.y = Math.max(viewPos.y, 0);

        viewport.setViewPosition(viewPos);
      }
    }
  }
 
  private void updateDialogState() {
    mSiteLb.setText(mLocalizer.msg("pageInfo", "page {0} of {1}",
        mPreviewComponent.getPageIndex() + 1, mPreviewComponent
            .getNumberOfPages()));
    mPrevBt.setEnabled(mPreviewComponent.getPageIndex() > 0);
    mNextBt.setEnabled(mPreviewComponent.getPageIndex()+1 < mPreviewComponent.getNumberOfPages());
  }
 
  public void actionPerformed(ActionEvent event) {
    if (event.getSource()==mPrevBt) {
      mPreviewComponent.previous();
      updateDialogState();
    }
    else if (event.getSource()==mNextBt) {
      mPreviewComponent.next();
      updateDialogState();
    }
  }

  public void close() {
    Properties prop = PrintPlugin.getInstance().getSettings();
   
    prop.setProperty("PreviewDlg.X", Integer.toString(this.getLocationOnScreen().x));
    prop.setProperty("PreviewDlg.Y", Integer.toString(this.getLocationOnScreen().y));
    prop.setProperty("PreviewDlg.Width", Integer.toString(this.getWidth()));
    prop.setProperty("PreviewDlg.Height", Integer.toString(this.getHeight()));
    prop.setProperty("PreviewDlg.Zoom", Double.toString(mPreviewComponent.getZoom()));
   
    dispose();
  }
 
 
}


class PreviewComponent extends JComponent {
 
  private Printable mPrintable;
  private PageFormat mPageFormat;
  private double mZoom=0.5;
  private int mPageIndex, mNumberOfPages;
 
  public PreviewComponent(Printable printable, PageFormat pageFormat, int numberOfPages) {
    mPrintable = printable;
    mPageFormat = pageFormat;
    mNumberOfPages = numberOfPages;
    setPreferredSize(new Dimension((int)(pageFormat.getWidth()*mZoom), (int)(pageFormat.getHeight()*mZoom)));
    mPageIndex = 0;
  }
 
  public double getZoom() {
    return mZoom;
  }
 
  public void setZoom(double zoom) {
    mZoom = zoom;
    setPreferredSize(new Dimension((int)(mPageFormat.getWidth()*mZoom), (int)(mPageFormat.getHeight()*mZoom)));
    revalidate();
    repaint();
  }
 
  public boolean minZoom() {
    return (mZoom <= 0.5);
  }

  public boolean maxZoom() {
    return (mZoom >= 2.5);
  }

  public void zoomIn() {
    if (mZoom < 2.5) {
      mZoom += 0.2;
      setZoom(mZoom);
    }
  }

  public void zoomOut() {
    if (mZoom > 0.5) {
      mZoom -= 0.2;
      setZoom(mZoom);
    }
  }

  public void next() {
    if (mPageIndex<mNumberOfPages-1) {
      mPageIndex++;
      repaint();
    }
  }
 
  public void previous() {
    if (mPageIndex>0) {
      mPageIndex--;
      repaint();
    }
  }
 
  public int getPageIndex() {
    return mPageIndex;
  }
 
  public int getNumberOfPages() {
    return mNumberOfPages;
  }
 
  public void setPageIndex(int inx) {
    if (inx!=mPageIndex) {
      mPageIndex=inx;
      repaint();
    }
  }
 
  public void paintComponent(Graphics graphics) {
    super.paintComponent(graphics);
    Graphics2D g = (Graphics2D)graphics;
    g.scale(mZoom,mZoom);
    g.setColor(Color.white);
    g.fillRect(0,0,(int)mPageFormat.getWidth(), (int)mPageFormat.getHeight());
    g.setColor(Color.lightGray);
    g.drawRect((int)mPageFormat.getImageableX(), (int)mPageFormat.getImageableY(), (int)mPageFormat.getImageableWidth(), (int)mPageFormat.getImageableHeight());
    g.setColor(Color.black);
   
    try {
      mPrintable.print(g, mPageFormat, mPageIndex);
    } catch (PrinterException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    g.scale(1/mZoom, 1/mZoom);
   
  }
 
}
TOP

Related Classes of printplugin.dlgs.PreviewComponent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.