/*
 * Main.fx
 *
 * Created on 11 Apr, 2009, 9:56:06 AM
 */

package loadimage;

import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

/**
 @author Rakesh Menon
 */

var sceneWidth = 300;
var sceneHeight = 225;

// Load specified image in background thread
var imageView = ImageView {
    image: Image {
        url: "http://farm4.static.flickr.com/3077/2365118433_ccb790041d_o_d.jpg"
        backgroundLoading: true
        placeholder: Image {
            url: "http://farm4.static.flickr.com/3077/2365118433_593ca9c5d5_t_d.jpg"
        }
    }
    fitWidth: sceneWidth
    fitHeight: sceneHeight
    // Preserve Aspect Ratio
    preserveRatio: true
}
// Bind to Image.progress and print the progress
var progress = bind imageView.image.progress on replace {
    println("progress {progress}");
}

// ProgressBar
var progressBar = Group {
    content: [
        Rectangle {
            x: 10
            y: (sceneHeight - 10)
            width: (sceneWidth - 20)
            height: 5
            arcWidth: 5
            arcHeight: 5
            fill: Color.GRAY
        },
        Rectangle {
            x: 11
            y: (sceneHeight - 9)
            // Change width of rectangle proportional to image progress
            width: bind ((sceneWidth - 20* progress)/100.0
            height: 3
            arcWidth: 5
            arcHeight: 5
            fill: Color.RED
        },
        Text {
            translateX: ((sceneWidth - 20)/2.0)
            translateY: (sceneHeight - 20)
            font: Font {
                name: "Bitstream Vera Sans Bold"
                size: 12
            }
            fill: Color.WHITE
            content: bind "{progress as Integer}%"
        }
    ]
}

Stage {
    scene: Scene {
        content: imageView, progressBar ]
        width: sceneWidth
        height: sceneHeight
        fill: Color.BLACK
    }
    resizable: false
    title: "Load Image..."
    style: StageStyle.UNDECORATED
}