Package com.sshtools.ui.swing

Source Code of com.sshtools.ui.swing.PrintPreview$PreviewContainer

/*
*  SSHTools - Java SSH2 API
*
*  Copyright (C) 2002 Lee David Painter.
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Library General Public License
*  as published by the Free Software Foundation; either version 2 of
*  the License, or (at your option) any later version.
*
*  You may also distribute it and/or modify it under the terms of the
*  Apache style J2SSH Software License. A copy of which should have
*  been provided with the distribution.
*
*  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
*  License document supplied with your distribution for more details.
*
*/

package com.sshtools.ui.swing;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.MatteBorder;

/**
*
*
* @author $author$
*/
public class PrintPreview extends JPanel implements ActionListener, Runnable {
    /**  */
    protected PrinterJob job;

    /**  */
    protected JButton setup;

    /**  */
    protected JComboBox scale;

    /**  */
    protected int pageWidth;

    /**  */
    protected Printable printable;

    /**  */
    protected PreviewContainer previewer;

    /**  */
    protected PageFormat pageFormat;

    /**  */
    protected int pageHeight;

    /**  */
    protected JScrollPane scrollpane;

    /**
     * Creates a new PrintPreview object.
     *
     * @param printable
     * @param pageFormat
     */
    public PrintPreview(Printable printable, PageFormat pageFormat) {
        super(new BorderLayout());
        this.printable = printable;
        job = PrinterJob.getPrinterJob();
        this.pageFormat = pageFormat;

        JPanel jpanel = new JPanel(new FlowLayout(0, 2, 2));
        setup = new JButton("Setup");
        setup.addActionListener(this);
        setup.setMnemonic('p');
        jpanel.add(setup);

        String[] as = { "10 %", "25 %", "50 %", "75 %", "100 %", "200 %" };
        scale = new JComboBox(as);
        scale.setSelectedItem(as[2]);
        scale.addActionListener(this);
        scale.setEditable(true);
        jpanel.add(scale);
        add(jpanel, BorderLayout.NORTH);
        previewer = new PreviewContainer();

        if ((pageFormat.getHeight() == 0.0D) || (pageFormat.getWidth() == 0.0D)) {
            return;
        }

        pageWidth = (int) pageFormat.getWidth();
        pageHeight = (int) pageFormat.getHeight();

        byte byte0 = 50;
        int i = (pageWidth * byte0) / 100;
        int j = (pageHeight * byte0) / 100;
        int k = 0;

        try {
            do {
                BufferedImage bufferedimage = new BufferedImage(pageWidth, pageHeight, 1);
                Graphics g = bufferedimage.getGraphics();
                g.setColor(Color.white);
                g.fillRect(0, 0, pageWidth, pageHeight);

                if (printable.print(g, pageFormat, k) != 0) {
                    break;
                }

                PagePreview pagepreview = new PagePreview(i, j, bufferedimage);
                previewer.add(pagepreview);
                k++;
            } while (true);
        } catch (PrinterException printerexception) {
        }

        scrollpane = new JScrollPane(previewer);
        add(scrollpane, BorderLayout.CENTER);
    }

    /**
     *
     *
     * @return
     */
    public PageFormat getPageFormat() {
        return pageFormat;
    }

    private void setup() {
        pageFormat = job.pageDialog(pageFormat);
        pageWidth = (int) pageFormat.getWidth();
        pageHeight = (int) pageFormat.getHeight();

        Thread thread = new Thread(this);
        thread.start();
    }

    /**
     *
     */
    public void run() {
        String s = scale.getSelectedItem().toString();
        scrollpane.setViewportView(new JLabel("Resizing"));

        if (s.endsWith("%")) {
            s = s.substring(0, s.length() - 1);
        }

        s = s.trim();

        int i = 0;

        try {
            i = Integer.parseInt(s);
        } catch (NumberFormatException numberformatexception) {
            i = 100;
        }

        int j = (pageWidth * i) / 100;
        int k = (pageHeight * i) / 100;
        Component[] acomponent = previewer.getComponents();

        for (int l = 0; l < acomponent.length; l++) {
            if (acomponent[l] instanceof PagePreview) {
                PagePreview pagepreview = (PagePreview) acomponent[l];
                pagepreview.setScaledSize(j, k);
            }
        }

        scrollpane.setViewportView(previewer);
    }

    /**
     *
     *
     * @param actionevent
     */
    public void actionPerformed(ActionEvent actionevent) {
        if (actionevent.getSource() == setup) {
            setup();
        } else if (actionevent.getSource() == scale) {
            Thread thread = new Thread(this);
            thread.start();
        }
    }

    class PagePreview extends JPanel {
        protected int m_h;
        protected int m_w;
        protected Image m_img;
        protected Image m_source;

        public PagePreview(int i, int j, Image image) {
            m_w = i;
            m_h = j;
            m_source = image;
            m_img = m_source.getScaledInstance(m_w, m_h, 4);
            m_img.flush();
            setBackground(Color.white);
            setBorder(new MatteBorder(1, 1, 2, 2, Color.black));
        }

        public Dimension getMaximumSize() {
            return getPreferredSize();
        }

        public Dimension getPreferredSize() {
            Insets insets = getInsets();

            return new Dimension(m_w + insets.left + insets.right, m_h + insets.top + insets.bottom);
        }

        public void paint(Graphics g) {
            g.setColor(getBackground());
            g.fillRect(0, 0, getWidth(), getHeight());
            g.drawImage(m_img, 0, 0, this);
            paintBorder(g);
        }

        public Dimension getMinimumSize() {
            return getPreferredSize();
        }

        public void setScaledSize(int i, int j) {
            m_w = i;
            m_h = j;
            m_img = m_source.getScaledInstance(m_w, m_h, 4);
            repaint();
        }
    }

    class PreviewContainer extends JPanel {
        protected int V_GAP;
        protected int H_GAP;

        PreviewContainer() {
            V_GAP = 10;
            H_GAP = 16;
        }

        public Dimension getMaximumSize() {
            return getPreferredSize();
        }

        public void doLayout() {
            Insets insets = getInsets();
            int i = insets.left + H_GAP;
            int j = insets.top + V_GAP;
            int k = getComponentCount();

            if (k == 0) {
                return;
            }

            Component component = getComponent(0);
            Dimension dimension = component.getPreferredSize();
            int l = dimension.width;
            int i1 = dimension.height;
            Dimension dimension1 = getParent().getSize();
            int j1 = Math.max((dimension1.width - H_GAP) / (l + H_GAP), 1);
            int k1 = k / j1;

            if ((k1 * j1) < k) {
                k1++;
            }

            int l1 = 0;

            for (int i2 = 0; i2 < k1; i2++) {
                for (int j2 = 0; j2 < j1; j2++) {
                    if (l1 >= k) {
                        return;
                    }

                    Component component1 = getComponent(l1++);
                    component1.setBounds(i, j, l, i1);
                    i += (l + H_GAP);
                }

                j += (i1 + V_GAP);
                i = insets.left + H_GAP;
            }
        }

        public Dimension getMinimumSize() {
            return getPreferredSize();
        }

        public Dimension getPreferredSize() {
            int i = getComponentCount();

            if (i == 0) {
                return new Dimension(H_GAP, V_GAP);
            }

            Component component = getComponent(0);
            Dimension dimension = component.getPreferredSize();
            int j = dimension.width;
            int k = dimension.height;
            Dimension dimension1 = getParent().getSize();
            int l = Math.max((dimension1.width - H_GAP) / (j + H_GAP), 1);
            int i1 = i / l;

            if ((i1 * l) < i) {
                i1++;
            }

            int j1 = (l * (j + H_GAP)) + H_GAP;
            int k1 = (i1 * (k + V_GAP)) + V_GAP;
            Insets insets = getInsets();

            return new Dimension(j1 + insets.left + insets.right, k1 + insets.top + insets.bottom);
        }
    }
}
TOP

Related Classes of com.sshtools.ui.swing.PrintPreview$PreviewContainer

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.