From 37497a0f7d1f3770945ff9b128bb0a2f0287457e Mon Sep 17 00:00:00 2001 From: Drew Short Date: Wed, 6 Aug 2014 22:06:35 -0500 Subject: [PATCH] Started work on a custom component for image tiles since no default exists --- .../com/sothr/imagetools/image/Image.scala | 14 ++++++- .../ui/component/ImageTileFactory.scala | 37 +++++++++++++++++++ .../ui/controller/AppController.scala | 15 ++++---- 3 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 src/main/scala/com/sothr/imagetools/ui/component/ImageTileFactory.scala diff --git a/src/main/scala/com/sothr/imagetools/image/Image.scala b/src/main/scala/com/sothr/imagetools/image/Image.scala index d2f4ec8..21fd3b6 100644 --- a/src/main/scala/com/sothr/imagetools/image/Image.scala +++ b/src/main/scala/com/sothr/imagetools/image/Image.scala @@ -7,7 +7,7 @@ import javax.persistence._ @Entity @Table(name = "Image") -class Image(val image:String, val thumbnail:String, val size:Tuple2[Int,Int], val imageHashes:ImageHashDTO = null) extends Serializable with Logging { +class Image(val image:String, val thumbnail:String, val size:(Int, Int), val imageHashes:ImageHashDTO = null) extends Serializable with Logging { def this() = this ("", "", (0,0), null) @@ -29,10 +29,20 @@ class Image(val image:String, val thumbnail:String, val size:Tuple2[Int,Int], va def setHashes(newHashes:ImageHashDTO) = { hashes = newHashes} @transient - var imageSize:Tuple2[Int,Int] = { new Tuple2(width, height) } + var imageSize:(Int, Int) = { new Tuple2(width, height) } + + @transient + var imageName:String = "" var imageType:ImageType = ImageType.SingleFrameImage + def getName():String = { + if(this.imageName.length < 1) { + this.imageName = this.getImagePath.split('/').last + } + this.imageName + } + def isSimilarTo(otherImage:Image):Boolean = { //debug(s"Checking $imagePath for similarities with ${otherImage.imagePath}") HashService.areImageHashesSimilar(this.hashes,otherImage.hashes) diff --git a/src/main/scala/com/sothr/imagetools/ui/component/ImageTileFactory.scala b/src/main/scala/com/sothr/imagetools/ui/component/ImageTileFactory.scala new file mode 100644 index 0000000..29d3da5 --- /dev/null +++ b/src/main/scala/com/sothr/imagetools/ui/component/ImageTileFactory.scala @@ -0,0 +1,37 @@ +package com.sothr.imagetools.ui.component + +import javafx.geometry.Pos +import javafx.scene.control.Label +import javafx.scene.image.{ImageView, Image} +import javafx.scene.layout.{VBox} + +/** + * Created by drew on 8/6/14. + * + * Creates pre-generated image tiles that can be rendered to a scene + */ +object ImageTileFactory { + + def get(image:com.sothr.imagetools.image.Image):VBox = { + val imageTile = new VBox() + imageTile.setPrefSize(192.0d,192.0d) + imageTile.setAlignment(Pos.TOP_CENTER) + + // Image + val genImageView = new ImageView() + val thumbnail = new Image(image.getThumbnailPath) + genImageView.setImage(thumbnail) + genImageView.setFitWidth(128.0) + genImageView.setPreserveRatio(true) + imageTile.getChildren.add(genImageView) + + //Label + val imageLabel = new Label() + imageLabel.setText(image.getName()) + imageLabel.setWrapText(true) + imageTile.getChildren.add(imageLabel) + + imageTile + } + +} diff --git a/src/main/scala/com/sothr/imagetools/ui/controller/AppController.scala b/src/main/scala/com/sothr/imagetools/ui/controller/AppController.scala index b02c5e8..0710df4 100644 --- a/src/main/scala/com/sothr/imagetools/ui/controller/AppController.scala +++ b/src/main/scala/com/sothr/imagetools/ui/controller/AppController.scala @@ -7,12 +7,13 @@ import javafx.scene.{Scene,Group} import javafx.scene.text.{TextAlignment, Text} import java.io.IOException import java.util.Scanner +import com.sothr.imagetools.image.Image +import com.sothr.imagetools.ui.component.ImageTileFactory import com.sothr.imagetools.util.ResourceLoader import grizzled.slf4j.Logging import javafx.scene.web.WebView import org.markdown4j.Markdown4jProcessor -import javafx.scene.image.{Image, ImageView} -import javafx.collections.{FXCollections, ObservableList} +import javafx.collections.{FXCollections} /** * Created by drew on 12/31/13. @@ -28,13 +29,11 @@ class AppController extends Logging { @FXML def initialize() = { //test - val testImage = new Image("test.jpg") + val testImage = new Image() + testImage.setThumbnailPath("test.jpg") + testImage.setImagePath("test.jpg") for (i <- 1 to 100) { - val genImageView = new ImageView() - genImageView.setImage(testImage) - genImageView.setFitWidth(128.0) - genImageView.setPreserveRatio(true) - imageTilePane.getChildren.add(genImageView) + imageTilePane.getChildren.add(ImageTileFactory.get(testImage)) } val list = FXCollections.observableArrayList[String]() for (i <- 1 to 100) {