/*
* File : ActivitySequenceElementEditor.java
* Created : 08-apr-2003 16: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.TestPlayerContainer;
import edu.xtec.jclic.edit.Editor;
import edu.xtec.jclic.edit.EditorPanel;
import edu.xtec.jclic.project.JClicProjectEditor;
import edu.xtec.util.Options;
import edu.xtec.util.ResourceManager;
import edu.xtec.util.StrUtils;
import javax.swing.Icon;
import javax.swing.ImageIcon;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.09
*/
public class ActivitySequenceElementEditor extends Editor{
protected static ImageIcon icon;
public static boolean actionsCreated=false;
protected ActivitySequence activitySequence;
//public static EditorAction testActivityAction;
//public static EditorAction newActivitySequenceElementAction;
/** Creates a new instance of ActivitySequenceElementEditor */
public ActivitySequenceElementEditor(ActivitySequenceElement el) {
super(el);
}
protected void createChildren() {
}
public Class getEditorPanelClass() {
return ActivitySequenceElementEditorPanel.class;
}
public EditorPanel createEditorPanel(Options options) {
return new ActivitySequenceElementEditorPanel(options);
}
public ActivitySequenceElement getActivitySequenceElement(){
return (ActivitySequenceElement)getFirstObject(ActivitySequenceElement.class);
}
public String getTag(){
ActivitySequenceElement ase=getActivitySequenceElement();
return StrUtils.nullableString(ase.getTag());
}
protected void saveData(){
}
/*
protected boolean delete(boolean changeSelection){
ActivitySequence as=getActivitySequenceElement().getParent();
boolean result=super.delete(changeSelection);
if(result && as!=null)
as.remove(getActivitySequenceElement());
return result;
}
*/
@Override
protected boolean canClone(){
return true;
}
@Override
protected Editor getClone() throws Exception{
ActivitySequenceElement asel=(ActivitySequenceElement)getActivitySequenceElement().clone();
return asel.getEditor(null);
}
protected void setActionsFlag(){
allowDelete = true;
allowCut = true;
allowCopy = true;
allowPaste=true;
}
@Override
public void setActionsOwner(){
setActionsFlag();
super.setActionsOwner();
/*
if(basicActionsCreated){
setActionsFlag();
boolean eUp=false, eDown=false;
ActivitySequence as=getActivitySequenceElement().getParent();
if(as!=null){
int i=as.getElementIndex(getActivitySequenceElement());
eUp=i>0;
eDown=i<as.getSize()-1;
}
moveUpAction.setActionOwner(eUp ? this : null);
moveDownAction.setActionOwner(eDown ? this : null);
copyAction.setActionOwner(allowCopy && canClone() ? this : null);
cutAction.setActionOwner(allowCut ? this : null);
pasteAction.setActionOwner(canPasteHere() ? this : null);
deleteAction.setActionOwner(allowDelete ? this : null);
}
*/
if(actionsCreated){
ActivityBagElementEditor.testActivityAction.setActionOwner(this);
ActivitySequenceEditor.newActivitySequenceElementAction.setActionOwner(this);
}
}
@Override
public void clearActionsOwner(){
super.clearActionsOwner();
ActivityBagElementEditor.testActivityAction.setActionOwner(null);
ActivitySequenceEditor.newActivitySequenceElementAction.setActionOwner(getEditorParent());
}
public static Icon getIcon(){
if(icon==null)
icon=edu.xtec.util.ResourceManager.getImageIcon("icons/miniclic.png");
return icon;
}
@Override
public Icon getIcon(boolean leaf, boolean expanded){
//return leaf ? getIcon() : null;
return getIcon();
}
@Override
public boolean canBeParentOf(Editor e){
return (e instanceof ActivitySequenceEditor);
}
@Override
public boolean canBeSiblingOf(Editor e){
return (e instanceof ActivitySequenceElementEditor);
}
public JClicProjectEditor getProjectEditor(){
return (JClicProjectEditor)getFirstParent(JClicProjectEditor.class);
}
public void testActivity(){
collectData();
JClicProjectEditor pe=getProjectEditor();
int item=getParent().getIndex(this);
if(pe!=null && item>=0){
TestPlayerContainer tpc=pe.getTestPlayerContainer();
if(tpc!=null && tpc.getTestPlayer()!=null){
tpc.getTestPlayer().load(null, Integer.toString(item), null, null);
tpc.test();
}
}
}
public static void createActions(Options options){
ActivityBagElementEditor.createActions(options);
actionsCreated=true;
}
/*
public boolean moveUp(boolean updateSelection){
boolean result=super.moveUp(updateSelection);
if(result){
ActivitySequenceElement ase=getActivitySequenceElement();
ActivitySequence as=ase.getParent();
if(as!=null){
int index=as.getElementIndex(ase);
if(index>0){
as.remove(ase);
as.insertElementAt(ase, index-1);
if(updateSelection)
select();
}
}
}
return result;
}
public boolean moveDown(boolean updateSelection){
boolean result=super.moveDown(updateSelection);
if(result){
ActivitySequenceElement ase=getActivitySequenceElement();
ActivitySequence as=ase.getParent();
if(as!=null && ase!=null){
int index=as.getElementIndex(ase);
if(index<as.getSize()-1){
as.remove(ase);
as.insertElementAt(ase, index+1);
if(updateSelection)
select();
}
}
}
return result;
}
*/
public static Icon getElementIcon(ActivitySequenceElement ase, boolean fwd){
String iconName = fwd ? "seq_next" : "seq_prev";
ActivitySequenceJump asj=fwd ? ase.fwdJump : ase.backJump;
if(asj!=null){
if(asj.action==JumpInfo.STOP)
iconName+="_stop";
else if(asj.action==JumpInfo.JUMP)
iconName+="_jump";
else if(asj.action==JumpInfo.RETURN)
iconName+="_return";
else if(asj.action==JumpInfo.EXIT)
iconName="seq_exit";
}
return ResourceManager.getImageIcon("icons/"+iconName+".gif");
}
public static String getElementJumpDescription(ActivitySequenceElement ase, boolean fwd){
String result=null;
ActivitySequenceJump asj = fwd ? ase.fwdJump : ase.backJump;
if(asj!=null){
result=StrUtils.secureString(asj.sequence);
if(asj.projectPath!=null)
result=result+" ("+asj.projectPath+")";
}
return result;
}
public static String getElementJumpDescription(ActivitySequenceElement ase){
String result=null;
if(ase.fwdJump!=null || ase.backJump!=null){
result=getElementJumpDescription(ase, true);
String r2=getElementJumpDescription(ase, false);
if(r2!=null && r2.length()>0){
StringBuilder sb=new StringBuilder(100);
if(result!=null && result.length()>0)
sb.append(result).append(" ");
sb.append("* ").append(r2);
result=sb.substring(0);
}
}
return result;
}
public boolean nameChanged(int type, String oldName, String newName){
boolean result=false;
ActivitySequenceElement ase=getActivitySequenceElement();
if((type & Constants.T_ACTIVITY)!=0 && oldName.equals(ase.getActivityName())){
ase.setActivityName(newName);
setModified(true);
result=true;
}
if((type & Constants.T_SEQUENCE)!=0){
if(oldName.equals(ase.getTag())){
ase.setTag(newName);
result=true;
}
if(ase.fwdJump!=null){
result|=jumpInfoNameChanged(ase.fwdJump, oldName, newName)
|jumpInfoNameChanged(ase.fwdJump.upperJump, oldName, newName)
|jumpInfoNameChanged(ase.fwdJump.lowerJump, oldName, newName);
}
if(ase.backJump!=null){
result|=jumpInfoNameChanged(ase.backJump, oldName, newName)
|jumpInfoNameChanged(ase.backJump.upperJump, oldName, newName)
|jumpInfoNameChanged(ase.backJump.lowerJump, oldName, newName);
}
if(result)
setModified(true);
}
return result;
}
private boolean jumpInfoNameChanged(JumpInfo ji, String oldName, String newName){
boolean result=false;
if(ji!=null && ji.action==JumpInfo.JUMP && ji.projectPath==null && oldName.equals(ji.sequence)){
ji.sequence=newName;
result=true;
}
return result;
}
}