mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 20:13:52 +00:00
Filter lists supports shift/ctrl-based multi-/mass-selection
This commit is contained in:
1 parent
8220714d14
commit
71bb4cb591
2 files changed
+52
-12
No files matched your search
+1
-4
@@ -8,8 +8,6 @@ import java.util.Set;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.ProvidesKey;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionModel.AbstractSelectionModel;
|
||||
import com.google.gwt.view.client.SetSelectionModel;
|
||||
|
||||
/**
|
||||
* A multi selection model, that allows to block the selection change notifications.<br>
|
||||
@@ -17,8 +15,7 @@ import com.google.gwt.view.client.SetSelectionModel;
|
||||
* wasn't open enough.
|
||||
* @author Lennart Hensler (D054527)
|
||||
*/
|
||||
public class ControllableMultiSelectionModel<T> extends AbstractSelectionModel<T>
|
||||
implements SetSelectionModel<T> {
|
||||
public class ControllableMultiSelectionModel<T> extends MultiSelectionModel<T> {
|
||||
|
||||
// Ensure one value per key
|
||||
private final Map<Object, T> selectedSet;
|
||||
|
||||
+51
-8
@@ -6,11 +6,18 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.cell.client.CheckboxCell;
|
||||
import com.google.gwt.dom.client.BrowserEvents;
|
||||
import com.google.gwt.dom.client.NativeEvent;
|
||||
import com.google.gwt.user.cellview.client.CellTable;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
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.CellPreviewEvent;
|
||||
import com.google.gwt.view.client.DefaultSelectionEventManager;
|
||||
import com.google.gwt.view.client.DefaultSelectionEventManager.SelectAction;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.ProvidesKey;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
@@ -48,16 +55,15 @@ public class FilterableSelectionTable<ContentType extends Serializable> {
|
||||
}
|
||||
};
|
||||
contentColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
|
||||
table.addColumn(contentColumn);
|
||||
|
||||
selectionModel = new ControllableMultiSelectionModel<ContentType>();
|
||||
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
|
||||
selectionModel = new ControllableMultiSelectionModel<>();
|
||||
final Column<ContentType, Boolean> checkColumn = new Column<ContentType, Boolean>(
|
||||
new CheckboxCell(true, false)) {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
notifyListeners();
|
||||
public Boolean getValue(ContentType object) {
|
||||
return selectionModel.isSelected(object);
|
||||
}
|
||||
});
|
||||
table.setSelectionModel(selectionModel);
|
||||
};
|
||||
|
||||
dataProvider = new ListDataProvider<ContentType>(new ProvidesKey<ContentType>() {
|
||||
@Override
|
||||
@@ -66,6 +72,43 @@ public class FilterableSelectionTable<ContentType extends Serializable> {
|
||||
}
|
||||
});
|
||||
dataProvider.addDataDisplay(table);
|
||||
|
||||
table.addColumn(checkColumn);
|
||||
table.addColumn(contentColumn);
|
||||
|
||||
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
notifyListeners();
|
||||
}
|
||||
});
|
||||
table.setSelectionModel(selectionModel, DefaultSelectionEventManager.<ContentType> createCustomManager(
|
||||
new DefaultSelectionEventManager.CheckboxEventTranslator<ContentType>() {
|
||||
@Override
|
||||
public boolean clearCurrentSelection(CellPreviewEvent<ContentType> event) {
|
||||
return !isCheckboxColumn(event.getColumn());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SelectAction translateSelectionEvent(CellPreviewEvent<ContentType> event) {
|
||||
NativeEvent nativeEvent = event.getNativeEvent();
|
||||
if (BrowserEvents.CLICK.equals(nativeEvent.getType())) {
|
||||
if (nativeEvent.getCtrlKey()) {
|
||||
ContentType value = event.getValue();
|
||||
selectionModel.setSelected(value, !selectionModel.isSelected(value));
|
||||
return SelectAction.IGNORE;
|
||||
}
|
||||
if (!selectionModel.getSelectedSet().isEmpty() && !isCheckboxColumn(event.getColumn())) {
|
||||
return SelectAction.DEFAULT;
|
||||
}
|
||||
}
|
||||
return SelectAction.TOGGLE;
|
||||
}
|
||||
|
||||
private boolean isCheckboxColumn(int columnIndex) {
|
||||
return columnIndex == table.getColumnIndex(checkColumn);
|
||||
}
|
||||
}));
|
||||
|
||||
filterPanel = new AbstractFilterablePanel<ContentType>(allData, table, dataProvider) {
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user