Changeset 4a3f767d1 in vaadin


Ignore:
Timestamp:
Mar 14, 2012 2:00:53 PM (3 years ago)
Author:
Artur Signell <artur@…>
Branches:
master, 7.0, 7.1, 7.2, 7.3, 8d8ba6f438f61d2e1d26fe9e23ddd58296e5f193
Children:
07c94092b
Parents:
f38942e0
git-author:
Artur Signell <artur@…> (03/13/12 18:39:00)
git-committer:
Artur Signell <artur@…> (03/14/12 14:00:53)
Message:

Made TabSheet work again and removed TabSheet tab caching for now

Location:
src/com/vaadin
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/com/vaadin/terminal/gwt/client/ui/TabsheetBaseConnector.java

    r6548c896e r4a3f767d1  
    1010import com.vaadin.terminal.gwt.client.ApplicationConnection; 
    1111import com.vaadin.terminal.gwt.client.ComponentConnector; 
    12 import com.vaadin.terminal.gwt.client.ConnectorMap; 
    1312import com.vaadin.terminal.gwt.client.UIDL; 
    1413 
     
    3837        final UIDL tabs = uidl.getChildUIDL(0); 
    3938 
    40         // Paintables in the TabSheet before update 
     39        // Widgets in the TabSheet before update 
    4140        ArrayList<Widget> oldWidgets = new ArrayList<Widget>(); 
    4241        for (Iterator<Widget> iterator = getWidget().getWidgetIterator(); iterator 
     
    7675        for (int i = 0; i < getWidget().getTabCount(); i++) { 
    7776            ComponentConnector p = getWidget().getTab(i); 
    78             // During the initial rendering the paintable might be null (this is 
    79             // weird...) 
     77            // null for PlaceHolder widgets 
    8078            if (p != null) { 
    8179                oldWidgets.remove(p.getWidget()); 
     
    8381        } 
    8482 
    85         // Perform unregister for any paintables removed during update 
     83        // Detach any old tab widget, should be max 1 
    8684        for (Iterator<Widget> iterator = oldWidgets.iterator(); iterator 
    8785                .hasNext();) { 
    8886            Widget oldWidget = iterator.next(); 
    89             ComponentConnector oldPaintable = ConnectorMap.get(client) 
    90                     .getConnector(oldWidget); 
    9187            if (oldWidget.isAttached()) { 
    9288                oldWidget.removeFromParent(); 
    9389            } 
    94             ConnectorMap.get(client).unregisterConnector(oldPaintable); 
    9590        } 
    9691 
  • src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java

    r2bd14891 r4a3f767d1  
    897897    private void renderContent(final UIDL contentUIDL) { 
    898898        final ComponentConnector content = client.getPaintable(contentUIDL); 
     899        Widget newWidget = content.getWidget(); 
    899900        if (tp.getWidgetCount() > activeTabIndex) { 
    900901            Widget old = tp.getWidget(activeTabIndex); 
    901             if (old != content) { 
     902            if (old != newWidget) { 
    902903                tp.remove(activeTabIndex); 
    903904                ConnectorMap paintableMap = ConnectorMap.get(client); 
  • src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java

    r79871340 r4a3f767d1  
    952952 
    953953                    for (Component child : getChildComponents(parent)) { 
    954                         if (child.getState().isVisible() 
    955                                 && parent.isComponentVisible(child)) { 
     954                        if (child.isVisible()) { 
    956955                            String childConnectorId = getPaintableId(child); 
    957956                            children.put(childConnectorId); 
     
    963962                        throw new PaintException( 
    964963                                "Failed to send hierarchy information about " 
    965                                         + parentConnectorId + " to the client: " 
    966                                         + e.getMessage()); 
     964                                        + parentConnectorId 
     965                                        + " to the client: " + e.getMessage()); 
    967966                    } 
    968967                } 
  • src/com/vaadin/ui/AbstractComponent.java

    re248adc2 r4a3f767d1  
    410410     */ 
    411411    public boolean isVisible() { 
    412         return getState().isVisible() 
    413                 && (getParent() == null || getParent().isVisible()); 
     412        if (getParent() == null) { 
     413            return getState().isVisible(); 
     414        } else { 
     415            return getState().isVisible() && getParent().isVisible() 
     416                    && ((HasComponents) getParent()).isComponentVisible(this); 
     417        } 
    414418    } 
    415419 
     
    17001704        } 
    17011705    } 
     1706 
     1707    public String getConnectorId() { 
     1708        throw new RuntimeException( 
     1709                "TODO: Move connector id handling to AbstractComponent"); 
     1710    } 
    17021711} 
  • src/com/vaadin/ui/TabSheet.java

    r79871340 r4a3f767d1  
    88import java.lang.reflect.Method; 
    99import java.util.ArrayList; 
    10 import java.util.Collection; 
    1110import java.util.Collections; 
    1211import java.util.HashMap; 
    13 import java.util.HashSet; 
    1412import java.util.Iterator; 
    1513import java.util.Map; 
     
    2927import com.vaadin.terminal.gwt.client.ui.TabsheetConnector; 
    3028import com.vaadin.terminal.gwt.client.ui.VTabsheet; 
    31 import com.vaadin.terminal.gwt.server.CommunicationManager; 
    3229import com.vaadin.ui.Component.Focusable; 
    3330import com.vaadin.ui.themes.Reindeer; 
     
    9693 
    9794    /** 
    98      * Tabs that have been shown to the user (have been painted as selected). 
    99      */ 
    100     private HashSet<Component> paintedTabs = new HashSet<Component>(); 
    101  
    102     /** 
    10395     * Handler to be called when a tab is closed. 
    10496     */ 
     
    381373        target.startTag("tabs"); 
    382374 
    383         Collection<Component> orphaned = new HashSet<Component>(paintedTabs); 
    384  
    385375        for (final Iterator<Component> i = getComponentIterator(); i.hasNext();) { 
    386376            final Component component = i.next(); 
    387  
    388             orphaned.remove(component); 
    389377 
    390378            Tab tab = tabs.get(component); 
     
    437425            if (component.equals(selected)) { 
    438426                target.addAttribute("selected", true); 
    439                 if (!paintedTabs.contains(component)) { 
    440                     // Ensure the component is painted if it hasn't already been 
    441                     // painted in this tabsheet 
    442                     component.requestRepaint(); 
    443                     paintedTabs.add(component); 
    444                 } 
    445427                component.paint(target); 
    446             } else if (paintedTabs.contains(component)) { 
    447                 component.paint(target); 
    448             } else { 
    449                 component.requestRepaintRequests(); 
    450428            } 
    451429            target.endTag("tab"); 
     
    458436        } 
    459437 
    460         // clean possibly orphaned entries in paintedTabs 
    461         for (Component component2 : orphaned) { 
    462             paintedTabs.remove(component2); 
    463         } 
    464438    } 
    465439 
     
    600574            fireSelectedTabChange(); 
    601575            requestRepaint(); 
     576            // Repaint of the selected component is needed as only the selected 
     577            // component is communicated to the client. Otherwise this will be a 
     578            // "cached" update even though the client knows nothing about the 
     579            // connector 
     580            if (selected instanceof ComponentContainer) { 
     581                ((ComponentContainer) selected).requestRepaintAll(); 
     582            } else { 
     583                selected.requestRepaint(); 
     584            } 
    602585        } 
    603586    } 
     
    881864    } 
    882865 
    883     @Override 
    884     public void removeListener(RepaintRequestListener listener) { 
    885         super.removeListener(listener); 
    886         if (listener instanceof CommunicationManager) { 
    887             // clean the paintedTabs here instead of detach to avoid subtree 
    888             // caching issues when detached-attached without render 
    889             paintedTabs.clear(); 
    890         } 
    891     } 
    892  
    893866    /** 
    894867     * Tab meta-data for a component in a {@link TabSheet}. 
Note: See TracChangeset for help on using the changeset viewer.