Changeset d5439499 in vaadin


Ignore:
Timestamp:
Mar 21, 2012 1:27:40 PM (3 years ago)
Author:
Artur Signell <artur@…>
Branches:
master, 7.0, 7.1, 7.2, 7.3
Children:
3a234a45f
Parents:
86dbe3f2
git-author:
Artur Signell <artur@…> (03/19/12 09:42:14)
git-committer:
Artur Signell <artur@…> (03/21/12 13:27:40)
Message:

Paint Vaadin 6 changes in hierarchy order to retain backwards
compatibility, especially for component containers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java

    r5b03fb1f rd5439499  
    2828import java.util.Collection; 
    2929import java.util.Collections; 
     30import java.util.Comparator; 
    3031import java.util.GregorianCalendar; 
    3132import java.util.HashMap; 
     
    803804        JsonPaintTarget paintTarget = new JsonPaintTarget(this, outWriter, 
    804805                !repaintAll); 
    805  
    806         for (Connector connector : dirtyVisibleConnectors) { 
    807             if (connector instanceof Paintable) { 
    808                 System.out.println("  * Painting legacy Paintable " 
    809                         + connector.getClass().getName() + "@" 
    810                         + Integer.toHexString(connector.hashCode())); 
    811                 Paintable p = (Paintable) connector; 
    812                 paintTarget.startTag("change"); 
    813                 final String pid = connector.getConnectorId(); 
    814                 paintTarget.addAttribute("pid", pid); 
    815                 p.paint(paintTarget); 
    816                 paintTarget.endTag("change"); 
    817             } 
    818         } 
     806        legacyPaint(paintTarget, dirtyVisibleConnectors); 
    819807 
    820808        if (analyzeLayouts) { 
     
    11121100            dragAndDropService.printJSONResponse(outWriter); 
    11131101        } 
     1102    } 
     1103 
     1104    private void legacyPaint(PaintTarget paintTarget, 
     1105            ArrayList<ClientConnector> dirtyVisibleConnectors) 
     1106            throws PaintException { 
     1107        List<Paintable> paintables = new ArrayList<Paintable>(); 
     1108        for (Connector connector : dirtyVisibleConnectors) { 
     1109            if (connector instanceof Paintable) { 
     1110                paintables.add((Paintable) connector); 
     1111            } 
     1112        } 
     1113        sortByHierarchy(paintables); 
     1114        for (Paintable p : paintables) { 
     1115            System.out.println("  * Painting legacy Paintable " 
     1116                    + p.getClass().getName() + "@" 
     1117                    + Integer.toHexString(p.hashCode())); 
     1118            paintTarget.startTag("change"); 
     1119            final String pid = ((Connector) p).getConnectorId(); 
     1120            paintTarget.addAttribute("pid", pid); 
     1121            p.paint(paintTarget); 
     1122            paintTarget.endTag("change"); 
     1123        } 
     1124 
     1125    } 
     1126 
     1127    private void sortByHierarchy(List<Paintable> paintables) { 
     1128        // Vaadin 6 requires parents to be painted before children as component 
     1129        // containers rely on that their updateFromUIDL method has been called 
     1130        // before children start calling e.g. updateCaption 
     1131        Collections.sort(paintables, new Comparator<Paintable>() { 
     1132            public int compare(Paintable o1, Paintable o2) { 
     1133                Component c1 = (Component) o1; 
     1134                Component c2 = (Component) o2; 
     1135                int depth1 = 0; 
     1136                while (c1.getParent() != null) { 
     1137                    depth1++; 
     1138                    c1 = c1.getParent(); 
     1139                } 
     1140                int depth2 = 0; 
     1141                while (c2.getParent() != null) { 
     1142                    depth2++; 
     1143                    c2 = c2.getParent(); 
     1144                } 
     1145                if (depth1 < depth2) { 
     1146                    return -1; 
     1147                } 
     1148                if (depth1 > depth2) { 
     1149                    return 1; 
     1150                } 
     1151                return 0; 
     1152            } 
     1153        }); 
     1154 
    11141155    } 
    11151156 
Note: See TracChangeset for help on using the changeset viewer.