License text

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER 
 * Copyright  2008, 2010 Oracle and/or its affiliates.  All rights reserved. 
 * Use is subject to license terms.
 * 
 * This file is available and licensed under the following license:
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met: 
 * 
 *   * Redistributions of source code must retain the above copyright notice, 
 *     this list of conditions and the following disclaimer. 
 *
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 *
 *   * Neither the name of Oracle Corporation nor the names of its contributors 
 *     may be used to endorse or promote products derived from this software 
 *     without specific prior written permission. 
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

    

/*
 * ControllBar.fx
 *
 * Created on Dec 21, 2009, 5:17:22 AM
 */

package fxpodcastviewer.ui.desktop;

import javafx.scene.CustomNode;
import javafx.scene.text.*;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.control.TextBox;
import javafx.scene.layout.LayoutInfo;
import javafx.scene.shape.Rectangle;
import javafx.scene.layout.HBox;
import fxpodcastviewer.util.ImageButton;
import javafx.scene.image.*;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.stage.StageStyle;
import javafx.scene.shape.Line;
import fxpodcastviewer.Main;
import fxpodcastviewer.storage.PersistenceHandler;
import fxpodcastviewer.feed.FeedValidator;
import fxpodcastviewer.feed.PodcastParser;
import javafx.scene.shape.Circle;

/**
 * @author raghunair
 */

public class ControllBar extends CustomNode{

    var width = 640;
    var height = 50;
    var iconSize = 30;
    

    var rectangle = Rectangle{
        width:640
        height:height
        fill:Color.TRANSPARENT
        stroke:Color.TRANSPARENT
    }


    var textBox:TextBox =TextBox{
        layoutInfo:LayoutInfo{
            width:300
            height:iconSize
        }
        text:"http://g4tv.com/thefeed/podcasts/19/The_Daily_Feed_Video_Podcast.xml"
        font:bind Font.font("Arial", FontWeight.BOLD, 14);

        clip:Rectangle{
            translateX:5
            translateY:2.5
            width:290
            height:iconSize-5
            arcHeight:iconSize
            arcWidth:iconSize
            fill:Color.BLACK
        }
        action:search

    }

    function search(){
        var location = textBox.rawText;
        FeedValidator{
            location:location
            podcastParser:PodcastParser{location:location}
        }.start();

    }


    var searchButton:ImageButton = ImageButton{
        translateX:bind textBox.layoutBounds.width - iconSize
        translateY: 2.5
        normalImage:Image{
            url:"{__DIR__}resources/reload.png"
        }

        fitHeight:iconSize - 5
        fitWidth:iconSize - 5
        action:search


    }

    var circle:Circle = Circle{
        translateX:bind textBox.layoutBounds.width - iconSize/2 -2.5
        translateY:iconSize/2
        radius:(iconSize-5)/2
        fill:Color.WHITE        
    }


    var textGrp:Group = Group{
        content: [textBox,circle, searchButton]
    }


    var addButton  = ImageButton{
        normalImage:Image{
            url:"{__DIR__}resources/favadd.png"
        }
        fitHeight:iconSize
        fitWidth:iconSize
        action:function(){
            PersistenceHandler.store(Main.mainScreen.mediaMeta);
        }

    }

    public function restore():Void{
        feedButton.restore();
    }


    var feedButton = ImageButton{
        normalImage:Image{
            url:"{__DIR__}resources/fav.png"
        }
        toggleImage:Image{
            url:"{__DIR__}resources/prev.png"
        }
        toggleAction:function(){
            Main.mainScreen.removeList();
        }

        action:function(){
            Main.mainScreen.podcastList.podcasts = PersistenceHandler.storedMedias;
            Main.mainScreen.addList();
        }
        fitWidth:iconSize
        fitHeight:iconSize
    }

    var closeButton = ImageButton{
        normalImage:Image{
            url:"{__DIR__}resources/close.png"
        }
        fitHeight:iconSize
        fitWidth:iconSize
        action:function(){
            FX.exit();
        }

    }

    var line:Line = Line{
        stroke:Color.GRAY
        translateY:45
        startX:10
        startY:0
        endX:630
        endY:0
    }


    override function create():Node{
        var text = ImageView{
            image:Image{ url:"{__DIR__}resources/podcastSearch.png"}
        }

        Group{
            content:[
                rectangle,
                HBox{  
                translateX:10
                spacing:20
                content: [text,textGrp,addButton,feedButton,closeButton]
            },line]
        }

    }


}

public function run(){
            Stage {
                title : "MyApp"
                style:StageStyle.TRANSPARENT
                scene: Scene {
                        width: 640
                        height: 480
                        fill:Color.BLACK
                        content: [ControllBar{}]
                }
        }


}