/* * File : ActivityBagElementEditor.java * Created : 22-apr-2003 16:29 * 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.Activity; import edu.xtec.jclic.ActivityEditor; import edu.xtec.jclic.TestPlayerContainer; import edu.xtec.jclic.edit.Editor; import edu.xtec.jclic.edit.EditorAction; import edu.xtec.jclic.edit.EditorPanel; import edu.xtec.jclic.project.JClicProject; import edu.xtec.jclic.project.JClicProjectEditor; import edu.xtec.util.Options; import javax.swing.Icon; import javax.swing.ImageIcon; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.29 */ public class ActivityBagElementEditor extends Editor { public static ImageIcon icon; public static EditorAction testActivityAction; //public static EditorAction newActivityBagElementAction; public static boolean actionsCreated; /** Creates a new instance of ActivityBagElementEditor */ public ActivityBagElementEditor(ActivityBagElement abe) { super(abe); } protected void createChildren() { } public EditorPanel createEditorPanel(Options options) { ActivityEditor ae=getActivityEditor(); return (ae==null ? null : ae.createEditorPanel(options)); } public Class getEditorPanelClass() { ActivityEditor ae=getActivityEditor(); return (ae==null ? null : ae.getEditorPanelClass()); } public ActivityBagElement getActivityBagElement(){ return (ActivityBagElement)getUserObject(); } public ActivityEditor getActivityEditor(){ ActivityEditor ae = getChildCount()>0 ? (ActivityEditor)getFirstChild() : null; if(ae==null){ try{ ActivityBagElement abel=getActivityBagElement(); JClicProject prj=((ActivityBagEditor)getEditorParent()).getActivityBag().getProject(); Activity act=Activity.getActivity(abel.getData(), prj); ae=(ActivityEditor)act.getEditor(this); } catch(Exception ex){ System.err.println("Error loading activity!\n"); ex.printStackTrace(System.err); } } return ae; } public void changeActivityClass(String newClassName) throws Exception{ ((ActivityBagEditor)getEditorParent()).changeActivityClass(this, newClassName); } public void forgetActivityEditor(){ if(getChildCount()>0){ ActivityEditor ae=(ActivityEditor)getFirstChild(); if(ae.isModified()) ae.saveData(); removeAllChildren(); } } public static Icon getIcon(){ if(icon==null) icon=edu.xtec.util.ResourceManager.getImageIcon("icons/miniclic.png"); return icon; } @Override public javax.swing.Icon getIcon(boolean leaf, boolean expanded){ return getIcon(); } @Override public String toString(){ return getActivityBagElement().getName(); } @Override public boolean canBeParentOf(Editor e){ return (e instanceof ActivityEditor); } @Override public boolean canBeSiblingOf(Editor e){ return (e instanceof ActivityBagElementEditor); } @Override protected boolean canClone(){ return true; } @Override protected Editor getClone() throws Exception{ ActivityBagElement abe=(ActivityBagElement)getActivityBagElement().clone(); return abe.getEditor(null); } protected void setActionsFlag(){ allowDelete = true; allowCut = true; allowCopy = true; allowPaste=true; } @Override protected boolean delete(boolean changeSelection){ ActivityEditor aed=getActivityEditor(); String activityName=aed.getActivity().name; JClicProjectEditor projectEditor=aed.getProjectEditor(); boolean result=super.delete(changeSelection); if(result){ projectEditor.getActivitySequenceEditor().removeElementsWith(activityName); } return result; } @Override public void setActionsOwner(){ setActionsFlag(); super.setActionsOwner(); if(actionsCreated){ testActivityAction.setActionOwner(this); ActivityBagEditor.newActivityBagElementAction.setActionOwner(this); ActivityBagEditor.copyActivityAttributesAction.setActionOwner(this); } } @Override public void clearActionsOwner(){ super.clearActionsOwner(); testActivityAction.setActionOwner(null); ActivityBagEditor.newActivityBagElementAction.setActionOwner(getEditorParent()); ActivityBagEditor.copyActivityAttributesAction.setActionOwner(null); } public void testActivity(){ ActivityEditor ae=getActivityEditor(); ae.collectData(); JClicProjectEditor pe=ae.getProjectEditor(); if(pe!=null){ TestPlayerContainer tpc=pe.getTestPlayerContainer(); if(tpc!=null && tpc.getTestPlayer()!=null){ String activityName=ae.getActivity().name; ActivitySequenceEditor ased=pe.getActivitySequenceEditor(); if(ased.getActivitySequence().getElementByActivityName(activityName)==null){ ased.createNewSequenceElement(activityName, null, -1); } pe.collectData(); pe.getProject().skin=null; pe.getProject().realize(null, tpc.getTestPlayer()); tpc.getTestPlayer().load(null, null, activityName, null); tpc.test(); } } } public static void createActions(Options options){ createBasicActions(options); if(!actionsCreated){ testActivityAction=new EditorAction("edit_act_testAction", "icons/play.gif", "edit_act_testAction_tooltip", options){ protected void doAction(Editor e){ if(e instanceof ActivityBagElementEditor){ ((ActivityBagElementEditor)e).testActivity(); } else if(e instanceof ActivitySequenceElementEditor){ ((ActivitySequenceElementEditor)e).testActivity(); } } }; actionsCreated=true; } } public boolean nameChanged(int type, String oldName, String newName){ boolean result=false; boolean hasChild=getChildCount()>0; ActivityEditor ae=getActivityEditor(); if(ae!=null) result=ae.nameChanged(type, oldName, newName); if(!hasChild) forgetActivityEditor(); return result; } }