// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.print; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.MapFrame; import org.openstreetmap.josm.plugins.Plugin; import org.openstreetmap.josm.plugins.PluginInformation; /** * The PrintPlugin class implements the interface JOSM needs to * load extension. * @author Kai Pastor */ public class PrintPlugin extends Plugin { /** * The menu item for the print action */ private JMenuItem printMenu; /** * The default map scale */ public static final int DEF_MAP_SCALE = 25000; /** * The default resolution */ public static final int DEF_RESOLUTION_DPI = 100; /** * Adds the PrintPlugin to the GUI * * @param info the plugin information describing the plugin. */ public PrintPlugin(PluginInformation info) { super(info); JMenu fileMenu = Main.main.menu.fileMenu; int pos = fileMenu.getItemCount(); do { pos--; } while (fileMenu != null && pos > 2 && fileMenu.getItem(pos) != null); if (pos > 0) { PrintAction printAction = new PrintAction(); printMenu = fileMenu.insert(printAction, pos); printMenu.setEnabled(false); printMenu.setVisible(true); KeyStroke ks = printAction.getShortcut().getKeyStroke(); if (ks != null) { printMenu.setAccelerator(ks); } fileMenu.insertSeparator(pos); } restorePrefs(); // Recover after crash if necessary } /** * Enables/disables the print action in the GUI * when a MapFrame gets shown or removed. * * @param oldFrame ignored. * * @param newFrame the new mapFrame. */ @Override public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) { if (printMenu != null) { printMenu.setEnabled(newFrame != null); } } /** * Temporary adjust the preferences for map printing * * This will adjust some preferences such that elements which are * not useful on paper will not be printed. This includes the * following markup: downloaded area; node markers for connection, * selected, unselected, tagged state. * * Changes will be undone by restorePrefs(). */ public static void adjustPrefs() { if (!Main.pref.getBoolean("print.saved-prefs", false)) { Main.pref.put("print.saved-prefs", true); adjustPref("draw.data.downloaded_area", false); adjustPref("mappaint.node.connection-size", 0); adjustPref("mappaint.node.selected-size", 0); adjustPref("mappaint.node.tagged-size", 0); adjustPref("mappaint.node.unselected-size", 0); adjustPref("mappaint.node.virtual-size", 0); } } /** * Adjust a single preference. * * Saves the existing value for later restorePref. * * @param key the preference key * @param the temporary new int value */ protected static void adjustPref(String key, int value) { if (!Main.pref.get(key).isEmpty()) { Main.pref.put("print.saved-prefs."+key, Main.pref.get(key)); } Main.pref.putInteger(key, value); } /** * Adjust a single preference. * * Saves the existing value for later restorePref. * * @param key the preference key * @param the temporary new boolean value */ protected static void adjustPref(String key, boolean value) { if (!Main.pref.get(key).isEmpty()) { Main.pref.put("print.saved-prefs."+key, Main.pref.get(key)); } Main.pref.put(key, value); } /** * Adjust a single preference. * * Saves the existing value for later restorePref. * * @param key the preference key * @param the temporary new String value */ protected static void adjustPref(String key, String value) { if (!Main.pref.get(key).isEmpty()) { Main.pref.put("print.saved-prefs."+key, Main.pref.get(key)); } Main.pref.put(key, value); } /** * Undo temporary adjustments to the preferences made by adjustPrefs(). */ public static void restorePrefs() { if (Main.pref.getBoolean("print.saved-prefs", false)) { restorePref("draw.data.downloaded_area"); restorePref("mappaint.node.connection-size"); restorePref("mappaint.node.selected-size"); restorePref("mappaint.node.tagged-size"); restorePref("mappaint.node.unselected-size"); restorePref("mappaint.node.virtual-size"); Main.pref.put("print.saved-prefs", false); //Main.main.map.mapView.repaint(); } } /** * Restore a single preference previously saved by adjustPref() * * @param key the preference key to be restored */ protected static void restorePref(String key) { String savedKey = "print.saved-prefs."+key; Main.pref.put(key, Main.pref.get(savedKey)); Main.pref.put(savedKey, null); } }