synchronized void findAllFeatures()
{
findAllFeatures(true); // add all new features as visible
- if (!newFeatureAdded && !firing) {
+ if (!firing) {
firing=true;
changeSupport.firePropertyChange("changeSupport",null,null);
firing=false;
updateRenderOrder(allfeatures);
findingFeatures = false;
}
- boolean firing=false;
+ protected boolean firing=false;
/**
* replaces the current renderOrder with the unordered features in allfeatures.
* The ordering of any types in both renderOrder and allfeatures is preserved,
*
* @param allFeatures
*/
- public void updateRenderOrder(Vector allFeatures) {
+ private void updateRenderOrder(Vector allFeatures) {
Vector allfeatures = new Vector(allFeatures);
String[] oldRender = renderOrder;
renderOrder = new String[allfeatures.size()];
boolean initOrders=(featureOrder==null);
int opos=0;
- if (oldRender!=null)
+ if (oldRender!=null && oldRender.length>0)
{
- for (int j=0; i<oldRender.length; j++)
+ for (int j=0; j<oldRender.length; j++)
{
if (oldRender[j]!=null)
{
if (initOrders)
{
- setOrder(oldRender[j], (1-((float)j)/(float) oldRender.length));
+ setOrder(oldRender[j], (1-(1+(float)j)/(float) oldRender.length));
}
if (allfeatures.contains(oldRender[j])) {
renderOrder[opos++] = oldRender[j]; // existing features always
if (initOrders || !featureOrder.containsKey(newf[i]))
{
int denom = initOrders ? allfeatures.size() : featureOrder.size();
- // new unordered feature - compute persistent ordering at tail of
+ // new unordered feature - compute persistent ordering at head of
// existing features.
- setOrder(newf[i], ((float)2*denom)/(float)(1+2*denom));
+ setOrder(newf[i], i/(float) denom);
}
// set order from newly found feature from persisted ordering.
sortOrder[i] = 2-((Float) featureOrder.get(newf[i])).floatValue();
}
i--;
}
- if (sort)
+ if (iSize>1 && sort)
jalview.util.QuickSort.sort(sortOrder, newf);
sortOrder=null;
System.arraycopy(newf, 0, renderOrder, opos, newf.length);
final PropertyChangeListener change;
final FeatureSettings fs=this;
fr.addPropertyChangeListener(change=new PropertyChangeListener() {
- private boolean firing=false;
public void propertyChange(PropertyChangeEvent evt)
{
- if (!fs.resettingTable && !firing) {
- firing=true;
- resetTable(null);
- firing=false;
+ if (!fs.resettingTable && !fs.handlingUpdate) {
+ fs.handlingUpdate=true;
+ fs.resetTable(new String[] {}); // groups may be added
+ fs.handlingUpdate=false;
}
}
frame.setLayer(JLayeredPane.PALETTE_LAYER);
}
/**
+ * true when Feature Settings are updating from feature renderer
+ */
+ private boolean handlingUpdate=false;
+
+ /**
* contains a float[3] for each feature type string. created by setTableData
*/
Hashtable typeWidth=null;
( (Boolean) fr.featureGroups.get(group)).booleanValue())
{
type = tmpfeatures[index].getType();
- if (groupchanged==null || groupchanged.contains(group)) {
- //af.getViewport().featuresDisplayed.put(type, fr.getColour(type));
- }
if (!visibleChecks.contains(type))
{
visibleChecks.addElement(type);
if (fr.renderOrder != null)
{
- fr.findAllFeatures(groupChanged!=null); // prod to update colourschemes. but don't affect display
+ if (!handlingUpdate)
+ fr.findAllFeatures(groupChanged!=null); // prod to update colourschemes. but don't affect display
//First add the checks in the previous render order,
//in case the window has been closed and reopened
for (int ro = fr.renderOrder.length - 1; ro > -1; ro--)
JalviewUserColours();
jucs = (jalview.binding.JalviewUserColours) jucs.unmarshal(in);
- for (int i = 0; i < jucs.getColourCount(); i++)
+ for (int i = jucs.getColourCount()-1; i >=0; i--)
{
String name;
fr.setColour(name=jucs.getColour(i).getName(),
new Color(Integer.parseInt(jucs.getColour(i).getRGB(),
16)));
- fr.setOrder(name,i/jucs.getColourCount());
+ fr.setOrder(name,(i==0) ? 0 : i/jucs.getColourCount());
+ }
+ if (table!=null) {
+ resetTable(null);
+ Object[][] data=((FeatureTableModel) table.getModel()).getData();
+ ensureOrder(data);
+ updateFeatureRenderer(data,false);
+ table.repaint();
}
-
- setTableData();
- af.alignPanel.paintAlignment(true);
}
catch (Exception ex)
{
new FileOutputStream(choice), "UTF-8"));
Enumeration e = fr.featureColours.keys();
+ float[] sortOrder = new float[fr.featureColours.size()];
+ String[] sortTypes = new String[fr.featureColours.size()];
+ int i=0;
while (e.hasMoreElements())
{
+ sortTypes[i] = e.nextElement().toString();
+ sortOrder[i] = fr.getOrder(sortTypes[i]);
+ i++;
+ }
+ jalview.util.QuickSort.sort(sortOrder, sortTypes);
+ sortOrder=null;
+ for (i=0; i<sortTypes.length; i++) {
jalview.binding.Colour col = new jalview.binding.Colour();
- col.setName(e.nextElement().toString());
+ col.setName(sortTypes[i]);
col.setRGB(jalview.util.Format.getHexString(
fr.getColour(col.getName())));
ucs.addColour(col);
}
-
ucs.marshal(out);
out.close();
}