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);