Alexander Wels has uploaded a new change for review.

Change subject: userportal,webadmin: preserve grid scroll
......................................................................

userportal,webadmin: preserve grid scroll

- Fixed issue where manually pressing refresh button
  would cause the scroll of the grid to reset.

Change-Id: Ia6affc48b93968a77329590bd15f13d0735c70a1
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1046279
Signed-off-by: Alexander Wels <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/AbstractActionTable.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/SimpleActionTable.ui.xml
3 files changed, 32 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/11/34211/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java
index c32ebda..51ebe78 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java
@@ -176,6 +176,10 @@
         return dataProvider;
     }
 
+    protected EventBus getEventBus() {
+        return eventBus;
+    }
+
     @Override
     protected void initWidget(Widget widget) {
         super.initWidget(widget);
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/AbstractActionTable.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/AbstractActionTable.java
index 2773972..b17794b 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/AbstractActionTable.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/AbstractActionTable.java
@@ -35,6 +35,7 @@
 import com.google.gwt.event.dom.client.ScrollEvent;
 import com.google.gwt.event.dom.client.ScrollHandler;
 import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.cellview.client.CellTable.Resources;
@@ -50,6 +51,7 @@
 import com.google.gwt.user.client.ui.ButtonBase;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.ScrollPanel;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.view.client.CellPreviewEvent;
@@ -82,7 +84,7 @@
     public ButtonBase nextPageButton;
 
     @UiField
-    public SimplePanel tableContainer;
+    public ScrollPanel tableContainer;
 
     @UiField
     public SimplePanel tableHeaderContainer;
@@ -100,10 +102,14 @@
     private boolean multiSelectionDisabled;
     private final int[] mousePosition = new int[2];
 
+    private HandlerRegistration scrollHandlerRegistration;
+
     // Table container's horizontal scroll position, used to align table 
header with main table
     private int tableContainerHorizontalScrollPosition = 0;
 
     private boolean doAutoSelect;
+
+    private int scrollOffset = 0;
 
     public AbstractActionTable(final SearchableTableModelProvider<T, ?> 
dataProvider,
             Resources resources, Resources headerResources, EventBus eventBus, 
ClientStorage clientStorage) {
@@ -121,10 +127,6 @@
                     
selectionModel.setMultiRangeSelectEnabled(event.getShiftKey());
                 }
 
-                // Remove focus from the table so refreshes won't try to focus 
on the
-                // selected row. This is important when the user has scrolled 
the selected
-                // row off the screen, we don't want the browser to scroll 
back.
-                table.setFocus(false);
                 super.onBrowserEvent2(event);
             }
 
@@ -148,6 +150,7 @@
                     @Override
                     public void execute() {
                         setFocus(true);
+                        enforceScrollPosition();
                     }
                 });
             }
@@ -173,7 +176,9 @@
             protected void onLoadingStateChanged(LoadingState state) {
                 super.onLoadingStateChanged(state);
                 enforceScrollPosition();
-
+                if (table.getParent() != null && 
table.getParent().getElement() != null && scrollOffset > 0) {
+                    table.getParent().getElement().setScrollTop(scrollOffset);
+                }
                 if (state == LoadingState.LOADING) {
                     Scheduler.get().scheduleDeferred(new ScheduledCommand() {
                         @Override
@@ -251,6 +256,21 @@
             table.enableColumnWidthPersistence(clientStorage, 
dataProvider.getModel());
         }
         addModelSearchStringChangeListener(dataProvider.getModel());
+    }
+
+    private void addScrollListener() {
+        if (scrollHandlerRegistration != null) {
+            scrollHandlerRegistration.removeHandler();
+        }
+        scrollHandlerRegistration = tableContainer.addScrollHandler(new 
ScrollHandler() {
+
+            @Override
+            public void onScroll(ScrollEvent event) {
+                if (tableContainer.getMaximumVerticalScrollPosition() > 0) {
+                    scrollOffset = tableContainer.getVerticalScrollPosition();
+                }
+            }
+        });
     }
 
     void addModelSearchStringChangeListener(final SearchableListModel<?> 
model) {
@@ -331,6 +351,7 @@
     protected void initWidget(Widget widget) {
         super.initWidget(widget);
         initTable();
+        addScrollListener();
     }
 
     /**
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/SimpleActionTable.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/SimpleActionTable.ui.xml
index 4f25929..f9ba014 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/SimpleActionTable.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/SimpleActionTable.ui.xml
@@ -117,7 +117,7 @@
         </g:HTMLPanel>
         <g:SimplePanel ui:field="tableOverhead" 
addStyleNames="{style.tableOverhead}" />
         <g:SimplePanel ui:field="tableHeaderContainer" 
addStyleNames="{style.headerContainer}" />
-        <g:SimplePanel ui:field="tableContainer" 
addStyleNames="{style.content}" />
+        <g:ScrollPanel ui:field="tableContainer" 
addStyleNames="{style.content}" />
     </g:FlowPanel>
 
 </ui:UiBinder>


-- 
To view, visit http://gerrit.ovirt.org/34211
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia6affc48b93968a77329590bd15f13d0735c70a1
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to