+ public void orderByAvWidth() {
+ if (table==null || table.getModel()==null)
+ return;
+ Object[][] data = ((FeatureTableModel) table.getModel()).getData();
+ float[] width = new float[data.length];
+ float[] awidth;
+ float max=0;
+ int num=0;
+ for (int i=0;i<data.length;i++) {
+ awidth = (float[]) typeWidth.get(data[i][0]);
+ if (awidth[0]>0) {
+ width[i] = awidth[1]/awidth[0];// *awidth[0]*awidth[2]; - better weight - but have to make per sequence, too (awidth[2])
+ //if (width[i]==1) // hack to distinguish single width sequences.
+ num++;
+ } else {
+ width[i]=0;
+ }
+ if (max<width[i])
+ max=width[i];
+ }
+ boolean sort=false;
+ for (int i=0;i<width.length; i++) {
+ //awidth = (float[]) typeWidth.get(data[i][0]);
+ if (width[i]==0)
+ {
+ width[i] = fr.getOrder(data[i][0].toString());
+ if (width[i]<0)
+ {
+ width[i] = fr.setOrder(data[i][0].toString(), i/data.length);
+ }
+ } else {
+ width[i] /=max; // normalize
+ fr.setOrder(data[i][0].toString(), width[i]); // store for later
+ }
+ if (i>0)
+ sort = sort || width[i-1]>width[i];
+ }
+ if (sort)
+ jalview.util.QuickSort.sort(width, data);
+ // update global priority order
+
+ updateFeatureRenderer(data,false);
+ table.repaint();
+ }