summaryrefslogtreecommitdiff
path: root/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
diff options
context:
space:
mode:
authortkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7>2013-04-10 19:03:45 +0000
committertkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7>2013-04-10 19:03:45 +0000
commit7fb08fc5b27c7dacb5afe91eb8c1e7f6bf403b04 (patch)
treee8ab59a59434262b71bdc99bae600557956b7e8b /pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
parentef5bf851189d4bfb630ab7c15aa9f8d1decf1967 (diff)
downloadpdf-over-7fb08fc5b27c7dacb5afe91eb8c1e7f6bf403b04.tar.gz
pdf-over-7fb08fc5b27c7dacb5afe91eb8c1e7f6bf403b04.tar.bz2
pdf-over-7fb08fc5b27c7dacb5afe91eb8c1e7f6bf403b04.zip
Replace ICEPdf with PDFRenderer
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-over/trunk@107 174cde9d-5d70-4d2a-aa98-46368bc2aaf7
Diffstat (limited to 'pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java')
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java216
1 files changed, 114 insertions, 102 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
index f1f89d79..d1309cf9 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
@@ -16,32 +16,30 @@
package at.asit.pdfover.gui.composites;
// Imports
+import java.awt.Frame;
+import java.awt.Image;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
import java.io.File;
import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DragDetectEvent;
-import org.eclipse.swt.events.DragDetectListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.awt.SWT_AWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.icepdf.core.exceptions.PDFException;
-import org.icepdf.core.exceptions.PDFSecurityException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import at.asit.pdfover.gui.workflow.states.State;
import at.asit.pdfover.signator.SignaturePosition;
+import com.sun.pdfview.PDFFile;
+
/**
*
*
@@ -53,55 +51,40 @@ public class PositioningComposite extends StateComposite {
static final Logger log = LoggerFactory
.getLogger(PositioningComposite.class);
- PDFViewerComposite viewer = null;
+ private SignaturePanel viewer = null;
- Canvas signature = null;
+ private PDFFile pdf = null;
- private SignaturePosition position = null;
+ private Frame frame = null;
- boolean doDrag = false;
+ int currentPage;
- Point origMousePos = null;
- Rectangle origSigPos = null;
+ int numPages;
- /**
- * Gets the position of the signature
- * @return the SignaturePosition
- */
- public SignaturePosition getPosition() {
- return this.position;
- }
-
- /**
- * Sets the position
- * @param position
- */
- public void setPosition(SignaturePosition position) {
- this.position = position;
- }
+ private SignaturePosition position = null;
/**
* Set the PDF Document to display
* @param document document to display
- * @throws PDFException Error parsing PDF document
- * @throws PDFSecurityException Error decrypting PDF document (not supported)
* @throws IOException I/O Error
*/
- public void displayDocument(File document) throws PDFException, PDFSecurityException, IOException {
+ public void displayDocument(File document) throws IOException {
+ RandomAccessFile rafile = new RandomAccessFile(document, "r"); //$NON-NLS-1$
+ FileChannel chan = rafile.getChannel();
+ ByteBuffer buf = chan.map(FileChannel.MapMode.READ_ONLY, 0, chan.size());
+ chan.close();
+ rafile.close();
+
+ this.pdf = new PDFFile(buf);
if (this.viewer == null)
{
- this.viewer = new PDFViewerComposite(this, SWT.EMBEDDED | SWT.NO_BACKGROUND, document);
- resizeViewer();
+ this.viewer = new SignaturePanel(this.pdf);
+ this.frame.add(this.viewer);
}
else
- this.viewer.setDocument(document);
- }
-
- void resizeViewer()
- {
- Rectangle clientArea = this.getClientArea();
- log.debug("Resizing to " + clientArea.width + "x" + clientArea.height);
- this.viewer.setBounds(0, 0, clientArea.width, clientArea.height);
+ this.viewer.setDocument(this.pdf);
+ this.numPages = this.pdf.getNumPages();
+ showPage(this.numPages);
}
/**
@@ -111,62 +94,73 @@ public class PositioningComposite extends StateComposite {
* @param state
*/
public PositioningComposite(Composite parent, int style, State state) {
- super(parent, style, state);
- this.setLayout(null);
-
- this.addListener(SWT.Resize, new Listener() {
- @Override
- public void handleEvent(Event e) {
- if (PositioningComposite.this.viewer != null)
- resizeViewer();
- }
- });
-
- this.signature = new Canvas(this, SWT.NO_BACKGROUND);
- this.signature.setBounds(200, 200, 150, 40);
- this.signature.addPaintListener(new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) {
-// PositioningComposite.this.viewer.redraw();
- Rectangle r = ((Canvas) e.widget).getBounds();
- e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_BLUE));
- e.gc.drawFocus(5, 5, r.width - 10, r.height - 10);
- e.gc.drawText("Position Signature", 10, 10);
- }
- });
- this.signature.addDragDetectListener(new DragDetectListener() {
- @Override
- public void dragDetected(DragDetectEvent e) {
- PositioningComposite.this.doDrag = true;
- origMousePos = Display.getCurrent().getCursorLocation();
- origSigPos = ((Canvas) e.widget).getBounds();
+ super(parent, style | SWT.EMBEDDED, state);
+ //this.setLayout(null);
+ this.frame = SWT_AWT.new_Frame(this);
+ this.addKeyListener(this.keyListener);
+ this.frame.addMouseWheelListener(this.mouseListener);
+ }
+
+ private KeyListener keyListener = new KeyAdapter() {
+ @Override
+ public void keyPressed(KeyEvent e) {
+ int newPage = PositioningComposite.this.currentPage;
+
+ switch (e.keyCode)
+ {
+ case SWT.PAGE_DOWN:
+ if (PositioningComposite.this.currentPage < PositioningComposite.this.numPages)
+ ++newPage;
+ break;
+
+ case SWT.PAGE_UP:
+ if (PositioningComposite.this.currentPage > 1)
+ --newPage;
+ break;
+
+ case SWT.END:
+ newPage = PositioningComposite.this.numPages;
+ break;
+
+ case SWT.HOME:
+ newPage = 1;
+ break;
+
+ case SWT.CR:
+ case SWT.KEYPAD_CR:
+ PositioningComposite.this.setFinalPosition();
+ break;
}
- });
- this.signature.addMouseMoveListener(new MouseMoveListener() {
- @Override
- public void mouseMove(MouseEvent e) {
- if (PositioningComposite.this.doDrag)
- {
- Point newMousePos = Display.getCurrent().getCursorLocation();
- int x = origSigPos.x + (newMousePos.x - origMousePos.x);
- int y = origSigPos.y + (newMousePos.y - origMousePos.y);
- PositioningComposite.this.signature.setBounds(x, y, origSigPos.width, origSigPos.height);
- }
+
+ if (newPage != PositioningComposite.this.currentPage)
+ showPage(newPage);
+ }
+ };
+
+ private MouseWheelListener mouseListener = new MouseWheelListener() {
+ @Override
+ public void mouseWheelMoved(MouseWheelEvent e) {
+ int newPage = PositioningComposite.this.currentPage;
+
+ if (e.getUnitsToScroll() < 0)
+ {
+ if (PositioningComposite.this.currentPage > 1)
+ newPage--;
}
- });
- this.signature.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseUp(MouseEvent e) {
- if (PositioningComposite.this.doDrag)
- {
- PositioningComposite.this.doDrag = false;
- return;
- }
- // TODO: FIX to get real position
- PositioningComposite.this.setPosition(new SignaturePosition()); // Setting auto position for testing
- PositioningComposite.this.state.updateStateMachine();
+ else if (e.getUnitsToScroll() > 0)
+ {
+ if (PositioningComposite.this.currentPage < PositioningComposite.this.numPages)
+ newPage++;
}
- });
+
+ if (newPage != PositioningComposite.this.currentPage)
+ showPage(newPage);
+ }
+ };
+
+ void showPage(int page) {
+ this.currentPage = page;
+ this.viewer.showPage(page);
}
@Override
@@ -181,4 +175,22 @@ public class PositioningComposite extends StateComposite {
public void doLayout() {
this.layout(true, true);
}
+
+ /**
+ * Set the signature position and continue to the next state
+ * @param position the signature position
+ */
+ void setFinalPosition() {
+ // TODO: check if this is the real position
+ this.position = new SignaturePosition(this.viewer.getSignaturePositionX(), this.viewer.getSignaturePositionY());
+ PositioningComposite.this.state.updateStateMachine();
+ }
+
+ /**
+ * Get the signature position
+ * @return the signature position
+ */
+ public SignaturePosition getPosition() {
+ return this.position;
+ }
}