package @@packageName_parts@@; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.EventHandler; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.util.Callback; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.UIEventTopic; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.basic.MBasicFactory; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; import org.eclipse.e4.ui.model.application.ui.basic.MStackElement; import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import @@packageName@@.OpenHandler; import @@packageName_model@@.Media; import @@packageName_model@@.MediaType; @SuppressWarnings("restriction") public class MediaListPart { static class MediaCell extends ListCell<Media> { @Override protected void updateItem(Media item, boolean empty) { if( ! empty && item != null ) { setText(item.getName()); switch (item.getType()) { case MOVIE: setGraphic(new ImageView("platform:/plugin/@@projectName@@/icons/tool-animator.png")); break; case PICTURE: setGraphic(new ImageView("platform:/plugin/@@projectName@@/icons/games-config-background.png")); break; default: setGraphic(new ImageView("platform:/plugin/@@projectName@@/icons/player-volume.png")); break; } } super.updateItem(item, empty); } } @Inject EPartService partService; @Inject EModelService modelService; @Inject MApplication application; private ListView<Media> list; @PostConstruct void init(BorderPane pane) { list = new ListView<Media>(createList()); list.setCellFactory(new Callback<ListView<Media>, ListCell<Media>>() { @Override public ListCell<Media> call(ListView<Media> param) { return new MediaCell(); } }); list.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { if( event.getClickCount() > 1 ) { handleOpen(); } } }); pane.setCenter(list); } void handleOpen() { MPartStack stack = (MPartStack) modelService.find("content.stack", application); Media m = list.getSelectionModel().getSelectedItem(); String instance = Media.serialize(m); for( MStackElement e : stack.getChildren() ) { if( e instanceof MPart ) { if( instance.equals(e.getPersistedState().get(MediaPart.MEDIA_OBJECT_KEY)) ) { partService.activate((MPart) e); return; } } } MPart p = MBasicFactory.INSTANCE.createPart(); p.setLabel(m.getName()); if( m.getType() == MediaType.MOVIE ) { p.setIconURI("platform:/plugin/@@projectName@@/icons/22/tool-animator.png"); } else if( m.getType() == MediaType.PICTURE ) { p.setIconURI("platform:/plugin/@@projectName@@/icons/22/games-config-background.png"); } else { p.setIconURI("platform:/plugin/@@projectName@@/icons/22/player-volume.png"); } p.setContributionURI("bundleclass://@@projectName@@/@@packageName_parts@@.MediaPart"); p.getPersistedState().put(MediaPart.MEDIA_OBJECT_KEY, instance); stack.getChildren().add(p); partService.activate(p,true); } @Focus void focus() { list.requestFocus(); } @Inject @Optional public void openMedia(@UIEventTopic(OpenHandler.OPEN_EVENT) String event) { handleOpen(); } private static ObservableList<Media> createList() { ObservableList<Media> l = FXCollections.observableArrayList(); l.add(new Media(MediaType.PICTURE, "Desert", "platform:/plugin/@@projectName@@/icons/resources/pics/pic1.jpg")); l.add(new Media(MediaType.PICTURE, "Lighthouse", "platform:/plugin/@@projectName@@/icons/resources/pics/pic2.jpg")); l.add(new Media(MediaType.MOVIE, "Grog", "platform:/plugin/@@projectName@@/icons/resources/movs/mov1.flv")); l.add(new Media(MediaType.MOVIE, "OTN", "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv")); return l; } }