Skip to content
Snippets Groups Projects
Commit 2c22f707 authored by aburn's avatar aburn
Browse files

Added rotation awareness to page viewer

parent 337d64d7
Branches
No related merge requests found
...@@ -12,110 +12,110 @@ In this respect, the user's attention is drawn to the risks associated with load ...@@ -12,110 +12,110 @@ In this respect, the user's attention is drawn to the risks associated with load
The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms. The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms.
*/ */
package org.interreg.docexplore.gui.image; package org.interreg.docexplore.gui.image;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
public class EditorViewInputListener extends NavViewInputListener public class EditorViewInputListener extends NavViewInputListener
{ {
EditorView view; EditorView view;
public EditorViewInputListener(EditorView view) public EditorViewInputListener(EditorView view)
{ {
super(view); super(view);
this.view = view; this.view = view;
} }
@Override public void mouseClicked(MouseEvent e) @Override public void mouseClicked(MouseEvent e)
{ {
super.mouseClicked(e); super.mouseClicked(e);
if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0 && e.getClickCount() > 1) if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0 && e.getClickCount() > 1)
{ {
if (view.getOperation() != null) if (view.getOperation() != null)
{ {
view.getOperation().pointClicked(view, e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getModifiersEx(), e.getClickCount()); view.getOperation().pointClicked(view, e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()), e.getModifiersEx(), e.getClickCount());
view.checkForCompletion(); view.checkForCompletion();
} }
} }
else if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0 && e.getClickCount() == 1) else if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0 && e.getClickCount() == 1)
{ {
if (view.getOperation() != null) if (view.getOperation() != null)
view.getOperation().contextMenuRequested(view, e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getModifiersEx()); view.getOperation().contextMenuRequested(view, e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()), e.getModifiersEx());
} }
} }
boolean dragging = false, draggingMaybe = false; boolean dragging = false, draggingMaybe = false;
int dragDownX = 0, dragDownY = 0, dragCurX = 0, dragCurY = 0; int dragDownX = 0, dragDownY = 0, dragCurX = 0, dragCurY = 0;
@Override public void mousePressed(MouseEvent e) @Override public void mousePressed(MouseEvent e)
{ {
super.mousePressed(e); super.mousePressed(e);
if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
{ {
draggingMaybe = true; draggingMaybe = true;
dragDownX = dragCurX = e.getX(); dragDownX = dragCurX = e.getX();
dragDownY = dragCurY = e.getY(); dragDownY = dragCurY = e.getY();
view.checkForCompletion(); view.checkForCompletion();
} }
} }
@Override public void mouseReleased(MouseEvent e) @Override public void mouseReleased(MouseEvent e)
{ {
super.mouseReleased(e); super.mouseReleased(e);
if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
{ {
if (draggingMaybe && !dragging) if (draggingMaybe && !dragging)
if (view.getOperation() != null) if (view.getOperation() != null)
view.getOperation().pointClicked(view, e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getModifiersEx(), 1); view.getOperation().pointClicked(view, e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()), e.getModifiersEx(), 1);
if (dragging) if (dragging)
if (view.getOperation() != null) if (view.getOperation() != null)
view.getOperation().pointDropped(view, view.getOperation().pointDropped(view,
e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()),
dragDownX, dragDownY, e.getX()-panCurX, e.getY()-panCurY, dragDownX, dragDownY, e.getX()-panCurX, e.getY()-panCurY,
e.getModifiersEx()); e.getModifiersEx());
dragging = draggingMaybe = false; dragging = draggingMaybe = false;
view.checkForCompletion(); view.checkForCompletion();
} }
} }
static int dragThreshold = 3; static int dragThreshold = 3;
@Override public void mouseDragged(MouseEvent e) @Override public void mouseDragged(MouseEvent e)
{ {
super.mouseDragged(e); super.mouseDragged(e);
if (draggingMaybe && !dragging) if (draggingMaybe && !dragging)
{ {
int dx = e.getX()-dragDownX; int dx = e.getX()-dragDownX;
int dy = e.getY()-dragDownY; int dy = e.getY()-dragDownY;
if (dx*dx+dy*dy >= dragThreshold*dragThreshold) if (dx*dx+dy*dy >= dragThreshold*dragThreshold)
{ {
dragging = true; dragging = true;
if (view.getOperation() != null) if (view.getOperation() != null)
view.getOperation().pointGrabbed(view, e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getModifiersEx()); view.getOperation().pointGrabbed(view, e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()), e.getModifiersEx());
} }
} }
if (dragging) if (dragging)
{ {
int dx = e.getX()-dragCurX; int dx = e.getX()-dragCurX;
int dy = e.getY()-dragCurY; int dy = e.getY()-dragCurY;
if (view.getOperation() != null) if (view.getOperation() != null)
view.getOperation().pointDragged(view, view.getOperation().pointDragged(view,
e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()),
dragDownX, dragDownY, dx, dy, dragDownX, dragDownY, dx, dy,
e.getModifiersEx()); e.getModifiersEx());
dragCurX = e.getX(); dragCurX = e.getX();
dragCurY = e.getY(); dragCurY = e.getY();
view.checkForCompletion(); view.checkForCompletion();
} }
} }
@Override public void mouseMoved(MouseEvent e) @Override public void mouseMoved(MouseEvent e)
{ {
super.mouseMoved(e); super.mouseMoved(e);
if (view.getOperation() != null) if (view.getOperation() != null)
{ {
view.getOperation().pointHovered(view, e.getX(), e.getY(), view.toViewX(e.getX()), view.toViewY(e.getY()), e.getModifiersEx()); view.getOperation().pointHovered(view, e.getX(), e.getY(), view.toViewX(e.getX(), e.getY()), view.toViewY(e.getX(), e.getY()), e.getModifiersEx());
view.checkForCompletion(); view.checkForCompletion();
} }
} }
} }
...@@ -12,125 +12,171 @@ In this respect, the user's attention is drawn to the risks associated with load ...@@ -12,125 +12,171 @@ In this respect, the user's attention is drawn to the risks associated with load
The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms. The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms.
*/ */
package org.interreg.docexplore.gui.image; package org.interreg.docexplore.gui.image;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import javax.swing.JPanel; import javax.swing.JPanel;
public class NavView extends JPanel public class NavView extends JPanel
{ {
private static final long serialVersionUID = 1252503368700161717L; private static final long serialVersionUID = 1252503368700161717L;
protected double x0 = 0, y0 = 0; protected double x0 = 0, y0 = 0;
protected double scale = 100; protected double scale = 100;
protected ViewRotation rot = ViewRotation.None;
protected NavViewInputListener inputListener;
protected NavViewInputListener inputListener;
public NavView()
{ public NavView()
super(null); {
setFocusable(true); super(null);
setFocusable(true);
this.inputListener = createInputListener();
addMouseListener(inputListener); this.inputListener = createInputListener();
addMouseMotionListener(inputListener); addMouseListener(inputListener);
addMouseWheelListener(inputListener); addMouseMotionListener(inputListener);
} addMouseWheelListener(inputListener);
protected NavViewInputListener createInputListener() {return new NavViewInputListener(this);} }
protected NavViewInputListener createInputListener() {return new NavViewInputListener(this);}
int serialVersion = 0;
public void write(ObjectOutputStream out) throws Exception int serialVersion = 1;
{ public void write(ObjectOutputStream out) throws Exception
out.writeInt(serialVersion); {
out.writeDouble(x0); out.writeInt(serialVersion);
out.writeDouble(y0); out.writeDouble(x0);
out.writeDouble(y0);
out.writeDouble(scale); out.writeDouble(scale);
} out.writeInt(rot.ordinal());
}
public void read(ObjectInputStream in) throws Exception
{ public void read(ObjectInputStream in) throws Exception
@SuppressWarnings("unused") {
int serialVersion = in.readInt(); @SuppressWarnings("unused")
double x0 = in.readDouble(); int serialVersion = in.readInt();
double y0 = in.readDouble(); double x0 = in.readDouble();
double y0 = in.readDouble();
double scale = in.readDouble(); double scale = in.readDouble();
setView(x0, y0, scale); ViewRotation rot = serialVersion < 1 ? ViewRotation.None : ViewRotation.values()[in.readInt()];
} setView(x0, y0, scale, rot);
}
public void resetView() {setView(0, 0, 100);}
public void resetView() {setView(0, 0, 100);}
public void fitView(double minx, double miny, double maxx, double maxy, double margin)
public void fitView(double minx, double miny, double maxx, double maxy, double margin)
{
double w = (1+margin)*(maxx-minx), h = (1+margin)*(maxy-miny);
setView(.5*(maxx+minx), .5*(maxy+miny), Math.min(Math.max(0, getWidth())/w, Math.max(0, getHeight())/h));
}
protected void constrain() {}
public void scrollPixels(double px, double py)
{ {
double w = (1+margin)*(maxx-minx), h = (1+margin)*(maxy-miny); x0 -= rot.tx(px, py)/scale;
setView(.5*(maxx+minx), .5*(maxy+miny), Math.min(Math.max(0, getWidth())/w, Math.max(0, getHeight())/h)); y0 -= rot.ty(px, py)/scale;
constrain();
onViewChange();
repaint();
} }
public ViewRotation getRot() {return rot;}
protected void constrain() {} public void rotLeft() {setRot(ViewRotation.values()[(rot.ordinal()+1)%ViewRotation.values().length]);}
public void rotRight() {setRot(ViewRotation.values()[(rot.ordinal()+ViewRotation.values().length-1)%ViewRotation.values().length]);}
public void scrollPixels(double px, double py) public void setRot(ViewRotation rot)
{ {
x0 -= px/scale; this.rot = rot;
y0 -= py/scale;
constrain(); constrain();
onViewChange(); onViewChange();
repaint(); repaint();
} }
public double getScale() {return scale;} public double getScale() {return scale;}
public void setScale(double scale) public void setScale(double scale)
{ {
this.scale = scale; this.scale = scale;
constrain(); constrain();
onViewChange(); onViewChange();
repaint(); repaint();
} }
public void setView(NavView view) {setView(view.x0, view.y0, view.scale);} public void setView(NavView view) {setView(view.x0, view.y0, view.scale);}
public void setView(double x0, double y0, double scale) public void setView(double x0, double y0, double scale) {setView(x0, y0, scale, rot);}
{ public void setView(double x0, double y0, double scale, ViewRotation rot)
this.x0 = x0; {
this.y0 = y0; this.x0 = x0;
this.y0 = y0;
this.scale = scale; this.scale = scale;
//constrain(); this.rot = rot;
onViewChange(); //constrain();
repaint(); onViewChange();
} repaint();
}
protected void onViewChange() {}
protected void onViewChange() {}
public double toViewX(double px) {return (px-getWidth()/2)/scale+x0;}
public double toViewY(double py) {return (py-getHeight()/2)/scale+y0;} public double toViewX(double px) {return (px-getWidth()/2)/scale+x0;}
public double fromViewX(double x) {return scale*(x-x0)+getWidth()/2;} public double toViewY(double py) {return (py-getHeight()/2)/scale+y0;}
public double fromViewX(double x) {return scale*(x-x0)+getWidth()/2;}
public double fromViewY(double y) {return scale*(y-y0)+getHeight()/2;} public double fromViewY(double y) {return scale*(y-y0)+getHeight()/2;}
protected float defaultStrokeWidth = 2; public double toViewX(double px, double py) {return rot.tx((px-getWidth()/2)/scale, (py-getHeight()/2)/scale)+x0;}
protected AffineTransform defaultTransform = new AffineTransform(), viewTransform = new AffineTransform(); public double toViewY(double px, double py) {return rot.ty((px-getWidth()/2)/scale, (py-getHeight()/2)/scale)+y0;}
BasicStroke stroke = new BasicStroke(1); public double fromViewX(double x, double y) {return rot.itx(scale*(x-x0), scale*(y-y0))+getWidth()/2;}
@Override protected void paintChildren(Graphics _g) public double fromViewY(double x, double y) {return rot.ity(scale*(x-x0), scale*(y-y0))+getHeight()/2;}
{
if (scale != 0)
{
Graphics2D g = (Graphics2D)_g;
viewTransform = g.getTransform();
defaultTransform.setTransform(viewTransform);
viewTransform.translate(getWidth()/2-scale*x0, getHeight()/2-scale*y0);
viewTransform.scale(scale, scale);
g.setTransform(viewTransform);
BasicStroke stroke = new BasicStroke((float)(defaultStrokeWidth/scale));
g.setStroke(stroke);
drawView(g, scale);
g.setTransform(defaultTransform);
}
super.paintChildren(_g);
}
public static double toViewX(double px, double py, ViewRotation rot, double scale, int w, int h, double x0, double y0) {return rot.tx((px-w/2)/scale, (py-h/2)/scale)+x0;}
public static double toViewY(double px, double py, ViewRotation rot, double scale, int w, int h, double x0, double y0) {return rot.ty((px-w/2)/scale, (py-h/2)/scale)+y0;}
public static double fromViewX(double x, double y, ViewRotation rot, double scale, int w, int h, double x0, double y0) {return rot.itx(scale*(x-x0), scale*(y-y0))+w/2;}
public static double fromViewY(double x, double y, ViewRotation rot, double scale, int w, int h, double x0, double y0) {return rot.ity(scale*(x-x0), scale*(y-y0))+h/2;}
protected float defaultStrokeWidth = 2;
protected AffineTransform defaultTransform = new AffineTransform(), viewTransform = new AffineTransform();
BasicStroke stroke = new BasicStroke(1);
@Override protected void paintChildren(Graphics _g)
{
if (scale != 0)
{
Graphics2D g = (Graphics2D)_g;
viewTransform = g.getTransform();
defaultTransform.setTransform(viewTransform);
viewTransform.translate(getWidth()/2-scale*x0, getHeight()/2-scale*y0);
viewTransform.scale(scale, scale);
if (rot != ViewRotation.None)
viewTransform.quadrantRotate(-rot.ordinal(), x0, y0);
g.setTransform(viewTransform);
BasicStroke stroke = new BasicStroke((float)(defaultStrokeWidth/scale));
g.setStroke(stroke);
drawView(g, scale);
g.setTransform(defaultTransform);
}
super.paintChildren(_g);
}
protected void drawView(Graphics2D g, double pixelSize) {} protected void drawView(Graphics2D g, double pixelSize) {}
}
public static void main(String [] args)
{
int px = 313, py = 221;
ViewRotation rot = ViewRotation.None;
int w = 800, h = 600;
double scale = 1.42;
double x0 = 26.3, y0 = 62.13;
System.out.println(
fromViewX(
toViewX(px, py, rot, scale, w, h, x0, y0),
toViewY(px, py, rot, scale, w, h, x0, y0),
rot, scale, w, h, x0, y0)
+","+
fromViewY(
toViewX(px, py, rot, scale, w, h, x0, y0),
toViewY(px, py, rot, scale, w, h, x0, y0),
rot, scale, w, h, x0, y0));
}
}
...@@ -12,81 +12,81 @@ In this respect, the user's attention is drawn to the risks associated with load ...@@ -12,81 +12,81 @@ In this respect, the user's attention is drawn to the risks associated with load
The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms. The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms.
*/ */
package org.interreg.docexplore.gui.image; package org.interreg.docexplore.gui.image;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener; import java.awt.event.MouseWheelListener;
import org.interreg.docexplore.gui.ErrorHandler; import org.interreg.docexplore.gui.ErrorHandler;
public class NavViewInputListener implements MouseListener, MouseMotionListener, MouseWheelListener public class NavViewInputListener implements MouseListener, MouseMotionListener, MouseWheelListener
{ {
NavView view; NavView view;
int panningButton; int panningButton;
public NavViewInputListener(NavView view) public NavViewInputListener(NavView view)
{ {
this(view, InputEvent.BUTTON3_MASK); this(view, InputEvent.BUTTON3_MASK);
} }
public NavViewInputListener(NavView view, int panningButton) public NavViewInputListener(NavView view, int panningButton)
{ {
if (panningButton == InputEvent.BUTTON1_MASK) if (panningButton == InputEvent.BUTTON1_MASK)
{ {
ErrorHandler.defaultHandler.submit(new Exception("Can't use left click as panning button, switching to right"), false); ErrorHandler.defaultHandler.submit(new Exception("Can't use left click as panning button, switching to right"), false);
panningButton = InputEvent.BUTTON3_MASK; panningButton = InputEvent.BUTTON3_MASK;
} }
this.view = view; this.view = view;
this.panningButton = panningButton; this.panningButton = panningButton;
} }
boolean panning = false; boolean panning = false;
int panDownX = 0, panDownY = 0, panCurX = 0, panCurY = 0; int panDownX = 0, panDownY = 0, panCurX = 0, panCurY = 0;
@Override public void mousePressed(MouseEvent e) @Override public void mousePressed(MouseEvent e)
{ {System.out.println(view.toViewX(e.getX(), e.getY())+","+view.toViewY(e.getX(), e.getY()));
if ((e.getModifiers() & panningButton) != 0) if ((e.getModifiers() & panningButton) != 0)
{ {
panning = true; panning = true;
panDownX = panCurX = e.getX(); panDownX = panCurX = e.getX();
panDownY = panCurY = e.getY(); panDownY = panCurY = e.getY();
return; return;
} }
} }
@Override public void mouseReleased(MouseEvent e) @Override public void mouseReleased(MouseEvent e)
{ {
if ((e.getModifiers() & panningButton) != 0) if ((e.getModifiers() & panningButton) != 0)
panning = false; panning = false;
} }
@Override public void mouseMoved(MouseEvent e) {} @Override public void mouseMoved(MouseEvent e) {}
@Override public void mouseDragged(MouseEvent e) @Override public void mouseDragged(MouseEvent e)
{ {
if (panning) if (panning)
{ {
int dx = e.getX()-panCurX; int dx = e.getX()-panCurX;
int dy = e.getY()-panCurY; int dy = e.getY()-panCurY;
panCurX = e.getX(); panCurX = e.getX();
panCurY = e.getY(); panCurY = e.getY();
view.scrollPixels(dx, dy); view.scrollPixels(dx, dy);
} }
} }
double k = 1.2; double k = 1.2;
@Override public void mouseWheelMoved(MouseWheelEvent e) @Override public void mouseWheelMoved(MouseWheelEvent e)
{ {
int r = e.getWheelRotation(); int r = e.getWheelRotation();
double xc = view.toViewX(e.getX()), yc = view.toViewY(e.getY()); double xc = view.toViewX(e.getX()), yc = view.toViewY(e.getY());
if (r == 0) if (r == 0)
return; return;
view.scale *= Math.pow(k, -r); view.scale *= Math.pow(k, -r);
double xp = view.fromViewX(xc), yp = view.fromViewY(yc); double xp = view.fromViewX(xc), yp = view.fromViewY(yc);
view.scrollPixels(e.getX()-xp, e.getY()-yp); view.scrollPixels(e.getX()-xp, e.getY()-yp);
} }
@Override public void mouseEntered(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseClicked(MouseEvent e) {} @Override public void mouseClicked(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {}
} }
package org.interreg.docexplore.gui.image;
public enum ViewRotation
{
None,
QuarterLeft
{
@Override public double tx(double x, double y) {return -y;}
@Override public double ty(double x, double y) {return x;}
@Override public double itx(double x, double y) {return QuarterRight.tx(x, y);}
@Override public double ity(double x, double y) {return QuarterRight.ty(x, y);}
},
Half
{
@Override public double tx(double x, double y) {return -x;}
@Override public double ty(double x, double y) {return -y;}
},
QuarterRight
{
@Override public double tx(double x, double y) {return y;}
@Override public double ty(double x, double y) {return -x;}
@Override public double itx(double x, double y) {return QuarterLeft.tx(x, y);}
@Override public double ity(double x, double y) {return QuarterLeft.ty(x, y);}
};
public double tx(double x, double y) {return x;}
public double ty(double x, double y) {return y;}
public double itx(double x, double y) {return tx(x, y);}
public double ity(double x, double y) {return ty(x, y);}
}
...@@ -142,7 +142,7 @@ public class AppToolBar extends JPanel implements ToolbarButton.ToolbarButtonLis ...@@ -142,7 +142,7 @@ public class AppToolBar extends JPanel implements ToolbarButton.ToolbarButtonLis
{ {
@Override public void onActiveDocumentChanged(DocumentPanel panel, AnnotatedObject document) @Override public void onActiveDocumentChanged(DocumentPanel panel, AnnotatedObject document)
{ {
try {setEnabled(document instanceof Page && !isBookPage((Page)document));} try {setEnabled(document instanceof Page || document instanceof Region || panel != null && panel.getEditor() instanceof ImageMetaDataEditor);}
catch (Exception ex) {ErrorHandler.defaultHandler.submit(ex, true); setEnabled(false);} catch (Exception ex) {ErrorHandler.defaultHandler.submit(ex, true); setEnabled(false);}
} }
}); });
...@@ -150,7 +150,7 @@ public class AppToolBar extends JPanel implements ToolbarButton.ToolbarButtonLis ...@@ -150,7 +150,7 @@ public class AppToolBar extends JPanel implements ToolbarButton.ToolbarButtonLis
{ {
@Override public void onActiveDocumentChanged(DocumentPanel panel, AnnotatedObject document) @Override public void onActiveDocumentChanged(DocumentPanel panel, AnnotatedObject document)
{ {
try {setEnabled(document instanceof Page && !isBookPage((Page)document));} try {setEnabled(document instanceof Page || document instanceof Region || panel != null && panel.getEditor() instanceof ImageMetaDataEditor);}
catch (Exception ex) {ErrorHandler.defaultHandler.submit(ex, true); setEnabled(false);} catch (Exception ex) {ErrorHandler.defaultHandler.submit(ex, true); setEnabled(false);}
} }
}); });
......
...@@ -103,7 +103,11 @@ public class ImageMetaDataEditor extends ImageView implements DocumentPanelEdito ...@@ -103,7 +103,11 @@ public class ImageMetaDataEditor extends ImageView implements DocumentPanelEdito
else if (action.equals("mirror-ver")) else if (action.equals("mirror-ver"))
host.getAppHost().getActionRequestListener().onVerticalMirrorMetaDataRequest(metaData); host.getAppHost().getActionRequestListener().onVerticalMirrorMetaDataRequest(metaData);
else if (action.equals("export")) else if (action.equals("export"))
ExportImageDialog.exportImage(host.getAppHost(), metaData); ExportImageDialog.exportImage(host.getAppHost(), metaData);
else if (action.equals("rotate-view-left"))
rotLeft();
else if (action.equals("rotate-view-right"))
rotRight();
else return; else return;
repaint(); repaint();
} }
......
...@@ -14,28 +14,28 @@ The fact that you are presently reading this means that you have had knowledge o ...@@ -14,28 +14,28 @@ The fact that you are presently reading this means that you have had knowledge o
*/ */
package org.interreg.docexplore.manuscript.app.editors; package org.interreg.docexplore.manuscript.app.editors;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import org.interreg.docexplore.gui.ErrorHandler; import org.interreg.docexplore.gui.ErrorHandler;
import org.interreg.docexplore.gui.image.EditorView; import org.interreg.docexplore.gui.image.EditorView;
import org.interreg.docexplore.gui.image.ImageView; import org.interreg.docexplore.gui.image.ImageView;
import org.interreg.docexplore.management.export.ExportImageDialog; import org.interreg.docexplore.management.export.ExportImageDialog;
import org.interreg.docexplore.manuscript.AnnotatedObject; import org.interreg.docexplore.manuscript.AnnotatedObject;
import org.interreg.docexplore.manuscript.Page; import org.interreg.docexplore.manuscript.Page;
import org.interreg.docexplore.manuscript.PosterUtils; import org.interreg.docexplore.manuscript.PosterUtils;
import org.interreg.docexplore.manuscript.Region; import org.interreg.docexplore.manuscript.Region;
import org.interreg.docexplore.manuscript.app.DocumentEditorHost; import org.interreg.docexplore.manuscript.app.DocumentEditorHost;
import org.interreg.docexplore.manuscript.app.DocumentEvents; import org.interreg.docexplore.manuscript.app.DocumentEvents;
import org.interreg.docexplore.manuscript.app.DocumentPanelEditor; import org.interreg.docexplore.manuscript.app.DocumentPanelEditor;
import org.interreg.docexplore.util.Pair; import org.interreg.docexplore.util.Pair;
public class PageEditor extends ImageView implements DocumentPanelEditor public class PageEditor extends ImageView implements DocumentPanelEditor
...@@ -201,7 +201,11 @@ public class PageEditor extends ImageView implements DocumentPanelEditor ...@@ -201,7 +201,11 @@ public class PageEditor extends ImageView implements DocumentPanelEditor
else if (action.equals("mirror-ver")) else if (action.equals("mirror-ver"))
host.getAppHost().getActionRequestListener().onVerticalMirrorPageRequest(page); host.getAppHost().getActionRequestListener().onVerticalMirrorPageRequest(page);
else if (action.equals("export")) else if (action.equals("export"))
ExportImageDialog.exportImage(host.getAppHost(), page); ExportImageDialog.exportImage(host.getAppHost(), page);
else if (action.equals("rotate-view-left"))
rotLeft();
else if (action.equals("rotate-view-right"))
rotRight();
else return; else return;
repaint(); repaint();
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment