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. 
 */

    

/*
 * PodcastMediaItem.fx
 *
 * Created on Dec 23, 2009, 1:51:49 AM
 */

package fxpodcastviewer.ui.desktop.list;
import com.sun.list.ListItem;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.Group;
import javafx.scene.image.*;
import javafx.scene.layout.VBox;
import javafx.scene.text.*;
import fxpodcastviewer.util.ImageButton;
import javafx.scene.shape.Rectangle;
import javafx.scene.layout.Stack;
import javafx.scene.layout.HBox;
import fxpodcastviewer.Main;
import javafx.scene.Cursor;
import fxpodcastviewer.storage.PersistenceHandler;

/**
 * @author raghunair
 */

public class PodcastMediaItem extends ListItem{

    override function create():Node{
        var photoHeight = 92;
        var photo:ImageView = ImageView {
            fitHeight:photoHeight
            fitWidth:120
            cache:true
            onMousePressed:function(e){
                Main.mainScreen.removeList();
                Main.mainScreen.restoreControlBar();
                Main.mainScreen.mediaMeta = media;
            }
            onMouseEntered:function(e){
                photo.cursor = Cursor.HAND
            }

            onMouseExited:function(e){
                photo.cursor = Cursor.DEFAULT
            }
        }
        
        var media = bind (item as PodcastModal).podcastMedia on replace {
          if ( media.image != null){
              photo.image =Image{
                    url: media.image
                    backgroundLoading:true
                    placeholder:Image{
                        url:"{__DIR__}podcast.png"
                    }

              }
          }else {
              photo.image = Image{
                url:"{__DIR__}podcast.png"
              }
          }

        };

        var podDetails:VBox = VBox{
            spacing:5
            content: [
              Text{
                content:bind media.title
                font:bind Font.font("Arial", FontWeight.BOLD, 16);
                fill:Color.WHITE
              },

              Text{
                content:bind "By {media.publisher}"
                font:bind Font.font("Arial", 16);
                fill:Color.WHITE
              },
              Text{
                content:bind media.pubDate
                font:bind Font.font("Arial", 16);
                fill:Color.WHITE
              },
              Text{
                content:bind media.type
                fill:Color.WHITE
                font:bind Font.font("Arial", 16);
              },
            ]
        }


        var detailsGroup = Group {
            translateY:5
            content: [Rectangle{
                        width:410
                        height:photoHeight
                        fill:Color.TRANSPARENT
                      },podDetails]
        }

        
        var  remove:ImageButton = ImageButton{
            normalImage:Image{ url:"{__DIR__}close.png"}
            fitHeight:30
            fitWidth:30
            action:function(){
                if (media.fromStore){
                    PersistenceHandler.deleteMedia(media);
                    Main.mainScreen.podcastList.podcasts = PersistenceHandler.storedMedias;
                }else{
                    delete media from Main.currentFeed.medias;
                    Main.mainScreen.podcastList.podcasts = Main.currentFeed.medias;
                }
            }
        }


        var removeGroup:Stack = Stack{
            content: [Rectangle{
                        height:photoHeight
                        width:30
                        fill:Color.TRANSPARENT
                      },remove]
        }

        var  play:ImageButton = ImageButton{
            normalImage:Image{ url:"{__DIR__}play.png"}
            fitHeight:30
            fitWidth:30
            action:function(){
               Main.mainScreen.removeList();
               Main.mainScreen.restoreControlBar();
               Main.mainScreen.mediaMeta = media;

            }

        }

        var playGroup:Stack = Stack{
            content: [Rectangle{
                        height:photoHeight
                        width:30
                        fill:Color.TRANSPARENT
                      },play]
        }

        Group{
            content: [
            
            HBox{
                translateY:3
                translateX:10
                spacing:10
                content: [photo,detailsGroup,removeGroup,playGroup]
            },rectangle]
       }
        
    }


}