/*
* File : ActivityEditor.java
* Created : 18-sep-2002 17:28
* 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;
import edu.xtec.jclic.automation.AutoContentProviderEditor;
import edu.xtec.jclic.bags.*;
import edu.xtec.jclic.boxes.ActiveBagContentEditor;
import edu.xtec.jclic.boxes.ActiveBoxContentEditor;
import edu.xtec.jclic.edit.*;
import edu.xtec.jclic.media.EventSoundsEditorPanel;
import edu.xtec.jclic.project.JClicProjectEditor;
import edu.xtec.jclic.skins.Skin;
import edu.xtec.util.Messages;
import edu.xtec.util.Options;
import edu.xtec.util.TripleString;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Stroke;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Icon;
import javax.swing.ImageIcon;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.09.16
*/
public class ActivityEditor extends Editor{
protected static ImageIcon icon;
/** Creates a new instance of ActivityEditor */
public ActivityEditor(Activity act) {
super(act);
}
protected void createChildren() {
Activity act=getActivity();
if(act.acp!=null)
act.acp.getEditor(this);
}
public AutoContentProviderEditor getAutoContentProviderEditor(){
return (AutoContentProviderEditor)getFirstChild(AutoContentProviderEditor.class);
}
public Class getEditorPanelClass() {
return ActivityEditorPanel.class;
}
protected static final int COMMON_PANELS=3;
public synchronized EditorPanel createEditorPanel(Options options) {
ActivityEditorPanel panel=new ActivityEditorPanel(options);
//panel.addInternalPanel(new ActivityEditorDescPanel(panel), null, null);
panel.addInternalPanel(new ActivityEditorOptionsPanel(panel), null, null);
//panel.addInternalPanel(new ActivityEditorControlsPanel(panel), null, null);
panel.addInternalPanel(new ActivityEditorFramePanel(panel), null, null);
panel.addInternalPanel(new ActivityEditorMsgPanel(panel), null, null);
createPanels(panel);
return panel;
}
@Override
public String getTitleKey(){
return "edit_act";
}
protected void createPanels(ActivityEditorPanel panel){
}
public Activity getActivity(){
return (Activity)getFirstObject(Activity.class);
}
public JClicProjectEditor getProjectEditor(){
return (JClicProjectEditor)getFirstParent(JClicProjectEditor.class);
}
public MediaBagEditor getMediaBagEditor(){
JClicProjectEditor jcpe=getProjectEditor();
return jcpe==null ? null : jcpe.getMediaBagEditor();
}
public Options getOptions(){
return getActivity().getProject().getBridge().getOptions();
}
public ActivityBagElementEditor getActivityBagElementEditor(){
return (ActivityBagElementEditor)getFirstParent(ActivityBagElementEditor.class);
}
public ActivityBagEditor getActivityBagEditor(){
return (ActivityBagEditor)getFirstParent(ActivityBagEditor.class);
}
public boolean rename(String newName, Component parent, Messages msg){
String oldName=getActivity().name;
String errMsg=null;
newName=newName.trim();
boolean result=false;
if(oldName.equals(newName)){
// do nothing
}
else if(newName.length()<1)
errMsg="edit_media_rename_invalid";
else if(getActivityBagEditor().getActivityBag().getElementByName(newName)!=null)
errMsg="edit_media_rename_exists";
else{
result=getProjectEditor().nameChanged(Constants.T_ACTIVITY, oldName, newName);
}
if(errMsg!=null && msg!=null && parent!=null){
msg.showAlert(parent, errMsg);
}
return result;
}
public synchronized void saveData(){
//System.out.println("saving data!");
ActivityBagElementEditor abee=getActivityBagElementEditor();
if(abee!=null){
ActivityBagElement abe=abee.getActivityBagElement();
String name=abe.getName();
abe.setData(getActivity().getJDomElement());
if(!abe.getName().equals(name)){
// FIRE NAME CHANGE
}
if(isModified())
abee.setModified(true);
}
}
@Override
public String toString(){
return getActivity().name;
}
@Override
public void setActionsOwner(){
if(getEditorParent()!=null)
getEditorParent().setActionsOwner();
}
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();
}
final static BasicStroke dashedStroke = new BasicStroke(
1.0f,
BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND,
10.0f,
new float[]{5.0f},
0.0f);
public void drawPreview(Graphics2D g2, Rectangle bounds, int margin){
Rectangle r=new Rectangle(bounds.x+margin, bounds.y+margin, bounds.width-2*margin, bounds.height-2*margin);
g2.setXORMode(Color.white);
Stroke str=g2.getStroke();
g2.setStroke(dashedStroke);
g2.draw(r);
g2.setPaintMode();
g2.setStroke(str);
}
public boolean nameChanged(int type, String oldName, String newName){
boolean result=false;
Activity act=getActivity();
if((type & Constants.T_ACTIVITY)!=0 && oldName.equals(act.name)){
act.name=newName;
result=true;
}
for(int i=0; i<act.messages.length; i++){
if(act.messages[i]!=null)
result|=ActiveBoxContentEditor.nameChanged(act.messages[i], type, oldName, newName);
}
if((type & Constants.T_IMAGE)!=0 && oldName.equals(act.bgImageFile)){
act.bgImageFile=newName;
result=true;
}
if(act.eventSounds!=null
&& (type & (Constants.T_AUDIO|Constants.T_MIDI))!=0){
result|=EventSoundsEditorPanel.nameChanged(act.eventSounds, type, oldName, newName);
}
if((type & Constants.T_XML)!=0
&& oldName.equals(act.skinFileName)
&& !oldName.startsWith(Skin.INTERNAL_SKIN_PREFIX)){
act.skinFileName=newName;
result=true;
// Explore skin dependences...
}
if(act.abc!=null){
for(int i=0; i<act.abc.length; i++){
if(act.abc[i]!=null)
result|=ActiveBagContentEditor.nameChanged(act.abc[i], type, oldName, newName);
}
}
if(result){
//javax.swing.SwingUtilities.invokeLater(new Runnable(){
// public void run(){
// fireEditorDataChanged(null);
// }});
setModified(true);
}
return result;
}
public static final String SYSTEM_LIST="activities.listactivities";
public static List<TripleString> getSystemActivityList(Options options){
List<TripleString> result;
try{
result=TripleString.getTripleList(SYSTEM_LIST, options, false, true, true);
} catch(Exception ex){
System.err.println("Error reading list of activities!\n"+ex);
result=new ArrayList<TripleString>();
}
return result;
}
}