package at.bestsolution.e4.addressbook.ui.jfx;
import javafx.collections.ObservableList;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.value.IValueChangeListener;
import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.databinding.IEMFListProperty;
import org.eclipse.ufacekit.ui.jfx.databinding.JFXUIProperties;
import org.eclipse.ufacekit.ui.jfx.databinding.UIFactory;
import org.eclipse.ufacekit.ui.jfx.databinding.Util;
import at.bestsolution.e4.addressbook.model.addressbook.AddressBook;
import at.bestsolution.e4.addressbook.model.addressbook.AddressbookPackage;
import at.bestsolution.e4.addressbook.model.addressbook.Person;
import at.bestsolution.e4.addressbook.ui.services.PersonSelectionPublisher;
public class PersonList {
private ListView<Person> listView;
@Inject
public PersonList(BorderPane pane) {
IValueProperty[] props = {
EMFProperties
.value(AddressbookPackage.Literals.PERSON__FIRSTNAME),
EMFProperties
.value(AddressbookPackage.Literals.PERSON__LASTNAME) };
listView = UIFactory.createListView(props, "{0}, {1}");
listView.setId("detail-list");
pane.setCenter(listView);
}
@PostConstruct
void init(AddressBook book, final PersonSelectionPublisher personService) {
IEMFListProperty mProp = EMFProperties
.list(AddressbookPackage.Literals.ADDRESS_BOOK__PERSONS);
final IObservableList list = mProp.observe(book);
ObservableList<Person> l = Util.create(list);
listView.setItems(l);
JFXUIProperties.singleListViewSelection().observe(listView).addValueChangeListener(new IValueChangeListener() {
@Override
public void handleValueChange(ValueChangeEvent event) {
personService.setPerson((Person) event.diff.getNewValue());
}
});
}
}