001 // License: GPL. Copyright 2007 by Immanuel Scholz and others
002 package org.openstreetmap.josm.tools;
003
004 import java.io.File;
005 import java.io.IOException;
006 import java.util.HashMap;
007
008 /**
009 * This interface allows platfrom (operating system) dependent code
010 * to be bundled into self-contained classes.
011 *
012 * For plugin authors:
013 * To implement your own PlatformHook class, implement this interface,
014 * then create the class when your plugin is loaded and store it in
015 * Main.platform. Please not that the two "startup" hooks will be
016 * called _before_ your plugin is loaded. If you need to hook there,
017 * split your class into two (one containing only the startup hooks,
018 * and one with the remainder) and send the startup class, together
019 * with propper OS detection code (see Main) for inclusion with
020 * JOSM to the JOSM team.
021 *
022 * Also, it might be a good idea to extend PlatformHookUnixoid.
023 * That class has a more or less neutral behaviour, that should
024 * work on all platforms supported by J2SE.
025 *
026 * Attention: At this time this interface is not to be considered
027 * complete.
028 */
029 public interface PlatformHook {
030 /**
031 * The preStartupHook will be called extremly early. It is
032 * guaranteed to be called before the GUI setup has started.
033 *
034 * Reason: On OSX we need to inform the Swing libraries
035 * that we want to be integrated with the OS before we setup
036 * our GUI.
037 */
038 public void preStartupHook();
039
040 /**
041 * The startupHook will be called early, but after the GUI
042 * setup has started.
043 *
044 * Reason: On OSX we need to register some callbacks with the
045 * OS, so we'll receive events from the system menu.
046 */
047 public void startupHook();
048
049 /**
050 * The openURL hook will be used to open an URL in the
051 * default webbrowser.
052 */
053 public void openUrl(String url) throws IOException;
054
055 /**
056 * The initSystemShortcuts hook will be called by the
057 * Shortcut class after the modifier groups have been read
058 * from the config, but before any shortcuts are read from
059 * it or registered from within the application.
060 *
061 * Plese note that you are not allowed to register any
062 * shortuts from this hook, but only "systemCuts"!
063 *
064 * BTW: SystemCuts should be named "system:<whatever>",
065 * and it'd be best if sou'd recycle the names already used
066 * by the Windows and OSX hooks. Especially the later has
067 * really many of them.
068 *
069 * You should also register any and all shortcuts that the
070 * operation system handles itself to block JOSM from trying
071 * to use them---as that would just not work. Call setAutomatic
072 * on them to prevent the keyboard preferences from allowing the
073 * user to change them.
074 */
075 public void initSystemShortcuts();
076
077 /**
078 * The makeTooltip hook will be called whenever a tooltip for
079 * a menu or button is created.
080 *
081 * Tooltips are usually not system dependent, unless the
082 * JVM is to dumb to provide correct names for all the keys.
083 *
084 * Another reason not to use the implementation in the *nix
085 * hook are LAFs that don't understand HTML, such as the OSX
086 * LAFs.
087 */
088 public String makeTooltip(String name, Shortcut sc);
089
090 public String getDefaultStyle();
091
092 public boolean canFullscreen();
093
094 public boolean rename(File from, File to);
095 }