X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=2a804ad6ea1abdb60f50a4ce0132ad1abbc17cce;hb=b58a17a47d215b541be4d8057eb88072c599087e;hp=0a686d239734966754d7a6296448a5857f65e0a0;hpb=58afea88095280d807e5c2ac8b9155de5ba3503c;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 0a686d2..2a804ad 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -34,6 +34,7 @@ import jalview.api.analysis.ScoreModelI; import jalview.bin.Cache; import jalview.commands.CommandI; import jalview.commands.EditCommand; +import jalview.commands.EditCommand.Action; import jalview.commands.OrderCommand; import jalview.commands.RemoveGapColCommand; import jalview.commands.RemoveGapsCommand; @@ -279,7 +280,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * Make a new AlignFrame from exisiting alignmentPanels + * Make a new AlignFrame from existing alignmentPanels * * @param ap * AlignmentPanel @@ -334,6 +335,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, setMenusFromViewport(viewport); buildSortByAnnotationScoresMenu(); buildTreeMenu(); + if (viewport.wrapAlignment) { wrapMenuItem_actionPerformed(null); @@ -376,7 +378,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .getKeyCode() >= KeyEvent.VK_NUMPAD0 && evt .getKeyCode() <= KeyEvent.VK_NUMPAD9)) && Character.isDigit(evt.getKeyChar())) + { alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + } switch (evt.getKeyCode()) { @@ -388,32 +392,48 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, case KeyEvent.VK_DOWN: if (evt.isAltDown() || !viewport.cursorMode) + { moveSelectedSequences(false); + } if (viewport.cursorMode) + { alignPanel.seqPanel.moveCursor(0, 1); + } break; case KeyEvent.VK_UP: if (evt.isAltDown() || !viewport.cursorMode) + { moveSelectedSequences(true); + } if (viewport.cursorMode) + { alignPanel.seqPanel.moveCursor(0, -1); + } break; case KeyEvent.VK_LEFT: if (evt.isAltDown() || !viewport.cursorMode) + { slideSequences(false, alignPanel.seqPanel.getKeyboardNo1()); + } else + { alignPanel.seqPanel.moveCursor(-1, 0); + } break; case KeyEvent.VK_RIGHT: if (evt.isAltDown() || !viewport.cursorMode) + { slideSequences(true, alignPanel.seqPanel.getKeyboardNo1()); + } else + { alignPanel.seqPanel.moveCursor(1, 0); + } break; case KeyEvent.VK_SPACE: @@ -505,14 +525,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, case KeyEvent.VK_F1: try { - ClassLoader cl = jalview.gui.Desktop.class.getClassLoader(); - java.net.URL url = javax.help.HelpSet.findHelpSet(cl, - "help/help"); - javax.help.HelpSet hs = new javax.help.HelpSet(cl, url); - - javax.help.HelpBroker hb = hs.createHelpBroker(); - hb.setCurrentID("home"); - hb.setDisplayed(true); + Help.showHelpWindow(); } catch (Exception ex) { ex.printStackTrace(); @@ -557,14 +570,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { case KeyEvent.VK_LEFT: if (evt.isAltDown() || !viewport.cursorMode) + { viewport.firePropertyChange("alignment", null, viewport .getAlignment().getSequences()); + } break; case KeyEvent.VK_RIGHT: if (evt.isAltDown() || !viewport.cursorMode) + { viewport.firePropertyChange("alignment", null, viewport .getAlignment().getSequences()); + } break; } } @@ -729,6 +746,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, scaleLeft.setVisible(av.wrapAlignment); scaleRight.setVisible(av.wrapAlignment); annotationPanelMenuItem.setState(av.showAnnotation); + /* + * Show/hide annotations only enabled if annotation panel is shown + */ + showAllSeqAnnotations.setEnabled(annotationPanelMenuItem.getState()); + hideAllSeqAnnotations.setEnabled(annotationPanelMenuItem.getState()); + showAllAlAnnotations.setEnabled(annotationPanelMenuItem.getState()); + hideAllAlAnnotations.setEnabled(annotationPanelMenuItem.getState()); viewBoxesMenuItem.setSelected(av.showBoxes); viewTextMenuItem.setSelected(av.showText); showNonconservedMenuItem.setSelected(av.getShowUnconserved()); @@ -819,8 +843,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (progressBarHandlers == null || !progressBars.contains(new Long(id))) { - throw new Error( - "call setProgressBar before registering the progress bar's handler."); + throw new Error(MessageManager.getString("error.call_setprogressbar_before_registering_handler")); } progressBarHandlers.put(new Long(id), handler); final JPanel progressPanel = (JPanel) progressBars.get(new Long(id)); @@ -836,10 +859,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void actionPerformed(ActionEvent e) { handler.cancelActivity(id); - us.setProgressBar( - "Cancelled " - + ((JLabel) progressPanel.getComponent(0)) - .getText(), id); + us.setProgressBar(MessageManager.formatMessage("label.cancelled_params", new String[]{((JLabel) progressPanel.getComponent(0)).getText()}), id); } }); progressPanel.add(cancel, BorderLayout.EAST); @@ -1002,7 +1022,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, currentFileFormat, false); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle("Save Alignment to file"); + chooser.setDialogTitle(MessageManager.getString("label.save_alignment_to_file")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(this); @@ -1241,6 +1261,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel.makeEPS(f); } + public void createSVG(File f) + { + alignPanel.makeSVG(f); + } @Override public void pageSetup_actionPerformed(ActionEvent e) { @@ -1387,7 +1411,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.historyList.size() > 0) { undoMenuItem.setEnabled(true); - CommandI command = (CommandI) viewport.historyList.peek(); + CommandI command = viewport.historyList.peek(); undoMenuItem.setText(MessageManager.formatMessage( "label.undo_command", new String[] { command.getDescription() })); @@ -1402,7 +1426,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { redoMenuItem.setEnabled(true); - CommandI command = (CommandI) viewport.redoList.peek(); + CommandI command = viewport.redoList.peek(); redoMenuItem.setText(MessageManager.formatMessage( "label.redo_command", new String[] { command.getDescription() })); @@ -1463,8 +1487,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, protected void undoMenuItem_actionPerformed(ActionEvent e) { if (viewport.historyList.empty()) + { return; - CommandI command = (CommandI) viewport.historyList.pop(); + } + CommandI command = viewport.historyList.pop(); viewport.redoList.push(command); command.undoCommand(getViewAlignments()); @@ -1503,7 +1529,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } - CommandI command = (CommandI) viewport.redoList.pop(); + CommandI command = viewport.redoList.pop(); viewport.historyList.push(command); command.doCommand(getViewAlignments()); @@ -1616,37 +1642,53 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, for (int i = 0; i < viewport.getAlignment().getHeight(); i++) { if (!sg.contains(viewport.getAlignment().getSequenceAt(i))) + { invertGroup.add(viewport.getAlignment().getSequenceAt(i)); + } } SequenceI[] seqs1 = sg.toArray(new SequenceI[0]); SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; for (int i = 0; i < invertGroup.size(); i++) + { seqs2[i] = (SequenceI) invertGroup.elementAt(i); + } SlideSequencesCommand ssc; if (right) + { ssc = new SlideSequencesCommand("Slide Sequences", seqs2, seqs1, size, viewport.getGapCharacter()); + } else + { ssc = new SlideSequencesCommand("Slide Sequences", seqs1, seqs2, size, viewport.getGapCharacter()); + } int groupAdjustment = 0; if (ssc.getGapsInsertedBegin() && right) { if (viewport.cursorMode) + { alignPanel.seqPanel.moveCursor(size, 0); + } else + { groupAdjustment = size; + } } else if (!ssc.getGapsInsertedBegin() && !right) { if (viewport.cursorMode) + { alignPanel.seqPanel.moveCursor(-size, 0); + } else + { groupAdjustment = -size; + } } if (groupAdjustment != 0) @@ -1667,7 +1709,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } if (!appendHistoryItem) + { addHistoryItem(ssc); + } repaint(); } @@ -1947,7 +1991,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // ///// // ADD HISTORY ITEM // - addHistoryItem(new EditCommand("Add sequences", EditCommand.PASTE, + addHistoryItem(new EditCommand( + MessageManager.getString("label.add_sequences"), + Action.PASTE, sequences, 0, alignment.getWidth(), alignment)); } // Add any annotations attached to sequences @@ -2002,7 +2048,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { AlignmentAnnotation sann[] = sequences[i].getAnnotation(); if (sann == null) + { continue; + } for (int avnum = 0; avnum < alview.length; avnum++) { if (alview[avnum] != alignment) @@ -2182,17 +2230,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } - Vector seqs = new Vector(); + List seqs = new ArrayList(sg.getSize()); SequenceI seq; for (int i = 0; i < sg.getSize(); i++) { seq = sg.getSequenceAt(i); - seqs.addElement(seq); + seqs.add(seq); } - // If the cut affects all sequences, remove highlighted columns + // If the cut affects all sequences, warn, remove highlighted columns if (sg.getSize() == viewport.getAlignment().getHeight()) { + int confirm = JOptionPane.showConfirmDialog(this, + MessageManager.getString("warn.delete_all"), // $NON-NLS-1$ + MessageManager.getString("label.delete_all"), // $NON-NLS-1$ + JOptionPane.OK_CANCEL_OPTION); + + if (confirm == JOptionPane.CANCEL_OPTION + || confirm == JOptionPane.CLOSED_OPTION) + { + return; + } viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); } @@ -2200,14 +2258,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, SequenceI[] cut = new SequenceI[seqs.size()]; for (int i = 0; i < seqs.size(); i++) { - cut[i] = (SequenceI) seqs.elementAt(i); + cut[i] = seqs.get(i); } /* * //ADD HISTORY ITEM */ - addHistoryItem(new EditCommand("Cut Sequences", EditCommand.CUT, cut, - sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, + addHistoryItem(new EditCommand( + MessageManager.getString("label.cut_sequences"), Action.CUT, + cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, viewport.getAlignment())); viewport.setSelectionGroup(null); @@ -2610,7 +2669,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, boolean addFirstIndex = false; if (viewTitle == null || viewTitle.trim().length() == 0) { - viewTitle = "View"; + viewTitle = MessageManager.getString("action.view"); addFirstIndex = true; } else @@ -3037,16 +3096,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * DOCUMENT ME! + * Action on toggle of the 'Show annotations' menu item. This shows or hides + * the annotations panel as a whole. + * + * The options to show/hide all annotations should be enabled when the panel + * is shown, and disabled when the panel is hidden. * * @param e - * DOCUMENT ME! */ @Override public void annotationPanelMenuItem_actionPerformed(ActionEvent e) { - viewport.setShowAnnotation(annotationPanelMenuItem.isSelected()); - alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected()); + final boolean setVisible = annotationPanelMenuItem.isSelected(); + viewport.setShowAnnotation(setVisible); + alignPanel.setAnnotationVisible(setVisible); + this.showAllSeqAnnotations.setEnabled(setVisible); + this.hideAllSeqAnnotations.setEnabled(setVisible); + this.showAllAlAnnotations.setEnabled(setVisible); + this.hideAllAlAnnotations.setEnabled(setVisible); } @Override @@ -4025,6 +4092,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, tm.setText(title);// tm.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { NewTreePanel(type, (String) pwtype, title); @@ -4116,6 +4184,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ msa = viewport.getAlignmentView(true); } + else if (viewport.getSelectionGroup() != null + && viewport.getSelectionGroup().getSize() == 1) + { + int option = JOptionPane + .showConfirmDialog( +this, + "More than one sequece group selection is required for this Job, click \n'Cancel' to edit your selection or 'Ok' to submit the entire sequence.", + "Invalid selection", + JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) + { + msa = viewport.getAlignmentView(false); + } + + } else { /* @@ -4331,11 +4414,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // object broker mechanism. final Vector wsmenu = new Vector(); final IProgressIndicator af = me; - final JMenu msawsmenu = new JMenu(MessageManager.getString("label.alignment")); - final JMenu secstrmenu = new JMenu(MessageManager.getString("label.secondary_structure_prediction")); - final JMenu seqsrchmenu = new JMenu(MessageManager.getString("label.sequence_database_search")); - final JMenu analymenu = new JMenu(MessageManager.getString("label.analysis")); - final JMenu dismenu = new JMenu(MessageManager.getString("label.protein_disorder")); + final JMenu msawsmenu = new JMenu("Alignment"); + final JMenu secstrmenu = new JMenu( + "Secondary Structure Prediction"); + final JMenu seqsrchmenu = new JMenu("Sequence Database Search"); + final JMenu analymenu = new JMenu("Analysis"); + final JMenu dismenu = new JMenu("Protein Disorder"); + // final JMenu msawsmenu = new + // JMenu(MessageManager.getString("label.alignment")); + // final JMenu secstrmenu = new + // JMenu(MessageManager.getString("label.secondary_structure_prediction")); + // final JMenu seqsrchmenu = new + // JMenu(MessageManager.getString("label.sequence_database_search")); + // final JMenu analymenu = new + // JMenu(MessageManager.getString("label.analysis")); + // final JMenu dismenu = new + // JMenu(MessageManager.getString("label.protein_disorder")); // JAL-940 - only show secondary structure prediction services from // the legacy server if (// Cache.getDefault("SHOW_JWS1_SERVICES", true) @@ -4602,7 +4696,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void run() { final long sttime = System.currentTimeMillis(); - ths.setProgressBar("Searching for sequences from " + fsrc, sttime); + ths.setProgressBar(MessageManager.formatMessage("status.searching_for_sequences_from", new String[]{fsrc}), sttime); try { Alignment ds = ths.getViewport().getAlignment().getDataset(); // update @@ -4620,7 +4714,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (ds.getSequences() == null || !ds.getSequences().contains( sprods[s].getDatasetSequence())) + { ds.addSequence(sprods[s].getDatasetSequence()); + } sprods[s].updatePDBIds(); } Alignment al = new Alignment(sprods); @@ -4656,7 +4752,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, jalview.bin.Cache.log.error("Error when finding crossreferences", e); } - ths.setProgressBar("Finished searching for sequences from " + fsrc, + ths.setProgressBar(MessageManager.formatMessage("status.finished_searching_for_sequences_from", new String[]{fsrc}), sttime); } @@ -4982,7 +5078,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { PDBEntry pe = new AssociatePdbFileWithSeq() .associatePdbWithSeq((String) fm[0], - (String) fm[1], toassoc, false); + (String) fm[1], toassoc, false, + Desktop.instance); if (pe != null) { System.err.println("Associated file : " @@ -5002,14 +5099,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, "AUTOASSOCIATE_PDBANDSEQS_IGNOREOTHERS", false) || JOptionPane .showConfirmDialog( this, - MessageManager + ""+MessageManager .formatMessage( "label.ignore_unmatched_dropped_files_info", new String[] { Integer.valueOf( filesnotmatched .size()) - .toString() }), + .toString() })+"", MessageManager .getString("label.ignore_unmatched_dropped_files"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)) @@ -5312,6 +5409,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, trimrs.setSelected(Cache.getDefault("TRIM_FETCHED_DATASET_SEQS", true)); trimrs.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { trimrs.setSelected(trimrs.isSelected()); @@ -5415,8 +5513,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } }); - fetchr.setToolTipText("" - + JvSwingUtils.wrapTooltip(MessageManager.formatMessage("label.fetch_retrieve_from", new String[]{src.getDbName()}))); + fetchr.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage("label.fetch_retrieve_from", new String[]{src.getDbName()}))); dfetch.add(fetchr); comp++; } @@ -5449,8 +5546,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } }); - fetchr.setToolTipText("" - + JvSwingUtils.wrapTooltip(MessageManager.formatMessage("label.fetch_retrieve_from_all_sources", new String[]{Integer.valueOf(otherdb.size()).toString(), src.getDbSource(), src.getDbName()}))); + fetchr.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage("label.fetch_retrieve_from_all_sources", new String[]{Integer.valueOf(otherdb.size()).toString(), src.getDbSource(), src.getDbName()}))); dfetch.add(fetchr); comp++; // and then build the rest of the individual menus @@ -5687,8 +5783,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (!viewport.getSequenceSetId().equals( alignmentPanel.av.getSequenceSetId())) { - throw new Error( - "Implementation error: cannot show a view from another alignment in an AlignFrame."); + throw new Error(MessageManager.getString("error.implementation_error_cannot_show_view_alignment_frame")); } if (tabbedPane != null & alignPanels.indexOf(alignmentPanel) != tabbedPane @@ -5697,6 +5792,45 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, tabbedPane.setSelectedIndex(alignPanels.indexOf(alignmentPanel)); } } + + /** + * Action on selection of menu options to Show or Hide annotations. + * + * @param visible + * @param forSequences + * update sequence-related annotations + * @param forAlignment + * update non-sequence-related annotations + */ + @Override + protected void setAnnotationsVisibility(boolean visible, + boolean forSequences, boolean forAlignment) + { + for (AlignmentAnnotation aa : alignPanel.getAlignment() + .getAlignmentAnnotation()) + { + boolean apply = (aa.sequenceRef == null && forAlignment) + || (aa.sequenceRef != null && forSequences); + if (apply) + { + aa.visible = visible; + } + } + alignPanel.validateAnnotationDimensions(false); + alignPanel.alignmentChanged(); + } + + /** + * Store selected annotation sort order for the view and repaint. + */ + @Override + protected void sortAnnotations_actionPerformed() + { + this.alignPanel.av.setSortAnnotationsBy(getAnnotationSortOrder()); + this.alignPanel.av + .setShowAutocalculatedAbove(isShowAutoCalculatedAbove()); + alignPanel.paintAlignment(true); + } } class PrintThread extends Thread