/*
* File : MediaPreviewPanel.java
* Created : 17-feb-2004 13:32
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details (see the LICENSE file).
*/
package edu.xtec.jclic.bags;
import edu.xtec.jclic.PlayStation;
import edu.xtec.jclic.beans.ImgPanel;
import edu.xtec.jclic.boxes.ActiveBoxContent;
import edu.xtec.jclic.boxes.JPanelActiveBox;
import edu.xtec.jclic.media.MediaContent;
import edu.xtec.jclic.misc.Utils;
import edu.xtec.jclic.project.JClicProjectEditor;
import edu.xtec.util.Options;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.29
*/
public class MediaPreviewPanel extends JPanel {
public static final int PREFERRED_CMP_WIDTH=600;
public static final int PREFERRED_CMP_HEIGHT=400;
public static final String SAMPLE_TEXT="ABCDEFGHIJ\nKLMNOPQRST\nUVWXYZ\nabcdefghij\nklmnopqrst\nuvwxyz\n0123456789\n";
MediaBagElementEditor mbed;
Options options;
PlayStation ps;
int mediaType;
/** Creates a new instance of MediaPreviewPanel */
public MediaPreviewPanel(MediaBagElementEditor mbed, Options options) {
super();
this.mbed=mbed;
this.options=options;
setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS));
if(mbed!=null){
JComponent cmp=null;
mediaType=Utils.getFileType(mbed.getMediaBagElement().getFileName());
switch(mediaType){
case Utils.TYPE_IMAGE:
cmp=buildImgComponent();
break;
case Utils.TYPE_AUDIO:
case Utils.TYPE_MIDI:
case Utils.TYPE_ANIM:
case Utils.TYPE_VIDEO:
cmp=buildMediaComponent();
break;
case Utils.TYPE_FONT:
cmp=buildFontComponent();
break;
default:
break;
}
if(cmp!=null)
add(cmp);
}
}
public void end(){
if(ps!=null)
ps.stopMedia(1);
}
protected JComponent buildImgComponent(){
Image img=null;
JComponent result=null;
try{
img=mbed.getMediaBagElement().prepareAndGetImage(mbed.getMediaBag().getProject().getFileSystem());
} catch(Exception ex){
System.err.println("Error loading image "+mbed.getMediaBagElement().getFileName());
}
if(img!=null){
result=new JScrollPane(new ImgPanel(new ImageIcon(img)));
result.setPreferredSize(new Dimension(PREFERRED_CMP_WIDTH, PREFERRED_CMP_HEIGHT));
}
return result;
}
protected JComponent buildFontComponent(){
Object o=mbed.getMediaBagElement().getData();
JTextArea textArea=new JTextArea();
if(o instanceof Font){
textArea.setFont(((Font)o).deriveFont(Font.PLAIN, 48));
textArea.setText(SAMPLE_TEXT);
}
else{
textArea.setText(options.getMsg("edit_media_font_error"));
}
return new JScrollPane(textArea);
}
protected JComponent buildMediaComponent(){
ActiveBoxContent abc=new ActiveBoxContent();
abc.mediaContent=new MediaContent();
int mt=MediaContent.UNKNOWN;
switch(mediaType){
case Utils.TYPE_AUDIO:
mt=MediaContent.PLAY_AUDIO;
break;
case Utils.TYPE_MIDI:
mt=MediaContent.PLAY_MIDI;
break;
case Utils.TYPE_ANIM:
case Utils.TYPE_VIDEO:
mt=MediaContent.PLAY_VIDEO;
break;
}
abc.mediaContent.mediaType=mt;
abc.mediaContent.mediaFileName=mbed.getMediaBagElement().getFileName();
abc.mediaContent.stretch=true;
abc.mediaContent.free=false;
abc.dimension=new Dimension(PREFERRED_CMP_WIDTH, PREFERRED_CMP_HEIGHT);
JPanelActiveBox jpab=new JPanelActiveBox(null, null, this);
JClicProjectEditor prjed=(JClicProjectEditor)mbed.getFirstParent(JClicProjectEditor.class);
if(prjed!=null && prjed.getTestPlayerContainer()!=null){
ps=prjed.getTestPlayerContainer().getTestPlayer();
jpab.setPlayStation(ps);
}
jpab.setActiveBoxContent(abc);
try{
abc.realizeContent(mbed.getMediaBag());
} catch(Exception ex){
System.err.println("Error: "+ex);
}
JScrollPane result=new JScrollPane(jpab);
result.setPreferredSize(new Dimension(PREFERRED_CMP_WIDTH, PREFERRED_CMP_HEIGHT));
return result;
}
}