Ignore:
Timestamp:
2013-02-18T18:01:31+01:00 (12 years ago)
Author:
akks
Message:

ImageryAdjust: Adjust while holding shortcut key

Location:
applications/editors/josm/plugins/imageryadjust
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/imageryadjust/build.xml

    r27852 r29261  
    11<?xml version="1.0" encoding="utf-8"?>
    2 <!--
    3 ** This is a template build file for a JOSM  plugin.
    4 **
    5 ** Maintaining versions
    6 ** ====================
    7 ** see README.template
    8 **
    9 ** Usage
    10 ** =====
    11 ** To build it run
    12 **
    13 **    > ant  dist
    14 **
    15 ** To install the generated plugin locally (in you default plugin directory) run
    16 **
    17 **    > ant  install
    18 **
    19 ** The generated plugin jar is not automatically available in JOSMs plugin configuration
    20 ** dialog. You have to check it in first.
    21 **
    22 ** Use the ant target 'publish' to check in the plugin and make it available to other
    23 ** JOSM users:
    24 **    set the properties commit.message and plugin.main.version
    25 ** and run
    26 **    > ant  publish
    27 **
    28 **
    29 -->
    302<project name="imageryadjust" default="dist" basedir=".">
    31     <!-- enter the SVN commit message -->
    32     <property name="commit.message" value="ImageryAdjust: Adjust while holding Y"/>
    33     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
     3    <property name="commit.message" value="ImageryAdjust: Adjust while holding shortcut key"/>
    344    <property name="plugin.main.version" value="4980"/>
    35     <!--
    36       ************************************************
    37       ** should not be necessary to change the following properties
    38      -->
    39     <property name="josm" location="../../core/dist/josm-custom.jar"/>
    40     <property name="plugin.build.dir" value="build"/>
    41     <property name="plugin.src.dir" value="src"/>
    42     <!-- this is the directory where the plugin jar is copied to -->
    43     <property name="plugin.dist.dir" value="../../dist"/>
    44     <property name="ant.build.javac.target" value="1.5"/>
    45     <property name="plugin.dist.dir" value="../../dist"/>
    46     <property name="plugin.jar" value="${plugin.dist.dir}/${ant.project.name}.jar"/>
    47     <!--
    48     **********************************************************
    49     ** init - initializes the build
    50     **********************************************************
    51     -->
    52     <target name="init">
    53         <mkdir dir="${plugin.build.dir}"/>
    54     </target>
    55     <!--
    56     **********************************************************
    57     ** compile - complies the source tree
    58     **********************************************************
    59     -->
    60     <target name="compile" depends="init">
    61         <echo message="compiling sources for  ${plugin.jar} ... "/>
    62         <javac srcdir="src" classpath="${josm}" debug="true" destdir="${plugin.build.dir}">
    63             <compilerarg value="-Xlint:deprecation"/>
    64             <compilerarg value="-Xlint:unchecked"/>
    65         </javac>
    66     </target>
    67     <!--
    68     **********************************************************
    69     ** dist - creates the plugin jar
    70     **********************************************************
    71     -->
    72     <target name="dist" depends="compile,revision">
    73         <echo message="creating ${ant.project.name}.jar ... "/>
    74         <copy todir="${plugin.build.dir}/resources">
    75             <fileset dir="resources"/>
    76         </copy>
    77         <copy todir="${plugin.build.dir}/images">
    78             <fileset dir="images"/>
    79         </copy>
    80         <copy todir="${plugin.build.dir}/data">
    81             <fileset dir="data"/>
    82         </copy>
    83         <copy todir="${plugin.build.dir}">
    84             <fileset dir=".">
    85                 <include name="README"/>
    86                 <include name="LICENSE"/>
    87             </fileset>
    88         </copy>
    89         <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
    90             <!--
    91         ************************************************
    92         ** configure these properties. Most of them will be copied to the plugins
    93         ** manifest file. Property values will also show up in the list available
    94         ** plugins: http://josm.openstreetmap.de/wiki/Plugins.
    95         **
    96         ************************************************
    97     -->
    98             <manifest>
    99                 <attribute name="Author" value="Upliner"/>
    100                 <attribute name="Plugin-Class" value="imageryadjust.ImageryAdjustPlugin"/>
    101                 <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
    102                 <attribute name="Plugin-Description" value="WMSPlugin-style imagery adjustment mapmode"/>
    103                 <attribute name="Plugin-Icon" value="images/mapmode/adjustimg.png"/>
    104                 <attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
    105                 <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
    106             </manifest>
    107         </jar>
    108     </target>
    109     <!--
    110     **********************************************************
    111     ** revision - extracts the current revision number for the
    112     **    file build.number and stores it in the XML property
    113     **    version.*
    114     **********************************************************
    115     -->
    116     <target name="revision">
    117         <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
    118             <env key="LANG" value="C"/>
    119             <arg value="info"/>
    120             <arg value="--xml"/>
    121             <arg value="."/>
    122         </exec>
    123         <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
    124         <delete file="REVISION"/>
    125     </target>
    126     <!--
    127     **********************************************************
    128     ** clean - clean up the build environment
    129     **********************************************************
    130     -->
    131     <target name="clean">
    132         <delete dir="${plugin.build.dir}"/>
    133         <delete file="${plugin.jar}"/>
    134     </target>
    135     <!--
    136     **********************************************************
    137     ** install - install the plugin in your local JOSM installation
    138     **********************************************************
    139     -->
    140     <target name="install" depends="dist">
    141         <property environment="env"/>
    142         <condition property="josm.plugins.dir" value="${env.APPDATA}/JOSM/plugins" else="${user.home}/.josm/plugins">
    143             <and>
    144                 <os family="windows"/>
    145             </and>
    146         </condition>
    147         <copy file="${plugin.jar}" todir="${josm.plugins.dir}"/>
    148     </target>
    149     <!--
    150     ************************** Publishing the plugin ***********************************
    151     -->
    152     <!--
    153         ** extracts the JOSM release for the JOSM version in ../core and saves it in the
    154         ** property ${coreversion.info.entry.revision}
    155         **
    156         -->
    157     <target name="core-info">
    158         <exec append="false" output="core.info.xml" executable="svn" failifexecutionfails="false">
    159             <env key="LANG" value="C"/>
    160             <arg value="info"/>
    161             <arg value="--xml"/>
    162             <arg value="../../core"/>
    163         </exec>
    164         <xmlproperty file="core.info.xml" prefix="coreversion" keepRoot="true" collapseAttributes="true"/>
    165         <echo>Building against core revision ${coreversion.info.entry.revision}.</echo>
    166         <echo>Plugin-Mainversion is set to ${plugin.main.version}.</echo>
    167         <delete file="core.info.xml"/>
    168     </target>
    169     <!--
    170         ** commits the source tree for this plugin
    171         -->
    172     <target name="commit-current">
    173         <echo>Commiting the plugin source with message '${commit.message}' ...</echo>
    174         <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
    175             <env key="LANG" value="C"/>
    176             <arg value="commit"/>
    177             <arg value="-m '${commit.message}'"/>
    178             <arg value="."/>
    179         </exec>
    180     </target>
    181     <!--
    182         ** updates (svn up) the source tree for this plugin
    183         -->
    184     <target name="update-current">
    185         <echo>Updating plugin source ...</echo>
    186         <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
    187             <env key="LANG" value="C"/>
    188             <arg value="up"/>
    189             <arg value="."/>
    190         </exec>
    191         <echo>Updating ${plugin.jar} ...</echo>
    192         <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
    193             <env key="LANG" value="C"/>
    194             <arg value="up"/>
    195             <arg value="../dist/${plugin.jar}"/>
    196         </exec>
    197     </target>
    198     <!--
    199         ** commits the plugin.jar
    200         -->
    201     <target name="commit-dist">
    202         <echo>
    203     ***** Properties of published ${plugin.jar} *****
    204     Commit message    : '${commit.message}'                   
    205     Plugin-Mainversion: ${plugin.main.version}
    206     JOSM build version: ${coreversion.info.entry.revision}
    207     Plugin-Version    : ${version.entry.commit.revision}
    208     ***** / Properties of published ${plugin.jar} *****                   
    209                        
    210     Now commiting ${plugin.jar} ...
    211     </echo>
    212         <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
    213             <env key="LANG" value="C"/>
    214             <arg value="-m '${commit.message}'"/>
    215             <arg value="commit"/>
    216             <arg value="${plugin.jar}"/>
    217         </exec>
    218     </target>
    219     <!-- ** make sure svn is present as a command line tool ** -->
    220     <target name="ensure-svn-present">
    221         <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false" failonerror="false" resultproperty="svn.exit.code">
    222             <env key="LANG" value="C"/>
    223             <arg value="--version"/>
    224         </exec>
    225         <fail message="Fatal: command 'svn --version' failed. Please make sure svn is installed on your system.">
    226             <!-- return code not set at all? Most likely svn isn't installed -->
    227             <condition>
    228                 <not>
    229                     <isset property="svn.exit.code"/>
    230                 </not>
    231             </condition>
    232         </fail>
    233         <fail message="Fatal: command 'svn --version' failed. Please make sure a working copy of svn is installed on your system.">
    234             <!-- error code from SVN? Most likely svn is not what we are looking on this system -->
    235             <condition>
    236                 <isfailure code="${svn.exit.code}"/>
    237             </condition>
    238         </fail>
    239     </target>
    240     <target name="publish" depends="ensure-svn-present,core-info,commit-current,update-current,clean,dist,commit-dist">
    241     </target>
     5
     6    <property name="plugin.author" value="Upliner"/>
     7    <property name="plugin.class" value="imageryadjust.ImageryAdjustPlugin"/>
     8    <property name="plugin.description" value="WMSPlugin-style imagery adjustment mapmode"/>
     9    <property name="plugin.icon" value="images/mapmode/adjustimg.png"/>
     10    <property name="plugin.link" value="http://wiki.openstreetmap.org/wiki/JOSM/Plugins/ImageryAdjust"/>
     11
     12    <!-- ** include targets that all plugins have in common ** -->
     13    <import file="../build-common.xml"/>
    24214</project>
  • applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java

    r27852 r29261  
    2121import org.openstreetmap.josm.tools.ImageProvider;
    2222import org.openstreetmap.josm.tools.Shortcut;
    23 
    24 
    25 public class ImageryAdjustMapMode extends MapMode implements MouseListener, MouseMotionListener, AWTEventListener, MapFrame.MapModeChangeListener{
     23import utils.TimedKeyReleaseListener;
     24
     25
     26public class ImageryAdjustMapMode extends MapMode implements MouseListener, MouseMotionListener, MapFrame.MapModeChangeListener{
    2627    boolean mouseDown;
    2728    EastNorth prevEastNorth;
     
    2930    private MapMode oldMapMode;
    3031
    31     private final TreeSet<Integer> set = new TreeSet<Integer>();
    32     private Timer timer;
    33     private KeyEvent releaseEvent;
    3432   
    3533    public ImageryAdjustMapMode(MapFrame mapFrame) {
     
    5856   
    5957   
    60    
     58    TimedKeyReleaseListener listener;
     59           
    6160    @Override public void enterMode() {
    6261        super.enterMode();
     
    7675            adjustingLayer.setVisible(true);
    7776        }
    78        Main.map.mapView.addMouseListener(this);
     77        Main.map.mapView.addMouseListener(this);
    7978        Main.map.mapView.addMouseMotionListener(this);
    80         timer = new Timer(0, new ActionListener() {
    81             @Override
    82             public void actionPerformed(ActionEvent ae) {
    83                  timer.stop();
    84                  if (set.remove(releaseEvent.getKeyCode())) {
    85                   doKeyReleaseEvent(releaseEvent);
    86                  }
     79        listener = new TimedKeyReleaseListener() {
     80                @Override
     81                protected void doKeyReleaseEvent(KeyEvent evt) {
     82                    if (releaseEvent.getKeyCode() == getShortcut().getKeyStroke().getKeyCode()) {
     83                    if (oldMapMode!=null && !(oldMapMode instanceof ImageryAdjustMapMode))
     84                    Main.map.selectMapMode(oldMapMode);
     85                }
    8786            }
    88 
    89         });
    90        
    91         try {
    92             Toolkit.getDefaultToolkit().addAWTEventListener(this,
    93                     AWTEvent.KEY_EVENT_MASK);
    94         } catch (SecurityException ex) {
    95         }
    96        
    97        
     87        };
    9888    }
    9989
     
    10393        Main.map.mapView.removeMouseMotionListener(this);
    10494        adjustingLayer = null;
    105         try {
    106             Toolkit.getDefaultToolkit().removeAWTEventListener(this);
    107         } catch (SecurityException ex) {
    108         }
     95        listener.stop();
    10996    }
    11097
     
    137124    }
    138125   
    139     private void doKeyEvent(KeyEvent keyEvent) {
    140     }
    141 
    142     private void doKeyReleaseEvent(KeyEvent releaseEvent) {
    143         if (releaseEvent.getKeyCode() == getShortcut().getKeyStroke().getKeyCode()) {
    144             if (oldMapMode!=null && !(oldMapMode instanceof ImageryAdjustMapMode))
    145             Main.map.selectMapMode(oldMapMode);
    146         }
    147     }
    148 
    149126    @Override public boolean layerIsSupported(Layer l) {
    150127        //return hasImageryLayersToAdjust();
     
    153130
    154131    @Override
    155     public void eventDispatched(AWTEvent event) {
    156         if (event instanceof KeyEvent) {
    157         KeyEvent e=(KeyEvent) event;
    158        
    159         if (event.getID() == KeyEvent.KEY_PRESSED) {
    160              if (timer.isRunning()) {
    161                   timer.stop();
    162                 } else {
    163                   if (set.add((e.getKeyCode()))) doKeyEvent((KeyEvent) event);
    164                 }
    165         }
    166         if (event.getID() == KeyEvent.KEY_RELEASED) {
    167             if (timer.isRunning()) {
    168               timer.stop();
    169                if (set.remove(e.getKeyCode())) doKeyReleaseEvent(e);
    170             } else {
    171               releaseEvent = e;
    172               timer.restart();
    173             }
    174         }
    175         }
    176     }
    177 
    178     @Override
    179132    public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
    180133        this.oldMapMode = oldMapMode;
    181134    }
    182 
    183135
    184136    /**
Note: See TracChangeset for help on using the changeset viewer.