import jalview.bin.Cache;
import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
import jalview.datamodel.GraphLine;
import jalview.datamodel.SequenceGroup;
import jalview.gui.JalviewColourChooser.ColourChooserListener;
import jalview.schemes.AnnotationColourGradient;
import jalview.schemes.ColourSchemeI;
import jalview.util.MessageManager;
+import net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ParameterDefinition.Initial;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap)
{
+ this(av,ap,null);
+ }
+ public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap,AnnotationColourGradient initSettings)
+ {
super(av, ap);
oldcs = av.getGlobalColourScheme();
if (av.getAlignment().getGroups() != null)
setDefaultMinMax();
adjusting = true;
- if (oldcs instanceof AnnotationColourGradient)
+ if (oldcs instanceof AnnotationColourGradient && initSettings==null)
+ {
+ // init from oldcs
+ initialiseFrom((AnnotationColourGradient) oldcs);
+ } else {
+ // use initial colour gradient - if any..
+ initialiseFrom(initSettings);
+ }
+
+ jbInit();
+ adjusting = false;
+
+ updateView();
+ frame.invalidate();
+ frame.pack();
+ }
+ private void initialiseFrom(AnnotationColourGradient acg)
+ {
+ if (acg!=null)
{
- AnnotationColourGradient acg = (AnnotationColourGradient) oldcs;
useOriginalColours.setSelected(
- acg.isPredefinedColours() || acg.getBaseColour() != null);
+ acg.isPredefinedColours() || acg.getBaseColour() != null);
if (!acg.isPredefinedColours() && acg.getBaseColour() == null)
{
minColour.setBackground(acg.getMinColour());
populateThresholdComboBox(threshold);
- if (oldcs instanceof AnnotationColourGradient)
+ if (acg!=null)
{
- AnnotationColourGradient acg = (AnnotationColourGradient) oldcs;
String label = getAnnotationMenuLabel(acg.getAnnotation());
+ // TODO: workaround below shouldn't be necessary - there's a bug in getAnnotationMenuLabel!
+ if (acg.isSeqAssociated())
+ {
+ label = acg.getAnnotation().label;
+ }
annotations.setSelectedItem(label);
switch (acg.getAboveThreshold())
{
thresholdIsMin.setSelected(acg.isThresholdIsMinMax());
thresholdValue.setText(String.valueOf(acg.getAnnotationThreshold()));
}
-
- jbInit();
- adjusting = false;
-
- updateView();
- frame.invalidate();
- frame.pack();
}
@Override
return;
}
+ int selIndex = annotations
+ .getSelectedIndex();
+ int annIndex = annmap[selIndex];
setCurrentAnnotation(
- av.getAlignment().getAlignmentAnnotation()[annmap[annotations
- .getSelectedIndex()]]);
+ av.getAlignment().getAlignmentAnnotation()[annIndex]);
int selectedThresholdItem = getSelectedThresholdItem(
getThreshold().getSelectedIndex());
super.sliderDragReleased();
ap.paintAlignment(true, true);
}
+
+ /**
+ * construct and display a colourchooser for a given annotation row
+ *
+ * @param av
+ * @param ap
+ * @param alignmentAnnotation
+ * @param perseq - when true, enable per-sequence if alignment annotation is per sequence
+ */
+ public static void displayFor(AlignViewport av, AlignmentPanel ap,
+ AlignmentAnnotation alignmentAnnotation, boolean perSeq)
+ {
+ ColourSchemeI global = av.getGlobalColourScheme();
+ AnnotationColourGradient newCS = new AnnotationColourGradient(alignmentAnnotation, global, alignmentAnnotation.threshold!=null ? AnnotationColourGradient.ABOVE_THRESHOLD:AnnotationColourGradient.NO_THRESHOLD);
+ if (alignmentAnnotation.sequenceRef!=null)
+ {
+ newCS.setSeqAssociated(perSeq);
+ }
+ for (int i=0;i<alignmentAnnotation.annotations.length;i++)
+ {
+ Annotation ann = alignmentAnnotation.annotations[i];
+ if (ann!=null && ann.colour!=null && !ann.colour.equals(Color.white))
+ {
+ newCS.setPredefinedColours(true);
+ break;
+ }
+ }
+ AnnotationColourChooser achooser = new AnnotationColourChooser(av,ap,newCS);
+ }
}
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;
+import jalview.bin.Console;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.HiddenColumns;
import jalview.io.cache.JvCacheableInputBox;
public AnnotationColumnChooser(AlignViewport av, final AlignmentPanel ap)
{
+ this(av,ap,null);
+ }
+ public AnnotationColumnChooser(AlignViewport av, final AlignmentPanel ap, AlignmentAnnotation selectedAnnotation)
+ {
super(av, ap);
frame = new JInternalFrame();
frame.setFrameIcon(null);
}
setOldHiddenColumns(av.getAlignment().getHiddenColumns());
adjusting = true;
-
+
setAnnotations(new JComboBox<>(getAnnotationItems(false)));
populateThresholdComboBox(threshold);
AnnotationColumnChooser lastChooser = av
percentThreshold
.setSelected(lastChooser.percentThreshold.isSelected());
}
+ if (selectedAnnotation!=null)
+ {
+ try {
+ setCurrentAnnotation(selectedAnnotation);
+ annotations.setSelectedItem(getAnnotationMenuLabel(selectedAnnotation));
+ } catch (Exception x)
+ {
+ Console.error("Couldn't select annotation in column chooser",x);
+ }
+ }
try
{
gSearchPanel.searchBox.updateCache();
ngSearchPanel.searchBox.updateCache();
}
+
+ public static void displayFor(AlignViewport av, AlignmentPanel ap,
+ AlignmentAnnotation alignmentAnnotation)
+ {
+ AnnotationColumnChooser colchooser = new AnnotationColumnChooser(av, ap, alignmentAnnotation);
+ }
}
import jalview.io.FileFormat;
import jalview.io.FormatAdapter;
import jalview.io.NewickFile;
+import jalview.schemes.AnnotationColourGradient;
import jalview.util.Comparison;
import jalview.util.MessageManager;
import jalview.util.Platform;
consclipbrd.addActionListener(this);
pop.add(consclipbrd);
}
+
+ addColourOrFilterByOptions(ap,aa[selectedRow],pop);
+
if (aa[selectedRow].graph == AlignmentAnnotation.CONTACT_MAP)
{
-
- final ContactMatrixI cm = av.getContactMatrix(aa[selectedRow]);
- if (cm != null)
+ addContactMatrixOptions(ap,aa[selectedRow],pop);
+ // Set/adjust threshold for grouping ?
+ // colour alignment by this [type]
+ // select/hide columns by this row
+
+ }
+ }
+
+ pop.show(this, evt.getX(), evt.getY());
+ }
+
+ static void addColourOrFilterByOptions(final AlignmentPanel ap,
+ final AlignmentAnnotation alignmentAnnotation, final JPopupMenu pop)
+ {
+ JMenuItem item;
+ item = new JMenuItem(MessageManager.getString("label.colour_by_annotation"));
+ item.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ AnnotationColourChooser.displayFor(ap.av, ap,alignmentAnnotation,false);
+ };
+ });
+ pop.add(item);
+ if (alignmentAnnotation.sequenceRef!=null)
+ {
+ item = new JMenuItem(MessageManager.getString("label.colour_by_annotation")+" ("+MessageManager.getString("label.per_seq")+")");
+ item.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
{
- pop.addSeparator();
+ AnnotationColourChooser.displayFor(ap.av, ap,alignmentAnnotation,true);
+ };
+ });
+ pop.add(item);
+ }
+ item = new JMenuItem(MessageManager.getString("action.select_by_annotation"));
+ item.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ AnnotationColumnChooser.displayFor(ap.av,ap,alignmentAnnotation);
+ };
+ });
+ pop.add(item);
+ }
+ static void addContactMatrixOptions(final AlignmentPanel ap,
+ final AlignmentAnnotation alignmentAnnotation, final JPopupMenu pop)
+ {
+
+ final ContactMatrixI cm = ap.av.getContactMatrix(alignmentAnnotation);
+ JMenuItem item;
+ if (cm != null)
+ {
+ pop.addSeparator();
- if (cm.hasGroups())
- {
- JCheckBoxMenuItem chitem = new JCheckBoxMenuItem("Show Groups on Matrix");
- boolean showGroups = aa[selectedRow].isShowGroupsForContactMatrix();
- final AlignmentAnnotation sel_row=aa[selectedRow];
- chitem.setState(showGroups);
- chitem.addActionListener(new ActionListener()
- {
+ if (cm.hasGroups())
+ {
+ JCheckBoxMenuItem chitem = new JCheckBoxMenuItem("Show Groups on Matrix");
+ boolean showGroups = alignmentAnnotation.isShowGroupsForContactMatrix();
+ final AlignmentAnnotation sel_row=alignmentAnnotation;
+ chitem.setState(showGroups);
+ chitem.addActionListener(new ActionListener()
+ {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- sel_row.setShowGroupsForContactMatrix(chitem.getState());
- ap.getAnnotationPanel()
- .paint(ap.getAnnotationPanel().getGraphics());
- }
- });
- pop.add(chitem);
- }
- if (cm.hasTree())
+ @Override
+ public void actionPerformed(ActionEvent e)
{
- item = new JMenuItem("Show Tree for Matrix");
- item.addActionListener(new ActionListener()
- {
+ sel_row.setShowGroupsForContactMatrix(chitem.getState());
+ ap.getAnnotationPanel()
+ .paint(ap.getAnnotationPanel().getGraphics());
+ }
+ });
+ pop.add(chitem);
+ }
+ if (cm.hasTree())
+ {
+ item = new JMenuItem("Show Tree for Matrix");
+ item.addActionListener(new ActionListener()
+ {
- @Override
- public void actionPerformed(ActionEvent e)
- {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
- ap.alignFrame.showContactMapTree(aa[selectedRow], cm);
+ ap.alignFrame.showContactMapTree(alignmentAnnotation, cm);
- }
- });
- pop.add(item);
}
- else
+ });
+ pop.add(item);
+ }
+ else
+ {
+ item = new JMenuItem("Calculate Tree for Matrix");
+ item.addActionListener(new ActionListener()
+ {
+ // TODO - refactor to analysis background thread
+ @Override
+ public void actionPerformed(ActionEvent e)
{
- item = new JMenuItem("Calculate Tree for Matrix");
- item.addActionListener(new ActionListener()
+ new Thread(new Runnable()
{
- // TODO - refactor to analysis background thread
@Override
- public void actionPerformed(ActionEvent e)
+ public void run()
{
- new Thread(new Runnable()
- {
- @Override
- public void run()
- {
- AlignmentAnnotation alan = aa[selectedRow];
- cm.setGroupSet(GroupSet.makeGroups(cm, 5f, true));
- ap.alignFrame.showContactMapTree(alan, cm);
- }
- }).start();
+ AlignmentAnnotation alan = alignmentAnnotation;
+ cm.setGroupSet(GroupSet.makeGroups(cm, 5f, true));
+ ap.alignFrame.showContactMapTree(alan, cm);
}
- });
- pop.add(item);
-
+ }).start();
}
- // Show/Hide group shading on matrix view
- // Set/adjust threshold for grouping ?
- // colour alignment by this [type]
- // select/hide columns by this row
-
- }
+ });
+ pop.add(item);
}
}
- pop.show(this, evt.getX(), evt.getY());
}
/**