/*
* File : MenuElementEditor.java
* Created : 05-jun-2002 16:14
* 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.activities.panels;
import edu.xtec.jclic.edit.*;
import edu.xtec.jclic.misc.Utils;
import edu.xtec.jclic.project.ProjectLibrary;
import edu.xtec.util.Options;
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.ImageIcon;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.29
*/
public class MenuElementEditor extends Editor {
protected static ImageIcon icon;
protected ImageIcon meIcon;
protected ProjectLibrary projectLibrary;
public static EditorAction findProjectAction, findIconAction;
protected static boolean actionsCreated=false;
/** Creates new EditorMenuElement */
public MenuElementEditor(MenuElement me) {
super(me);
}
protected void createChildren(){
ProjectLibrary pl=getProjectLibrary();
if(pl!=null){
meIcon=getMenuElement().getIcon(pl.mediaBag);
}
}
public MenuElement getMenuElement(){
return (MenuElement)getUserObject();
}
public MenuEditor getMenuEditorParent(){
MenuEditor result=null;
if(getParent()!=null && getParent() instanceof MenuEditor)
result=(MenuEditor)getParent();
return result;
}
public Class getEditorPanelClass() {
return MenuElementEditorPanel.class;
}
public ProjectLibrary getProjectLibrary(){
if(projectLibrary!=null)
return projectLibrary;
MenuEditor me=getMenuEditorParent();
if(me!=null)
projectLibrary=me.getProjectLibrary();
return projectLibrary;
}
@Override
public String toString(){
return getMenuElement().caption;
}
public EditorPanel createEditorPanel(Options options) {
return new MenuElementEditorPanel(options);
}
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 leaf ? getIcon() : null;
}
@Override
protected boolean canClone(){
return true;
}
@Override
protected Editor getClone() throws Exception{
MenuElement me=MenuElement.getMenuElement(getMenuElement().getJDomElement());
MenuElementEditor mee=(MenuElementEditor)me.getEditor(null);
mee.projectLibrary=getProjectLibrary();
mee.meIcon=meIcon;
return mee;
}
@Override
public void setActionsOwner(){
allowCut = allowDelete = allowCopy = allowPaste = true;
super.setActionsOwner();
if(actionsCreated){
findProjectAction.setActionOwner(this);
findIconAction.setActionOwner(this);
boolean hasParent=(getMenuEditorParent()!=null);
MenuEditor.newMenuAction.setActionOwner(hasParent ? this : null);
MenuEditor.newMenuElementAction.setActionOwner(hasParent ? this : null);
}
}
@Override
public void clearActionsOwner(){
super.clearActionsOwner();
if(actionsCreated){
findProjectAction.setActionOwner(null);
findIconAction.setActionOwner(null);
MenuEditor.newMenuAction.setActionOwner(null);
MenuEditor.newMenuElementAction.setActionOwner(null);
}
}
protected void syncParentIndex(){
MenuEditor me=getMenuEditorParent();
if(me!=null){
me.getMenu().menuElements.remove(getMenuElement());
me.getMenu().menuElements.add(me.getIndex(this), getMenuElement());
}
}
@Override
public boolean moveUp(boolean updateSelection){
boolean result=super.moveUp(updateSelection);
if(result)
syncParentIndex();
return result;
}
@Override
public boolean moveDown(boolean updateSelection){
boolean result=super.moveDown(updateSelection);
if(result)
syncParentIndex();
return result;
}
@Override
public boolean delete(boolean updateSelection){
boolean result=false;
getProjectLibrary();
MenuEditor me=getMenuEditorParent();
if(me!=null && (result=super.delete(updateSelection))==true)
me.getMenu().menuElements.remove(getMenuElement());
return result;
}
@Override
public boolean canBeParentOf(Editor e){
return false;
}
@Override
public boolean canBeSiblingOf(Editor e){
return (e instanceof MenuElementEditor) || (e instanceof MenuEditor);
}
public void findProject(Options options, Component dlgOwner){
MenuElement me=getMenuElement();
ProjectLibrary pl=getProjectLibrary();
if(pl!=null){
int[] filters={Utils.ALL_CLIC_FF, Utils.ALL_JCLIC_FF};
String result=pl.getFileSystem().chooseFile(me.projectPath, false, filters, options, "edit_find_file", dlgOwner, false);
if(result!=null){
me.projectPath=result;
fireEditorDataChanged(null);
}
}
}
public void findIcon(Options options, Component dlgOwner){
MenuElement me=getMenuElement();
ProjectLibrary pl=getProjectLibrary();
if(pl!=null){
int[] filters={Utils.ALL_IMAGES_FF, Utils.GIF_FF};
String s=me.icon;
if(s!=null && s.startsWith("@"))
s=null;
String result=pl.getFileSystem().chooseFile(s==null ? me.projectPath : s, false, filters, options, "edit_find_image", dlgOwner, false);
if(result!=null){
ImageIcon ii=null;
try{
ii=new ImageIcon(pl.getFileSystem().getImageFile(result));
if(ii.getIconWidth()>MenuElement.MAX_ICON_WIDTH || ii.getIconHeight()>MenuElement.MAX_ICON_HEIGHT){
options.getMessages().showAlert(dlgOwner, "menuElement_err_iconTooLarge");
ii=null;
}
} catch(Exception ex){
System.err.println("Error reading image "+result+"\n"+ex);
}
if(ii!=null){
me.icon=result;
meIcon=me.getIcon(pl.mediaBag);
fireEditorDataChanged(null);
}
}
}
}
public static void createActions(Options options){
createBasicActions(options);
if(!actionsCreated){
findProjectAction=new EditorAction("edit_find_file", "icons/file_open.gif", "edit_find_file", options){
protected void doAction(Editor e){
if(e instanceof MenuElementEditor)
((MenuElementEditor)e).findProject(this.options, getComponentSrc());
}
};
findIconAction=new EditorAction("edit_find_image", "icons/file_open.gif", "edit_find_image", options){
protected void doAction(Editor e){
if(e instanceof MenuElementEditor)
((MenuElementEditor)e).findIcon(this.options, getComponentSrc());
}
};
actionsCreated=true;
}
}
}