From: jprocter Date: Mon, 2 Apr 2007 14:52:11 +0000 (+0000) Subject: bugfix + create/amend whilst feature panel open (still fixing) X-Git-Tag: Release_2_3~274 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=2bc54fc3fc79e09819a6e650ecd38446322a5f3c;p=jalview.git bugfix + create/amend whilst feature panel open (still fixing) --- diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index 65d5f55..10f91b0 100755 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@ -398,7 +398,7 @@ public class FeatureRenderer 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; @@ -478,7 +478,7 @@ public class FeatureRenderer 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, @@ -489,21 +489,21 @@ public class FeatureRenderer * * @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; i1 && sort) jalview.util.QuickSort.sort(sortOrder, newf); sortOrder=null; System.arraycopy(newf, 0, renderOrder, opos, newf.length); diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 895c235..6c5990a 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -128,13 +128,12 @@ public class FeatureSettings 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; } } @@ -155,6 +154,11 @@ public class FeatureSettings 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; @@ -300,9 +304,6 @@ public class FeatureSettings ( (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); @@ -330,7 +331,8 @@ public class FeatureSettings 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--) @@ -438,17 +440,21 @@ public class FeatureSettings 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) { @@ -483,15 +489,24 @@ public class FeatureSettings 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