From 8fc15740f985952e87ded2c12a46c925d0713e8b Mon Sep 17 00:00:00 2001 From: Alan O'Callaghan Date: Wed, 1 Nov 2023 11:40:21 +0000 Subject: [PATCH 1/6] Seemingly functional 0.5.0 update --- build.gradle | 27 +++++++++---------- settings.gradle | 27 +++++++++++++++++++ .../java/qupath/ext/align/AlignExtension.java | 13 ++++----- .../ext/align/gui/ImageAlignmentPane.java | 5 ++-- .../qupath/ext/align/strings.properties | 3 +++ 5 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 src/main/resources/qupath/ext/align/strings.properties diff --git a/build.gradle b/build.gradle index 631ee5c..ae6ed58 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,9 @@ plugins { - id 'java-library' - // To create a shadow/fat jar, including dependencies - // (not very useful here) - id 'com.github.johnrengelman.shadow' version '7.0.0' + id 'java-library' + // To create a shadow/fat jar, including dependencies + // (not very useful here) + id 'com.github.johnrengelman.shadow' version '7.0.0' + id 'org.openjfx.javafxplugin' version '0.1.0' } repositories { @@ -24,9 +25,11 @@ ext.moduleName = 'qupath.extension.align' description = 'QuPath extension for interactive image alignment' version = "0.3.0" +ext.qupathVersion = gradle.ext.qupathVersion +ext.qupathJavaVersion = 17 dependencies { - shadow "io.github.qupath:qupath-gui-fx:0.3.0" + shadow "io.github.qupath:qupath-gui-fx:${qupathVersion}" shadow "org.slf4j:slf4j-api:1.7.30" } @@ -43,15 +46,9 @@ task copyDependencies(type: Copy) { } java { - def version = project.findProperty('toolchain') - if (!version) - version = 11 - else if (version.strip() == 'skip') - version = null - if (version != null) { - logger.quiet("Setting toolchain to {}", version) - toolchain { - languageVersion = JavaLanguageVersion.of(version) - } + toolchain { + languageVersion = JavaLanguageVersion.of(qupathJavaVersion) } + withSourcesJar() + withJavadocJar() } diff --git a/settings.gradle b/settings.gradle index dda3b69..88259ec 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,28 @@ rootProject.name = 'qupath-extension-align' + +gradle.ext.qupathVersion = "0.4.4" + +dependencyResolutionManagement { + + // Access QuPath's version catalog for dependency versions + versionCatalogs { + libs { + from("io.github.qupath:qupath-catalog:${gradle.ext.qupathVersion}") + } + } + + repositories { + + mavenCentral() + + // Add scijava - which is where QuPath's jars are hosted + maven { + url "https://maven.scijava.org/content/repositories/releases" + } + + maven { + url "https://maven.scijava.org/content/repositories/snapshots" + } + + } +} diff --git a/src/main/java/qupath/ext/align/AlignExtension.java b/src/main/java/qupath/ext/align/AlignExtension.java index f3ecf49..a3cb173 100644 --- a/src/main/java/qupath/ext/align/AlignExtension.java +++ b/src/main/java/qupath/ext/align/AlignExtension.java @@ -25,10 +25,10 @@ import qupath.ext.align.gui.InteractiveImageAlignmentCommand; import qupath.lib.common.Version; -import qupath.lib.gui.ActionTools; -import qupath.lib.gui.ActionTools.ActionDescription; -import qupath.lib.gui.ActionTools.ActionMenu; +import qupath.lib.gui.actions.ActionTools; +import qupath.lib.gui.actions.annotations.ActionConfig; import qupath.lib.gui.QuPathGUI; +import qupath.lib.gui.actions.annotations.ActionMenu; import qupath.lib.gui.extensions.GitHubProject; import qupath.lib.gui.extensions.QuPathExtension; @@ -38,11 +38,11 @@ public class AlignExtension implements QuPathExtension, GitHubProject { @SuppressWarnings("javadoc") - public class ExperimentalCommands { + public static class ExperimentalCommands { @ActionMenu("Analyze>Interactive image alignment") - @ActionDescription("Experimental command to interactively align images using an Affine transform. " - + "This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows.") + @ActionConfig("action" + ) public final Action actionInteractiveAlignment; private ExperimentalCommands(QuPathGUI qupath) { @@ -55,6 +55,7 @@ private ExperimentalCommands(QuPathGUI qupath) { @Override public void installExtension(QuPathGUI qupath) { + qupath.installActions(ActionTools.getAnnotatedActions(new ExperimentalCommands(qupath))); } diff --git a/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java b/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java index d63cc57..daa5b19 100644 --- a/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java +++ b/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java @@ -570,7 +570,8 @@ void promptToAddImages() { // Read annotations from any data file try { // Try to get data from an open viewer first, if possible - for (var viewer : qupath.getViewers()) { + + for (var viewer : qupath.getAllViewers()) { var tempData = viewer.getImageData(); if (tempData != null && temp.equals(project.getEntry(viewer.getImageData()))) { imageData = tempData; @@ -1018,4 +1019,4 @@ protected void updateItem(ImageData item, boolean empty) { } -} \ No newline at end of file +} diff --git a/src/main/resources/qupath/ext/align/strings.properties b/src/main/resources/qupath/ext/align/strings.properties new file mode 100644 index 0000000..082ae0d --- /dev/null +++ b/src/main/resources/qupath/ext/align/strings.properties @@ -0,0 +1,3 @@ +action = Interactive image alignment +action.description = Experimental command to interactively align images using an Affine transform. \ + This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows. From d76f377de09eef44d2ded9374507212a58027e1f Mon Sep 17 00:00:00 2001 From: Alan O'Callaghan Date: Wed, 1 Nov 2023 13:38:37 +0000 Subject: [PATCH 2/6] Dont use actionconfig annotation --- build.gradle | 2 +- settings.gradle | 2 +- src/main/java/qupath/ext/align/AlignExtension.java | 10 ++++++---- src/main/resources/qupath/ext/align/strings.properties | 3 --- 4 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 src/main/resources/qupath/ext/align/strings.properties diff --git a/build.gradle b/build.gradle index ae6ed58..6bb390e 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ ext.moduleName = 'qupath.extension.align' description = 'QuPath extension for interactive image alignment' -version = "0.3.0" +version = "0.4.0" ext.qupathVersion = gradle.ext.qupathVersion ext.qupathJavaVersion = 17 diff --git a/settings.gradle b/settings.gradle index 88259ec..ad8f915 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,6 @@ rootProject.name = 'qupath-extension-align' -gradle.ext.qupathVersion = "0.4.4" +gradle.ext.qupathVersion = "0.5.0" dependencyResolutionManagement { diff --git a/src/main/java/qupath/ext/align/AlignExtension.java b/src/main/java/qupath/ext/align/AlignExtension.java index a3cb173..f23a06a 100644 --- a/src/main/java/qupath/ext/align/AlignExtension.java +++ b/src/main/java/qupath/ext/align/AlignExtension.java @@ -31,6 +31,7 @@ import qupath.lib.gui.actions.annotations.ActionMenu; import qupath.lib.gui.extensions.GitHubProject; import qupath.lib.gui.extensions.QuPathExtension; +import qupath.lib.projects.ResourceManager; /** * Extension to make more experimental commands present in the GUI. @@ -39,15 +40,16 @@ public class AlignExtension implements QuPathExtension, GitHubProject { @SuppressWarnings("javadoc") public static class ExperimentalCommands { - - @ActionMenu("Analyze>Interactive image alignment") - @ActionConfig("action" - ) + + @ActionMenu("Menu.Analyze>Alignment") public final Action actionInteractiveAlignment; private ExperimentalCommands(QuPathGUI qupath) { var interactiveAlignment = new InteractiveImageAlignmentCommand(qupath); actionInteractiveAlignment = qupath.createProjectAction(project -> interactiveAlignment.run()); + actionInteractiveAlignment.setText("Interactive image alignment"); + actionInteractiveAlignment.setLongText("Experimental command to interactively align images using an Affine transform." + + "This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows."); } } diff --git a/src/main/resources/qupath/ext/align/strings.properties b/src/main/resources/qupath/ext/align/strings.properties deleted file mode 100644 index 082ae0d..0000000 --- a/src/main/resources/qupath/ext/align/strings.properties +++ /dev/null @@ -1,3 +0,0 @@ -action = Interactive image alignment -action.description = Experimental command to interactively align images using an Affine transform. \ - This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows. From ed4b1832a13d3a940ca1c45c9879b1c2f39ce3f2 Mon Sep 17 00:00:00 2001 From: Alan O'Callaghan Date: Wed, 1 Nov 2023 15:43:07 +0000 Subject: [PATCH 3/6] Bump gradle version --- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 63375 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 281 ++++++++++++++--------- gradlew.bat | 15 +- 4 files changed, 184 insertions(+), 116 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..033e24c4cdf41af1ab109bc7f253b2b887023340 100644 GIT binary patch delta 43784 zcmZs?V{~Rwvn?Fkwrv}oj&0kv`NZkiwrxGJZ6_V8V;h}(ea=1Oz4wgq{n%sG*sJ#5 zf2!7;yQ=2UEO`74IHZy+I0QzrvO8uX9y%ySa?mnvqNLV8{0DVViJKuj_{N|8_y>I+MxT2rn3@Q#>wn~1E zL?7Lobaaai$f~PJ0h}NW%Jz=o9G(v`1G-hf3`!4Hykd#lU+;7v>s6JhQ7>+NykDU( z+Yh)P+pD#Xf_Ezp%e``u9= zPJL0(x6YXP{nVHO6?>|5I(OEX+z0Fdei~>3M`J^9Le#>-%*cHO2dI9HaE61$a74)& zhG`72UvRy2>GhSbe7%JS*{^BAj@7^R_`#yP-hcCvM0hriNtFRwQ8sdle)1Ez%QcHa$>LXwe6Dl*#&-bzELzYX(EA*tDQjPTN z_Iy$>1z$iZhRJU_kP-6fwFoL`ATuxgebp735D2?M!BWyU#RUSYV9ge!Wt(Ryg2c# zE!mNwc?3zLL{3iQ6)y8~c~s=m4Xqg@K3wMbk>I?_-Uz?T$HzrkC9iM}Pe>ON*;6DX zAAhT%>H<2)Tbb?04j7l5tjnh^NK&u3&|8|x9FUM@&C|WbNe>8;>Zst)1WXai?2}(@ zyKj-PO(w)jgcXLvm(rNz(X6t9Y6OW>TfRtL8F0CuNP|)h%mfKHTyb}1*+arFxFC1U z(N0B0N3Jcz26y6Ul(ROd=0s+E8`mO|%&tmuVsXf&%C< zqfuZ+k9Lczb4Li|3N*~kFWFblf~n^$3YVNq6NL&>E`&s_PXoyxkILoa7=DUIu3pa^ zbjt28Iln9>aXD?uYDI=>%f%@nd!*sacDx%hqN>9K2$r2N)@*sA+415I5pr2{acy3O z0sue0u{}YluJrg2MMai%uCnAS|1>N{x) z9W0h;+;^Q;m5Y1Pds=9%6L2UE$|ziEl`q?2-MJyt_O1MjCN!fwl1)PARjh-GPK-Bu ziBk^EHui_QP^405zFUzBY86#gXxXo~tO_j7sEQS_To{@n19bS|pHyoI$71br)Bq_% zKI<_wiEE{M!;;7m75H6Py81{;GMa{JeMKsHeh#zwafm})ycBUB89KUwLH+8iM(-enyqKq)oHH3hDjL8_*Fweo|@|9cT%{f zO-v5t@vOg5-KrPTr2t#GYJ)8@zQ@<478@tOj3h9r#~9`^Q#5+^aL}Wv7*J`&+|Vx@ z)BRL(#kD~Mwr_&pUDQs^fLcl~6?LZC$n&r)&u_?6eu_~zyQ*6+FP*qf$#iHG z2YPE|ZZ@No$<*C$7mSO|AFFFO$1DJum^n0}UN;9_VcV$ZMmrK0={c8_%D=nHmaMXi zLn410cRCiWs7{vSsL)&F+tZG2uyQKop$)mm`wetpa|?aR02T6+0J}-$e5Tw~i$ci59}-vZrgrm4909wfTB||ALOyJi_vsmyzG1%`*ElF%_(8r&emW?qs1{D6NY1hdkN6 z07ItKp8bQ!olQMB3Sen0Jy&kX17H59sC?9IOo92e=7EBncWnkSS&@h??=N|%=F1hG zSGJ+o9GvdE<*GX#`6P4GIp->PzJbw*4h;0=NT7%~D)9MW>0b$q#fS zPQU+~T!DiVv3L&u&UQ{7s>gh_Y{*s{)!Z3MmJJ5VyQyVm4*h!+mLYlbxHc7^s-Z|7u?n}w zt~M(a2Sx*m2>=rstd3iQH+HVUSiz-O6tq{s70C%sK{WQ;xh7kT+&hBZD(hK{7|Y4N z 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�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 Qc)^b}ObCdTt-n6~KSqm+J^%m! delta 39466 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 Ar2qf` diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 69a9715..3fa8f86 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..fcb6fca 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,98 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +118,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,88 +129,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index ac1b06f..6689b85 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From 4b26867e23052f7165f07cd4e3ca4bfd83fafc2b Mon Sep 17 00:00:00 2001 From: Alan O'Callaghan Date: Wed, 1 Nov 2023 15:43:16 +0000 Subject: [PATCH 4/6] Use actionconfig --- settings.gradle | 2 +- src/main/java/qupath/ext/align/AlignExtension.java | 7 ++++--- src/main/resources/qupath/ext/align/strings.properties | 3 +++ 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/qupath/ext/align/strings.properties diff --git a/settings.gradle b/settings.gradle index ad8f915..6a265be 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,6 @@ rootProject.name = 'qupath-extension-align' -gradle.ext.qupathVersion = "0.5.0" +gradle.ext.qupathVersion = "0.5.0-rc2" dependencyResolutionManagement { diff --git a/src/main/java/qupath/ext/align/AlignExtension.java b/src/main/java/qupath/ext/align/AlignExtension.java index f23a06a..a7cff03 100644 --- a/src/main/java/qupath/ext/align/AlignExtension.java +++ b/src/main/java/qupath/ext/align/AlignExtension.java @@ -41,15 +41,16 @@ public class AlignExtension implements QuPathExtension, GitHubProject { @SuppressWarnings("javadoc") public static class ExperimentalCommands { + @ActionConfig(value = "alignAction", bundle = "qupath/ext/align/strings") @ActionMenu("Menu.Analyze>Alignment") public final Action actionInteractiveAlignment; private ExperimentalCommands(QuPathGUI qupath) { var interactiveAlignment = new InteractiveImageAlignmentCommand(qupath); actionInteractiveAlignment = qupath.createProjectAction(project -> interactiveAlignment.run()); - actionInteractiveAlignment.setText("Interactive image alignment"); - actionInteractiveAlignment.setLongText("Experimental command to interactively align images using an Affine transform." + - "This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows."); +// actionInteractiveAlignment.setText("Interactive image alignment"); +// actionInteractiveAlignment.setLongText("Experimental command to interactively align images using an Affine transform." + +// "This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows."); } } diff --git a/src/main/resources/qupath/ext/align/strings.properties b/src/main/resources/qupath/ext/align/strings.properties new file mode 100644 index 0000000..39d8643 --- /dev/null +++ b/src/main/resources/qupath/ext/align/strings.properties @@ -0,0 +1,3 @@ +alignAction = Interactive image alignment +alignAction.description = Experimental command to interactively align images using an Affine transform. \ + This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows From 70fdc8b69a11a5c0d281847906e5a4d1f8934c51 Mon Sep 17 00:00:00 2001 From: Alan O'Callaghan Date: Wed, 1 Nov 2023 15:51:34 +0000 Subject: [PATCH 5/6] Remove unused code --- src/main/java/qupath/ext/align/AlignExtension.java | 6 +----- src/main/resources/.gitkeep | 0 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 src/main/resources/.gitkeep diff --git a/src/main/java/qupath/ext/align/AlignExtension.java b/src/main/java/qupath/ext/align/AlignExtension.java index a7cff03..663248b 100644 --- a/src/main/java/qupath/ext/align/AlignExtension.java +++ b/src/main/java/qupath/ext/align/AlignExtension.java @@ -37,8 +37,7 @@ * Extension to make more experimental commands present in the GUI. */ public class AlignExtension implements QuPathExtension, GitHubProject { - - @SuppressWarnings("javadoc") + public static class ExperimentalCommands { @ActionConfig(value = "alignAction", bundle = "qupath/ext/align/strings") @@ -48,9 +47,6 @@ public static class ExperimentalCommands { private ExperimentalCommands(QuPathGUI qupath) { var interactiveAlignment = new InteractiveImageAlignmentCommand(qupath); actionInteractiveAlignment = qupath.createProjectAction(project -> interactiveAlignment.run()); -// actionInteractiveAlignment.setText("Interactive image alignment"); -// actionInteractiveAlignment.setLongText("Experimental command to interactively align images using an Affine transform." + -// "This is currently not terribly useful in itself, but may be helpful as part of more complex scripting workflows."); } } diff --git a/src/main/resources/.gitkeep b/src/main/resources/.gitkeep deleted file mode 100644 index e69de29..0000000 From acfd4d6a072bd6e8898ca1c673e0cea2a909eadc Mon Sep 17 00:00:00 2001 From: Pete Date: Tue, 5 Dec 2023 16:52:40 +0000 Subject: [PATCH 6/6] Update gradle wrapper, version --- CHANGELOG.md | 8 + LICENSE.txt => LICENSE | 0 LICENSE.md | 675 ------------------ build.gradle | 14 +- gradle/wrapper/gradle-wrapper.jar | Bin 63375 -> 63721 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 17 +- settings.gradle | 2 +- .../java/qupath/ext/align/AlignExtension.java | 5 +- .../ext/align/gui/ImageAlignmentPane.java | 2 +- .../ext/align/gui/ImageServerOverlay.java | 2 +- .../gui/InteractiveImageAlignmentCommand.java | 2 +- 12 files changed, 32 insertions(+), 697 deletions(-) create mode 100644 CHANGELOG.md rename LICENSE.txt => LICENSE (100%) delete mode 100644 LICENSE.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a0a2781 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +## v0.4.0 + +* Support for QuPath v0.5.0 + + +## v0.3.0 + +* First version after extracting extension from QuPath's main repo. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE similarity index 100% rename from LICENSE.txt rename to LICENSE diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 2fb2e74..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,675 +0,0 @@ -### GNU GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright (C) 2007 Free Software Foundation, Inc. - - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - -### Preamble - -The GNU General Public License is a free, copyleft license for -software and other kinds of works. - -The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom -to share and change all versions of a program--to make sure it remains -free software for all its users. We, the Free Software Foundation, use -the GNU General Public License for most of our software; it applies -also to any other work released this way by its authors. You can apply -it to your programs, too. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you -have certain responsibilities if you distribute copies of the -software, or if you modify it: responsibilities to respect the freedom -of others. - -For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - -Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - -Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the -manufacturer can do so. This is fundamentally incompatible with the -aim of protecting users' freedom to change the software. The -systematic pattern of such abuse occurs in the area of products for -individuals to use, which is precisely where it is most unacceptable. -Therefore, we have designed this version of the GPL to prohibit the -practice for those products. If such problems arise substantially in -other domains, we stand ready to extend this provision to those -domains in future versions of the GPL, as needed to protect the -freedom of users. - -Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish -to avoid the special danger that patents applied to a free program -could make it effectively proprietary. To prevent this, the GPL -assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and -modification follow. - -### TERMS AND CONDITIONS - -#### 0. Definitions. - -"This License" refers to version 3 of the GNU General Public License. - -"Copyright" also means copyright-like laws that apply to other kinds -of works, such as semiconductor masks. - -"The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - -To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of -an exact copy. The resulting work is called a "modified version" of -the earlier work or a work "based on" the earlier work. - -A "covered work" means either the unmodified Program or a work based -on the Program. - -To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - -To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user -through a computer network, with no transfer of a copy, is not -conveying. - -An interactive user interface displays "Appropriate Legal Notices" to -the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -#### 1. Source Code. - -The "source code" for a work means the preferred form of the work for -making modifications to it. "Object code" means any non-source form of -a work. - -A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - -The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - -The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can -regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same -work. - -#### 2. Basic Permissions. - -All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, -without conditions so long as your license otherwise remains in force. -You may convey covered works to others for the sole purpose of having -them make modifications exclusively for you, or provide you with -facilities for running those works, provided that you comply with the -terms of this License in conveying all material for which you do not -control copyright. Those thus making or running the covered works for -you must do so exclusively on your behalf, under your direction and -control, on terms that prohibit them from making any copies of your -copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the -conditions stated below. Sublicensing is not allowed; section 10 makes -it unnecessary. - -#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - -When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such -circumvention is effected by exercising rights under this License with -respect to the covered work, and you disclaim any intention to limit -operation or modification of the work as a means of enforcing, against -the work's users, your or third parties' legal rights to forbid -circumvention of technological measures. - -#### 4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - -#### 5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these -conditions: - -- a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. -- b) The work must carry prominent notices stating that it is - released under this License and any conditions added under - section 7. This requirement modifies the requirement in section 4 - to "keep intact all notices". -- c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. -- d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - -A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - -#### 6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of -sections 4 and 5, provided that you also convey the machine-readable -Corresponding Source under the terms of this License, in one of these -ways: - -- a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. -- b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the Corresponding - Source from a network server at no charge. -- c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. -- d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. -- e) Convey the object code using peer-to-peer transmission, - provided you inform other peers where the object code and - Corresponding Source of the work are being offered to the general - public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - -A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, -family, or household purposes, or (2) anything designed or sold for -incorporation into a dwelling. In determining whether a product is a -consumer product, doubtful cases shall be resolved in favor of -coverage. For a particular product received by a particular user, -"normally used" refers to a typical or common use of that class of -product, regardless of the status of the particular user or of the way -in which the particular user actually uses, or expects or is expected -to use, the product. A product is a consumer product regardless of -whether the product has substantial commercial, industrial or -non-consumer uses, unless such uses represent the only significant -mode of use of the product. - -"Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to -install and execute modified versions of a covered work in that User -Product from a modified version of its Corresponding Source. The -information must suffice to ensure that the continued functioning of -the modified object code is in no case prevented or interfered with -solely because modification has been made. - -If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - -The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or -updates for a work that has been modified or installed by the -recipient, or for the User Product in which it has been modified or -installed. Access to a network may be denied when the modification -itself materially and adversely affects the operation of the network -or violates the rules and protocols for communication across the -network. - -Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - -#### 7. Additional Terms. - -"Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders -of that material) supplement the terms of this License with terms: - -- a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or -- b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or -- c) Prohibiting misrepresentation of the origin of that material, - or requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or -- d) Limiting the use for publicity purposes of names of licensors - or authors of the material; or -- e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or -- f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions - of it) with contractual assumptions of liability to the recipient, - for any liability that these contractual assumptions directly - impose on those licensors and authors. - -All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; the -above requirements apply either way. - -#### 8. Termination. - -You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - -However, if you cease all violation of this License, then your license -from a particular copyright holder is reinstated (a) provisionally, -unless and until the copyright holder explicitly and finally -terminates your license, and (b) permanently, if the copyright holder -fails to notify you of the violation by some reasonable means prior to -60 days after the cessation. - -Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - -#### 9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run -a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - -#### 10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - -An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - -#### 11. Patents. - -A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned -or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - -In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - -If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - -A patent license is "discriminatory" if it does not include within the -scope of its coverage, prohibits the exercise of, or is conditioned on -the non-exercise of one or more of the rights that are specifically -granted under this License. You may not convey a covered work if you -are a party to an arrangement with a third party that is in the -business of distributing software, under which you make payment to the -third party based on the extent of your activity of conveying the -work, and under which the third party grants, to any of the parties -who would receive the covered work from you, a discriminatory patent -license (a) in connection with copies of the covered work conveyed by -you (or copies made from those copies), or (b) primarily for and in -connection with specific products or compilations that contain the -covered work, unless you entered into that arrangement, or that patent -license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - -#### 12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under -this License and any other pertinent obligations, then as a -consequence you may not convey it at all. For example, if you agree to -terms that obligate you to collect a royalty for further conveying -from those to whom you convey the Program, the only way you could -satisfy both those terms and this License would be to refrain entirely -from conveying the Program. - -#### 13. Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - -#### 14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions -of the GNU General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in -detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies that a certain numbered version of the GNU General Public -License "or any later version" applies to it, you have the option of -following the terms and conditions either of that numbered version or -of any later version published by the Free Software Foundation. If the -Program does not specify a version number of the GNU General Public -License, you may choose any version ever published by the Free -Software Foundation. - -If the Program specifies that a proxy can decide which future versions -of the GNU General Public License can be used, that proxy's public -statement of acceptance of a version permanently authorizes you to -choose that version for the Program. - -Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - -#### 15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT -WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE -DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - -#### 16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR -CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT -NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR -LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM -TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -#### 17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS - -### How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - -To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively state -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper -mail. - -If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands \`show w' and \`show c' should show the -appropriate parts of the General Public License. Of course, your -program's commands might be different; for a GUI interface, you would -use an "about box". - -You should also get your employer (if you work as a programmer) or -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. For more information on this, and how to apply and follow -the GNU GPL, see . - -The GNU General Public License does not permit incorporating your -program into proprietary programs. If your program is a subroutine -library, you may consider it more useful to permit linking proprietary -applications with the library. If this is what you want to do, use the -GNU Lesser General Public License instead of this License. But first, -please read . diff --git a/build.gradle b/build.gradle index 6bb390e..64190b3 100644 --- a/build.gradle +++ b/build.gradle @@ -2,12 +2,12 @@ plugins { id 'java-library' // To create a shadow/fat jar, including dependencies // (not very useful here) - id 'com.github.johnrengelman.shadow' version '7.0.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' id 'org.openjfx.javafxplugin' version '0.1.0' } repositories { -// mavenLocal() + mavenCentral() maven { @@ -22,9 +22,11 @@ repositories { ext.moduleName = 'qupath.extension.align' -description = 'QuPath extension for interactive image alignment' - -version = "0.4.0" +base { + description = 'QuPath extension for interactive image alignment' + version = "0.4.0" + group = "io.github.qupath" +} ext.qupathVersion = gradle.ext.qupathVersion ext.qupathJavaVersion = 17 @@ -34,7 +36,7 @@ dependencies { } processResources { - from ("${projectDir}/LICENSE.txt") { + from ("${projectDir}/LICENSE") { into 'licenses/' } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 033e24c4cdf41af1ab109bc7f253b2b887023340..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 28216 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fa8f86..1af9e09 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index fcb6fca..1aa94a4 100755 --- a/gradlew +++ b/gradlew @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -201,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/settings.gradle b/settings.gradle index 6a265be..ad8f915 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,6 @@ rootProject.name = 'qupath-extension-align' -gradle.ext.qupathVersion = "0.5.0-rc2" +gradle.ext.qupathVersion = "0.5.0" dependencyResolutionManagement { diff --git a/src/main/java/qupath/ext/align/AlignExtension.java b/src/main/java/qupath/ext/align/AlignExtension.java index 663248b..1fdd6ba 100644 --- a/src/main/java/qupath/ext/align/AlignExtension.java +++ b/src/main/java/qupath/ext/align/AlignExtension.java @@ -2,7 +2,7 @@ * #%L * This file is part of QuPath. * %% - * Copyright (C) 2018 - 2020 QuPath developers, The University of Edinburgh + * Copyright (C) 2018 - 2023 QuPath developers, The University of Edinburgh * %% * QuPath is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -31,7 +31,6 @@ import qupath.lib.gui.actions.annotations.ActionMenu; import qupath.lib.gui.extensions.GitHubProject; import qupath.lib.gui.extensions.QuPathExtension; -import qupath.lib.projects.ResourceManager; /** * Extension to make more experimental commands present in the GUI. @@ -75,7 +74,7 @@ public GitHubRepo getRepository() { @Override public Version getQuPathVersion() { - return Version.parse("0.3.0-rc2"); + return Version.parse("0.5.0"); } } diff --git a/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java b/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java index daa5b19..180e9a7 100644 --- a/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java +++ b/src/main/java/qupath/ext/align/gui/ImageAlignmentPane.java @@ -2,7 +2,7 @@ * #%L * This file is part of QuPath. * %% - * Copyright (C) 2018 - 2020 QuPath developers, The University of Edinburgh + * Copyright (C) 2018 - 2023 QuPath developers, The University of Edinburgh * %% * QuPath is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as diff --git a/src/main/java/qupath/ext/align/gui/ImageServerOverlay.java b/src/main/java/qupath/ext/align/gui/ImageServerOverlay.java index 34870ab..c4ff3c3 100644 --- a/src/main/java/qupath/ext/align/gui/ImageServerOverlay.java +++ b/src/main/java/qupath/ext/align/gui/ImageServerOverlay.java @@ -2,7 +2,7 @@ * #%L * This file is part of QuPath. * %% - * Copyright (C) 2018 - 2020 QuPath developers, The University of Edinburgh + * Copyright (C) 2018 - 2023 QuPath developers, The University of Edinburgh * %% * QuPath is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as diff --git a/src/main/java/qupath/ext/align/gui/InteractiveImageAlignmentCommand.java b/src/main/java/qupath/ext/align/gui/InteractiveImageAlignmentCommand.java index 4516dc5..88d46d4 100644 --- a/src/main/java/qupath/ext/align/gui/InteractiveImageAlignmentCommand.java +++ b/src/main/java/qupath/ext/align/gui/InteractiveImageAlignmentCommand.java @@ -2,7 +2,7 @@ * #%L * This file is part of QuPath. * %% - * Copyright (C) 2018 - 2020 QuPath developers, The University of Edinburgh + * Copyright (C) 2018 - 2023 QuPath developers, The University of Edinburgh * %% * QuPath is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as