*/
package jalview.gui;
+import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JColorChooser;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
+import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JScrollPane;
import jalview.analysis.AAFrequency;
import jalview.analysis.AlignmentAnnotationUtils;
import jalview.datamodel.HiddenColumns;
import jalview.datamodel.MappedFeatures;
import jalview.datamodel.PDBEntry;
+import jalview.datamodel.ResidueCount;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.gui.ColourMenuHelper.ColourChangeListener;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
+import jalview.io.CountReader;
import jalview.io.FileFormatI;
import jalview.io.FileFormats;
import jalview.io.FormatAdapter;
import jalview.util.GroupUrlLink;
import jalview.util.GroupUrlLink.UrlStringTooLongException;
import jalview.util.MessageManager;
+import jalview.util.Platform;
import jalview.util.StringUtils;
import jalview.util.UrlLink;
import jalview.viewmodel.seqfeatures.FeatureRendererModel;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
/**
* The popup menu that is displayed on right-click on a sequence id, or in the
* sequence alignment.
}
}
+ if (seq.hasHMMProfile())
+ {
+ menuItem = new JMenuItem(MessageManager
+ .getString("action.add_background_frequencies"));
+ menuItem.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ try
+ {
+ ResidueCount counts = CountReader.getBackgroundFrequencies(ap,
+ seq);
+ if (counts != null)
+ {
+ seq.getHMM().setBackgroundFrequencies(counts);
+ ap.alignFrame.buildColourMenu();
+ }
+ } catch (MalformedURLException e1)
+ {
+ e1.printStackTrace();
+ } catch (IOException e1)
+ {
+ e1.printStackTrace();
+ }
+ }
+ });
+ add(menuItem);
+ }
+
menuItem = new JMenuItem(
MessageManager.getString("action.hide_sequences"));
menuItem.addActionListener(new ActionListener()
buildGroupURLMenu(sg, groupLinks);
}
// Add a 'show all structures' for the current selection
- Hashtable<String, PDBEntry> pdbe = new Hashtable<>(), reppdb = new Hashtable<>();
+ Hashtable<String, PDBEntry> pdbe = new Hashtable<>();
+ Hashtable<String, PDBEntry> reppdb = new Hashtable<>();
SequenceI sqass = null;
for (SequenceI sq : alignPanel.av.getSequenceSelection())
protected void showFeatureDetails(SequenceFeature sf, String seqName,
MappedFeatures mf)
{
- CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer();
- // it appears Java's CSS does not support border-collapse :-(
- cap.addStylesheetRule("table { border-collapse: collapse;}");
- cap.addStylesheetRule("table, td, th {border: 1px solid black;}");
- cap.setText(sf.getDetailsReport(seqName, mf));
-
- Desktop.addInternalFrame(cap,
+ JInternalFrame details;
+ if (Platform.isJS())
+ {
+ details = new JInternalFrame();
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setOpaque(true);
+ panel.setBackground(Color.white);
+ // TODO JAL-3026 set style of table correctly for feature details
+ JLabel reprt = new JLabel(MessageManager
+ .formatMessage("label.html_content", new Object[]
+ { sf.getDetailsReport(seqName, mf) }));
+ reprt.setBackground(Color.WHITE);
+ reprt.setOpaque(true);
+ panel.add(reprt, BorderLayout.CENTER);
+ details.setContentPane(panel);
+ details.pack();
+ }
+ else
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
+ {
+ CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer();
+ // it appears Java's CSS does not support border-collapse :-(
+ cap.addStylesheetRule("table { border-collapse: collapse;}");
+ cap.addStylesheetRule("table, td, th {border: 1px solid black;}");
+ cap.setText(sf.getDetailsReport(seqName, mf));
+ details = cap;
+ }
+ Desktop.addInternalFrame(details,
MessageManager.getString("label.feature_details"), 500, 500);
}
{
sqi = sqi.getDatasetSequence();
}
- DBRefEntry[] dbr = sqi.getDBRefs();
- if (dbr != null && dbr.length > 0)
+ List<DBRefEntry> dbr = sqi.getDBRefs();
+ int nd;
+ if (dbr != null && (nd = dbr.size()) > 0)
{
- for (int d = 0; d < dbr.length; d++)
+ for (int d = 0; d < nd; d++)
{
- String src = dbr[d].getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase();
+ DBRefEntry e = dbr.get(d);
+ String src = e.getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase();
Object[] sarray = commonDbrefs.get(src);
if (sarray == null)
{
if (((String[]) sarray[1])[sq] == null)
{
- if (!dbr[d].hasMap() || (dbr[d].getMap()
+ if (!e.hasMap() || (e.getMap()
.locateMappedRange(start, end) != null))
{
- ((String[]) sarray[1])[sq] = dbr[d].getAccessionId();
+ ((String[]) sarray[1])[sq] = e.getAccessionId();
((int[]) sarray[0])[0]++;
}
}
Cache.log.error("Exception for GroupURLLink '" + link + "'", foo);
continue;
}
- ;
if (!urlLink.isValid())
{
Cache.log.error(urlLink.getInvalidMessage());
@Override
public void actionPerformed(ActionEvent actionEvent)
{
- editSequence_actionPerformed(actionEvent);
+ editSequence_actionPerformed();
}
});
makeReferenceSeq.setText(
public void createSequenceDetailsReport(SequenceI[] sequences)
{
- CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer();
StringBuilder contents = new StringBuilder(128);
+ contents.append("<html><body>");
for (SequenceI seq : sequences)
{
contents.append("<p><h2>" + MessageManager.formatMessage(
contents, seq, true, true, ap.getSeqPanel().seqCanvas.fr);
contents.append("</p>");
}
- cap.setText("<html>" + contents.toString() + "</html>");
+ contents.append("</body></html>");
+ String report = contents.toString();
+
+ JInternalFrame frame;
+ if (Platform.isJS())
+ {
+ JLabel textLabel = new JLabel();
+ textLabel.setText(report);
+ textLabel.setBackground(Color.WHITE);
+ JPanel pane = new JPanel(new BorderLayout());
+ pane.setOpaque(true);
+ pane.setBackground(Color.WHITE);
+ pane.add(textLabel, BorderLayout.NORTH);
+ frame = new JInternalFrame();
+ frame.getContentPane().add(new JScrollPane(pane));
+ }
+ else
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
+ {
+ CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer();
+ cap.setText(report);
+ frame = cap;
+ }
- Desktop.addInternalFrame(cap,
+ Desktop.addInternalFrame(frame,
MessageManager.formatMessage("label.sequence_details_for",
(sequences.length == 1 ? new Object[]
{ sequences[0].getDisplayId(true) }
{ MessageManager
.getString("label.selection") })),
500, 400);
-
}
protected void showNonconserved_actionPerformed()
}
/**
- * DOCUMENT ME!
- *
- * @param e
- * DOCUMENT ME!
+ * Shows a dialog where group name and description may be edited
*/
protected void groupName_actionPerformed()
{
-
SequenceGroup sg = getGroup();
EditNameDialog dialog = new EditNameDialog(sg.getName(),
sg.getDescription(),
- " " + MessageManager.getString("label.group_name") + " ",
- MessageManager.getString("label.group_description") + " ",
+ MessageManager.getString("label.group_name"),
+ MessageManager.getString("label.group_description"));
+ dialog.showDialog(ap.alignFrame,
MessageManager.getString("label.edit_group_name_description"),
- ap.alignFrame);
-
- if (!dialog.accept)
- {
- return;
- }
-
- sg.setName(dialog.getName());
- sg.setDescription(dialog.getDescription());
- refresh();
+ new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ sg.setName(dialog.getName());
+ sg.setDescription(dialog.getDescription());
+ refresh();
+ }
+ });
}
/**
{
EditNameDialog dialog = new EditNameDialog(sequence.getName(),
sequence.getDescription(),
- " " + MessageManager.getString("label.sequence_name")
- + " ",
- MessageManager.getString("label.sequence_description") + " ",
+ MessageManager.getString("label.sequence_name"),
+ MessageManager.getString("label.sequence_description"));
+ dialog.showDialog(ap.alignFrame,
MessageManager.getString(
"label.edit_sequence_name_description"),
- ap.alignFrame);
-
- if (!dialog.accept)
- {
- return;
- }
-
- String name = dialog.getName();
- if (name != null)
- {
- if (name.indexOf(" ") > -1)
- {
- JvOptionPane.showMessageDialog(ap,
- MessageManager
- .getString("label.spaces_converted_to_backslashes"),
- MessageManager
- .getString("label.no_spaces_allowed_sequence_name"),
- JvOptionPane.WARNING_MESSAGE);
- name = name.replace(' ', '_');
- }
-
- sequence.setName(name);
- ap.paintAlignment(false, false);
- }
-
- sequence.setDescription(dialog.getDescription());
-
- ap.av.firePropertyChange("alignment", null,
- ap.av.getAlignment().getSequences());
-
+ new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ if (dialog.getName() != null)
+ {
+ if (dialog.getName().indexOf(" ") > -1)
+ {
+ JvOptionPane.showMessageDialog(ap,
+ MessageManager.getString(
+ "label.spaces_converted_to_underscores"),
+ MessageManager.getString(
+ "label.no_spaces_allowed_sequence_name"),
+ JvOptionPane.WARNING_MESSAGE);
+ }
+ sequence.setName(dialog.getName().replace(' ', '_'));
+ ap.paintAlignment(false, false);
+ }
+ sequence.setDescription(dialog.getDescription());
+ ap.av.firePropertyChange("alignment", null,
+ ap.av.getAlignment().getSequences());
+ }
+ });
}
/**
}
/**
- * DOCUMENT ME!
- *
- * @param e
- * DOCUMENT ME!
+ * Offers a colour chooser and sets the selected colour as the group outline
*/
protected void outline_actionPerformed()
{
- SequenceGroup sg = getGroup();
- Color col = JColorChooser.showDialog(this,
- MessageManager.getString("label.select_outline_colour"),
- Color.BLUE);
-
- if (col != null)
+ String title = MessageManager
+ .getString("label.select_outline_colour");
+ ColourChooserListener listener = new ColourChooserListener()
{
- sg.setOutlineColour(col);
- }
-
- refresh();
+ @Override
+ public void colourSelected(Color c)
+ {
+ getGroup().setOutlineColour(c);
+ refresh();
+ }
+ };
+ JalviewColourChooser.showColourChooser(Desktop.getDesktop(),
+ title, Color.BLUE, listener);
}
/**
public void copy_actionPerformed()
{
- ap.alignFrame.copy_actionPerformed(null);
+ ap.alignFrame.copy_actionPerformed();
}
public void cut_actionPerformed()
{
- ap.alignFrame.cut_actionPerformed(null);
+ ap.alignFrame.cut_actionPerformed();
}
void changeCase(ActionEvent e)
*/
if (!seqs.isEmpty())
{
- if (ap.getSeqPanel().seqCanvas.getFeatureRenderer()
- .amendFeatures(seqs, features, true, ap))
- {
- ap.alignFrame.setShowSeqFeatures(true);
- ap.av.setSearchResults(null); // clear highlighting
- ap.repaint(); // draw new/amended features
- }
+ new FeatureEditor(ap, seqs, features, true).showDialog();
}
}
}
}
- public void editSequence_actionPerformed(ActionEvent actionEvent)
+ /**
+ * Shows a dialog where sequence characters may be edited. Any changes are
+ * applied, and added as an available 'Undo' item in the edit commands
+ * history.
+ */
+ public void editSequence_actionPerformed()
{
SequenceGroup sg = ap.av.getSelectionGroup();
}
EditNameDialog dialog = new EditNameDialog(
- seq.getSequenceAsString(sg.getStartRes(),
- sg.getEndRes() + 1),
- null, MessageManager.getString("label.edit_sequence"), null,
+ seq.getSequenceAsString(sg.getStartRes(), sg.getEndRes() + 1),
+ null, MessageManager.getString("label.edit_sequence"), null);
+ dialog.showDialog(ap.alignFrame,
MessageManager.getString("label.edit_sequence"),
- ap.alignFrame);
-
- if (dialog.accept)
- {
- EditCommand editCommand = new EditCommand(
- MessageManager.getString("label.edit_sequences"),
- Action.REPLACE,
- dialog.getName().replace(' ', ap.av.getGapCharacter()),
- sg.getSequencesAsArray(ap.av.getHiddenRepSequences()),
- sg.getStartRes(), sg.getEndRes() + 1, ap.av.getAlignment());
-
- ap.alignFrame.addHistoryItem(editCommand);
-
- ap.av.firePropertyChange("alignment", null,
- ap.av.getAlignment().getSequences());
- }
+ new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ EditCommand editCommand = new EditCommand(
+ MessageManager.getString("label.edit_sequences"),
+ Action.REPLACE,
+ dialog.getName().replace(' ',
+ ap.av.getGapCharacter()),
+ sg.getSequencesAsArray(
+ ap.av.getHiddenRepSequences()),
+ sg.getStartRes(), sg.getEndRes() + 1,
+ ap.av.getAlignment());
+ ap.alignFrame.addHistoryItem(editCommand);
+ ap.av.firePropertyChange("alignment", null,
+ ap.av.getAlignment().getSequences());
+ }
+ });
}
}