/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
*/
package jalview.gui;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.print.PageFormat;
+import java.awt.print.PrinterJob;
+import java.beans.PropertyChangeEvent;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Deque;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JEditorPane;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
+import javax.swing.JLayeredPane;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+
import jalview.analysis.AAFrequency;
import jalview.analysis.AlignmentSorter;
import jalview.analysis.AlignmentUtils;
import jalview.analysis.Conservation;
import jalview.analysis.CrossRef;
-import jalview.analysis.NJTree;
+import jalview.analysis.Dna;
import jalview.analysis.ParseProperties;
import jalview.analysis.SequenceIdMatcher;
import jalview.api.AlignViewControllerGuiI;
import jalview.api.AlignViewControllerI;
+import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
+import jalview.api.SplitContainerI;
+import jalview.api.ViewStyleI;
import jalview.api.analysis.ScoreModelI;
import jalview.bin.Cache;
import jalview.commands.CommandI;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
+import jalview.gui.ViewSelectionMenu.ViewSetProvider;
import jalview.io.AlignmentProperties;
import jalview.io.AnnotationFile;
import jalview.io.BioJsHTMLOutput;
import jalview.schemes.UserColourScheme;
import jalview.schemes.ZappoColourScheme;
import jalview.util.MessageManager;
+import jalview.viewmodel.AlignmentViewport;
import jalview.ws.jws1.Discoverer;
import jalview.ws.jws2.Jws2Discoverer;
import jalview.ws.jws2.jabaws2.Jws2Instance;
import jalview.ws.seqfetcher.DbSourceProxy;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.print.PageFormat;
-import java.awt.print.PrinterJob;
-import java.beans.PropertyChangeEvent;
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.JButton;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JEditorPane;
-import javax.swing.JInternalFrame;
-import javax.swing.JLabel;
-import javax.swing.JLayeredPane;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JProgressBar;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
-
/**
* DOCUMENT ME!
*
IProgressIndicator, AlignViewControllerGuiI
{
- /** DOCUMENT ME!! */
public static final int DEFAULT_WIDTH = 700;
- /** DOCUMENT ME!! */
public static final int DEFAULT_HEIGHT = 500;
+ /*
+ * The currently displayed panel (selected tabbed view if more than one)
+ */
public AlignmentPanel alignPanel;
AlignViewport viewport;
public AlignViewControllerI avc;
- Vector alignPanels = new Vector();
+ List<AlignmentPanel> alignPanels = new ArrayList<AlignmentPanel>();
/**
* Last format used to load or save alignments in this window
addKeyListener();
+ final List<AlignmentPanel> selviews = new ArrayList<AlignmentPanel>();
+ final List<AlignmentPanel> origview = new ArrayList<AlignmentPanel>();
+ ViewSelectionMenu vsel = new ViewSelectionMenu("Transfer colours from",
+ new ViewSetProvider()
+ {
+
+ @Override
+ public AlignmentPanel[] getAllAlignmentPanels()
+ {
+ origview.clear();
+ origview.add(alignPanel);
+ return Desktop.getAlignmentPanels(null);
+ }
+ }, selviews, new ItemListener()
+ {
+
+ @Override
+ public void itemStateChanged(ItemEvent e)
+ {
+ if (origview.size() > 0)
+ {
+ ViewStyleI vs = selviews.get(0).getAlignViewport()
+ .getViewStyle();
+ origview.get(0).getAlignViewport().setViewStyle(vs);
+ AlignViewportI complement = origview.get(0)
+ .getAlignViewport().getCodingComplement();
+ if (complement != null)
+ {
+ AlignFrame af = Desktop.getAlignFrameFor(complement);
+ if (complement.isNucleotide())
+ {
+ complement.setViewStyle(vs);
+ vs.setCharWidth(vs.getCharWidth() / 3);
+ }
+ else
+ {
+ int rw = vs.getCharWidth();
+ vs.setCharWidth(rw * 3);
+ complement.setViewStyle(vs);
+ vs.setCharWidth(rw);
+ }
+ af.alignPanel.updateLayout();
+ af.setMenusForViewport();
+ }
+ origview.get(0).updateLayout();
+ origview.get(0).setSelected(true);
+ origview.get(0).alignFrame.setMenusForViewport();
+
+ }
+ }
+ });
+ formatMenu.add(vsel);
+
}
/**
public void setFileName(String file, String format)
{
fileName = file;
- currentFileFormat = format;
+ setFileFormat(format);
reload.setEnabled(true);
}
+ /**
+ * Add a KeyListener with handlers for various KeyPressed and KeyReleased
+ * events
+ */
void addKeyListener()
{
addKeyListener(new KeyAdapter()
avc = new jalview.controller.AlignViewController(this, viewport,
alignPanel);
- alignPanels.addElement(ap);
+ alignPanels.add(ap);
PaintRefresher.Register(ap, ap.av.getSequenceSetId());
expandViews.setEnabled(true);
gatherViews.setEnabled(true);
tabbedPane.setVisible(true);
- AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement();
+ AlignmentPanel first = alignPanels.get(0);
tabbedPane.addTab(first.av.viewName, first);
this.getContentPane().add(tabbedPane, BorderLayout.CENTER);
}
}).start();
}
+ /**
+ * Configure menu items that vary according to whether the alignment is
+ * nucleotide or protein
+ *
+ * @param nucleotide
+ */
public void setGUINucleotide(boolean nucleotide)
{
showTranslation.setVisible(nucleotide);
showGroupConservation.setEnabled(!nucleotide);
rnahelicesColour.setEnabled(nucleotide);
purinePyrimidineColour.setEnabled(nucleotide);
- // Remember AlignFrame always starts as protein
- // if (!nucleotide)
- // {
- // showTr
- // calculateMenu.remove(calculateMenu.getItemCount() - 2);
- // }
+ showComplementMenuItem.setText(MessageManager
+ .getString(nucleotide ? "label.protein" : "label.nucleotide"));
+ setColourSelected(jalview.bin.Cache.getDefault(
+ nucleotide ? Preferences.DEFAULT_COLOUR_NUC
+ : Preferences.DEFAULT_COLOUR_PROT, "None"));
}
/**
- * set up menus for the currently viewport. This may be called after any
+ * set up menus for the current viewport. This may be called after any
* operation that affects the data in the current view (selection changed,
* etc) to update the menus to reflect the new state.
*/
public void actionPerformed(ActionEvent e)
{
handler.cancelActivity(id);
- us.setProgressBar(MessageManager.formatMessage("label.cancelled_params", new String[]{((JLabel) progressPanel.getComponent(0)).getText()}), id);
+ us.setProgressBar(MessageManager.formatMessage("label.cancelled_params", new Object[]{((JLabel) progressPanel.getComponent(0)).getText()}), id);
}
});
progressPanel.add(cancel, BorderLayout.EAST);
if (value == JalviewFileChooser.APPROVE_OPTION)
{
currentFileFormat = chooser.getSelectedFormat();
- if (currentFileFormat == null)
+ while (currentFileFormat == null)
{
JOptionPane
.showInternalMessageDialog(
MessageManager
.getString("label.file_format_not_specified"),
JOptionPane.WARNING_MESSAGE);
+ currentFileFormat = chooser.getSelectedFormat();
value = chooser.showSaveDialog(this);
- return;
+ if (value != JalviewFileChooser.APPROVE_OPTION)
+ {
+ return;
+ }
}
fileName = chooser.getSelectedFile().getPath();
this.setTitle(file);
statusBar.setText(MessageManager.formatMessage(
"label.successfully_saved_to_file_in_format",
- new String[]
+ new Object[]
{ fileName, format }));
} catch (Exception ex)
{
if (!success)
{
JOptionPane.showInternalMessageDialog(this, MessageManager
- .formatMessage("label.couldnt_save_file", new String[]
+ .formatMessage("label.couldnt_save_file", new Object[]
{ fileName }), MessageManager
.getString("label.error_saving_file"),
JOptionPane.WARNING_MESSAGE);
viewport.getAlignment(), omitHidden,
viewport.getColumnSelection()));
Desktop.addInternalFrame(cap, MessageManager.formatMessage(
- "label.alignment_output_command", new String[]
+ "label.alignment_output_command", new Object[]
{ e.getActionCommand() }), 600, 500);
} catch (OutOfMemoryError oom)
{
// setClosed(true) is called
for (int i = 0; i < alignPanels.size(); i++)
{
- AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i);
+ AlignmentPanel ap = alignPanels.get(i);
ap.closePanel();
}
}
}
/**
- * close alignPanel2 and shuffle tabs appropriately.
+ * Close the specified panel and close up tabs appropriately.
*
- * @param alignPanel2
+ * @param panelToClose
*/
- public void closeView(AlignmentPanel alignPanel2)
+ public void closeView(AlignmentPanel panelToClose)
{
int index = tabbedPane.getSelectedIndex();
- int closedindex = tabbedPane.indexOfComponent(alignPanel2);
- alignPanels.removeElement(alignPanel2);
- // Unnecessary
- // if (viewport == alignPanel2.av)
- // {
- // viewport = null;
- // }
- alignPanel2.closePanel();
- alignPanel2 = null;
+ int closedindex = tabbedPane.indexOfComponent(panelToClose);
+ alignPanels.remove(panelToClose);
+ panelToClose.closePanel();
+ panelToClose = null;
tabbedPane.removeTabAt(closedindex);
tabbedPane.validate();
void updateEditMenuBar()
{
- if (viewport.historyList.size() > 0)
+ if (viewport.getHistoryList().size() > 0)
{
undoMenuItem.setEnabled(true);
- CommandI command = viewport.historyList.peek();
+ CommandI command = viewport.getHistoryList().peek();
undoMenuItem.setText(MessageManager.formatMessage(
- "label.undo_command", new String[]
+ "label.undo_command", new Object[]
{ command.getDescription() }));
}
else
undoMenuItem.setText(MessageManager.getString("action.undo"));
}
- if (viewport.redoList.size() > 0)
+ if (viewport.getRedoList().size() > 0)
{
redoMenuItem.setEnabled(true);
- CommandI command = viewport.redoList.peek();
+ CommandI command = viewport.getRedoList().peek();
redoMenuItem.setText(MessageManager.formatMessage(
- "label.redo_command", new String[]
+ "label.redo_command", new Object[]
{ command.getDescription() }));
}
else
{
if (command.getSize() > 0)
{
- viewport.historyList.push(command);
- viewport.redoList.clear();
+ viewport.addToHistoryList(command);
+ viewport.clearRedoList();
updateEditMenuBar();
viewport.updateHiddenColumns();
// viewport.hasHiddenColumns = (viewport.getColumnSelection() != null
{
if (alignPanels != null)
{
- Enumeration e = alignPanels.elements();
AlignmentI[] als = new AlignmentI[alignPanels.size()];
- for (int i = 0; e.hasMoreElements(); i++)
+ int i = 0;
+ for (AlignmentPanel ap : alignPanels)
{
- als[i] = ((AlignmentPanel) e.nextElement()).av.getAlignment();
+ als[i++] = ap.av.getAlignment();
}
return als;
}
@Override
protected void undoMenuItem_actionPerformed(ActionEvent e)
{
- if (viewport.historyList.empty())
+ if (viewport.getHistoryList().isEmpty())
{
return;
}
- CommandI command = viewport.historyList.pop();
- viewport.redoList.push(command);
+ CommandI command = viewport.getHistoryList().pop();
+ viewport.addToRedoList(command);
command.undoCommand(getViewAlignments());
- AlignViewport originalSource = getOriginatingSource(command);
+ AlignmentViewport originalSource = getOriginatingSource(command);
updateEditMenuBar();
if (originalSource != null)
@Override
protected void redoMenuItem_actionPerformed(ActionEvent e)
{
- if (viewport.redoList.size() < 1)
+ if (viewport.getRedoList().size() < 1)
{
return;
}
- CommandI command = viewport.redoList.pop();
- viewport.historyList.push(command);
+ CommandI command = viewport.getRedoList().pop();
+ viewport.addToHistoryList(command);
command.doCommand(getViewAlignments());
- AlignViewport originalSource = getOriginatingSource(command);
+ AlignmentViewport originalSource = getOriginatingSource(command);
updateEditMenuBar();
if (originalSource != null)
}
}
- AlignViewport getOriginatingSource(CommandI command)
+ AlignmentViewport getOriginatingSource(CommandI command)
{
- AlignViewport originalSource = null;
+ AlignmentViewport originalSource = null;
// For sequence removal and addition, we need to fire
// the property change event FROM the viewport where the
// original alignment was altered
{
EditCommand editCommand = (EditCommand) command;
al = editCommand.getAlignment();
- Vector comps = (Vector) PaintRefresher.components.get(viewport
+ List<Component> comps = PaintRefresher.components.get(viewport
.getSequenceSetId());
- for (int i = 0; i < comps.size(); i++)
+ for (Component comp : comps)
{
- if (comps.elementAt(i) instanceof AlignmentPanel)
+ if (comp instanceof AlignmentPanel)
{
- if (al == ((AlignmentPanel) comps.elementAt(i)).av.getAlignment())
+ if (al == ((AlignmentPanel) comp).av.getAlignment())
{
- originalSource = ((AlignmentPanel) comps.elementAt(i)).av;
+ originalSource = ((AlignmentPanel) comp).av;
break;
}
}
synchronized void slideSequences(boolean right, int size)
{
- List<SequenceI> sg = new Vector();
+ List<SequenceI> sg = new ArrayList<SequenceI>();
if (viewport.cursorMode)
{
sg.add(viewport.getAlignment().getSequenceAt(
return;
}
- Vector invertGroup = new Vector();
+ List<SequenceI> invertGroup = new ArrayList<SequenceI>();
- for (int i = 0; i < viewport.getAlignment().getHeight(); i++)
+ for (SequenceI seq : viewport.getAlignment().getSequences())
{
- if (!sg.contains(viewport.getAlignment().getSequenceAt(i)))
+ if (!sg.contains(seq))
{
- invertGroup.add(viewport.getAlignment().getSequenceAt(i));
+ invertGroup.add(seq);
}
}
SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
for (int i = 0; i < invertGroup.size(); i++)
{
- seqs2[i] = (SequenceI) invertGroup.elementAt(i);
+ seqs2[i] = invertGroup.get(i);
}
SlideSequencesCommand ssc;
}
boolean appendHistoryItem = false;
- if (viewport.historyList != null && viewport.historyList.size() > 0
- && viewport.historyList.peek() instanceof SlideSequencesCommand)
+ Deque<CommandI> historyList = viewport.getHistoryList();
+ if (historyList != null
+ && historyList.size() > 0
+ && historyList.peek() instanceof SlideSequencesCommand)
{
appendHistoryItem = ssc
- .appendSlideCommand((SlideSequencesCommand) viewport.historyList
+ .appendSlideCommand((SlideSequencesCommand) historyList
.peek());
}
Desktop.jalviewClipboard = new Object[]
{ seqs, viewport.getAlignment().getDataset(), hiddenColumns };
statusBar.setText(MessageManager.formatMessage(
- "label.copied_sequences_to_clipboard", new String[]
+ "label.copied_sequences_to_clipboard", new Object[]
{ Integer.valueOf(seqs.length).toString() }));
}
alignment.getSequences());
if (alignPanels != null)
{
- for (AlignmentPanel ap : ((Vector<AlignmentPanel>) alignPanels))
+ for (AlignmentPanel ap : alignPanels)
{
ap.validateAnnotationDimensions(false);
}
return;
}
- List<SequenceI> seqs = new ArrayList<SequenceI>(sg.getSize());
- SequenceI seq;
- for (int i = 0; i < sg.getSize(); i++)
- {
- seq = sg.getSequenceAt(i);
- seqs.add(seq);
- }
-
- // If the cut affects all sequences, warn, remove highlighted columns
+ /*
+ * If the cut affects all sequences, warn, remove highlighted columns
+ */
if (sg.getSize() == viewport.getAlignment().getHeight())
{
int confirm = JOptionPane.showConfirmDialog(this,
sg.getEndRes() + 1);
}
- SequenceI[] cut = new SequenceI[seqs.size()];
- for (int i = 0; i < seqs.size(); i++)
- {
- cut[i] = seqs.get(i);
- }
+ SequenceI[] cut = sg.getSequences()
+ .toArray(new SequenceI[sg.getSize()]);
- /*
- * //ADD HISTORY ITEM
- */
addHistoryItem(new EditCommand(
MessageManager.getString("label.cut_sequences"), Action.CUT,
cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1,
addHistoryItem(removeGapCols);
statusBar.setText(MessageManager.formatMessage(
- "label.removed_empty_columns", new String[]
+ "label.removed_empty_columns", new Object[]
{ Integer.valueOf(removeGapCols.getSize()).toString() }));
// This is to maintain viewport position on first residue
.getSequences());
}
- // else
- {
- // if (justifySeqs>0)
- {
- // alignment.justify(justifySeqs!=RIGHT_JUSTIFY);
- }
- }
-
- // }
-
/**
* DOCUMENT ME!
*
new Finder();
}
- @Override
- public void newView_actionPerformed(ActionEvent e)
- {
- newView(true);
- }
-
- /**
- *
- * @param copyAnnotation
- * if true then duplicate all annnotation, groups and settings
- * @return new alignment panel, already displayed.
- */
- public AlignmentPanel newView(boolean copyAnnotation)
- {
- return newView(null, copyAnnotation);
- }
-
/**
- *
- * @param viewTitle
- * title of newly created view
- * @return new alignment panel, already displayed.
+ * Create a new view of the current alignment.
*/
- public AlignmentPanel newView(String viewTitle)
+ @Override
+ public void newView_actionPerformed(ActionEvent e)
{
- return newView(viewTitle, true);
+ newView(null, true);
}
/**
+ * Creates and shows a new view of the current alignment.
*
* @param viewTitle
- * title of newly created view
+ * title of newly created view; if null, one will be generated
* @param copyAnnotation
* if true then duplicate all annnotation, groups and settings
* @return new alignment panel, already displayed.
*/
public AlignmentPanel newView(String viewTitle, boolean copyAnnotation)
{
+ /*
+ * Create a new AlignmentPanel (with its own, new Viewport)
+ */
AlignmentPanel newap = new Jalview2XML().copyAlignPanel(alignPanel,
true);
if (!copyAnnotation)
{
- // just remove all the current annotation except for the automatic stuff
+ /*
+ * remove all groups and annotation except for the automatic stuff
+ */
newap.av.getAlignment().deleteAllGroups();
- for (AlignmentAnnotation alan : newap.av.getAlignment()
- .getAlignmentAnnotation())
- {
- if (!alan.autoCalculated)
- {
- newap.av.getAlignment().deleteAnnotation(alan);
- }
- ;
- }
+ newap.av.getAlignment().deleteAllAnnotations(false);
}
- newap.av.gatherViewsHere = false;
+ newap.av.setGatherViewsHere(false);
if (viewport.viewName == null)
{
- viewport.viewName = "Original";
+ viewport.viewName = MessageManager
+ .getString("label.view_name_original");
}
- newap.av.historyList = viewport.historyList;
- newap.av.redoList = viewport.redoList;
+ /*
+ * Views share the same edits, undo and redo stacks, mappings.
+ */
+ newap.av.setHistoryList(viewport.getHistoryList());
+ newap.av.setRedoList(viewport.getRedoList());
+ newap.av.getAlignment().setCodonFrames(
+ viewport.getAlignment().getCodonFrames());
+
+ newap.av.viewName = getNewViewName(viewTitle);
+ addAlignmentPanel(newap, true);
+ newap.alignmentChanged();
+
+ if (alignPanels.size() == 2)
+ {
+ viewport.setGatherViewsHere(true);
+ }
+ tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
+ return newap;
+ }
+
+ /**
+ * Make a new name for the view, ensuring it is unique within the current
+ * sequenceSetId. (This used to be essential for Jalview Project archives, but
+ * these now use viewId. Unique view names are still desirable for usability.)
+ *
+ * @param viewTitle
+ * @return
+ */
+ protected String getNewViewName(String viewTitle)
+ {
int index = Desktop.getViewCount(viewport.getSequenceSetId());
- // make sure the new view has a unique name - this is essential for Jalview
- // 2 archives
boolean addFirstIndex = false;
if (viewTitle == null || viewTitle.trim().length() == 0)
{
index = 1;// we count from 1 if given a specific name
}
String newViewName = viewTitle + ((addFirstIndex) ? " " + index : "");
- Vector comps = (Vector) PaintRefresher.components.get(viewport
+
+ List<Component> comps = PaintRefresher.components.get(viewport
.getSequenceSetId());
- Vector existingNames = new Vector();
- for (int i = 0; i < comps.size(); i++)
- {
- if (comps.elementAt(i) instanceof AlignmentPanel)
- {
- AlignmentPanel ap = (AlignmentPanel) comps.elementAt(i);
- if (!existingNames.contains(ap.av.viewName))
- {
- existingNames.addElement(ap.av.viewName);
- }
- }
- }
+
+ List<String> existingNames = getExistingViewNames(comps);
while (existingNames.contains(newViewName))
{
newViewName = viewTitle + " " + (++index);
}
+ return newViewName;
+ }
- newap.av.viewName = newViewName;
-
- addAlignmentPanel(newap, true);
- newap.alignmentChanged();
-
- if (alignPanels.size() == 2)
+ /**
+ * Returns a list of distinct view names found in the given list of
+ * components. View names are held on the viewport of an AlignmentPanel.
+ *
+ * @param comps
+ * @return
+ */
+ protected List<String> getExistingViewNames(List<Component> comps)
+ {
+ List<String> existingNames = new ArrayList<String>();
+ for (Component comp : comps)
{
- viewport.gatherViewsHere = true;
+ if (comp instanceof AlignmentPanel)
+ {
+ AlignmentPanel ap = (AlignmentPanel) comp;
+ if (!existingNames.contains(ap.av.viewName))
+ {
+ existingNames.add(ap.av.viewName);
+ }
+ }
}
- tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
- return newap;
+ return existingNames;
}
+ /**
+ * Explode tabbed views into separate windows.
+ */
@Override
public void expandViews_actionPerformed(ActionEvent e)
{
Desktop.instance.explodeViews(this);
}
+ /**
+ * Gather views in separate windows back into a tabbed presentation.
+ */
@Override
public void gatherViews_actionPerformed(ActionEvent e)
{
@Override
protected void followHighlight_actionPerformed()
{
+ /*
+ * Set the 'follow' flag on the Viewport (and scroll to position if now
+ * true).
+ */
if (viewport.followHighlight = this.followHighlightMenuItem.getState())
{
alignPanel.scrollToPosition(
public void hideSelSequences_actionPerformed(ActionEvent e)
{
viewport.hideAllSelectedSeqs();
- alignPanel.paintAlignment(true);
+// alignPanel.paintAlignment(true);
}
/**
StringBuffer contents = new AlignmentProperties(viewport.getAlignment())
.formatAsHtml();
editPane.setText(MessageManager.formatMessage("label.html_content",
- new String[]
+ new Object[]
{ contents.toString() }));
JInternalFrame frame = new JInternalFrame();
frame.getContentPane().add(new JScrollPane(editPane));
- Desktop.instance.addInternalFrame(frame, MessageManager.formatMessage(
- "label.alignment_properties", new String[]
+ Desktop.addInternalFrame(frame, MessageManager.formatMessage(
+ "label.alignment_properties", new Object[]
{ getTitle() }), 500, 400);
}
OverviewPanel overview = new OverviewPanel(alignPanel);
frame.setContentPane(overview);
Desktop.addInternalFrame(frame, MessageManager.formatMessage(
- "label.overview_params", new String[]
+ "label.overview_params", new Object[]
{ this.getTitle() }), frame.getWidth(), frame.getHeight());
frame.pack();
frame.setLayer(JLayeredPane.PALETTE_LAYER);
{
Component[] menuItems = colourMenu.getMenuComponents();
- int i, iSize = menuItems.length;
- for (i = 0; i < iSize; i++)
+ int iSize = menuItems.length;
+ for (int i = 0; i < iSize; i++)
{
if (menuItems[i].getName() != null
&& menuItems[i].getName().equals("USER_DEFINED"))
@Override
public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)
{
- NewTreePanel("AV", "PID", "Average distance tree using PID");
+ newTreePanel("AV", "PID", "Average distance tree using PID");
}
/**
@Override
public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)
{
- NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");
+ newTreePanel("NJ", "PID", "Neighbour joining tree using PID");
}
/**
@Override
protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)
{
- NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
+ newTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");
}
/**
@Override
protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)
{
- NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
+ newTreePanel("AV", "BL", "Average distance tree using BLOSUM62");
}
/**
* @param title
* DOCUMENT ME!
*/
- void NewTreePanel(String type, String pwType, String title)
+ void newTreePanel(String type, String pwType, String title)
{
TreePanel tp;
public void addSortByOrderMenuItem(String title,
final AlignmentOrder order)
{
- final JMenuItem item = new JMenuItem(MessageManager.formatMessage("action.by_title_param", new String[]{title}));
+ final JMenuItem item = new JMenuItem(MessageManager.formatMessage("action.by_title_param", new Object[]{title}));
sort.add(item);
item.addActionListener(new java.awt.event.ActionListener()
{
{
String treecalcnm = MessageManager.getString("label.tree_calc_"
+ type.toLowerCase());
- for (final Object pwtype : ResidueProperties.scoreMatrices.keySet())
+ for (final String pwtype : ResidueProperties.scoreMatrices.keySet())
{
JMenuItem tm = new JMenuItem();
ScoreModelI sm = ResidueProperties.scoreMatrices.get(pwtype);
@Override
public void actionPerformed(ActionEvent e)
{
- NewTreePanel(type, (String) pwtype, title);
+ newTreePanel(type, pwtype, title);
}
});
calculateTree.add(tm);
}
sortByTreeMenu.removeAll();
- Vector comps = (Vector) PaintRefresher.components.get(viewport
+ List<Component> comps = PaintRefresher.components.get(viewport
.getSequenceSetId());
- Vector treePanels = new Vector();
- int i, iSize = comps.size();
- for (i = 0; i < iSize; i++)
+ List<TreePanel> treePanels = new ArrayList<TreePanel>();
+ for (Component comp : comps)
{
- if (comps.elementAt(i) instanceof TreePanel)
+ if (comp instanceof TreePanel)
{
- treePanels.add(comps.elementAt(i));
+ treePanels.add((TreePanel) comp);
}
}
- iSize = treePanels.size();
-
- if (iSize < 1)
+ if (treePanels.size() < 1)
{
sortByTreeMenu.setVisible(false);
return;
sortByTreeMenu.setVisible(true);
- for (i = 0; i < treePanels.size(); i++)
+ for (final TreePanel tp : treePanels)
{
- final TreePanel tp = (TreePanel) treePanels.elementAt(i);
final JMenuItem item = new JMenuItem(tp.getTitle());
- final NJTree tree = ((TreePanel) treePanels.elementAt(i)).getTree();
item.addActionListener(new java.awt.event.ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- tp.sortByTree_actionPerformed(null);
+ tp.sortByTree_actionPerformed();
addHistoryItem(tp.sortAlignmentIn(alignPanel));
}
* DOCUMENT ME!
*/
@Override
- protected void LoadtreeMenuItem_actionPerformed(ActionEvent e)
+ protected void loadTreeMenuItem_actionPerformed(ActionEvent e)
{
// Pick the tree file
JalviewFileChooser chooser = new JalviewFileChooser(
} catch (Exception e)
{
}
- ;
}
final AlignFrame me = this;
buildingMenu = true;
.debug("Exception during web service menu building process.",
e);
}
- ;
}
});
} catch (Exception e)
{
}
- ;
-
buildingMenu = false;
}
}).start();
public void actionPerformed(ActionEvent e)
{
// TODO: new thread for this call with vis-delay
- af.showProductsFor(af.viewport.getSequenceSelection(), ds,
+ af.showProductsFor(af.viewport.getSequenceSelection(),
isRegSel, dna, source);
}
return showp;
}
- protected void showProductsFor(SequenceI[] sel, Alignment ds,
- boolean isRegSel, boolean dna, String source)
+ protected void showProductsFor(final SequenceI[] sel,
+ final boolean isRegSel, final boolean dna, final String source)
{
- final boolean fisRegSel = isRegSel;
- final boolean fdna = dna;
- final String fsrc = source;
- final AlignFrame ths = this;
- final SequenceI[] fsel = sel;
Runnable foo = new Runnable()
{
public void run()
{
final long sttime = System.currentTimeMillis();
- ths.setProgressBar(MessageManager.formatMessage("status.searching_for_sequences_from", new String[]{fsrc}), sttime);
+ AlignFrame.this.setProgressBar(MessageManager.formatMessage(
+ "status.searching_for_sequences_from", new Object[]
+ { source }), sttime);
try
{
- Alignment ds = ths.getViewport().getAlignment().getDataset(); // update
- // our local
- // dataset
- // reference
+ // update our local dataset reference
+ Alignment ds = AlignFrame.this.getViewport().getAlignment()
+ .getDataset();
Alignment prods = CrossRef
- .findXrefSequences(fsel, fdna, fsrc, ds);
+ .findXrefSequences(sel, dna, source, ds);
if (prods != null)
{
SequenceI[] sprods = new SequenceI[prods.getHeight()];
sprods[s].updatePDBIds();
}
Alignment al = new Alignment(sprods);
- AlignedCodonFrame[] cf = prods.getCodonFrames();
+ Set<AlignedCodonFrame> cf = prods.getCodonFrames();
al.setDataset(ds);
- for (int s = 0; cf != null && s < cf.length; s++)
+ for (AlignedCodonFrame acf : cf)
{
- al.addCodonFrame(cf[s]);
- cf[s] = null;
+ al.addCodonFrame(acf);
}
AlignFrame naf = new AlignFrame(al, DEFAULT_WIDTH,
DEFAULT_HEIGHT);
- String newtitle = "" + ((fdna) ? "Proteins " : "Nucleotides ")
- + " for " + ((fisRegSel) ? "selected region of " : "")
+ String newtitle = "" + ((dna) ? "Proteins" : "Nucleotides")
+ + " for " + ((isRegSel) ? "selected region of " : "")
+ getTitle();
- Desktop.addInternalFrame(naf, newtitle, DEFAULT_WIDTH,
- DEFAULT_HEIGHT);
+ naf.setTitle(newtitle);
+
+ // remove this flag once confirmed we want a split view
+ boolean asSplitFrame = true;
+ if (asSplitFrame)
+ {
+ final Alignment copyAlignment = new Alignment(new Alignment(
+ AlignFrame.this.viewport.getSequenceSelection()));
+ AlignFrame copyThis = new AlignFrame(copyAlignment,
+ AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+ copyThis.setTitle(AlignFrame.this.getTitle());
+ // SplitFrame with dna above, protein below
+ SplitFrame sf = new SplitFrame(dna ? copyThis : naf,
+ dna ? naf : copyThis);
+ naf.setVisible(true);
+ copyThis.setVisible(true);
+ String linkedTitle = MessageManager
+ .getString("label.linked_view_title");
+ Desktop.addInternalFrame(sf, linkedTitle, -1, -1);
+ }
+ else
+ {
+ Desktop.addInternalFrame(naf, newtitle, DEFAULT_WIDTH,
+ DEFAULT_HEIGHT);
+ }
}
else
{
System.err.println("No Sequences generated for xRef type "
- + fsrc);
+ + source);
}
} catch (Exception e)
{
jalview.bin.Cache.log.error("Error when finding crossreferences",
e);
}
- ths.setProgressBar(MessageManager.formatMessage("status.finished_searching_for_sequences_from", new String[]{fsrc}),
+ AlignFrame.this.setProgressBar(MessageManager.formatMessage(
+ "status.finished_searching_for_sequences_from",
+ new Object[]
+ { source }),
sttime);
}
}
}
- @Override
- public void showProducts_actionPerformed(ActionEvent e)
- {
- // /////////////////////////////
- // Collect Data to be translated/transferred
-
- SequenceI[] selection = viewport.getSequenceSelection();
- AlignmentI al = null;
- try
- {
- al = jalview.analysis.Dna.CdnaTranslate(selection, viewport
- .getViewAsVisibleContigs(true), viewport.getGapCharacter(),
- viewport.getAlignment().getDataset());
- } catch (Exception ex)
- {
- al = null;
- jalview.bin.Cache.log.debug("Exception during translation.", ex);
- }
- if (al == null)
- {
- JOptionPane
- .showMessageDialog(
- Desktop.desktop,
- MessageManager
- .getString("label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation"),
- MessageManager.getString("label.translation_failed"),
- JOptionPane.WARNING_MESSAGE);
- }
- else
- {
- AlignFrame af = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT);
- Desktop.addInternalFrame(af, MessageManager.formatMessage(
- "label.translation_of_params", new String[]
- { this.getTitle() }), DEFAULT_WIDTH, DEFAULT_HEIGHT);
- }
- }
-
+ /**
+ * Construct and display a new frame containing the translation of this
+ * frame's DNA sequences to their aligned protein (amino acid) equivalents.
+ */
@Override
public void showTranslation_actionPerformed(ActionEvent e)
{
- // /////////////////////////////
- // Collect Data to be translated/transferred
-
- SequenceI[] selection = viewport.getSequenceSelection();
- String[] seqstring = viewport.getViewAsString(true);
AlignmentI al = null;
try
{
- al = jalview.analysis.Dna.CdnaTranslate(selection, seqstring,
- viewport.getViewAsVisibleContigs(true), viewport
- .getGapCharacter(), viewport.getAlignment()
- .getAlignmentAnnotation(), viewport.getAlignment()
- .getWidth(), viewport.getAlignment().getDataset());
+ Dna dna = new Dna(viewport, viewport.getViewAsVisibleContigs(true));
+
+ al = dna.translateCdna();
} catch (Exception ex)
{
- al = null;
jalview.bin.Cache.log.error(
"Exception during translation. Please report this !", ex);
- JOptionPane
- .showMessageDialog(
- Desktop.desktop,
- MessageManager
- .getString("label.error_when_translating_sequences_submit_bug_report"),
- MessageManager
- .getString("label.implementation_error")
- + MessageManager
- .getString("translation_failed"),
- JOptionPane.ERROR_MESSAGE);
+ final String msg = MessageManager
+ .getString("label.error_when_translating_sequences_submit_bug_report");
+ final String title = MessageManager
+ .getString("label.implementation_error")
+ + MessageManager.getString("translation_failed");
+ JOptionPane.showMessageDialog(Desktop.desktop, msg, title,
+ JOptionPane.ERROR_MESSAGE);
return;
}
- if (al == null)
+ if (al == null || al.getHeight() == 0)
{
- JOptionPane
- .showMessageDialog(
- Desktop.desktop,
- MessageManager
- .getString("label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation"),
- MessageManager.getString("label.translation_failed"),
- JOptionPane.WARNING_MESSAGE);
+ final String msg = MessageManager
+ .getString("label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation");
+ final String title = MessageManager
+ .getString("label.translation_failed");
+ JOptionPane.showMessageDialog(Desktop.desktop, msg, title,
+ JOptionPane.WARNING_MESSAGE);
}
else
{
AlignFrame af = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT);
- Desktop.addInternalFrame(af, MessageManager.formatMessage(
- "label.translation_of_params", new String[]
- { this.getTitle() }), DEFAULT_WIDTH, DEFAULT_HEIGHT);
+ af.setFileFormat(this.currentFileFormat);
+ final String newTitle = MessageManager.formatMessage(
+ "label.translation_of_params", new Object[]
+ { this.getTitle() });
+ af.setTitle(newTitle);
+ final SequenceI[] seqs = viewport.getSelectionAsNewSequence();
+ viewport.openSplitFrame(af, new Alignment(seqs), al.getCodonFrames());
+ // Desktop.addInternalFrame(af, newTitle, DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}
/**
+ * Set the file format
+ *
+ * @param fileFormat
+ */
+ public void setFileFormat(String fileFormat)
+ {
+ this.currentFileFormat = fileFormat;
+ }
+
+ /**
* Try to load a features file onto the alignment.
*
* @param file
MessageManager
.formatMessage(
"label.automatically_associate_pdb_files_with_sequences_same_name",
- new String[]
+ new Object[]
{ Integer.valueOf(
filesmatched
.size())
"<html>"+MessageManager
.formatMessage(
"label.ignore_unmatched_dropped_files_info",
- new String[]
+ new Object[]
{ Integer.valueOf(
filesnotmatched
.size())
{
jalview.io.JPredFile predictions = new jalview.io.JPredFile(
file, protocol);
- new JnetAnnotationMaker().add_annotation(predictions,
+ new JnetAnnotationMaker();
+ JnetAnnotationMaker.add_annotation(predictions,
viewport.getAlignment(), 0, false);
+ SequenceI repseq = viewport.getAlignment().getSequenceAt(0);
+ viewport.getAlignment().setSeqrep(repseq);
+ ColumnSelection cs = new ColumnSelection();
+ cs.hideInsertionsFor(repseq);
+ viewport.setColumnSelection(cs);
isAnnotation = true;
}
else
}
}
+ /**
+ * Method invoked by the ChangeListener on the tabbed pane, in other words
+ * when a different tabbed pane is selected by the user or programmatically.
+ */
@Override
public void tabSelectionChanged(int index)
{
if (index > -1)
{
- alignPanel = (AlignmentPanel) alignPanels.elementAt(index);
+ alignPanel = alignPanels.get(index);
viewport = alignPanel.av;
avc.setViewportAndAlignmentPanel(viewport, alignPanel);
setMenusFromViewport(viewport);
}
+
+ /*
+ * If there is a frame linked to this one in a SplitPane, switch it to the
+ * same view tab index. No infinite recursion of calls should happen, since
+ * tabSelectionChanged() should not get invoked on setting the selected
+ * index to an unchanged value. Guard against setting an invalid index
+ * before the new view peer tab has been created.
+ */
+ final AlignViewportI peer = viewport.getCodingComplement();
+ if (peer != null)
+ {
+ AlignFrame linkedAlignFrame = ((AlignViewport) peer).getAlignPanel().alignFrame;
+ if (linkedAlignFrame.tabbedPane.getTabCount() > index)
+ {
+ linkedAlignFrame.tabbedPane.setSelectedIndex(index);
+ }
+ }
}
+ /**
+ * On right mouse click on view tab, prompt for and set new view name.
+ */
@Override
public void tabbedPane_mousePressed(MouseEvent e)
{
if (SwingUtilities.isRightMouseButton(e))
{
- String reply = JOptionPane.showInternalInputDialog(this,
- MessageManager.getString("label.enter_view_name"),
- MessageManager.getString("label.enter_view_name"),
+ String msg = MessageManager.getString("label.enter_view_name");
+ String reply = JOptionPane.showInternalInputDialog(this, msg, msg,
JOptionPane.QUESTION_MESSAGE);
if (reply != null)
{
viewport.viewName = reply;
+ // TODO warn if reply is in getExistingViewNames()?
tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), reply);
}
}
*
* @param av
*/
- public boolean closeView(AlignViewport av)
+ public boolean closeView(AlignViewportI av)
{
if (viewport == av)
{
}
});
- fetchr.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage("label.fetch_retrieve_from", new String[]{src.getDbName()})));
+ fetchr.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage("label.fetch_retrieve_from", new Object[]{src.getDbName()})));
dfetch.add(fetchr);
comp++;
}
// fetch all entry
DbSourceProxy src = otherdb.get(0);
fetchr = new JMenuItem(MessageManager.formatMessage(
- "label.fetch_all_param", new String[]
+ "label.fetch_all_param", new Object[]
{ src.getDbSource() }));
fetchr.addActionListener(new ActionListener()
{
}
});
- fetchr.setToolTipText(JvSwingUtils.wrapTooltip(true, 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 Object[]{Integer.valueOf(otherdb.size()).toString(), src.getDbSource(), src.getDbName()})));
dfetch.add(fetchr);
comp++;
// and then build the rest of the individual menus
- ifetch = new JMenu(MessageManager.formatMessage("label.source_from_db_source", new String[]{src.getDbSource()}));
+ ifetch = new JMenu(MessageManager.formatMessage("label.source_from_db_source", new Object[]{src.getDbSource()}));
icomp = 0;
String imname = null;
int i = 0;
0, 10) + "..." : dbname;
if (imname == null)
{
- imname = MessageManager.formatMessage("label.from_msname", new String[]{sname});
+ imname = MessageManager.formatMessage("label.from_msname", new Object[]{sname});
}
fetchr = new JMenuItem(msname);
final DbSourceProxy[] dassrc =
});
fetchr.setToolTipText("<html>"
- + MessageManager.formatMessage("label.fetch_retrieve_from", new String[]{dbname}));
+ + MessageManager.formatMessage("label.fetch_retrieve_from", new Object[]{dbname}));
ifetch.add(fetchr);
++i;
if (++icomp >= mcomp || i == (otherdb.size()))
throw new Error(MessageManager.getString("error.implementation_error_cannot_show_view_alignment_frame"));
}
if (tabbedPane != null
- & alignPanels.indexOf(alignmentPanel) != tabbedPane
+ && tabbedPane.getTabCount() > 0
+ && alignPanels.indexOf(alignmentPanel) != tabbedPane
.getSelectedIndex())
{
tabbedPane.setSelectedIndex(alignPanels.indexOf(alignmentPanel));
/**
*
- * @return alignment panels in this alignemnt frame
+ * @return alignment panels in this alignment frame
+ */
+ public List<? extends AlignmentViewPanel> getAlignPanels()
+ {
+ return alignPanels == null ? Arrays.asList(alignPanel)
+ : alignPanels;
+ }
+
+ /**
+ * Open a new alignment window, with the cDNA associated with this (protein)
+ * alignment, aligned as is the protein.
+ */
+ protected void viewAsCdna_actionPerformed()
+ {
+ // TODO no longer a menu action - refactor as required
+ final AlignmentI alignment = getViewport().getAlignment();
+ Set<AlignedCodonFrame> mappings = alignment.getCodonFrames();
+ if (mappings == null)
+ {
+ return;
+ }
+ List<SequenceI> cdnaSeqs = new ArrayList<SequenceI>();
+ for (SequenceI aaSeq : alignment.getSequences()) {
+ for (AlignedCodonFrame acf : mappings) {
+ SequenceI dnaSeq = acf.getDnaForAaSeq(aaSeq.getDatasetSequence());
+ if (dnaSeq != null)
+ {
+ /*
+ * There is a cDNA mapping for this protein sequence - add to new
+ * alignment. It will share the same dataset sequence as other mapped
+ * cDNA (no new mappings need to be created).
+ */
+ final Sequence newSeq = new Sequence(dnaSeq);
+ newSeq.setDatasetSequence(dnaSeq);
+ cdnaSeqs.add(newSeq);
+ }
+ }
+ }
+ if (cdnaSeqs.size() == 0)
+ {
+ // show a warning dialog no mapped cDNA
+ return;
+ }
+ AlignmentI cdna = new Alignment(cdnaSeqs.toArray(new SequenceI[cdnaSeqs
+ .size()]));
+ AlignFrame alignFrame = new AlignFrame(cdna, AlignFrame.DEFAULT_WIDTH,
+ AlignFrame.DEFAULT_HEIGHT);
+ cdna.alignAs(alignment);
+ String newtitle = "cDNA " + MessageManager.getString("label.for") + " "
+ + this.title;
+ Desktop.addInternalFrame(alignFrame, newtitle,
+ AlignFrame.DEFAULT_WIDTH,
+ AlignFrame.DEFAULT_HEIGHT);
+ }
+
+ /**
+ * Set visibility of dna/protein complement view (available when shown in a
+ * split frame).
+ *
+ * @param show
*/
- public List<AlignmentViewPanel> getAlignPanels()
+ @Override
+ protected void showComplement_actionPerformed(boolean show)
{
- return alignPanels == null ? Arrays.asList(alignPanel) : alignPanels;
+ SplitContainerI sf = getSplitViewContainer();
+ if (sf != null) {
+ sf.setComplementVisible(this, show);
+ }
}
}