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
