/* * File : MediaBagElementEditor.java * Created : 02-feb-2004 13:46 * 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.Constants; import edu.xtec.jclic.edit.Editor; import edu.xtec.jclic.edit.EditorAction; import edu.xtec.jclic.edit.EditorPanel; import edu.xtec.jclic.fileSystem.FileSystem; import edu.xtec.jclic.misc.Utils; import edu.xtec.jclic.project.JClicProjectEditor; import edu.xtec.util.Messages; import edu.xtec.util.Options; import java.awt.Component; import java.awt.Image; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.Icon; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.09.16 */ public class MediaBagElementEditor extends Editor{ private static boolean actionsCreated ; private static Icon icon; public static EditorAction testMediaBagElementAction; // public static EditorAction newMediaBagElementAction; /** Creates a new instance of MediaBagElementEditor */ public MediaBagElementEditor(MediaBagElement el) { super(el); } protected void createChildren() { } public Class getEditorPanelClass() { return MediaBagElementEditorPanel.class; } public EditorPanel createEditorPanel(Options options) { return new MediaBagElementEditorPanel(options); } public MediaBagElement getMediaBagElement(){ return (MediaBagElement)getFirstObject(MediaBagElement.class); } public MediaBag getMediaBag(){ MediaBag result=null; if(getEditorParent() instanceof MediaBagEditor){ result=((MediaBagEditor)getParent()).getMediaBag(); } return result; } public String getName(){ return getMediaBagElement().getName(); } private static MediaPreviewPanel previewPanel=null; public void testMedia(java.awt.Component parent, Options options){ if(previewPanel==null){ previewPanel=new MediaPreviewPanel(this, options); options.getMessages().showInputDlg(parent, previewPanel, "edit_media_preview_tooltip", null); //JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(parent), previewPanel, "preview", javax.swing.JOptionPane.PLAIN_MESSAGE); previewPanel.end(); previewPanel=null; } } public boolean rename(String newName, Editor.EditorListener agent, Messages msg){ String oldName=getName(); String errMsg=null; newName=newName.trim(); Component parentComponent=(agent instanceof Component) ? (Component)agent : null; boolean result=false; if(oldName.equals(newName)){ // do nothing } else if(newName.length()<1) errMsg="edit_media_rename_invalid"; else if(getMediaBag().getElement(newName)!=null) errMsg="edit_media_rename_exists"; else{ result=getProjectEditor().nameChanged( Utils.T_CODES[Utils.getFileType(getMediaBagElement().getFileName())], oldName, newName); //getMediaBagElement().setName(newName); //getMediaBag().fireMediaNameChanged(Constants.MEDIA_OBJECT, newName, oldName); //if(result) // fireEditorDataChanged(agent); } if(errMsg!=null && msg!=null && parentComponent!=null){ msg.showAlert(parentComponent, errMsg); } return result; } public void updateContent(Editor.EditorListener agent){ getMediaBagElement().setData(null); fireEditorDataChanged(/*agent*/null); } public boolean changeFileName(String newFileName, Editor.EditorListener agent, Messages msg){ boolean result=false; String errMsg=null; String oldFileName=getMediaBagElement().getFileName(); FileSystem fs=getMediaBag().getProject().getFileSystem(); newFileName=FileSystem.stdFn(newFileName.trim()); Component parentComponent=(agent instanceof Component) ? (Component)agent : null; if(oldFileName.equals(newFileName)){ // do nothing } else if(Utils.getFileType(oldFileName)!=Utils.getFileType(newFileName)){ errMsg="edit_media_chfile_different"; } else if(newFileName.length()<1) errMsg="edit_media_chfile_invalid"; else if(getMediaBag().getElementByFileName(newFileName)!=null){ if(msg!=null && parentComponent!=null){ msg.showAlert(parentComponent, new String[]{ msg.get("edit_media_exists_1"), newFileName, msg.get("edit_media_exists_2") }); } } else{ getMediaBagElement().setFileName(newFileName); result=true; fireEditorDataChanged(agent); } if(errMsg!=null && msg!=null && parentComponent!=null){ msg.showAlert(parentComponent, errMsg); } return result; } @Override public String toString(){ return getName(); } protected void saveData(){ } @Override protected boolean delete(boolean changeSelection){ MediaBagEditor mbe=(MediaBagEditor)getEditorParent(); boolean result=super.delete(changeSelection); if(result && mbe!=null){ result=mbe.getMediaBag().removeElement(getMediaBagElement()); mbe.fireEditorDataChanged(null); } return result; } @Override protected boolean canClone(){ return false; } protected void setActionsFlag(){ // ATENCIO: allowDelete = true; allowCut = false; allowCopy = false; allowPaste=false; } @Override public void setActionsOwner(){ setActionsFlag(); super.setActionsOwner(); if(actionsCreated){ testMediaBagElementAction.setActionOwner(this); //newMediaBagElementAction.setActionOwner(this); } } @Override public void clearActionsOwner(){ super.clearActionsOwner(); if(actionsCreated){ //newMediaBagElementAction.setActionOwner(null); testMediaBagElementAction.setActionOwner(null); } } public static Icon getIcon(){ if(icon==null) icon=edu.xtec.util.ResourceManager.getImageIcon("icons/movie.gif"); return icon; } @Override public Icon getIcon(boolean leaf, boolean expanded){ //return leaf ? getIcon() : null; return getIcon(); } @Override public boolean canBeParentOf(Editor e){ return false; } @Override public boolean canBeSiblingOf(Editor e){ return (e instanceof MediaBagElementEditor); } public JClicProjectEditor getProjectEditor(){ return (JClicProjectEditor)getFirstParent(JClicProjectEditor.class); } public static void createActions(Options opt){ createBasicActions(opt); if(!actionsCreated){ testMediaBagElementAction=new EditorAction("edit_media_preview", "icons/media_view.gif", "edit_media_preview_tooltip", opt){ protected void doAction(Editor e){ EditorPanel ep=getEditorPanelSrc(); if(ep!=null && e instanceof MediaBagElementEditor){ //MediaBagElement mbe=((MediaBagElementEditor)e).getMediaBagElement(); ((MediaBagElementEditor)e).testMedia(ep, ep.getOptions()); } } }; actionsCreated=true; } } public String getDescription(Options options){ MediaBagElement mbe=getMediaBagElement(); StringBuilder sb=new StringBuilder(); String fileName=mbe.getFileName(); if(fileName!=null){ int type=Utils.getFileType(fileName); sb.append(options.getMsg(Utils.TYPE_CODES[type])); if(type==Utils.TYPE_IMAGE){ if(mbe.animated) sb.append(" ").append(options.getMsg("ftype_animated")); try{ Image img=mbe.getImage(); if(img!=null){ sb.append(" (").append(img.getWidth(null)).append("x").append(img.getHeight(null)).append(")"); } } catch(Exception ex){ sb.append(" - ").append(options.getMsg("ERROR")); System.err.println("Error reading image "+fileName); } } } return sb.substring(0); } public long getFileSize(){ MediaBagElement mbe=getMediaBagElement(); long result=-1L; if(mbe!=null){ String fileName=mbe.getFileName(); if(fileName!=null && getMediaBag()!=null){ try{ result=getMediaBag().getProject().getFileSystem().getFileLength(fileName); } catch(Exception ex){ System.err.println("ERROR getting the size of "+fileName); } } } return result; } public boolean nameChanged(int type, String oldName, String newName){ boolean result=false; if((type & Constants.T_MEDIA)!=0 && oldName.equals(getMediaBagElement().getName())){ getMediaBagElement().setName(newName); setModified(true); result=true; } return result; } public List<String> listReferences(){ List<String> result=null; MediaBag mb=getMediaBag(); if(mb!=null){ Map<String, String> hm=new HashMap<String, String>(); mb.listReferencesTo(getName(), Constants.MEDIA_OBJECT, hm); result=new ArrayList<String>(hm.keySet()); } allowDelete=(result==null || result.isEmpty()); deleteAction.setEnabled(allowDelete); return result; } }