]> source.dussan.org Git - vaadin-framework.git/commitdiff
added scroll position indicator when scrolling to area with unrendered rows
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 2 Aug 2007 05:38:03 +0000 (05:38 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 2 Aug 2007 05:38:03 +0000 (05:38 +0000)
svn changeset:1931/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IScrollTable.java
src/com/itmill/toolkit/terminal/gwt/public/component-themes/table/css/table.css

index 7a55fc99723bedccd1bf01e2398122a7f022754d..a28255cc66064aecff2dbe82448d1bc483b98cef 100644 (file)
@@ -87,6 +87,7 @@ public class IScrollTable extends Composite implements Paintable, ITable, Scroll
        private HashMap actionMap = new HashMap();
        private String[] visibleColOrder;
        private boolean initialContentReceived = false;
+       private Element scrollPositionElement;
        
        public IScrollTable() {
                // TODO move headerContainer and column selector into TableHead
@@ -181,6 +182,7 @@ public class IScrollTable extends Composite implements Paintable, ITable, Scroll
                                sizeInit();
                        }
                }
+               hideScrollPositionAnnotation();
        }
        
        private void updateVisibleColumns(UIDL uidl) {
@@ -474,6 +476,14 @@ public class IScrollTable extends Composite implements Paintable, ITable, Scroll
                        preLimit = 0;
                int lastRendered = tBody.getLastRendered();
                int firstRendered = tBody.getFirstRendered();
+               
+               // tell scroll position to user if currently "visible"  rows are not rendered
+               if( (lastRendered < firstRowInViewPort + pageLength) ||
+                               (firstRowInViewPort <  firstRendered)) {
+                       announceScrollPosition();
+               }
+               
+               
                if( postLimit <= lastRendered && preLimit >= firstRendered ) {
                        client.updateVariable(this.paintableId, "firstvisible", firstRowInViewPort, false);
                        return; // scrolled withing "non-react area"
@@ -507,6 +517,35 @@ public class IScrollTable extends Composite implements Paintable, ITable, Scroll
                
        }
 
+       private void announceScrollPosition() {
+               client.console.log(""+firstRowInViewPort);
+               if(scrollPositionElement == null) {
+                       scrollPositionElement = DOM.createDiv();
+                       DOM.setAttribute(scrollPositionElement, "className", "i-table-scrollposition");
+                       DOM.appendChild(getElement(), scrollPositionElement);
+               }
+               DOM.setStyleAttribute(scrollPositionElement, "left",
+                               (
+                                               DOM.getAbsoluteLeft(getElement()) + 
+                                               DOM.getIntAttribute(getElement(), "offsetWidth")/2 
+                                               - 75
+                               )  + "px");
+               DOM.setStyleAttribute(scrollPositionElement, "top",
+                               (
+                                               DOM.getAbsoluteTop(getElement()) + 
+                                               DOM.getIntAttribute(getElement(), "offsetHeight")/2 
+                                               - 20
+                               )  + "px");
+               DOM.setInnerHTML(scrollPositionElement, 
+                               firstRowInViewPort + " - " + (firstRowInViewPort + pageLength) + "...");
+               DOM.setStyleAttribute(scrollPositionElement, "display", "block");
+       }
+       
+       private void hideScrollPositionAnnotation() {
+               if(scrollPositionElement != null)
+                       DOM.setStyleAttribute(scrollPositionElement, "display", "none");
+       }
+
        private class RowRequestHandler extends Timer {
                
                private int reqFirstRow = 0;
index 18e547b1e2af880822f96e34da699a83ee626c3d..3f98208424afba2a7bad7487f24db63fcfd2b0ed 100644 (file)
        opacity: 0.5;\r
        filter: alpha(opacity=50);\r
 }\r
-\r
-\r
-\r
+
+.i-table-scrollposition {
+       display: none;
+       position: absolute;
+       width: 150px;
+       padding: 4px;
+       border: 1px solid black;
+       background: yellow;
+}\r
 \r
 /* IE specific styles */\r
 * html .i-table-header-wrap {\r