/* * Copyright (c) 2014 Dennis Fischer. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0+ * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: Dennis Fischer */ package de.chaosfisch.uploader.gui.controller; import com.cathive.fx.guice.FXMLController; import com.google.common.eventbus.Subscribe; import com.google.inject.Inject; import de.chaosfisch.google.youtube.upload.IUploadService; import de.chaosfisch.google.youtube.upload.Upload; import de.chaosfisch.google.youtube.upload.events.UploadAdded; import de.chaosfisch.google.youtube.upload.events.UploadRemoved; import de.chaosfisch.google.youtube.upload.events.UploadUpdated; import de.chaosfisch.uploader.gui.renderer.QueueUploadCellRenderer; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.ListView; import java.net.URL; import java.util.ResourceBundle; @FXMLController public class QueueOverviewController { @FXML private ResourceBundle resources; @FXML private URL location; @FXML private ListView<Upload> queueListView; private final ObservableList<Upload> uploads = FXCollections.observableArrayList(); private final IUploadService uploadService; private final QueueUploadCellRenderer queueUploadCellRenderer; @Inject public QueueOverviewController(final IUploadService uploadService, final QueueUploadCellRenderer queueUploadCellRenderer) { this.uploadService = uploadService; this.queueUploadCellRenderer = queueUploadCellRenderer; } @FXML void initialize() { assert null != queueListView : "fx:id=\"queueListView\" was not injected: check your FXML file 'QueueOverview.fxml'."; queueListView.setCellFactory(queueUploadCellRenderer); queueListView.setItems(uploads); uploads.addAll(uploadService.getAll()); } @Subscribe public void onUploadUpdated(final UploadUpdated event) { Platform.runLater(new Runnable() { @Override public void run() { final Upload upload = queueListView.getSelectionModel().getSelectedItem(); queueListView.setItems(null); queueListView.setItems(uploads); queueListView.getSelectionModel().select(upload); } }); } @Subscribe public void onUploadAdded(final UploadAdded event) { Platform.runLater(new Runnable() { @Override public void run() { uploads.add(event.getUpload()); } }); } @Subscribe public void onUploadRemoved(final UploadRemoved event) { Platform.runLater(new Runnable() { @Override public void run() { uploads.remove(event.getUpload()); } }); } }