<td>Default is no colour.</td>
</tr>
<tr>
+ <td>defaultColourNuc</td>
+ <td>A colour scheme (from the list above) to apply to Nucleotide alignments</td><td>This overrides defaultColour if it is specified.</td>
+ </tr>
+ <tr>
+ <td>defaultColourProt</td>
+ <td>A colour scheme (from the list above) to apply to Peptide alignments</td><td>This overrides defaultColour if it is specified.</td>
+ </tr>
+ <tr>
<td>userDefinedColour</td>
<td><p><em>Example:</em><br>
D,E=red; K,R,H=0022FF; c=yellow</p></td>
<param name="windowWidth" value="800"/>
<param name="showAnnotation" value="true"/>
<param name="showSequenceLogo" value="true"/>
-<param name="defaultColour" value="Purine/Pyrimidine"/>
+<param name="defaultColourNuc" value="Purine/Pyrimidine"/>
+<param name="defaultColourProt" value="Clustal"/>
<param name="APPLICATION_URL"
value="http://www.jalview.org/services/launchApp"/>
</applet>
->UNIPROT|Q7LCB3/249-274
----SLEHTLPVNRETLKRKVSGNRCASPV----------
->UNIPROT|Q9VSE9/175-200
----GSGTSGGNGGGGGGGTSGGNATNASA----------
>UNIPROT|Q9IBD5/371-408
EGHHNYLCAGRNDCIVDKIRRKNCPACRLRKCYQAGMI-
>UNIPROT|Q9YGV9/522-559
EGKQKYLCASINDCTIDKLRRKNCPSCRLKRCFAAGMT-
>UNIPROT|Q90ZM7/97-134
EGQHNYLCAGRNDCIIDKIRRKNCPACRLRKCIQAGMT-
->UNIPROT|Q91445/24-61
-EGKQKYLCASRNDCTIDKFRRKNCPSCRLRKCYEAGMT-
>UNIPROT|Q90ZM8/198-236
QGHNDYMCPATNQCTIDRNRRKSCQACRLRKCYEVGMVK
<td width="60" nowrap>
<div align="center">
<strong><a name="Jalview.2.9.0b1">2.9.0b1</a><br />
- <em>29/09/2015</em></strong>
+ <em>6/10/2015</em></strong>
</div>
</td>
<td>
- <div align="center"></div>
+ <em>General</em>
+ <ul>
+ <li>Updated Spanish translations of localized text for 2.9</li>
+ </ul>
+ <em>Application</em><ul>
+ <!-- <li>cDNA/Protein splitframe window geometry preserved in Jalview projects</li>-->
+ <li>Signed OSX InstallAnywhere installer</li></ul>
+ <em>Applet</em>
+ <ul><li>Split frame example added to applet examples page</li>
+ </ul>
</td>
<td>
<div align="left">
+ <em>General</em>
<ul>
<li>Mapping of cDNA to protein in split frames incorrect when sequence start > 1</li>
- <li>Split frame example added to applet examples page</li>
- <li>Applet with Jmol examples not loading correctly</li>
- <li>Incorrect warning on deleting selected columns</li>
- <li>Annotations incorrectly rendered after BioJS export and reimport</li>
- <li>Incorrect sequence limits after Fetch DB References with 'trim retrieved sequences'</li>
- <li>Spanish translations of localized text - updates needed for 2.9</li>
- <li>Provide signed OSX InstallAnywhere installer</li>
+ <li>Broken images in filter column by annotation dialog documentation</li>
+ <li>Feature colours not parsed from features file</li>
+ <li>Exceptions and incomplete link URLs recovered when loading a features file containing HTML tags in feature description</li>
+
</ul>
+ <em>Application</em><ul>
+ <li>Annotations corrupted after BioJS export and reimport</li>
+ <li>Incorrect sequence limits after Fetch DB References with 'trim retrieved sequences'</li>
+ <li>Incorrect warning about deleting all data when deleting selected columns</li>
+ <li>Patch to build system for shipping properly signed JNLP templates for webstart launch</li>
+ <li>EMBL-PDBe fetcher/viewer dialogs do not offer unreleased structures for download or viewing</li>
+ <li>Tab/space/return keystroke operation of EMBL-PDBe fetcher/viewer dialogs works correctly</li>
+ <li>Disabled 'minimise' button on Jalview windows running on OSX to workaround redraw hang bug</li>
+ <li>Split cDNA/Protein view position and geometry not recovered from jalview project</li>
+ <li>Initial enabled/disabled state of annotation menu sorter 'show autocalculated first/last' corresponds to alignment view</li>
+ </ul>
+ <em>Applet</em><ul>
+ <li>Reorder sequences mirrored in cDNA/Protein split frame</li>
+ <li>Applet with Jmol examples not loading correctly</li>
+ </ul>
</div>
</td>
</tr>
if (applet != null)
{
- String colour = applet.getParameter("defaultColour");
-
+ String colour = al.isNucleotide() ? applet
+ .getParameter("defaultColourNuc") : applet
+ .getParameter("defaultColourProt");
+ if (colour == null)
+ {
+ colour = applet.getParameter("defaultColour");
+ }
if (colour == null)
{
colour = applet.getParameter("userDefinedColour");
// TODO would like next line without cast but needs more refactoring...
final AlignmentPanel complementPanel = ((AlignViewport) getCodingComplement())
.getAlignPanel();
- complementPanel.setFollowingComplementScroll(true);
+ complementPanel.setDontScrollComplement(true);
complementPanel.scrollToCentre(sr, verticalOffset);
}
}
* Flag set while scrolling to follow complementary cDNA/protein scroll. When
* true, suppresses invoking the same method recursively.
*/
- private boolean followingComplementScroll;
+ private boolean dontScrollComplement;
/**
* Creates a new AlignmentPanel object.
x = 0;
}
+ /*
+ * each scroll adjustment triggers adjustmentValueChanged, which resets the
+ * 'do not scroll complement' flag; ensure it is the same for both
+ * operations
+ */
+ boolean flag = isDontScrollComplement();
hscroll.setValues(x, hextent, 0, width);
+ setDontScrollComplement(flag);
vscroll.setValues(y, vextent, 0, height);
}
* If there is one, scroll the (Protein/cDNA) complementary alignment to
* match, unless we are ourselves doing that.
*/
- if (isFollowingComplementScroll())
+ if (isDontScrollComplement())
{
- setFollowingComplementScroll(false);
+ setDontScrollComplement(false);
}
else
{
hscrollFillerPanel.setPreferredSize(new Dimension(d.width, 12));
validate();
+ /*
+ * set scroll bar positions; first suppress this being 'followed' in any
+ * complementary split pane
+ */
+ setDontScrollComplement(true);
+
if (av.getWrapAlignment())
{
int maxwidth = av.getAlignment().getWidth();
}
/**
- * Set a flag to say we are scrolling to follow a (cDNA/protein) complement.
+ * Set a flag to say do not scroll any (cDNA/protein) complement.
*
* @param b
*/
- protected void setFollowingComplementScroll(boolean b)
+ protected void setDontScrollComplement(boolean b)
{
- this.followingComplementScroll = b;
+ this.dontScrollComplement = b;
}
- protected boolean isFollowingComplementScroll()
+ protected boolean isDontScrollComplement()
{
- return this.followingComplementScroll;
+ return this.dontScrollComplement;
}
}
import jalview.structure.StructureSelectionManager;
import jalview.util.ImageMaker;
import jalview.util.MessageManager;
+import jalview.util.Platform;
import jalview.viewmodel.AlignmentViewport;
import jalview.ws.params.ParamManager;
boolean showjconsole = jalview.bin.Cache.getDefault(
"SHOW_JAVA_CONSOLE", false);
desktop = new MyDesktopPane(selmemusage);
+ if (Platform.isAMac())
+ {
+ desktop.setDoubleBuffered(false);
+ }
showMemusage.setSelected(selmemusage);
desktop.setBackground(Color.white);
getContentPane().setLayout(new BorderLayout());
frame.setResizable(resizable);
frame.setMaximizable(resizable);
frame.setIconifiable(resizable);
- frame.setFrameIcon(null);
-
+ if (Platform.isAMac())
+ {
+ frame.setIconifiable(false);
+ frame.setFrameIcon(null);
+ // frame.setDesktopIcon(null);
+ frame.setDoubleBuffered(false);
+ }
if (frame.getX() < 1 && frame.getY() < 1)
{
frame.setLocation(xOffset * openFrameCount, yOffset
* AlignmentPanel objects, including their AlignmentViewports, so the
* cdna/protein relationships between the viewports is carried over to the
* new split frames.
+ *
+ * explodedGeometry holds the (x, y) position of the previously exploded
+ * SplitFrame, and the (width, height) of the AlignFrame component
*/
AlignmentPanel topPanel = (AlignmentPanel) topPanels.get(i);
AlignFrame newTopFrame = new AlignFrame(topPanel);
newTopFrame.setSize(oldTopFrame.getSize());
newTopFrame.setVisible(true);
+ Rectangle geometry = ((AlignViewport) topPanel.getAlignViewport())
+ .getExplodedGeometry();
+ if (geometry != null)
+ {
+ newTopFrame.setSize(geometry.getSize());
+ }
+
AlignmentPanel bottomPanel = (AlignmentPanel) bottomPanels.get(i);
AlignFrame newBottomFrame = new AlignFrame(bottomPanel);
newBottomFrame.setSize(oldBottomFrame.getSize());
newBottomFrame.setVisible(true);
+ geometry = ((AlignViewport) bottomPanel.getAlignViewport())
+ .getExplodedGeometry();
+ if (geometry != null)
+ {
+ newBottomFrame.setSize(geometry.getSize());
+ }
+
topPanel.av.setGatherViewsHere(false);
bottomPanel.av.setGatherViewsHere(false);
JInternalFrame splitFrame = new SplitFrame(newTopFrame,
newBottomFrame);
- // either panel may hold previous exploded frame geometry
- Rectangle geometry = ((AlignViewport) topPanel.getAlignViewport())
- .getExplodedGeometry();
if (geometry != null)
{
- splitFrame.setBounds(geometry);
+ splitFrame.setLocation(geometry.getLocation());
}
Desktop.addInternalFrame(splitFrame, sf.getTitle(), -1, -1);
}
*/
public void gatherViews(GSplitFrame source)
{
+ /*
+ * special handling of explodedGeometry for a view within a SplitFrame: - it
+ * holds the (x, y) position of the enclosing SplitFrame, and the (width,
+ * height) of the AlignFrame component
+ */
AlignFrame myTopFrame = (AlignFrame) source.getTopFrame();
AlignFrame myBottomFrame = (AlignFrame) source.getBottomFrame();
- myTopFrame.viewport.setExplodedGeometry(source.getBounds());
- myBottomFrame.viewport.setExplodedGeometry(source.getBounds());
+ myTopFrame.viewport.setExplodedGeometry(new Rectangle(source.getX(),
+ source.getY(), myTopFrame.getWidth(), myTopFrame.getHeight()));
+ myBottomFrame.viewport.setExplodedGeometry(new Rectangle(source.getX(),
+ source.getY(), myBottomFrame.getWidth(), myBottomFrame
+ .getHeight()));
myTopFrame.viewport.setGatherViewsHere(true);
myBottomFrame.viewport.setGatherViewsHere(true);
String topViewId = myTopFrame.viewport.getSequenceSetId();
gatherThis = true;
topPanel.av.setGatherViewsHere(false);
bottomPanel.av.setGatherViewsHere(false);
- // both panels refer to the same split frame geometry
- Rectangle position = sf.getBounds();
- topPanel.av.setExplodedGeometry(position);
- bottomPanel.av.setExplodedGeometry(position);
+ topPanel.av.setExplodedGeometry(new Rectangle(sf.getLocation(),
+ topFrame.getSize()));
+ bottomPanel.av.setExplodedGeometry(new Rectangle(sf
+ .getLocation(), bottomFrame.getSize()));
myTopFrame.addAlignmentPanel(topPanel, false);
myBottomFrame.addAlignmentPanel(bottomPanel, false);
}
*
* @see AlignmentPanel#adjustmentValueChanged
*/
- ap.setFollowingComplementScroll(true);
+ ap.setDontScrollComplement(true);
if (ap.scrollToPosition(results, false))
{
seqCanvas.revalidate();
import jalview.jbgui.GAlignFrame;
import jalview.jbgui.GSplitFrame;
import jalview.structure.StructureSelectionManager;
+import jalview.util.Platform;
import jalview.viewmodel.AlignmentViewport;
import java.awt.Component;
import java.awt.event.KeyListener;
import java.beans.PropertyVetoException;
import java.util.Map.Entry;
+import java.util.Set;
import javax.swing.AbstractAction;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
((AlignFrame) getTopFrame()).getViewport().setCodingComplement(
((AlignFrame) getBottomFrame()).getViewport());
- int width = ((AlignFrame) getTopFrame()).getWidth();
- // about 50 pixels for the SplitFrame's title bar etc
+ /*
+ * estimate width and height of SplitFrame; this.getInsets() doesn't seem to
+ * give the full additional size (a few pixels short)
+ */
+ UIDefaults defaults = UIManager.getDefaults();
+ Set<Object> keySet = defaults.keySet();
+ for (Object key : keySet)
+ {
+ System.out.println(key.toString() + " = "
+ + UIManager.get(key).toString());
+ }
+ int widthFudge = Platform.isAMac() ? 28 : 28; // Windows tbc
+ int heightFudge = Platform.isAMac() ? 50 : 50; // tbc
+ int width = ((AlignFrame) getTopFrame()).getWidth() + widthFudge;
int height = ((AlignFrame) getTopFrame()).getHeight()
- + ((AlignFrame) getBottomFrame()).getHeight() + 50;
+ + ((AlignFrame) getBottomFrame()).getHeight() + DIVIDER_SIZE
+ + heightFudge;
height = fitHeightToDesktop(height);
setSize(width, height);
.getSelectedFile().getParent());
file = chooser.getSelectedFile();
}
+ else
+ {
+ return;
+ }
}
AlignmentDimension aDimension = ap.getAlignmentDimension();
case KeyEvent.VK_TAB: // tab key
if (evt.isShiftDown())
{
- txt_search.requestFocus();
+ tabbedPane.requestFocus();
}
else
{
btn_back.requestFocus();
}
+ evt.consume();
break;
default:
return;
public class GSplitFrame extends JInternalFrame
{
- private static final int DIVIDER_SIZE = 5;
+ protected static final int DIVIDER_SIZE = 5;
private static final long serialVersionUID = 1L;
toolTipText = getValueAt(rowIndex, colIndex).toString();
} catch (Exception e)
{
- e.printStackTrace();
+ // e.printStackTrace();
}
toolTipText = (toolTipText == null ? null
: (toolTipText.length() > 500 ? JvSwingUtils.wrapTooltip(
case KeyEvent.VK_TAB: // tab key
if (evt.isShiftDown())
{
- chk_invertFilter.requestFocus();
+ pnl_filter.requestFocus();
}
else
{
btn_view.requestFocus();
}
+ evt.consume();
break;
default:
return;
}
else
{
+ if (btn_view.isEnabled())
+ {
btn_view.requestFocus();
+ }
+ else
+ {
+ btn_cancel.requestFocus();
+ }
}
-
+ evt.consume();
default:
return;
}
package jalview.ws.uimodel;
+import jalview.bin.Cache;
import jalview.datamodel.SequenceI;
import jalview.ws.dbsources.PDBRestClient.PDBDocField;
private boolean allowEmptySequence;
- private boolean allowUnpublishedEntries;
+ private boolean allowUnpublishedEntries = Cache.getDefault(
+ "ALLOW_UNPUBLISHED_PDB_QUERYING", false);
private int responseSize;
private boolean isSortAscending;
- private Collection<PDBDocField> wantedFields;// = new
- // Collection<PDBDocField>();
+ private Collection<PDBDocField> wantedFields;
public String getFieldToSearchBy()
{
if (pdbJsonDoc.get(field.getCode()) == null)
{
// System.out.println(">>>\t" + field.getCode());
- assertTrue(field.getClass()
+ assertTrue(field.getCode()
+ " has been removed from PDB doc Entity",
!pdbJsonResponseString.contains(field.getCode()));
}