}
}
- // remove the "Uninstall Old Jalview (optional)" symlink from DMG for non-release DS_Stores
- if (! (CHANNEL == "RELEASE" || CHANNEL == "TEST-RELEASE" ) ) {
- def symlink = install4jConfigXml.'**'.topLevelFiles.symlink.find { sl -> sl.'@name' == "Uninstall Old Jalview (optional).app" }
- symlink.parent().remove(symlink)
- }
-
// write install4j file
install4jConfFile.text = XmlUtil.serialize(install4jConfigXml)
}
task sourceDist(type: Tar) {
group "distribution"
description "Create a source .tar.gz file for distribution"
-
+
+ dependsOn createBuildProperties
dependsOn convertMdFiles
def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
// exclude(EXCLUDE_FILES)
// exclude(PROCESS_FILES)
// }
+
+ from(file(buildProperties).getParent()) {
+ include(file(buildProperties).getName())
+ rename(file(buildProperties).getName(), "build_properties")
+ filter({ line ->
+ line.replaceAll("^INSTALLATION=.*\$","INSTALLATION=Source Release"+" git-commit\\\\:"+gitHash+" ["+gitBranch+"]")
+ })
+ }
+
}
public static void loadProperties(String propsFile)
{
propertiesFile = propsFile;
+ String releasePropertiesFile = null;
+ boolean defaultProperties = false;
if (propsFile == null && !propsAreReadOnly)
{
+ String channelPrefsFilename = ChannelProperties
+ .getProperty("preferences.filename");
+ String releasePrefsFilename = ".jalview_properties";
propertiesFile = System.getProperty("user.home") + File.separatorChar
- + ".jalview_properties";
+ + channelPrefsFilename;
+ releasePropertiesFile = System.getProperty("user.home")
+ + File.separatorChar + releasePrefsFilename;
+ defaultProperties = true;
}
else
{
InputStream fis;
try
{
+ // props file provided as URL
fis = new URL(propertiesFile).openStream();
System.out.println(
"Loading jalview properties from : " + propertiesFile);
System.out.println(
"Disabling Jalview writing to user's local properties file.");
propsAreReadOnly = true;
-
} catch (Exception ex)
{
fis = null;
}
if (fis == null)
{
- fis = new FileInputStream(propertiesFile);
+ String readPropertiesFile = propertiesFile;
+ // if we're using the usual properties file and the channel properties
+ // file doesn't exist, read .jalview_properties
+ // (but we'll still save to the channel properties file).
+ if (defaultProperties && (!new File(propertiesFile).exists())
+ && (new File(releasePropertiesFile).exists()))
+ {
+ readPropertiesFile = releasePropertiesFile;
+ }
+ fis = new FileInputStream(readPropertiesFile);
}
applicationProperties.clear();
applicationProperties.load(fis);
import jalview.structure.AtomSpecModel;
import jalview.structure.StructureCommand;
import jalview.structure.StructureCommandI;
-import jalview.util.ColorUtils;
/**
* Routines for generating ChimeraX commands for Jalview/ChimeraX binding
public List<StructureCommandI> startNotifications(String uri)
{
List<StructureCommandI> cmds = new ArrayList<>();
- cmds.add(new StructureCommand("info notify start models prefix ModelChanged jalview url " + uri));
+ cmds.add(new StructureCommand("info notify start models jalview prefix ModelChanged url " + uri));
cmds.add(new StructureCommand("info notify start selection jalview prefix SelectionChanged url " + uri));
return cmds;
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import java.lang.reflect.Field;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
doConfigureStructurePrefs();
setTitle(ChannelProperties.getProperty("app_name") + " "
+ Cache.getProperty("VERSION"));
- /*
- if (!Platform.isAMac())
- {
- // this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- }
- else
+
+ /**
+ * Set taskbar "grouped windows" name for linux desktops (works in GNOME and KDE).
+ * This uses sun.awt.X11.XToolkit.awtAppClassName which is not officially documented or
+ * guaranteed to exist, so we access it via reflection.
+ * There appear to be unfathomable criteria about what this string can contain, and it if doesn't
+ * meet those criteria then "java" (KDE) or "jalview-bin-Jalview" (GNOME) is used.
+ * "Jalview", "Jalview Develop" and "Jalview Test" seem okay, but "Jalview non-release" does not.
+ * The reflection access may generate a warning:
+ * WARNING: An illegal reflective access operation has occurred
+ * WARNING: Illegal reflective access by jalview.gui.Desktop () to field sun.awt.X11.XToolkit.awtAppClassName
+ * which I don't think can be avoided.
+ */
+ if (Platform.isLinux())
{
- this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+ try
+ {
+ Toolkit xToolkit = Toolkit.getDefaultToolkit();
+ Field[] declaredFields = xToolkit.getClass().getDeclaredFields();
+ Field awtAppClassNameField = null;
+
+ if (Arrays.stream(declaredFields).anyMatch(f -> f.getName().equals("awtAppClassName")))
+ {
+ awtAppClassNameField = xToolkit.getClass()
+ .getDeclaredField("awtAppClassName");
+ }
+
+ String title = ChannelProperties.getProperty("app_name");
+ if (awtAppClassNameField != null)
+ {
+ awtAppClassNameField.setAccessible(true);
+ awtAppClassNameField.set(xToolkit, title);
+ }
+ else
+ {
+ Cache.log.debug("XToolkit: awtAppClassName not found");
+ }
+ } catch (Exception e)
+ {
+ Cache.debug("Error setting awtAppClassName");
+ Cache.trace(Cache.getStackTraceString(e));
+ }
}
- */
+ /**
+ * APQHandlers sets handlers for About, Preferences and Quit actions peculiar to macOS's application menu.
+ * APQHandlers will check to see if a handler is supported before setting it.
+ */
try
{
APQHandlers.setAPQHandlers(this);
} catch (Throwable t)
{
- System.out.println("Error setting APQHandlers: " + t.toString());
- // t.printStackTrace();
+ Cache.warn("Error setting APQHandlers: " + t.toString());
+ Cache.trace(Cache.getStackTraceString(t));
}
setIconImages(ChannelProperties.getIconList());
int modelNumber = chimeraMaps.size() + 1;
String command = "setattr #" + modelNumber + " models name "
+ pe.getId();
- executeCommand(new StructureCommand(command), false);
+ executeCommand(new StructureCommand(command), false);
modelsToMap.add(new ChimeraModel(pe.getId(), ModelType.PDB_MODEL,
modelNumber, 0));
}
* @param atomSpec
* @return
*/
+ @Override
protected AtomSpec parseAtomSpec(String atomSpec)
{
return AtomSpec.fromChimeraXAtomspec(atomSpec);
if (av.getWrapAlignment())
{
- drawWrappedPanel(gg, width, height, ranges.getStartRes());
+ drawWrappedPanel(gg, getWidth(), getHeight(), ranges.getStartRes());
}
else
{
/**
* Computes the column and sequence row (and possibly annotation row when in
* wrapped mode) for the given mouse position
+ * <p>
+ * Mouse position is not set if in wrapped mode with the cursor either between
+ * sequences, or over the left or right vertical scale.
*
* @param evt
* @return
/**
* Returns the aligned sequence position (base 0) at the mouse position, or
* the closest visible one
+ * <p>
+ * Returns -1 if in wrapped mode with the mouse over either left or right
+ * vertical scale.
*
* @param evt
* @return
String choice = null;
JFileChooser chooser = new JFileChooser();
+ // Enable appBundleIsTraversable in macOS FileChooser to allow selecting
+ // hidden executables within .app dirs
+ if (Platform.isMac())
+ {
+ chooser.putClientProperty("JFileChooser.appBundleIsTraversable",
+ true);
+ }
+
// chooser.setFileView(new JalviewFileView());
chooser.setDialogTitle(
MessageManager.getString("label.open_local_file"));
defaultProps.put("uod_banner.32", "/default_images/UoD_banner-32.png");
defaultProps.put("default_appbase",
"https://www.jalview.org/getdown/release/1.8");
+ defaultProps.put("preferences.filename", ".jalview_properties");
// load channel_properties
Properties tryChannelProps = new Properties();
if (channelPropsURL == null)
{
// complete failure of channel_properties, set all properties to defaults
- System.err
- .println("Failed to find '" + CHANNEL_PROPERTIES_FILENAME
- + "' file at '"
- + (channelPropsURL == null ? "null"
- : channelPropsURL.toString())
- + "'. Using class defaultProps.");
+ System.err.println("Failed to find '" + CHANNEL_PROPERTIES_FILENAME
+ + "' file at '"
+ + (channelPropsURL == null ? "null"
+ : channelPropsURL.toString())
+ + "'. Using class defaultProps.");
tryChannelProps = defaultProps;
}
else
{
List<StructureCommandI> cmds = testee.startNotifications("to here");
assertEquals(cmds.size(), 2);
- assertEquals(cmds.get(0), new StructureCommand("info notify start models prefix ModelChanged jalview url to here"));
+ assertEquals(cmds.get(0), new StructureCommand("info notify start models jalview prefix ModelChanged url to here"));
assertEquals(cmds.get(1), new StructureCommand("info notify start selection jalview prefix SelectionChanged url to here"));
}
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
+import java.awt.EventQueue;
+import java.awt.FontMetrics;
+import java.awt.event.MouseEvent;
+import java.lang.reflect.InvocationTargetException;
+
+import javax.swing.JLabel;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
import jalview.api.AlignViewportI;
import jalview.bin.Cache;
import jalview.bin.Jalview;
import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SearchResultsI;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceI;
import jalview.gui.SeqPanel.MousePos;
import jalview.io.FileLoader;
import jalview.util.MessageManager;
import jalview.viewmodel.ViewportRanges;
-
-import java.awt.EventQueue;
-import java.awt.event.MouseEvent;
-import java.lang.reflect.InvocationTargetException;
-
-import javax.swing.JLabel;
-
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
import junit.extensions.PA;
public class SeqPanelTest
{
Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS", "false");
Cache.applicationProperties.setProperty("WRAP_ALIGNMENT", "true");
+ Cache.applicationProperties.setProperty("FONT_SIZE", "10");
AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(
"examples/uniref50.fa", DataSourceType.FILE);
AlignViewportI av = alignFrame.getViewport();
e.printStackTrace();
}
}
+ @Test(groups = "Functional")
+ public void testFindMousePosition_wrapped_scales_longSequence()
+ {
+ Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS", "false");
+ Cache.applicationProperties.setProperty("WRAP_ALIGNMENT", "true");
+ Cache.applicationProperties.setProperty("FONT_SIZE", "14");
+ Cache.applicationProperties.setProperty("FONT_NAME", "SansSerif");
+ Cache.applicationProperties.setProperty("FONT_STYLE", "0");
+ // sequence of 50 bases, doubled 10 times, = 51200 bases
+ String dna = "ATGGCCATTGGGCCCAAATTTCCCAAAGGGTTTCCCTGAGGTCAGTCAGA";
+ for (int i = 0 ; i < 10 ; i++)
+ {
+ dna += dna;
+ }
+ assertEquals(dna.length(), 51200);
+ AlignFrame alignFrame = new FileLoader()
+ .LoadFileWaitTillLoaded(dna, DataSourceType.PASTE);
+ SeqPanel testee = alignFrame.alignPanel.getSeqPanel();
+ AlignViewport av = alignFrame.getViewport();
+ av.setScaleAboveWrapped(true);
+ av.setScaleLeftWrapped(true);
+ av.setScaleRightWrapped(true);
+ alignFrame.alignPanel.updateLayout();
+
+ try
+ {
+ Thread.sleep(200);
+ } catch (InterruptedException e)
+ {
+ }
+
+ final int charHeight = av.getCharHeight();
+ final int charWidth = av.getCharWidth();
+ assertEquals(charHeight, 17);
+ assertEquals(charWidth, 12);
+
+ FontMetrics fm = testee.getFontMetrics(av.getFont());
+ int labelWidth = fm.stringWidth("00000") + charWidth;
+ assertEquals(labelWidth, 57); // 5 x 9 + charWidth
+ assertEquals(testee.seqCanvas.getLabelWidthWest(), labelWidth);
+
+ int x = 0;
+ int y = 0;
+
+ /*
+ * mouse at top left of wrapped panel; there is a gap of 2 * charHeight
+ * above the alignment
+ */
+ MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y,
+ 0, 0, 0, false, 0);
+ MousePos pos = testee.findMousePosition(evt);
+ assertEquals(pos.column, -1); // over scale left, not an alignment column
+ assertEquals(pos.seqIndex, -1); // above sequences
+ assertEquals(pos.annotationIndex, -1);
+
+ /*
+ * cursor over scale above first sequence
+ */
+ y += charHeight;
+ x = labelWidth;
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, -1);
+ assertEquals(pos.column, 0);
+ assertEquals(pos.annotationIndex, -1);
+
+ /*
+ * cursor over scale left of first sequence
+ */
+ y += charHeight;
+ x = 0;
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, 0);
+ assertEquals(pos.column, -1);
+ assertEquals(pos.annotationIndex, -1);
+
+ /*
+ * cursor over start of first sequence
+ */
+ x = labelWidth;
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, 0);
+ assertEquals(pos.column, 0);
+ assertEquals(pos.annotationIndex, -1);
+
+ /*
+ * move one character right, to bottom pixel of same row
+ */
+ x += charWidth;
+ y += charHeight - 1;
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, 0);
+ assertEquals(pos.column, 1);
+
+ /*
+ * move down one pixel - now in the no man's land between rows
+ */
+ y += 1;
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, -1);
+ assertEquals(pos.column, 1);
+
+ /*
+ * move down two char heights less one pixel - still in the no man's land
+ * (scale above + spacer line)
+ */
+ y += (2 * charHeight - 1);
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, -1);
+ assertEquals(pos.column, 1);
+
+ /*
+ * move down one more pixel - now on the next row of the sequence
+ */
+ y += 1;
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, 0);
+ assertEquals(pos.column, 1 + av.getWrappedWidth());
+
+ /*
+ * scroll to near the end of the sequence
+ */
+ SearchResultsI sr = new SearchResults();
+ int scrollTo = dna.length() - 1000;
+ sr.addResult(av.getAlignment().getSequenceAt(0), scrollTo, scrollTo);
+ alignFrame.alignPanel.scrollToPosition(sr);
+
+ /*
+ * place the mouse on the first column of the 6th sequence, and
+ * verify that (computed) findMousePosition matches (actual) ViewportRanges
+ */
+ x = labelWidth;
+ y = 17 * charHeight; // 17 = 6 times two header rows and 5 sequence rows
+ evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0,
+ false, 0);
+ pos = testee.findMousePosition(evt);
+ assertEquals(pos.seqIndex, 0);
+ int expected = av.getRanges().getStartRes() + 5 * av.getWrappedWidth();
+ assertEquals(pos.column, expected);
+ }
}
uod_banner.30=/images/UoD_banner-30.png
uod_banner.32=/images/UoD_banner-32.png
default_appbase=https://www.jalview.org/getdown/release/1.8
+preferences.filename=.jalview_properties
uod_banner.30=/images/UoD_banner-30.png
uod_banner.32=/images/UoD_banner-32.png
default_appbase=https://www.jalview.org/getdown/develop/11
+preferences.filename=.jalview_develop_properties
uod_banner.30=/images/UoD_banner-30.png
uod_banner.32=/images/UoD_banner-32.png
default_appbase=https://www.jalview.org/getdown/release/1.8
+preferences.filename=.jalview_properties
uod_banner.30=/images/UoD_banner-30.png
uod_banner.32=/images/UoD_banner-32.png
default_appbase=https://www.jalview.org/getdown/release/1.8
+preferences.filename=.jalview_properties
uod_banner.30=/images/UoD_banner-30.png
uod_banner.32=/images/UoD_banner-32.png
default_appbase=https://www.jalview.org/getdown/release/1.8
+preferences.filename=.jalview_properties
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleAllowMixedLocalizations</key>
- <true/>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>applet</string>
- <key>CFBundleIconFile</key>
- <string>applet</string>
- <key>CFBundleIdentifier</key>
- <string>com.apple.ScriptEditor.id.Uninstall-Old-Jalview</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>Uninstall Old Jalview</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>aplt</string>
- <key>LSMinimumSystemVersionByArchitecture</key>
- <dict>
- <key>x86_64</key>
- <string>10.6</string>
- </dict>
- <key>LSRequiresCarbon</key>
- <true/>
- <key>NSAppleEventsUsageDescription</key>
- <string>This script needs to control other applications to run.</string>
- <key>NSAppleMusicUsageDescription</key>
- <string>This script needs access to your music to run.</string>
- <key>NSCalendarsUsageDescription</key>
- <string>This script needs access to your calendars to run.</string>
- <key>NSCameraUsageDescription</key>
- <string>This script needs access to your camera to run.</string>
- <key>NSContactsUsageDescription</key>
- <string>This script needs access to your contacts to run.</string>
- <key>NSHomeKitUsageDescription</key>
- <string>This script needs access to your HomeKit Home to run.</string>
- <key>NSMicrophoneUsageDescription</key>
- <string>This script needs access to your microphone to run.</string>
- <key>NSPhotoLibraryUsageDescription</key>
- <string>This script needs access to your photos to run.</string>
- <key>NSRemindersUsageDescription</key>
- <string>This script needs access to your reminders to run.</string>
- <key>NSSiriUsageDescription</key>
- <string>This script needs access to Siri to run.</string>
- <key>NSSystemAdministrationUsageDescription</key>
- <string>This script needs access to administer this system to run.</string>
- <key>WindowState</key>
- <dict>
- <key>bundleDividerCollapsed</key>
- <true/>
- <key>bundlePositionOfDivider</key>
- <real>0.0</real>
- <key>dividerCollapsed</key>
- <true/>
- <key>eventLogLevel</key>
- <integer>2</integer>
- <key>name</key>
- <string>ScriptWindowState</string>
- <key>positionOfDivider</key>
- <real>421</real>
- <key>savedFrame</key>
- <string>272 342 1754 910 0 0 3360 1867 </string>
- <key>selectedTab</key>
- <string>result</string>
- </dict>
-</dict>
-</plist>
+++ /dev/null
-APPLaplt
\ No newline at end of file
+++ /dev/null
-{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf500
-{\fonttbl}
-{\colortbl;\red255\green255\blue255;}
-{\*\expandedcolortbl;;}
-}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>files</key>
- <dict>
- <key>Resources/Scripts/main.scpt</key>
- <data>
- KEuZnZPFR5wgwG/qEhXMd5yBoi4=
- </data>
- <key>Resources/applet.icns</key>
- <data>
- vIRz6m6+ZxDNfi4iTsXj5rdcZUA=
- </data>
- <key>Resources/applet.rsrc</key>
- <data>
- oLbJze+WI6mK9fT14HFV6EwFoEI=
- </data>
- <key>Resources/description.rtfd/TXT.rtf</key>
- <data>
- JdCHmFsejhMRQNi2CzUAg7xM/6Q=
- </data>
- </dict>
- <key>files2</key>
- <dict>
- <key>Resources/Scripts/main.scpt</key>
- <dict>
- <key>hash</key>
- <data>
- KEuZnZPFR5wgwG/qEhXMd5yBoi4=
- </data>
- <key>hash2</key>
- <data>
- Y+OMztx129elZ3oX0uhaiMMNU87xhkEPVzSuhF528t0=
- </data>
- </dict>
- <key>Resources/applet.icns</key>
- <dict>
- <key>hash</key>
- <data>
- vIRz6m6+ZxDNfi4iTsXj5rdcZUA=
- </data>
- <key>hash2</key>
- <data>
- D7gig1wJlOzR/Iy+y6TESLN0j/cIpjThUyO1pj5fZEc=
- </data>
- </dict>
- <key>Resources/applet.rsrc</key>
- <dict>
- <key>hash</key>
- <data>
- oLbJze+WI6mK9fT14HFV6EwFoEI=
- </data>
- <key>hash2</key>
- <data>
- 6bi/D/GzKmLhXbbC8+OLEX9+44Au0XOyGRd+kfw6uzA=
- </data>
- </dict>
- <key>Resources/description.rtfd/TXT.rtf</key>
- <dict>
- <key>hash</key>
- <data>
- JdCHmFsejhMRQNi2CzUAg7xM/6Q=
- </data>
- <key>hash2</key>
- <data>
- e8RCmynIiyJGwHTnWQowZeGP0OUnjjA6SQTvIzP7Hxs=
- </data>
- </dict>
- </dict>
- <key>rules</key>
- <dict>
- <key>^Resources/</key>
- <true/>
- <key>^Resources/.*\.lproj/</key>
- <dict>
- <key>optional</key>
- <true/>
- <key>weight</key>
- <real>1000</real>
- </dict>
- <key>^Resources/.*\.lproj/locversion.plist$</key>
- <dict>
- <key>omit</key>
- <true/>
- <key>weight</key>
- <real>1100</real>
- </dict>
- <key>^Resources/Base\.lproj/</key>
- <dict>
- <key>weight</key>
- <real>1010</real>
- </dict>
- <key>^version.plist$</key>
- <true/>
- </dict>
- <key>rules2</key>
- <dict>
- <key>.*\.dSYM($|/)</key>
- <dict>
- <key>weight</key>
- <real>11</real>
- </dict>
- <key>^(.*/)?\.DS_Store$</key>
- <dict>
- <key>omit</key>
- <true/>
- <key>weight</key>
- <real>2000</real>
- </dict>
- <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
- <dict>
- <key>nested</key>
- <true/>
- <key>weight</key>
- <real>10</real>
- </dict>
- <key>^.*</key>
- <true/>
- <key>^Info\.plist$</key>
- <dict>
- <key>omit</key>
- <true/>
- <key>weight</key>
- <real>20</real>
- </dict>
- <key>^PkgInfo$</key>
- <dict>
- <key>omit</key>
- <true/>
- <key>weight</key>
- <real>20</real>
- </dict>
- <key>^Resources/</key>
- <dict>
- <key>weight</key>
- <real>20</real>
- </dict>
- <key>^Resources/.*\.lproj/</key>
- <dict>
- <key>optional</key>
- <true/>
- <key>weight</key>
- <real>1000</real>
- </dict>
- <key>^Resources/.*\.lproj/locversion.plist$</key>
- <dict>
- <key>omit</key>
- <true/>
- <key>weight</key>
- <real>1100</real>
- </dict>
- <key>^Resources/Base\.lproj/</key>
- <dict>
- <key>weight</key>
- <real>1010</real>
- </dict>
- <key>^[^/]+$</key>
- <dict>
- <key>nested</key>
- <true/>
- <key>weight</key>
- <real>10</real>
- </dict>
- <key>^embedded\.provisionprofile$</key>
- <dict>
- <key>weight</key>
- <real>20</real>
- </dict>
- <key>^version\.plist$</key>
- <dict>
- <key>weight</key>
- <real>20</real>
- </dict>
- </dict>
-</dict>
-</plist>
<variable name="BUNDLE_ID" value="org.jalview.jalview-desktop" />
<variable name="INTERNAL_ID" value="Jalview" />
<variable name="WINDOWS_APPLICATION_ID" value="6595-2347-1923-0725" />
- <variable name="MACOS_DMG_DS_STORE" value="DS_Store" />
+ <variable name="MACOS_DMG_DS_STORE" value="jalview_dmg_DS_Store" />
<variable name="MACOS_DMG_BG_IMAGE" />
<variable name="INSTALLER_NAME" value="Jalview Installer" />
<variable name="INSTALL4J_UTILS_DIR" value="utils/install4j" />
<fileset name="Mac OS X JRE" id="880" />
<fileset name="Windows JRE" id="882" />
<fileset name="Jalview application" id="1873" />
- <fileset name="MacOS Old Jalview Uninstaller" id="2105" />
</filesets>
<roots>
<root id="735" fileset="734" />
<root id="881" fileset="880" />
<root id="883" fileset="882" />
<root id="1874" fileset="1873" />
- <root id="2106" fileset="2105" />
</roots>
<mountPoints>
<mountPoint id="454" />
<mountPoint id="884" root="881" />
<mountPoint id="885" root="883" />
<mountPoint id="1875" root="1874" />
- <mountPoint id="2107" root="2106" />
</mountPoints>
<entries>
<dirEntry mountPoint="454" file="${compiler:JALVIEW_DIR}/${compiler:GETDOWN_FILES_DIR}/${compiler:JAVA_VERSION}" uninstallMode="2" overrideOverwriteMode="true" overrideUninstallMode="true" subDirectory="files" />
<dirEntry mountPoint="884" file="${compiler:MACOS_JAVA_VM_DIR}" fileMode="755" overrideFileMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:JRE_DIR}" />
<dirEntry mountPoint="885" file="${compiler:WINDOWS_JAVA_VM_DIR}" fileMode="755" overrideFileMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:JRE_DIR}" />
<dirEntry mountPoint="1875" file="${compiler:JALVIEW_DIR}/${compiler:GETDOWN_WEBSITE_DIR}/${compiler:JAVA_VERSION}/${compiler:GETDOWN_DIST_DIR}" overwriteMode="1" uninstallMode="2" overrideFileMode="true" overrideOverwriteMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:GETDOWN_DIST_DIR}" overrideDirMode="true" />
- <dirEntry mountPoint="2107" file="Uninstall Old Jalview.app" fileMode="755" overrideFileMode="true" entryMode="subdir" subDirectory="Uninstall Old Jalview.app" overrideDirMode="true" />
</entries>
<components>
<component name="jalview_getdown" id="1031">
<entry filesetId="1873" />
</include>
</component>
- <component name="macos_old_jalview_uninstaller" id="2110">
- <include>
- <entry filesetId="2105" />
- </include>
- </component>
</components>
</files>
<launchers>
<component id="1156" />
<component id="1276" />
<component id="1881" />
- <component id="2110" />
</excludedComponents>
<exclude>
<entry defaultFileset="true" />
<file name=".DS_Store" file="${compiler:JALVIEW_DIR}/${compiler:MACOS_DMG_DS_STORE}" />
<file name="${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/Resources/Jalview-File.icns" file="${compiler:JALVIEW_DIR}/${compiler:INSTALL4J_UTILS_DIR}/Jalview-File.icns" />
<file name="${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/Resources/Jalview-Launch.icns" file="${compiler:JALVIEW_DIR}/${compiler:INSTALL4J_UTILS_DIR}/Jalview-Launch.icns" />
- <symlink name="Uninstall Old Jalview (optional).app" target="${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/Resources/app/Uninstall Old Jalview.app" />
</topLevelFiles>
</macosArchive>
<unixInstaller name="Linux x64 Shell Installer" id="1595" mediaFileName="${compiler:UNIX_APPLICATION_FOLDER}-${compiler:JALVIEW_VERSION}-linux_x64-java_${compiler:JAVA_INTEGER_VERSION}" installDir="${compiler:UNIX_APPLICATION_FOLDER}" customInstallBaseDir="~/opt/">
<component id="1156" />
<component id="1276" />
<component id="1881" />
- <component id="2110" />
</excludedComponents>
<exclude>
<entry defaultFileset="true" />
<component id="1156" />
<component id="1276" />
<component id="1881" />
- <component id="2110" />
</excludedComponents>
<exclude>
<entry defaultFileset="true" />
<component id="1156" />
<component id="1276" />
<component id="1881" />
- <component id="2110" />
</excludedComponents>
<exclude>
<entry defaultFileset="true" />