Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2013 jOpenDocument, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU
* General Public License Version 3 only ("GPL").
* You may not use this file except in compliance with the License.
* You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html
* See the License for the specific language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*
*/
package org.jopendocument.panel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import org.jopendocument.model.OpenDocument;
import org.jopendocument.print.DocumentPrinter;
import org.jopendocument.renderer.ODTRenderer;
public class ODSViewerPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = -6113257667157151508L;
private final ODTRenderer renderer;
private int mode;
private int zoom = 100;
private static final int MODE_PAGE = 0;
private static final int MODE_WIDTH = 1;
private static final int MODE_ZOOM = 2;
private JScrollPane scroll;
private final JPanel viewer = new JPanel();
private final JTextField textFieldZoomValue = new JTextField(5);
private int currentPageIndex = 0;
public ODSViewerPanel(final OpenDocument doc) {
this(doc, null);
}
public ODSViewerPanel(final OpenDocument doc, final boolean ignoreMargin) {
this(doc, null, ignoreMargin);
}
public ODSViewerPanel(final OpenDocument doc, final DocumentPrinter printListener) {
this(doc, printListener, true);
}
public ODSViewerPanel(final OpenDocument doc, final DocumentPrinter printListener, final boolean ignoreMargin) {
Toolkit.getDefaultToolkit().setDynamicLayout(false);
this.setOpaque(false);
renderer = new ODTRenderer(doc);
renderer.setIgnoreMargins(ignoreMargin);
updateMode(MODE_ZOOM, this.zoom);
JPanel tools = new JPanel();
final JButton buttonTailleReelle = new JButton(Messages.getString("ODSViewerPanel.normalSize"));
buttonTailleReelle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateMode(MODE_ZOOM, 100);
}
});
tools.add(buttonTailleReelle);
final JButton buttonFullPage = new JButton(Messages.getString("ODSViewerPanel.fitPage"));
buttonFullPage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (mode != MODE_PAGE) {
int width = (int) scroll.getViewportBorderBounds().getWidth();
int height = (int) scroll.getViewportBorderBounds().getHeight();
final double resizeW = renderer.getPageWidth() / width;
final double resizeH = renderer.getPageHeight() / height;
double resize = resizeH;
if (resizeW > resizeH) {
resize = resizeW;
}
updateMode(MODE_PAGE, (int) ((100 * 360) / resize));
}
}
});
tools.add(buttonFullPage);
final JButton buttonFullWidth = new JButton(Messages.getString("ODSViewerPanel.fitWidth"));
buttonFullWidth.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int width = (int) (scroll.getViewportBorderBounds().getWidth());
final double resizeW = renderer.getPageWidth() / width;
updateMode(MODE_WIDTH, (int) ((100 * 360) / resizeW));
}
});
tools.add(buttonFullWidth);
final JButton buttonZoomOut = new JButton("-");
buttonZoomOut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (zoom > 30) {
updateMode(mode, zoom - 20);
}
}
});
tools.add(buttonZoomOut);
textFieldZoomValue.setEditable(false);
tools.add(textFieldZoomValue);
final JButton buttonZoomIn = new JButton("+");
buttonZoomIn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int z = zoom + 20;
if (z > 400)
z = 400;
updateMode(mode, z);
}
});
tools.add(buttonZoomIn);
// Viewer
viewer.setOpaque(false);
viewer.setBackground(Color.DARK_GRAY);
viewer.setLayout(null);
renderer.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
viewer.add(renderer);
this.setLayout(new BorderLayout());
this.add(tools, BorderLayout.NORTH);
scroll = new JScrollPane(viewer);
scroll.setOpaque(false);
scroll.getHorizontalScrollBar().setUnitIncrement(30);
scroll.getVerticalScrollBar().setUnitIncrement(30);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
((JComponent) scroll.getViewport().getView()).setOpaque(false);
this.add(scroll, BorderLayout.CENTER);
updateMode(MODE_ZOOM, this.zoom);
this.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
updateMode(mode, zoom);
}
});
if (doc.getPrintedPageCount() > 1) {
final JTextField page = new JTextField(5);
page.setHorizontalAlignment(JTextField.CENTER);
JButton previousButton = new JButton("<");
previousButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (currentPageIndex > 0) {
currentPageIndex--;
updatePage(currentPageIndex);
updatePageCount(doc, page);
}
}
});
JButton nextButton = new JButton(">");
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (currentPageIndex < doc.getPrintedPageCount() - 1) {
currentPageIndex++;
updatePage(currentPageIndex);
updatePageCount(doc, page);
}
}
});
tools.add(previousButton);
updatePageCount(doc, page);
tools.add(page);
tools.add(nextButton);
}
if (printListener != null) {
final JButton buttonPrint = new JButton(Messages.getString("ODSViewerPanel.print"));
buttonPrint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
printListener.print(doc);
}
});
tools.add(buttonPrint);
}
}
/**
* @param doc
* @param page
*/
private void updatePageCount(final OpenDocument doc, final JTextField page) {
page.setText((currentPageIndex + 1) + "/" + doc.getPrintedPageCount());
}
protected void updatePage(int i) {
this.renderer.setCurrentPage(i);
}
private void updateMode(int m, int zoom_value) {
this.mode = m;
this.zoom = zoom_value;
this.textFieldZoomValue.setText(zoom + " %");
renderer.setResizeFactor(((100 * 360) / zoom_value));
int w = this.renderer.getPageWidthInPixel();
int h = this.renderer.getPageHeightInPixel();
int posx = 0;
int posy = 0;
if (scroll != null) {
posx = (scroll.getViewportBorderBounds().width - w) / 2;
posy = (scroll.getViewportBorderBounds().height - h) / 2;
}
if (posy > 10)
posy = 10;
if (posx < 0)
posx = 0;
if (posy < 0)
posy = 0;
renderer.setLocation(posx, posy);
// final int renderedHeight = renderer.getPrintHeightInPixel();
// renderer.setSize(renderer.getPrintWidthInPixel(), renderedHeight);
final Dimension size = new Dimension(w, h);
viewer.setPreferredSize(size);
// Let the scroll pane know to update itself
// and its scrollbars.
viewer.revalidate();
repaint();
}
public ODTRenderer getRenderer() {
return renderer;
}
}