there is still a timing issue preventing the selection from getting picked up in the ListView

This commit is contained in:
jmillman 2016-06-06 11:02:28 -04:00
parent 05416c603f
commit e53469de17
3 changed files with 24 additions and 16 deletions

View File

@ -485,15 +485,12 @@ public class TimeLineController {
showFullRange();
} else {
setViewMode(ViewMode.LIST);
List<Long> eventIDs = filteredEvents.getDerivedEventIDs(fileIDs, artifactIDS);
Interval interval = filteredEvents.getSpanningInterval(eventIDs);
synchronized (filteredEvents) {
List<Long> eventIDs = filteredEvents.getDerivedEventIDs(fileIDs, artifactIDS);
Interval interval = filteredEvents.getSpanningInterval(eventIDs);
pushTimeRange(interval);
selectEventIDs(eventIDs, () -> setViewMode(ViewMode.LIST));
}
Platform.runLater(() -> selectEventIDs(eventIDs));
}
}
@ -641,6 +638,12 @@ public class TimeLineController {
}
public void selectEventIDs(Collection<Long> events) {
selectEventIDs(events, () -> {
}
);
}
public void selectEventIDs(Collection<Long> events, Runnable andThen) {
final LoggedTask<Interval> selectEventIDsTask = new LoggedTask<Interval>("Select Event IDs", true) { //NON-NLS
@Override
protected Interval call() throws Exception {
@ -654,7 +657,7 @@ public class TimeLineController {
synchronized (TimeLineController.this) {
selectedTimeRange.set(get());
selectedEventIDs.setAll(events);
andThen.run();
}
} catch (InterruptedException | ExecutionException ex) {
LOGGER.log(Level.SEVERE, getTitle() + " Unexpected error", ex); //NON-NLS

View File

@ -182,24 +182,29 @@ class ListTimeline extends BorderPane {
}
});
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
//keep controller's list of selected event IDs in sync with this list's
table.getSelectionModel().getSelectedItems().addListener((Observable change) -> {
// keep the selectedEventsIDs in sync with the table's selection model, via getRepresentitiveEventID().
//keep the selectedEventsIDs in sync with the table's selection model, via getRepresentitiveEventID().
controller.selectEventIDs(table.getSelectionModel().getSelectedItems().stream()
.filter(Objects::nonNull)
.map(CombinedEvent::getRepresentativeEventID)
.collect(Collectors.toSet()));
});
Platform.runLater(new Runnable() {
@Override
public void run() {
Set<CombinedEvent> collect = table.getItems().stream()
.filter(combinedEvent -> combinedEvent.getEventIDs().stream().anyMatch(controller.getSelectedEventIDs()::contains))
.collect(Collectors.toSet());
controller.getSelectedEventIDs().addListener((Observable change) -> {
Set<CombinedEvent> selectedCombinedEvents = table.getItems().stream()
.filter(combinedEvent -> combinedEvent.getEventIDs().stream().anyMatch(controller.getSelectedEventIDs()::contains))
.collect(Collectors.toSet());
selectEvents(selectedCombinedEvents);
selectEvents(collect);
}
});
}
/**

View File

@ -94,7 +94,7 @@ public class ListViewPane extends AbstractTimeLineView {
Platform.runLater(() -> {
//put the combined events into the table.
listTimeline.setCombinedEvents(combinedEvents);
//restore the selected event
//restore the selected events
listTimeline.selectEvents(selectedEvents);
});