Fixed the filter table visibility bug

This commit is contained in:
Lennart Hensler committed 2015-08-19 10:51:37 +02:00
1 parent 5fdd04581f
commit a52917b437
4 files changed
+26 -76

No files matched your search

@@ -74,6 +74,7 @@ class DimensionFilterSelectionProvider {
return function.getDisplayName();
}
});
dimensionListBox.setWidth("100%");
dimensionChangedHandler = new DimensionChangedHandler();
dimensionListBox.addValueChangeHandler(dimensionChangedHandler);
controlsPanel.add(dimensionListBox);
@@ -100,7 +101,7 @@ class DimensionFilterSelectionProvider {
}
});
selectionTable.setVisible(false);
mainPanel.add(selectionTable);
mainPanel.add(selectionTable.getWidget());
}
private class DimensionChangedHandler implements ValueChangeHandler<FunctionDTO> {
@@ -237,13 +238,5 @@ class DimensionFilterSelectionProvider {
public Widget getEntryWidget() {
return mainPanel;
}
public void resizeToHeight(int heightInPX) {
int widthInPX = controlsPanel.getOffsetWidth();
mainPanel.setSize(widthInPX + "px", heightInPX + "px");
int remainingHeightInPX = Math.max(0, heightInPX - controlsPanel.getOffsetHeight());
selectionTable.resizeTo(widthInPX, remainingHeightInPX);
}
}
@@ -6,26 +6,27 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.sap.sailing.gwt.ui.datamining.FilterSelectionChangedListener;
import com.sap.sse.gwt.client.panels.AbstractFilterablePanel;
public class FilterableSelectionTable<ContentType extends Serializable> extends FlowPanel {
public class FilterableSelectionTable<ContentType extends Serializable> {
private final Set<FilterSelectionChangedListener> listeners;
private final Collection<ContentType> allData;
private int width;
private int height;
private final FlowPanel mainPanel;
private final AbstractFilterablePanel<ContentType> filterPanel;
private String filterText;
private final DataGrid<ContentType> table;
private final CellTable<ContentType> table;
private final ControllableMultiSelectionModel<ContentType> selectionModel;
private final ListDataProvider<ContentType> dataProvider;
@@ -34,7 +35,8 @@ public class FilterableSelectionTable<ContentType extends Serializable> extends
allData = new ArrayList<ContentType>();
table = new DataGrid<ContentType>();
table = new CellTable<>();
table.setWidth("100%");
table.setAutoHeaderRefreshDisabled(true);
table.setAutoFooterRefreshDisabled(true);
@@ -44,6 +46,7 @@ public class FilterableSelectionTable<ContentType extends Serializable> extends
return FilterableSelectionTable.this.getElementAsString(content);
}
};
contentColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
table.addColumn(contentColumn);
selectionModel = new ControllableMultiSelectionModel<ContentType>();
@@ -77,8 +80,9 @@ public class FilterableSelectionTable<ContentType extends Serializable> extends
filterPanel.setVisible(false);
filterText = "";
add(filterPanel);
add(table);
mainPanel = new FlowPanel();
mainPanel.add(filterPanel);
mainPanel.add(table);
}
private String getElementAsString(ContentType element) {
@@ -214,24 +218,14 @@ public class FilterableSelectionTable<ContentType extends Serializable> extends
}
filterPanel.setVisible(visible);
resizeTo(width, height);
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
//FIXME Force a rerendering of the table. Switching the retriever level fixes the display
mainPanel.setVisible(visible);
}
public void resizeTo(int widthInPX, int heightInPX) {
width = widthInPX;
height = heightInPX;
setSize(width + "px", height+ "px");
filterPanel.setWidth(width + "px");
int tableHeight = filterPanel.isVisible() ? Math.max(0, height - filterPanel.getOffsetHeight()) : height;
table.setSize(width + "px", tableHeight + "px");
//FIXME Force a rerendering of the table. Switching the retriever level fixes the display
public Widget getWidget() {
return mainPanel;
}
}
@@ -17,7 +17,6 @@ import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.CustomScrollPanel;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ScrollPanel;
@@ -58,7 +57,7 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio
private final CellList<LocalizedTypeDTO> retrieverLevelList;
private final SingleSelectionModel<LocalizedTypeDTO> retrieverLevelSelectionModel;
private final ListDataProvider<LocalizedTypeDTO> retrieverLevelDataProvider;
private final SizeProvidingScrollPanel selectionPanel;
private final ScrollPanel selectionPanel;
private final FilterSelectionPresenter selectionPresenter;
private final ScrollPanel selectionPresenterScrollPanel;
@@ -86,7 +85,7 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio
DockLayoutPanel selectionDockLayoutPanel = new DockLayoutPanel(Unit.PX);
selectionDockLayoutPanel.addNorth(new Label(this.stringMessages.filterBy()), 18);
selectionPanel = new SizeProvidingScrollPanel();
selectionPanel = new ScrollPanel();
selectionDockLayoutPanel.add(selectionPanel);
selectionPresenter = new PlainFilterSelectionPresenter(stringMessages, retrieverChainProvider, this);
@@ -149,7 +148,7 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio
LocalizedTypeDTO retrievedDataType = retrieverChain.getRetrievedDataType(retrieverLevel);
RetrieverLevelFilterSelectionProvider selectionProvider =
new RetrieverLevelFilterSelectionProvider(session, dataMiningService, errorReporter, ListRetrieverChainFilterSelectionProvider.this, retrieverChain,
retrievedDataType, retrieverLevel, selectionPanel);
retrievedDataType, retrieverLevel);
selectionProvider.setAvailableDimensions(dimensionsEntry.getValue());
selectionProvidersMappedByRetrievedDataType.put(retrievedDataType, selectionProvider);
@@ -337,18 +336,6 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio
super.setSelected(item, selected);
}
}
private class SizeProvidingScrollPanel extends CustomScrollPanel implements RetrieverLevelFilterSelectionProvider.SizeProvider {
@Override
public int getFreeWidthInPX() {
return getOffsetWidth() - getVerticalScrollbar().asWidget().getOffsetWidth();
}
@Override
public int getFreeHeightInPX() {
//Subtracting a value prevents weird scroll behavior
return getOffsetHeight() - getHorizontalScrollbar().asWidget().getOffsetHeight() - 3;
}
}
@Override
public String getLocalizedShortName() {
@@ -9,9 +9,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ProvidesResize;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.datamining.DataMiningServiceAsync;
import com.sap.sse.common.settings.AbstractSettings;
@@ -35,13 +34,12 @@ public class RetrieverLevelFilterSelectionProvider implements Component<Abstract
private final int retrieverLevel;
private final Collection<FunctionDTO> availableDimensions;
private final HorizontalLayoutPanel mainPanel;
private final HorizontalPanel mainPanel;
private final Collection<DimensionFilterSelectionProvider> dimensionSelectionProviders;
private final SizeProvider sizeProvider;
public RetrieverLevelFilterSelectionProvider(DataMiningSession session, DataMiningServiceAsync dataMiningService,
ErrorReporter errorReporter, ListRetrieverChainFilterSelectionProvider retrieverChainSelectionProvider, DataRetrieverChainDefinitionDTO retrieverChain,
LocalizedTypeDTO retrievedDataType, int retrieverLevel, SizeProvider sizeProvider) {
LocalizedTypeDTO retrievedDataType, int retrieverLevel) {
this.dataMiningService = dataMiningService;
this.errorReporter = errorReporter;
@@ -52,10 +50,8 @@ public class RetrieverLevelFilterSelectionProvider implements Component<Abstract
this.retrieverLevel = retrieverLevel;
availableDimensions = new ArrayList<>();
mainPanel = new HorizontalLayoutPanel();
mainPanel = new HorizontalPanel();
dimensionSelectionProviders = new ArrayList<>();
this.sizeProvider = sizeProvider;
}
public void setAvailableDimensions(Collection<FunctionDTO> dimensions) {
@@ -87,8 +83,8 @@ public class RetrieverLevelFilterSelectionProvider implements Component<Abstract
private void addDimensionSelectionProvider(DimensionFilterSelectionProvider dimensionFilter) {
dimensionSelectionProviders.add(dimensionFilter);
dimensionFilter.getEntryWidget().getElement().getStyle().setDisplay(Display.INLINE);
mainPanel.add(dimensionFilter.getEntryWidget());
mainPanel.onResize();
}
boolean shouldRemoveDimensionSelectionProvider() {
@@ -99,7 +95,6 @@ public class RetrieverLevelFilterSelectionProvider implements Component<Abstract
dimensionFilter.clearSelection(); // Notifies the listeners, if values were selected
dimensionSelectionProviders.remove(dimensionFilter);
mainPanel.remove(dimensionFilter.getEntryWidget());
mainPanel.onResize();
}
void updateAvailableDimensions() {
@@ -115,7 +110,6 @@ public class RetrieverLevelFilterSelectionProvider implements Component<Abstract
remainingDimensions.add(null);
dimensionFilter.setAvailableDimensions(remainingDimensions);
}
mainPanel.onResize();
}
private Collection<FunctionDTO> getSelectedDimensions() {
@@ -245,23 +239,5 @@ public class RetrieverLevelFilterSelectionProvider implements Component<Abstract
public String getDependentCssClassName() {
return "singleRetrieverLevelSelectionPanel";
}
interface SizeProvider {
public int getFreeWidthInPX();
public int getFreeHeightInPX();
}
private class HorizontalLayoutPanel extends HorizontalPanel implements RequiresResize, ProvidesResize {
@Override
public void onResize() {
int heightInPX = sizeProvider.getFreeHeightInPX();
setHeight(heightInPX + "px");
for (DimensionFilterSelectionProvider selectionProvider : dimensionSelectionProviders) {
selectionProvider.resizeToHeight(heightInPX);
}
}
}
}