SOM moved to OpenProject Git
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
package GUI;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ProgressIndicator;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.text.Font;
|
||||
import model.SOMConfig;
|
||||
import model.SOMImage;
|
||||
import model.SOMLayout;
|
||||
import workers.FilesWorker;
|
||||
import workers.ScaleWorker;
|
||||
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* Created by Simon on 13.06.2016.
|
||||
*/
|
||||
public class CaptureCtl {
|
||||
|
||||
@FXML
|
||||
public StackPane capturePane;
|
||||
@FXML
|
||||
public Label countdownText;
|
||||
@FXML
|
||||
public ImageView image;
|
||||
@FXML
|
||||
public ProgressIndicator pictureLoadIndicator;
|
||||
|
||||
// series switch
|
||||
public boolean series = false;
|
||||
// Timer for coutdown
|
||||
Timer timer;
|
||||
// series picture counter
|
||||
private int seriesCounter;
|
||||
// countdown counter
|
||||
private int counter = 0;
|
||||
|
||||
// Initialisation
|
||||
public void initialize() {
|
||||
setPane();
|
||||
setImage();
|
||||
setCountdownText();
|
||||
setPictureLoadIndicator();
|
||||
}
|
||||
|
||||
private void setPictureLoadIndicator() {
|
||||
pictureLoadIndicator.setVisible(false);
|
||||
|
||||
pictureLoadIndicator.setPrefHeight(SOMLayout.screenHeight / 4);
|
||||
pictureLoadIndicator.setPrefWidth(SOMLayout.screenHeight / 4);
|
||||
|
||||
pictureLoadIndicator.setMaxSize(SOMLayout.screenHeight / 2, SOMLayout.screenHeight / 2);
|
||||
|
||||
pictureLoadIndicator.setStyle("-fx-progress-color: white;");
|
||||
}
|
||||
|
||||
private void setCountdownText() {
|
||||
|
||||
capturePane.setAlignment(Pos.CENTER);
|
||||
countdownText.setAlignment(Pos.CENTER);
|
||||
|
||||
countdownText.setPrefSize(SOMLayout.screenHeight / 2, SOMLayout.screenHeight / 2);
|
||||
countdownText.setBackground(SOMLayout.getTransparentBG20rounded(SOMLayout.screenHeight / 4));
|
||||
|
||||
countdownText.setText(null);
|
||||
countdownText.setFont(new Font("Century Gothic Bold", SOMLayout.screenHeight / 4));
|
||||
countdownText.setTextFill(SOMLayout.WHITE);
|
||||
}
|
||||
|
||||
public void setPane() {
|
||||
capturePane.setBackground(SOMLayout.BLACK_BG);
|
||||
}
|
||||
|
||||
public void setImage() {
|
||||
// Set the image aspect ratio to be preserved
|
||||
image.setPreserveRatio(true);
|
||||
|
||||
// Set the image to the image View
|
||||
image.setImage(SOMLayout.SPLASH_IMAGE);
|
||||
|
||||
// make it fit the height of the Screen
|
||||
image.setFitHeight(SOMLayout.screenHeight);
|
||||
|
||||
// Calculate the offset to center it horizontally if the image is wider than the screen (or narrower)
|
||||
double aspect = image.getImage().getWidth() / image.getImage().getHeight();
|
||||
double scaledWidth = aspect * SOMLayout.screenHeight;
|
||||
double offset = (scaledWidth - SOMLayout.screenWidth) / 2;
|
||||
|
||||
image.setX(-offset);
|
||||
}
|
||||
|
||||
public void setSeries(Boolean series) {
|
||||
this.series = series;
|
||||
}
|
||||
|
||||
/* LOGIC
|
||||
* -----------------------------------------------------------------
|
||||
* -----------------------------------------------------------------
|
||||
* */
|
||||
protected void shoot(boolean series) {
|
||||
// Check for series mode
|
||||
System.out.println("shoot");
|
||||
|
||||
// Change to the capture screen
|
||||
SOMGUI.changetocapture();
|
||||
|
||||
if (series)
|
||||
// if series mode is on, set the counter to amount of pictures to make
|
||||
seriesCounter = SOMConfig.SERIES_COUNTER;
|
||||
else
|
||||
// else set it to one
|
||||
seriesCounter = 1;
|
||||
|
||||
|
||||
//start the first countdown
|
||||
countdown2();
|
||||
}
|
||||
|
||||
protected void countdown2() {
|
||||
// set the Countdown Value
|
||||
counter = SOMConfig.COUNTDOWN_COUNTER;
|
||||
|
||||
// open a Timer
|
||||
timer = new Timer();
|
||||
// give it a Task
|
||||
TimerTask task = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if (seriesCounter == 0)
|
||||
counter = 0;
|
||||
|
||||
System.out.println("countdown " + counter);
|
||||
// It feels better if there is still
|
||||
// a second after the counter is at
|
||||
// 0, so it will count to -1
|
||||
|
||||
// show smile instead of a zero
|
||||
if (counter == 0) {
|
||||
|
||||
Platform.runLater(new Runnable() {
|
||||
public void run() {
|
||||
// Remove Text
|
||||
countdownText.setText(null);
|
||||
// Set Countdown Smile Image
|
||||
countdownText.setGraphic(new ImageView(SOMLayout.SMILE_IMAGE));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
// shoot the camera
|
||||
else if (counter <= -1) {
|
||||
|
||||
// Run on Javafx Thread
|
||||
Platform.runLater(new Runnable() {
|
||||
public void run() {
|
||||
// Remove Graphic
|
||||
countdownText.setGraphic(null);
|
||||
// Remove Text
|
||||
countdownText.setText(null);
|
||||
}
|
||||
});
|
||||
|
||||
// cancel the timer
|
||||
timer.cancel();
|
||||
// show the Load indicator
|
||||
pictureLoadIndicator.setVisible(true);
|
||||
// hide the Countdown Text
|
||||
countdownText.setVisible(false);
|
||||
// actually take the picture
|
||||
takePicture();
|
||||
// Count down one Picture
|
||||
seriesCounter--;
|
||||
|
||||
// check if pictures are left
|
||||
if (seriesCounter > 0) {
|
||||
// restart if pictures left
|
||||
countdown2();
|
||||
|
||||
|
||||
} else {
|
||||
// Change the UI
|
||||
Platform.runLater(new Runnable() {
|
||||
public void run() {
|
||||
// change to Picture scene
|
||||
SOMGUI.changetopicture();
|
||||
// set the Gallery page to the first
|
||||
SOMGUI.galleryCtl.setPage();
|
||||
// update the Gallery
|
||||
SOMGUI.galleryCtl.getGalleryImages();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// Show the Time left
|
||||
else {
|
||||
|
||||
Platform.runLater(new Runnable() {
|
||||
public void run() {
|
||||
// Set Countdown Text
|
||||
countdownText.setText(String.valueOf(counter + 1));
|
||||
// Set the Counter Visible
|
||||
countdownText.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
counter--;
|
||||
}
|
||||
};
|
||||
|
||||
// start the timer
|
||||
timer.schedule(task, 0, 1000);
|
||||
}
|
||||
|
||||
private void takePicture() {
|
||||
// Capture the image
|
||||
SOMImage newImage = FilesWorker.waitForImageAndCapture();
|
||||
|
||||
//Scale the image to preview
|
||||
ScaleWorker.scale(newImage, ScaleWorker.PREVIEW);
|
||||
// set te image to UI
|
||||
image.setImage(new Image(newImage.getPrv().toURI().toString()));
|
||||
SOMGUI.pictureCtl.image.setImage(new Image(newImage.getPrv().toURI().toString()));
|
||||
|
||||
// trigger the thumb calculation
|
||||
ScaleWorker.scale(newImage, ScaleWorker.THUMBNAIL);
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
}
|
||||
Reference in New Issue
Block a user