[osmbrowser~subversion:8] Significant upgrades: Killed a pile of bugs, background tile loading is a

  • From: jag@kenai.com
  • To: commits@osmbrowser.kenai.com
  • Subject: [osmbrowser~subversion:8] Significant upgrades: Killed a pile of bugs, background tile loading is a
  • Date: Fri, 9 Sep 2011 18:20:11 +0000

Project:    osmbrowser
Repository: subversion
Revision:   8
Author:     jag
Date:       2011-09-09 18:20:08 UTC
Link:       

Log Message:
------------
Significant upgrades: Killed a pile of bugs, background tile loading is a 
pile smarter (making zooming and panning much smoother), and there are basic 
overlay facilities for icons and editable vector tracks.  More to come  :-)


Revisions:
----------
8


Modified Paths:
---------------
OSMBrowser/src/com/nighthacks/mapping/MapTilePool.java
OSMBrowser/src/com/nighthacks/mapping/MapView.java
OSMBrowser/src/com/nighthacks/mapping/MapApplet.java
OSMBrowser/nbproject/genfiles.properties
OSMBrowser/src/com/nighthacks/mapping/MapOverlay.java
OSMBrowser/nbproject/project.properties
OSMBrowser/src/com/nighthacks/mapping/MapTile.java
OSMBrowser/nbproject/build-impl.xml


Added Paths:
------------
OSMBrowser/src/com/nighthacks/mapping/IconOverlay.java
OSMBrowser/src/com/nighthacks/mapping/resources/ShipIconYellow32.png
OSMBrowser/src/com/nighthacks/mapping/resources/NormalCursor.png
OSMBrowser/src/com/nighthacks/mapping/resources/NormalCursor.psd
OSMBrowser/src/com/nighthacks/mapping/MapViewpoint.java
OSMBrowser/src/com/nighthacks/mapping/resources/ShipIconYellow16.png
OSMBrowser/src/com/nighthacks/mapping/resources/MoveCursor32.png
OSMBrowser/src/com/nighthacks/mapping/TestMapView.java
OSMBrowser/src/com/nighthacks/mapping/resources/NormalCursor.ai
OSMBrowser/src/com/nighthacks/mapping/resources/NormalCursor32.png
OSMBrowser/src/com/nighthacks/mapping/TrackOverlay.java
OSMBrowser/src/com/nighthacks/mapping/resources
OSMBrowser/src/com/nighthacks/mapping/resources/NormalCursoe.psd
OSMBrowser/src/com/nighthacks/mapping/resources/NormalCursor16.png
OSMBrowser/src/com/nighthacks/mapping/resources/ShipIconYellow.ai
OSMBrowser/src/com/nighthacks/mapping/resources/MoveCursor.ai
OSMBrowser/src/com/nighthacks/mapping/resources/MoveCursor16.png


Diffs:
------
Index: OSMBrowser/master-application.jnlp
===================================================================
--- OSMBrowser/master-application.jnlp  (revision 7)
+++ OSMBrowser/master-application.jnlp  (revision 8)
@@ -1,21 +0,0 @@
-<jnlp spec="1.0+" codebase="${jnlp.codebase}" href="launch.jnlp">
-    <information>
-        <title>${APPLICATION.TITLE}</title>
-        <vendor>${APPLICATION.VENDOR}</vendor>
-        <homepage href="${APPLICATION.HOMEPAGE}"/>
-        <description>${APPLICATION.DESC}</description>
-        <description kind="short">${APPLICATION.DESC.SHORT}</description>
-<!--${JNLP.ICONS}-->
-<!--${JNLP.OFFLINE.ALLOWED}-->
-    </information>
-<!--${JNLP.SECURITY}-->
-    <resources>
-<!--${JNLP.RESOURCES.RUNTIME}-->
-<!--${JNLP.RESOURCES.MAIN.JAR}-->
-<!--${JNLP.RESOURCES.JARS}-->
-<!--${JNLP.RESOURCES.EXTENSIONS}-->
-    </resources>
-    <application-desc main-class="${jnlp.main.class}">
-<!--${JNLP.APPLICATION.ARGS}-->
-    </application-desc>
-</jnlp>
Index: OSMBrowser/nbproject/project.properties
===================================================================
--- OSMBrowser/nbproject/project.properties     (revision 7)
+++ OSMBrowser/nbproject/project.properties     (revision 8)
@@ -1,3 +1,6 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.run.all.processors=true
 ant.customtasks.libs=JWSAntTasks
 application.title=MapBrowser
 application.vendor=jag
@@ -21,16 +24,22 @@
 dist.dir=dist
 dist.jar=${dist.dir}/OSMBrowser.jar
 dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
+endorsed.classpath=\
+    ${file.reference.javaws.jar}:\
+    ${file.reference.plugin.jar}
 excludes=
+file.reference.javaws.jar=/System/Library/Frameworks/JavaVM.framework/Resources/Deploy.bundle/Contents/Home/lib/javaws.jar
+file.reference.plugin.jar=/System/Library/Frameworks/JavaVM.framework/Resources/Deploy.bundle/Contents/Home/lib/plugin.jar
 includes=**
 jar.compress=false
 javac.classpath=
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.5
-javac.target=1.5
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.6
+javac.target=1.6
 javac.test.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}:\
@@ -57,9 +66,10 @@
 jnlp.enabled=true
 jnlp.offline-allowed=true
 jnlp.signed=false
-main.class=com.nighthacks.mapping.GlassfishGeodata
+main.class=com.nighthacks.mapping.TestMapView
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
 platform.active=default_platform
 run.classpath=\
     ${javac.classpath}:\
@@ -67,7 +77,7 @@
 # Space-separated list of JVM arguments used when running the project
 # (you may also define separate properties like run-sys-prop.name=value 
instead of -Dname=value
 # or test-sys-prop.name=value to set system properties for unit tests):
-run.jvmargs=-enableassertions -Xmx512m
+run.jvmargs=-ea -Xmx2000m
 run.test.classpath=\
     ${javac.test.classpath}:\
     ${build.test.classes.dir}
Index: OSMBrowser/nbproject/genfiles.properties
===================================================================
--- OSMBrowser/nbproject/genfiles.properties    (revision 7)
+++ OSMBrowser/nbproject/genfiles.properties    (revision 8)
@@ -4,5 +4,5 @@
 # This file is used by a NetBeans-based IDE to track changes in generated 
files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never 
regenerate such files for you.
 nbproject/build-impl.xml.data.CRC32=35b3eeb8
-nbproject/build-impl.xml.script.CRC32=519c25ce
-nbproject/build-impl.xml.stylesheet.CRC32=576378a2@1.32.1.45
+nbproject/build-impl.xml.script.CRC32=4e59b0d5
+nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45
Index: OSMBrowser/nbproject/build-impl.xml
===================================================================
--- OSMBrowser/nbproject/build-impl.xml (revision 7)
+++ OSMBrowser/nbproject/build-impl.xml (revision 8)
@@ -56,6 +56,14 @@
     </target>
     <target 
depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property"
 name="-do-init">
         <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" 
trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
         <condition property="main.class.available">
             <and>
                 <isset property="main.class"/>
@@ -70,8 +78,14 @@
                 <isset property="main.class.available"/>
             </and>
         </condition>
+        <condition property="do.archive">
+            <not>
+                <istrue value="${jar.archive.disabled}"/>
+            </not>
+        </condition>
         <condition property="do.mkdist">
             <and>
+                <isset property="do.archive"/>
                 <isset property="libs.CopyLibs.classpath"/>
                 <not>
                     <istrue value="${mkdist.disabled}"/>
@@ -84,12 +98,30 @@
                 <isset property="do.mkdist"/>
             </and>
         </condition>
-        <condition property="manifest.available+mkdist.available">
+        <condition property="do.archive+manifest.available">
             <and>
-                <istrue value="${manifest.available}"/>
-                <isset property="do.mkdist"/>
+                <isset property="manifest.available"/>
+                <istrue value="${do.archive}"/>
             </and>
         </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available+main.class">
+            <and>
+                <istrue value="${manifest.available+main.class}"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
         <condition property="manifest.available-mkdist.available">
             <or>
                 <istrue value="${manifest.available}"/>
@@ -156,7 +188,18 @@
         <condition else="" property="endorsed.classpath.cmd.line.arg" 
value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
             <length length="0" string="${endorsed.classpath}" 
when="greater"/>
         </condition>
-        <property name="javac.fork" value="false"/>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" 
string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
+        <property name="jar.index" value="false"/>
+        <property name="jar.index.metainf" value="${jar.index}"/>
+        <available file="${meta.inf.dir}/persistence.xml" 
property="has.persistence.xml"/>
     </target>
     <target name="-post-init">
         <!-- Empty placeholder for easier customization. -->
@@ -183,11 +226,13 @@
             </sequential>
         </macrodef>
     </target>
-    <target name="-init-macrodef-javac">
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" 
name="-init-macrodef-javac-with-processors">
         <macrodef name="javac" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
             <attribute default="${src.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" 
name="processorpath"/>
+            <attribute 
default="${build.generated.sources.dir}/ap-source-output" 
name="apgeneratedsrcdir"/>
             <attribute default="${includes}" name="includes"/>
             <attribute default="${excludes}" name="excludes"/>
             <attribute default="${javac.debug}" name="debug"/>
@@ -197,6 +242,7 @@
             <sequential>
                 <property location="${build.dir}/empty" name="empty.dir"/>
                 <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
                 <javac debug="@{debug}" deprecation="${javac.deprecation}" 
destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" 
fork="${javac.fork}" includeantruntime="false" includes="@{includes}" 
source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" 
target="${javac.target}" tempdir="${java.io.tmpdir}">
                     <src>
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
@@ -208,10 +254,51 @@
                     </classpath>
                     <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
                     <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg 
line="${annotation.processing.processor.options}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
                     <customize/>
                 </javac>
             </sequential>
         </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" 
name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" 
name="processorpath"/>
+            <attribute 
default="${build.generated.sources.dir}/ap-source-output" 
name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" 
destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" 
fork="${javac.fork}" includeantruntime="false" includes="@{includes}" 
source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" 
target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target 
depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors"
 name="-init-macrodef-javac">
         <macrodef name="depend" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
             <attribute default="${src.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
@@ -228,15 +315,20 @@
             <attribute default="${build.classes.dir}" name="destdir"/>
             <sequential>
                 <fail unless="javac.includes">Must set javac.includes</fail>
-                <pathconvert pathsep="," property="javac.includes.binary">
+                <pathconvert pathsep="${line.separator}" 
property="javac.includes.binary">
                     <path>
                         <filelist dir="@{destdir}" 
files="${javac.includes}"/>
                     </path>
                     <globmapper from="*.java" to="*.class"/>
                 </pathconvert>
+                <tempfile deleteonexit="true" 
property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" 
message="${javac.includes.binary}"/>
                 <delete>
-                    <files includes="${javac.includes.binary}"/>
+                    <files includesfile="${javac.includesfile.binary}"/>
                 </delete>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
             </sequential>
         </macrodef>
     </target>
@@ -246,7 +338,8 @@
             <attribute default="${excludes}" name="excludes"/>
             <attribute default="**" name="testincludes"/>
             <sequential>
-                <junit dir="${work.dir}" errorproperty="tests.failed" 
failureproperty="tests.failed" fork="true" showoutput="true" 
tempdir="${build.dir}">
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" 
failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" 
showoutput="true" tempdir="${build.dir}">
                     <batchtest todir="${build.test.results.dir}">
                         <fileset dir="${test.src.dir}" 
excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
@@ -262,11 +355,56 @@
                     <formatter type="brief" usefile="false"/>
                     <formatter type="xml"/>
                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-ea"/>
                     <jvmarg line="${run.jvmargs}"/>
                 </junit>
             </sequential>
         </macrodef>
     </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, 
-profile-init-macrodef-profile, -profile-init-check" name="profile-init"/>
+    <target name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-profile-init-macrodef-profile">
+        <macrodef name="resolve">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${env.@{value}}"/>
+            </sequential>
+        </macrodef>
+        <macrodef name="profile">
+            <attribute default="${main.class}" name="classname"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property environment="env"/>
+                <resolve name="profiler.current.path" 
value="${profiler.info.pathvar}"/>
+                <java classname="@{classname}" dir="${profiler.info.dir}" 
fork="true" jvm="${profiler.info.jvm}">
+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                    <jvmarg line="${profiler.info.jvmargs}"/>
+                    <env key="${profiler.info.pathvar}" 
path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                    <arg line="${application.args}"/>
+                    <classpath>
+                        <path path="${run.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, 
-profile-init-macrodef-profile" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling 
in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent 
JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
     <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
         <macrodef name="nbjpdastart" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
             <attribute default="${main.class}" name="name"/>
@@ -359,14 +497,66 @@
             </sequential>
         </macrodef>
     </target>
+    <target name="-init-macrodef-copylibs">
+        <macrodef name="copylibs" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${manifest.file}" name="manifest"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
+                <pathconvert 
property="run.classpath.without.build.classes.dir">
+                    <path path="${run.classpath}"/>
+                    <map from="${build.classes.dir.resolved}" to=""/>
+                </pathconvert>
+                <pathconvert pathsep=" " property="jar.classpath">
+                    <path path="${run.classpath.without.build.classes.dir}"/>
+                    <chainedmapper>
+                        <flattenmapper/>
+                        <globmapper from="*" to="lib/*"/>
+                    </chainedmapper>
+                </pathconvert>
+                <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                <copylibs compress="${jar.compress}" index="${jar.index}" 
indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" 
manifest="@{manifest}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                    <fileset dir="${build.classes.dir}"/>
+                    <manifest>
+                        <attribute name="Class-Path" 
value="${jar.classpath}"/>
+                        <customize/>
+                    </manifest>
+                </copylibs>
+            </sequential>
+        </macrodef>
+    </target>
     <target name="-init-presetdef-jar">
         <presetdef name="jar" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
-            <jar compress="${jar.compress}" jarfile="${dist.jar}">
+            <jar compress="${jar.compress}" index="${jar.index}" 
jarfile="${dist.jar}">
                 <j2seproject1:fileset dir="${build.classes.dir}"/>
             </jar>
         </presetdef>
     </target>
-    <target 
depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar"
 name="init"/>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.processor.options" value=""/>
+        <property name="annotation.processing.run.all.processors" 
value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" 
value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" 
name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" 
value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" 
value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" 
name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target 
depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline"
 name="init"/>
     <!--
                 ===================
                 COMPILATION SECTION
@@ -410,12 +600,18 @@
         </pathconvert>
         <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
     </target>
-    <target 
depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" 
if="have.sources" name="-do-compile">
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, 
-copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
         <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
         <copy todir="${build.classes.dir}">
             <fileset dir="${src.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
     </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy todir="${build.classes.dir}/META-INF">
+            <fileset dir="${meta.inf.dir}" includes="persistence.xml"/>
+        </copy>
+    </target>
     <target name="-post-compile">
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
@@ -448,99 +644,65 @@
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" 
name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
         <j2seproject1:jar/>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available" name="-do-jar-with-manifest" 
unless="manifest.available+main.class-mkdist.available">
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="do.archive+manifest.available" name="-do-jar-with-manifest" 
unless="manifest.available+main.class-mkdist.available">
         <j2seproject1:jar manifest="${manifest.file}"/>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available+main.class" name="-do-jar-with-mainclass" 
unless="manifest.available+main.class+mkdist.available">
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" 
unless="manifest.available+main.class+mkdist.available">
         <j2seproject1:jar manifest="${manifest.file}">
             <j2seproject1:manifest>
                 <j2seproject1:attribute name="Main-Class" 
value="${main.class}"/>
             </j2seproject1:manifest>
         </j2seproject1:jar>
-        <echo>To run this application from the command line without Ant, 
try:</echo>
+        <echo level="info">To run this application from the command line 
without Ant, try:</echo>
         <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
         <property location="${dist.jar}" name="dist.jar.resolved"/>
         <pathconvert property="run.classpath.with.dist.jar">
             <path path="${run.classpath}"/>
             <map from="${build.classes.dir.resolved}" 
to="${dist.jar.resolved}"/>
         </pathconvert>
-        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" 
${main.class}</echo>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available+main.class+mkdist.available" 
name="-do-jar-with-libraries">
-        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
-        <pathconvert property="run.classpath.without.build.classes.dir">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to=""/>
-        </pathconvert>
-        <pathconvert pathsep=" " property="jar.classpath">
-            <path path="${run.classpath.without.build.classes.dir}"/>
-            <chainedmapper>
-                <flattenmapper/>
-                <globmapper from="*" to="lib/*"/>
-            </chainedmapper>
-        </pathconvert>
-        <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" 
manifest="${manifest.file}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
-            <fileset dir="${build.classes.dir}"/>
-            <manifest>
-                <attribute name="Main-Class" value="${main.class}"/>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-            </manifest>
-        </copylibs>
-        <echo>To run this application from the command line without Ant, 
try:</echo>
+    <target depends="init" if="do.archive" 
name="-do-jar-with-libraries-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" 
property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
+    </target>
+    <target depends="init" if="do.archive+manifest.available" 
name="-do-jar-with-libraries-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" 
property="tmp.manifest.file"/>
+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target 
depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest"
 if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target 
depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest"
 if="do.archive+splashscreen.available" 
name="-do-jar-with-libraries-set-splashscreen">
+        <basename file="${application.splash}" 
property="splashscreen.basename"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy failonerror="false" file="${application.splash}" 
todir="${build.classes.dir}/META-INF"/>
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" 
value="META-INF/${splashscreen.basename}"/>
+        </manifest>
+    </target>
+    <target 
depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen"
 if="do.mkdist" name="-do-jar-with-libraries-pack">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line 
without Ant, try:</echo>
         <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo>java -jar "${dist.jar.resolved}"</echo>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available+mkdist.available" 
name="-do-jar-with-libraries-without-mainclass" unless="main.class.available">
-        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
-        <pathconvert property="run.classpath.without.build.classes.dir">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to=""/>
-        </pathconvert>
-        <pathconvert pathsep=" " property="jar.classpath">
-            <path path="${run.classpath.without.build.classes.dir}"/>
-            <chainedmapper>
-                <flattenmapper/>
-                <globmapper from="*" to="lib/*"/>
-            </chainedmapper>
-        </pathconvert>
-        <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" 
manifest="${manifest.file}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
-            <fileset dir="${build.classes.dir}"/>
-            <manifest>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-            </manifest>
-        </copylibs>
+    <target depends="-do-jar-with-libraries-pack" if="do.archive" 
name="-do-jar-with-libraries-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
     </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" 
name="-do-jar-with-libraries-without-manifest" unless="manifest.available">
-        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
-        <pathconvert property="run.classpath.without.build.classes.dir">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to=""/>
-        </pathconvert>
-        <pathconvert pathsep=" " property="jar.classpath">
-            <path path="${run.classpath.without.build.classes.dir}"/>
-            <chainedmapper>
-                <flattenmapper/>
-                <globmapper from="*" to="lib/*"/>
-            </chainedmapper>
-        </pathconvert>
-        <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
-            <fileset dir="${build.classes.dir}"/>
-            <manifest>
-                <attribute name="Class-Path" value="${jar.classpath}"/>
-            </manifest>
-        </copylibs>
-    </target>
+    <target 
depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest"
 name="-do-jar-with-libraries"/>
     <target name="-post-jar">
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
     </target>
-    <target 
depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar,jnlp"
 description="Build JAR." name="jar"/>
+    <target 
depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar,jnlp"
 description="Build JAR." name="jar"/>
     <!--
                 =================
                 EXECUTION SECTION
@@ -606,23 +768,98 @@
     </target>
     <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" 
name="debug-fix"/>
     <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <target depends="profile-init,compile" description="Profile a project in 
the IDE." if="netbeans.home" name="profile">
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a 
selected class in the IDE." if="netbeans.home" name="profile-single">
+        <fail unless="profile.class">Must select one file in the IDE or set 
profile.class</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <!--
+                =========================
+                APPLET PROFILING  SECTION
+                =========================
+            -->
+    <target depends="profile-init,compile-single" if="netbeans.home" 
name="profile-applet">
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <!--
+                =========================
+                TESTS PROFILING  SECTION
+                =========================
+            -->
+    <target depends="profile-init,compile-test-single" if="netbeans.home" 
name="profile-test-single">
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" 
failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" 
showoutput="true">
+            <env key="${profiler.info.pathvar}" 
path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
                 ===============
                 JAVADOC SECTION
                 ===============
             -->
-    <target depends="init" name="-javadoc-build">
+    <target depends="init" if="have.sources" name="-javadoc-build">
         <mkdir dir="${dist.javadoc.dir}"/>
         <javadoc additionalparam="${javadoc.additionalparam}" 
author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" 
docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" 
noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" 
notree="${javadoc.notree}" private="${javadoc.private}" 
source="${javac.source}" splitindex="${javadoc.splitindex}" 
use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" 
windowtitle="${javadoc.windowtitle}">
             <classpath>
                 <path path="${javac.classpath}"/>
             </classpath>
-            <fileset dir="${src.dir}" excludes="${excludes}" 
includes="${includes}">
+            <fileset dir="${src.dir}" excludes="*.java,${excludes}" 
includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
             <fileset dir="${build.generated.sources.dir}" 
erroronmissingdir="false">
                 <include name="**/*.java"/>
+                <exclude name="*.java"/>
             </fileset>
         </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" 
includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" 
erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
     </target>
     <target depends="init,-javadoc-build" if="netbeans.home" 
name="-javadoc-browse" unless="no.javadoc.preview">
         <nbbrowse file="${dist.javadoc.dir}/index.html"/>
@@ -643,8 +880,8 @@
     <target if="do.depend.true" name="-compile-test-depend">
         <j2seproject3:depend classpath="${javac.test.classpath}" 
destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
     </target>
-    <target 
depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend"
 if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" 
destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    <target 
depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend"
 if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" 
classpath="${javac.test.classpath}" debug="true" 
destdir="${build.test.classes.dir}" 
processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.src.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
@@ -658,10 +895,10 @@
         <!-- Empty placeholder for easier customization. -->
         <!-- You can override this target in the ../build.xml file. -->
     </target>
-    <target 
depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" 
if="have.tests" name="-do-compile-test-single">
+    <target 
depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single"
 if="have.tests" name="-do-compile-test-single">
         <fail unless="javac.includes">Must select some files in the IDE or 
set javac.includes</fail>
         <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" 
destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" 
sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" 
classpath="${javac.test.classpath}" debug="true" 
destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" 
processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" 
srcdir="${test.src.dir}"/>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.src.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
Index: OSMBrowser/src/com/nighthacks/mapping/GlassfishGeodata.java
===================================================================
--- OSMBrowser/src/com/nighthacks/mapping/GlassfishGeodata.java (revision 7)
+++ OSMBrowser/src/com/nighthacks/mapping/GlassfishGeodata.java (revision 8)
@@ -1,114 +0,0 @@
-package com.nighthacks.mapping;
-
-
-import java.io.*;
-import java.util.ArrayList;
-import java.awt.*;
-import javax.swing.*;
-import static java.lang.Math.*;
-import com.nighthacks.mapping.MapView.MapViewpoint;
-
-/**
- * A demo application that overlays the map with glassfish usage data
- * @author jag
- */
-public class GlassfishGeodata implements MapOverlay {
-
-    public static void main(String argv[]) {
-        JFrame f = new JFrame("Map");
-        f.setBounds(10,10,600,500);
-        MapViewpoint moscone = 
MapViewpoint.XY(15,0.1599939494662157,0.38648710455147484);
-        MapViewpoint sun = 
MapViewpoint.XY(17.344138397456653,0.16069912104950326,0.3875379937519174);
-        MapView v = new MapView(moscone);
-        v.add(new GlassfishGeodata());
-        v.animateTo(moscone,3000);
-        f.setContentPane(v);
-        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        f.setVisible(true);
-        v.animateTo(sun,5000);
-    }
-
-    public static MapView view() {
-        MapView v = new MapView(MapViewpoint.XY(1,0.5,0.5));
-        v.add(new GlassfishGeodata());
-        return v;
-    }
-
-    /** A hash table of point data, hashed by the x,y coordinates of the 
points.
-     *  It breaks the map up into a grid of (1<<hscals)x(1<<hscale) buckets. 
*/
-    final private point[][] hash = new point[262144][];
-    {
-        new Thread() {
-            { setPriority(Thread.MIN_PRIORITY); }
-            @Override public void run() {
-                try {
-                    BufferedReader in = new BufferedReader(new 
InputStreamReader(this
-                            
.getClass().getResource("geodata.txt").openStream()));
-                    ArrayList<point> points = new ArrayList<point>();
-                    String line;
-                    while((line=in.readLine())!=null) {
-                        String[] parts = line.split(",");
-                        switch(parts.length) {
-                            case 3:
-                                points.add(new 
point(Double.parseDouble(parts[0]),
-                                        Double.parseDouble(parts[1]),
-                                        Integer.parseInt(parts[2])));
-                                break;
-                            case 1:
-                                int slot = Integer.parseInt(parts[0]);
-                                point[] p = points.toArray(new 
point[points.size()]);
-                                points.clear();
-                                if(slot>=0) hash[slot] = p;
-                                else lowRes = p;
-                                break;
-                            default:
-                                System.out.println("Huh?  "+line);
-                        }
-                    }
-                    in.close();
-                } catch (Throwable ex) {
-                    ex.printStackTrace();
-                }
-            }
-        }.start();
-    }
-    static private final Color ovl = new Color(1,0,1,0.2f);
-    static private final Color ovlClose = new Color(1,0,1,0.6f);
-    static private final double scaleCutover = pow(2,-6.-8.);
-    static private final double scaleCutoverColor = pow(2,-10.-8.);
-    @Override public void paintOverlay(Graphics2D g2, double left, double 
top,
-            double right, double bottom,
-            int width, int height, double zscale, double zoom) {
-        g2.setColor(zscale>=scaleCutoverColor ? ovl : ovlClose);
-        if(zscale>=scaleCutover)
-            paintOvals(g2,lowRes,left,top,right,bottom,zscale);
-        else {
-            int ileft = (int)(left*(1<<hscale));
-            int itop = (int)(top*(1<<hscale));
-            int iright = (int)ceil(right*(1<<hscale));
-            int ibottom = (int)ceil(bottom*(1<<hscale));
-            for(int y = itop; y<=ibottom; y++)
-                for(int x = ileft; x<=iright; x++)
-                    
paintOvals(g2,hash[(x<<hscale)+y],left,top,right,bottom,zscale);
-        }
-    }
-    private void paintOvals(Graphics2D g2, point[] pa, double left, double 
top, double right, double bottom, double zscale) {
-        if(pa!=null)
-            for(point p:pa) {
-                if(p.x<left||p.x>right || p.y<top||p.y>bottom) continue;
-                int r = p.rCount+5;
-                g2.fillOval((int)((p.x-left)/zscale)-r,
-                        (int)((p.y-top)/zscale)-r, r*2, r*2);
-            }
-    }
-
-
-    static private final int hscale = 9;
-    private point[] lowRes;
-    private class point {
-       final public double x, y;
-       final public short count, rCount;
-        point(double X, double Y, int C) { x=X; y=Y; count=(short)C;
-               rCount = (short)(Math.sqrt(C)+0.5); }
-    }
-}
Index: OSMBrowser/src/com/nighthacks/mapping/MapOverlay.java
===================================================================
--- OSMBrowser/src/com/nighthacks/mapping/MapOverlay.java       (revision 7)
+++ OSMBrowser/src/com/nighthacks/mapping/MapOverlay.java       (revision 8)
@@ -1,11 +1,9 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
+/* Class Copyright (c) Sep 4, 2011 James Gosling */
 
 package com.nighthacks.mapping;
 
 import java.awt.Graphics2D;
+import java.awt.event.MouseEvent;
 
 /**
  *
@@ -17,4 +15,7 @@
             double right, double bottom,
             int ww, int wh,
             double zscale, double zoom);
+    public boolean hit(MouseEvent me);
+    static enum MotionKind { StartMotion, MidMotion, EndMotion }
+    public void moved(double x, double y, MotionKind motion, MouseEvent e);
 }
Index: OSMBrowser/src/com/nighthacks/mapping/MapViewpoint.java
===================================================================
--- OSMBrowser/src/com/nighthacks/mapping/MapViewpoint.java     (revision 0)
+++ OSMBrowser/src/com/nighthacks/mapping/MapViewpoint.java     (revision 8)
@@ -0,0 +1,159 @@
+/* Class Copyright (c) Sep 4, 2011 James Gosling */
+
+package com.nighthacks.mapping;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import static java.lang.Math.*;
+
+/** A viewpoint for the map.  It specifies the zoom and center that are 
visible
+ * in a MapView.  Internally, it uses coordinates in a mercator projection
+ * normalized to the range [0,1), matching the mercator projection used by
+ * openstreetmap.org. See
+ * <a 
href=http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames>openstreetmap</a>
+ * for all of the definitions and math. */
+public class MapViewpoint {
+    /**
+     * @return the radius
+     */
+    public static int getRadius() {
+        return radius;
+    }
+    private double latitude;
+    private double longitude;
+    private boolean llknown = false;
+    private double zoom;
+    private double zscale; // zoom level, 0-20, 0 being the whole planet
+    private double tx;
+    private double ty;
+    private short screenX;
+    private short screenY;
+    private MapViewpoint() {
+    }
+    public static MapViewpoint LL(double z, double lat, double lon) {
+        MapViewpoint ret = new MapViewpoint();
+        ret.latitude = lat;
+        ret.longitude = lon;
+        ret.llknown = true;
+        ret.setLL(z, lat, lon);
+        return ret;
+    }
+    public static MapViewpoint XY(double z, double x, double y) {
+        MapViewpoint ret = new MapViewpoint();
+        ret.set(z, x, y);
+        return ret;
+    }
+    public static MapViewpoint copy(MapViewpoint c) {
+        return new MapViewpoint().set(c);
+    }
+    /** @return true if anything changed */
+    public boolean set(double z, double ltx, double lty) {
+        return set(z)|set(ltx, lty); // NOT ||
+    }
+    /** @return true if anything changed */
+    public boolean set(double ltx, double lty) {
+        if(ltx==getTx()&&lty==getTy())
+            return false;
+        tx = ltx;
+        ty = lty;
+        llknown = false;
+        return true;
+    }
+    /** @return true if anything changed */
+    public boolean set(double z) {
+        if(getZoom()==z)
+            return false;
+        setZoom(z);
+        setZscale(pow(2, -z-8));
+        return true;
+    }
+    @Override
+    public String toString() {
+        return "LL["+getLatitude()+","+getLongitude()+";"+getZoom()+"]";
+    }
+    /** set position given latitude and longtitude in degrees (which can be 
fractional) */
+    public boolean setLL(double z, double lat, double lon) {
+        return set(z, (lon+180)/360,
+                   (1-log(tan(lat*(PI/180))+1/cos(lat*(PI/180)))/PI)/2);
+    }
+    public final MapViewpoint set(MapViewpoint c) {
+        set(c.getZoom(), c.getTx(), c.getTy());
+        return this;
+    }
+    public final Point2D.Double getLL() {
+        compLL();
+        return new Point2D.Double(longitude, latitude);
+    }
+    private void compLL() {
+        if(!llknown){
+            double n = PI-((2.0*PI*getTy()));
+            longitude = (getTx()*360.0)-180;
+            latitude = 180.0/PI*atan(0.5*(exp(n)-exp(-n)));
+            llknown = true;
+        }
+    }
+    public final double getLongitude() {
+        compLL();
+        return longitude;
+    }
+    public final double getLatitude() {
+        compLL();
+        return latitude;
+    }
+    private static final int radius = 10;
+    public void setScreenPos(short x, short y) { screenX = x; screenY = y; }
+    public boolean hit(MouseEvent me) {
+        int x = me.getX();
+        int y = me.getY();
+        return getScreenX()-getRadius()<=x && x<=getScreenX()+getRadius()
+                && getScreenY()-getRadius()<=y && 
y<=getScreenY()+getRadius();
+    }
+    /**
+     * @return the zoom
+     */
+    public double getZoom() {
+        return zoom;
+    }
+    /**
+     * @param zoom the zoom to set
+     */
+    public void setZoom(double zoom) {
+        this.zoom = zoom;
+    }
+    /**
+     * @return the zscale
+     */
+    public double getZscale() {
+        return zscale;
+    }
+    /**
+     * @param zscale the zscale to set
+     */
+    public void setZscale(double zscale) {
+        this.zscale = zscale;
+    }
+    /**
+     * @return the tx
+     */
+    public double getTx() {
+        return tx;
+    }
+    /**
+     * @return the ty
+     */
+    public double getTy() {
+        return ty;
+    }
+    /**
+     * @return the screenX
+     */
+    public short getScreenX() {
+        return screenX;
+    }
+    /**
+     * @return the screenY
+     */
+    public short getScreenY() {
+        return screenY;
+    }
+}
Index: OSMBrowser/src/com/nighthacks/mapping/MapApplet.java
===================================================================
--- OSMBrowser/src/com/nighthacks/mapping/MapApplet.java        (revision 7)
+++ OSMBrowser/src/com/nighthacks/mapping/MapApplet.java        (revision 8)
@@ -1,8 +1,6 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
 
+/* Class Copyright (c) Sep 4, 2011 James Gosling */
+
 package com.nighthacks.mapping;
 
 import java.applet.Applet;
@@ -15,7 +13,7 @@
 public class MapApplet extends Applet {
     {
         MapView v = new MapView();
-        v.add(new GlassfishGeodata());
+//        v.add(new GlassfishGeodata());
         add(v);
     }
 
Index: OSMBrowser/src/com/nighthacks/mapping/MapTilePool.java
===================================================================
--- OSMBrowser/src/com/nighthacks/mapping/MapTilePool
[truncated due to length]



[osmbrowser~subversion:8] Significant upgrades: Killed a pile of bugs, background tile loading is a

jag 09/09/2011
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close