in batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java [532:834]
public JSVGViewerFrame(Application app) {
application = app;
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
application.closeJSVGViewerFrame(JSVGViewerFrame.this);
}
});
//
// Set the frame's maximum size so that content
// bigger than the screen does not cause the creation
// of unnecessary large images.
//
svgCanvas = new Canvas(userAgent, true, true) {
Dimension screenSize;
{
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setMaximumSize(screenSize);
}
public Dimension getPreferredSize(){
Dimension s = super.getPreferredSize();
if (s.width > screenSize.width) s.width =screenSize.width;
if (s.height > screenSize.height) s.height = screenSize.height;
return s;
}
/**
* This method is called when the component knows the desired
* size of the window (based on width/height of outermost SVG
* element). We override it to immediately pack this frame.
*/
public void setMySize(Dimension d) {
setPreferredSize(d);
invalidate();
if (autoAdjust) {
setExtendedState(getExtendedState() & ~MAXIMIZED_BOTH);
pack();
}
}
public void setDisableInteractions(boolean b) {
super.setDisableInteractions(b);
// Disable/Enable all our different ways to adjust the
// rendering transform (menus, toolbar, thumbnail, keyboard).
((Action)listeners.get(SET_TRANSFORM_ACTION)) .setEnabled(!b);
if (thumbnailDialog != null)
thumbnailDialog.setInteractionEnabled(!b);
}
};
javax.swing.ActionMap map = svgCanvas.getActionMap();
map.put(FULL_SCREEN_ACTION, new FullScreenAction());
javax.swing.InputMap imap = svgCanvas.getInputMap(JComponent.WHEN_FOCUSED);
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_F11, 0);
imap.put(key, FULL_SCREEN_ACTION);
svgCanvas.setDoubleBufferedRendering(true);
listeners.put(ABOUT_ACTION, new AboutAction());
listeners.put(OPEN_ACTION, new OpenAction());
listeners.put(OPEN_LOCATION_ACTION, new OpenLocationAction());
listeners.put(NEW_WINDOW_ACTION, new NewWindowAction());
listeners.put(RELOAD_ACTION, new ReloadAction());
listeners.put(SAVE_AS_ACTION, new SaveAsAction());
listeners.put(BACK_ACTION, backAction);
listeners.put(FORWARD_ACTION, forwardAction);
listeners.put(PRINT_ACTION, new PrintAction());
listeners.put(EXPORT_AS_JPG_ACTION, new ExportAsJPGAction());
listeners.put(EXPORT_AS_PNG_ACTION, new ExportAsPNGAction());
listeners.put(EXPORT_AS_TIFF_ACTION, new ExportAsTIFFAction());
listeners.put(PREFERENCES_ACTION, new PreferencesAction());
listeners.put(CLOSE_ACTION, new CloseAction());
listeners.put(EXIT_ACTION, application.createExitAction(this));
listeners.put(VIEW_SOURCE_ACTION, new ViewSourceAction());
javax.swing.ActionMap cMap = svgCanvas.getActionMap();
listeners.put(RESET_TRANSFORM_ACTION,
cMap.get(JSVGCanvas.RESET_TRANSFORM_ACTION));
listeners.put(ZOOM_IN_ACTION,
cMap.get(JSVGCanvas.ZOOM_IN_ACTION));
listeners.put(ZOOM_OUT_ACTION,
cMap.get(JSVGCanvas.ZOOM_OUT_ACTION));
listeners.put(PREVIOUS_TRANSFORM_ACTION, previousTransformAction);
key = KeyStroke.getKeyStroke(KeyEvent.VK_K, KeyEvent.CTRL_DOWN_MASK);
imap.put(key, previousTransformAction);
listeners.put(NEXT_TRANSFORM_ACTION, nextTransformAction);
key = KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_DOWN_MASK);
imap.put(key, nextTransformAction);
listeners.put(USE_STYLESHEET_ACTION, useStylesheetAction);
listeners.put(PLAY_ACTION, playAction);
listeners.put(PAUSE_ACTION, pauseAction);
listeners.put(STOP_ACTION, stopAction);
listeners.put(MONITOR_ACTION, new MonitorAction());
listeners.put(DOM_VIEWER_ACTION, new DOMViewerAction());
listeners.put(SET_TRANSFORM_ACTION, new SetTransformAction());
listeners.put(FIND_DIALOG_ACTION, new FindDialogAction());
listeners.put(THUMBNAIL_DIALOG_ACTION, new ThumbnailDialogAction());
listeners.put(FLUSH_ACTION, new FlushAction());
listeners.put(TOGGLE_DEBUGGER_ACTION, new ToggleDebuggerAction());
JPanel p = null;
try {
// Create the menu
MenuFactory mf = new MenuFactory(bundle, this);
JMenuBar mb =
mf.createJMenuBar("MenuBar", application.getUISpecialization());
setJMenuBar(mb);
localHistory = new LocalHistory(mb, this);
String[] uri = application.getVisitedURIs();
for (String anUri : uri) {
if (anUri != null && !"".equals(anUri)) {
localHistory.update(anUri);
}
}
p = new JPanel(new BorderLayout());
// Create the toolbar
ToolBarFactory tbf = new ToolBarFactory(bundle, this);
JToolBar tb = tbf.createJToolBar("ToolBar");
tb.setFloatable(false);
getContentPane().add(p, BorderLayout.NORTH);
p.add(tb, BorderLayout.NORTH);
p.add(new javax.swing.JSeparator(), BorderLayout.CENTER);
p.add(locationBar = new LocationBar(), BorderLayout.SOUTH);
locationBar.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
} catch (MissingResourceException e) {
System.out.println(e.getMessage());
System.exit(0);
}
svgCanvasPanel = new JPanel(new BorderLayout());
svgCanvasPanel.setBorder(BorderFactory.createEtchedBorder());
svgCanvasPanel.add(svgCanvas, BorderLayout.CENTER);
p = new JPanel(new BorderLayout());
p.add(svgCanvasPanel, BorderLayout.CENTER);
p.add(statusBar = new StatusBar(), BorderLayout.SOUTH);
getContentPane().add(p, BorderLayout.CENTER);
svgCanvas.addSVGDocumentLoaderListener(this);
svgCanvas.addGVTTreeBuilderListener(this);
svgCanvas.addSVGLoadEventDispatcherListener(this);
svgCanvas.addGVTTreeRendererListener(this);
svgCanvas.addLinkActivationListener(this);
svgCanvas.addUpdateManagerListener(this);
svgCanvas.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
if (svgDocument == null) {
statusBar.setXPosition(e.getX());
statusBar.setYPosition(e.getY());
} else {
try {
AffineTransform at;
at = svgCanvas.getViewBoxTransform();
if (at != null) {
at = at.createInverse();
Point2D p2d =
at.transform(new Point2D.Float(e.getX(), e.getY()),
null);
statusBar.setXPosition((float)p2d.getX());
statusBar.setYPosition((float)p2d.getY());
return;
}
} catch (NoninvertibleTransformException ex) {
}
statusBar.setXPosition(e.getX());
statusBar.setYPosition(e.getY());
}
}
});
svgCanvas.addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent e) {
Dimension dim = svgCanvas.getSize();
if (svgDocument == null) {
statusBar.setWidth(dim.width);
statusBar.setHeight(dim.height);
} else {
try {
AffineTransform at;
at = svgCanvas.getViewBoxTransform();
if (at != null) {
at = at.createInverse();
Point2D o =
at.transform(new Point2D.Float(0, 0),
null);
Point2D p2d =
at.transform(new Point2D.Float(dim.width,
dim.height),
null);
statusBar.setWidth((float)(p2d.getX() - o.getX()));
statusBar.setHeight((float)(p2d.getY() - o.getY()));
return;
}
} catch (NoninvertibleTransformException ex) {
}
statusBar.setWidth(dim.width);
statusBar.setHeight(dim.height);
}
}
});
svgCanvas.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
Dimension dim = svgCanvas.getSize();
if (svgDocument == null) {
statusBar.setWidth(dim.width);
statusBar.setHeight(dim.height);
} else {
try {
AffineTransform at;
at = svgCanvas.getViewBoxTransform();
if (at != null) {
at = at.createInverse();
Point2D o =
at.transform(new Point2D.Float(0, 0),
null);
Point2D p2d =
at.transform(new Point2D.Float(dim.width,
dim.height),
null);
statusBar.setWidth((float)(p2d.getX() - o.getX()));
statusBar.setHeight((float)(p2d.getY() - o.getY()));
return;
}
} catch (NoninvertibleTransformException ex) {
}
statusBar.setWidth(dim.width);
statusBar.setHeight(dim.height);
}
}
});
locationBar.addActionListener(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String st = locationBar.getText().trim();
int i = st.indexOf( '#' );
String t = "";
if (i != -1) {
t = st.substring(i + 1);
st = st.substring(0, i);
}
if (st.equals(""))
return;
try{
File f = new File(st);
if (f.exists()) {
if (f.isDirectory()) {
return;
} else {
try {
st = f.getCanonicalPath();
if (st.startsWith("/")) {
st = "file:" + st;
} else {
st = "file:/" + st;
}
} catch (IOException ex) {
}
}
}
}catch(SecurityException se){
// Could not patch the file URI for security
// reasons (e.g., when run as an unsigned
// JavaWebStart jar): file access is not
// allowed. Loading will fail, but there is
// nothing more to do at this point.
}
String fi = svgCanvas.getFragmentIdentifier();
if (svgDocument != null) {
ParsedURL docPURL
= new ParsedURL(svgDocument.getURL());
ParsedURL purl = new ParsedURL(docPURL, st);
fi = (fi == null) ? "" : fi;
if (docPURL.equals(purl) && t.equals(fi)) {
return;
}
}
if (t.length() != 0) {
st += '#' + t;
}
locationBar.setText(st);
locationBar.addToHistory(st);
showSVGDocument(st);
}
});
}