Skip to content

Commit

Permalink
Merge pull request #868 from bbreton/issue-836-sequence-track-saving-…
Browse files Browse the repository at this point in the history
…and-commands

Git Issue #836 SequenceTrack commands, preferences and session work
  • Loading branch information
jrobinso committed Dec 4, 2020
2 parents 83d987d + fe1b110 commit 5c8a057
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 1 deletion.
16 changes: 16 additions & 0 deletions src/main/java/org/broad/igv/batch/CommandExecutor.java
Expand Up @@ -36,6 +36,7 @@
import org.broad.igv.feature.Locus;
import org.broad.igv.feature.Range;
import org.broad.igv.feature.RegionOfInterest;
import org.broad.igv.feature.Strand;
import org.broad.igv.feature.genome.GenomeManager;
import org.broad.igv.google.Ga4ghAPIHelper;
import org.broad.igv.google.OAuthUtils;
Expand All @@ -45,6 +46,7 @@
import org.broad.igv.sam.AlignmentTrack;
import org.broad.igv.track.RegionScoreType;
import org.broad.igv.track.Track;
import org.broad.igv.track.SequenceTrack;
import org.broad.igv.ui.IGV;
import org.broad.igv.ui.panel.FrameManager;
import org.broad.igv.ui.util.MessageUtils;
Expand Down Expand Up @@ -133,6 +135,20 @@ public String execute(String command) {
} else if (cmd.equalsIgnoreCase("collapse")) {
String trackName = parseTrackName(param1);
igv.setTrackDisplayMode(Track.DisplayMode.COLLAPSED, trackName);
} else if (cmd.equalsIgnoreCase("setSequenceStrand")) {
igv.setSequenceTrackStrand(Strand.fromString(param1));
} else if (cmd.equalsIgnoreCase("setSequenceShowTranslation")) {
boolean showTranslation;
try {
if (param1.equalsIgnoreCase("true") || param1.equalsIgnoreCase("false")) {
showTranslation = Boolean.valueOf(param1);
} else {
return "ERROR: showTranslation value (" + param1 + ")is not 'true' or 'false'.";
}
} catch (IllegalArgumentException e) {
return e.getMessage();
}
igv.setSequenceShowTranslation(showTranslation);
} else if (cmd.equalsIgnoreCase("expand")) {
String trackName = parseTrackName(param1);
igv.setTrackDisplayMode(Track.DisplayMode.EXPANDED, trackName);
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/org/broad/igv/feature/Strand.java
Expand Up @@ -37,6 +37,8 @@ public enum Strand {
NONE, POSITIVE, NEGATIVE;

public static Strand fromString(String strandString) {
return strandString.equals("+") ? POSITIVE : (strandString.equals("-") ? NEGATIVE : NONE);
return strandString.equals("+") || strandString.equalsIgnoreCase("POSITIVE")
? POSITIVE : (strandString.equals("-") || strandString.equalsIgnoreCase("NEGATIVE")
? NEGATIVE : NONE);
}
}
1 change: 1 addition & 0 deletions src/main/java/org/broad/igv/prefs/Constants.java
Expand Up @@ -163,6 +163,7 @@ private Constants() {} // Prevent instantiation
public static final String KNOWN_SNPS = "KNOWN_SNPS_FILE";

// Sequence track settings
public static final String SEQUENCE_TRANSLATION_STRAND = "SEQUENCE_TRANSLATION_STRAND";
public static final String SHOW_SEQUENCE_TRANSLATION = "SHOW_SEQUENCE_TRANSLATION";
public static final String MAX_SEQUENCE_RESOLUTION = "MAX_SEQUENCE_RESOLUTION";
public static final String COLOR_A = "COLOR.A";
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/org/broad/igv/track/AbstractTrack.java
Expand Up @@ -32,6 +32,7 @@
import org.broad.igv.Globals;
import org.broad.igv.event.IGVEventBus;
import org.broad.igv.event.IGVEventObserver;
import org.broad.igv.feature.Strand;
import org.broad.igv.prefs.Constants;
import org.broad.igv.prefs.PreferencesManager;
import org.broad.igv.renderer.*;
Expand Down Expand Up @@ -888,6 +889,10 @@ public void setDisplayMode(DisplayMode mode) {
this.displayMode = mode;
}

public void setSequenceTranslationStrandValue(Strand strand) {}

public void setShouldShowTranslationCommand(boolean shouldShowTranslation) {}


public String getNameValueString(int y) {

Expand Down
44 changes: 44 additions & 0 deletions src/main/java/org/broad/igv/track/SequenceTrack.java
Expand Up @@ -48,6 +48,8 @@
import org.broad.igv.ui.panel.IGVPopupMenu;
import org.broad.igv.ui.panel.ReferenceFrame;
import org.broad.igv.ui.util.UIUtilities;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.swing.*;
import java.awt.*;
Expand All @@ -61,6 +63,7 @@

import static org.broad.igv.prefs.Constants.MAX_SEQUENCE_RESOLUTION;
import static org.broad.igv.prefs.Constants.SHOW_SEQUENCE_TRANSLATION;
import static org.broad.igv.prefs.Constants.SEQUENCE_TRANSLATION_STRAND;


/**
Expand Down Expand Up @@ -91,6 +94,7 @@ public SequenceTrack(String name) {
super(null, name, name);
setSortable(false);
shouldShowTranslation = PreferencesManager.getPreferences().getAsBoolean(SHOW_SEQUENCE_TRANSLATION);
strand = Strand.fromString(PreferencesManager.getPreferences().get(SEQUENCE_TRANSLATION_STRAND));
loadedIntervalCache = Collections.synchronizedMap(new HashMap<>());
sequenceVisible = Collections.synchronizedMap(new HashMap<>());
IGVEventBus.getInstance().subscribe(FrameManager.ChangeEvent.class, this);
Expand Down Expand Up @@ -314,12 +318,29 @@ private void flipStrand() {

}

public void setSequenceTranslationStrandValue(Strand strandValue) {
strand = strandValue;
PreferencesManager.getPreferences().put(SEQUENCE_TRANSLATION_STRAND, strand.toString());
IGV.getInstance().clearSelections();
repaint();
}

public void setShouldShowTranslation(boolean shouldShowTranslation) {
this.shouldShowTranslation = shouldShowTranslation;
// Remember this choice
PreferencesManager.getPreferences().put(SHOW_SEQUENCE_TRANSLATION, shouldShowTranslation);
}

public void setShouldShowTranslationCommand(boolean shouldShowTranslation) {
this.shouldShowTranslation = shouldShowTranslation;
setShouldShowTranslation(shouldShowTranslation);
repaint();
IGV.getInstance().repaint();
IGV.getInstance().clearSelections();
// Remember this choice
PreferencesManager.getPreferences().put(SHOW_SEQUENCE_TRANSLATION, shouldShowTranslation);
}


/**
* Override to return a specialized popup menu
Expand Down Expand Up @@ -445,4 +466,27 @@ public void refreshAminoAcids() {
this.negAA = negAA;
}
}

public void marshalXML(Document document, Element element) {

super.marshalXML(document, element);

element.setAttribute("shouldShowTranslation", String.valueOf(shouldShowTranslation));
element.setAttribute("sequenceTranslationStrandValue", String.valueOf(strand));

}

@Override
public void unmarshalXML(Element element, Integer version) {

super.unmarshalXML(element, version);

if (element.hasAttribute("shouldShowTranslation")) {
this.shouldShowTranslation = Boolean.valueOf(element.getAttribute("shouldShowTranslation"));
}
if (element.hasAttribute("sequenceTranslationStrandValue")) {
this.strand = Strand.fromString(element.getAttribute("sequenceTranslationStrandValue"));
}
}

}
4 changes: 4 additions & 0 deletions src/main/java/org/broad/igv/track/Track.java
Expand Up @@ -31,6 +31,7 @@


import htsjdk.tribble.Feature;
import org.broad.igv.feature.Strand;
import org.broad.igv.renderer.ContinuousColorScale;
import org.broad.igv.renderer.DataRange;
import org.broad.igv.renderer.Renderer;
Expand Down Expand Up @@ -130,6 +131,9 @@ void renderAttributes(Graphics2D graphics, Rectangle trackRectangle, Rectangle v

void setUrl(String url);

void setSequenceTranslationStrandValue(Strand strandValue);
void setShouldShowTranslationCommand(boolean shouldShowTranslation);

ResourceLocator getResourceLocator();

/**
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/org/broad/igv/ui/IGV.java
Expand Up @@ -1617,6 +1617,25 @@ public void setTrackDisplayMode(Track.DisplayMode mode, String trackName) {
}


public void setSequenceTrackStrand(Strand trackStrand) {
for (Track t : getAllTracks()) {
if (t.getName().equals("Reference sequence")) {
t.setSequenceTranslationStrandValue(trackStrand);
}
}

}

public void setSequenceShowTranslation(boolean shouldShowTranslation) {
for (Track t : getAllTracks()) {
if (t.getName().equals("Reference sequence")) {
t.setShouldShowTranslationCommand(shouldShowTranslation);
}
}

}


/**
* Reset the overlay tracks collection. Currently the only overlayable track
* type is Mutation. This method finds all mutation tracks and builds a map
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/org/broad/igv/prefs/preferences.tab
Expand Up @@ -247,6 +247,7 @@ DEFAULT_GENOME_KEY hg19
IGV.track.height 15
FLANKING_REGION 2000
SHOW_SEQUENCE_TRANSLATION FALSE
SEQUENCE_TRANSLATION_STRAND POSITIVE
AUTO_UPDATE_GENOMES TRUE
GWAS_TRACK_HEIGHT 200
GWAS_DESCRIPTION_CACHE_SIZE 10000
Expand Down

0 comments on commit 5c8a057

Please sign in to comment.