/*
* File : ActivityEditorPanel.java
* Created : 10-jun-2002 10:15
* 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.activities.text.TextActivityEditorTextPanel;
import edu.xtec.jclic.bags.MediaBagEditor;
import edu.xtec.jclic.boxes.ActiveBagContentEditor;
import edu.xtec.jclic.edit.*;
import edu.xtec.jclic.misc.Utils;
import edu.xtec.util.Options;
import java.awt.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.09.16
*/
public class ActivityEditorPanel extends EditorPanel {
List<ActivityEditorInternalPanel> internalPanels;
String currentActivityClass;
Map<String, ActivityEditorInternalPanel> panelStore;
public static final String
SINGLE="SINGLE", // puzzles and info
SINGLE_ALT="SINGLE_ALT", // memory
SINGLE_BOOL_ALT="SINGLE_BOOL_ALT", // identify
SINGLE_LAYOUT="SINGLE_LAYOUT", // double puzzle
DOUBLE_ALT="DOUBLE_ALT", // simple ass.
DOUBLE_REL="DOUBLE_REL", // explore
DOUBLE_REL_ALT="DOUBLE_REL_ALT", // complex ass. written answ.
TEXTGRID_ALT="TEXTGRID_ALT", // word search
TEXTGRID_CRW="TEXTGRID_CRW", // crossword
TEXT_BASE="TEXT_BASE";
/** Creates new form MenuEditorPanel */
public ActivityEditorPanel(Options options) {
super(options);
internalPanels=new ArrayList<ActivityEditorInternalPanel>(4);
panelStore=new HashMap<String,ActivityEditorInternalPanel>();
//ActivityBagElementEditor.createActions(options);
initComponents();
//addInternalPanel(new ActivityEditorDescPanel(options, this));
postInit(250, false, false);
setEnabled(false);
}
@Override
public void setEnabled(boolean enabled){
super.setEnabled(enabled);
Iterator<ActivityEditorInternalPanel> it=internalPanels.iterator();
while(it.hasNext()){
it.next().setEnabled(enabled);
}
}
public void addInternalPanel(ActivityEditorInternalPanel panel, String title, String tooltip){
if(title==null)
title=panel.getTitle();
if(tooltip==null)
tooltip=panel.getTooltip();
tabbedPane.addTab(title, panel.getIcon(), panel, tooltip);
internalPanels.add(panel);
}
public void addInternalPanel(String storeKey, String title, String tooltip){
ActivityEditorInternalPanel panel=(ActivityEditorInternalPanel)panelStore.get(storeKey);
if(panel==null){
if(SINGLE.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.SINGLE)));
else if(SINGLE_LAYOUT.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.SINGLE_LAYOUT)));
else if(SINGLE_ALT.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.SINGLE_ALT)));
else if(SINGLE_BOOL_ALT.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.SINGLE_BOOL_ALT)));
else if(DOUBLE_ALT.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.DOUBLE_ALT)));
else if(DOUBLE_REL.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.DOUBLE_REL)));
else if(DOUBLE_REL_ALT.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.DOUBLE_REL_ALT)));
else if(TEXTGRID_ALT.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.TEXTGRID_ALT)));
else if(TEXTGRID_CRW.equals(storeKey))
panelStore.put(storeKey, (panel=new ActiveBagContentEditor(this, ActiveBagContentEditor.TEXTGRID_CRW)));
else if(TEXT_BASE.equals(storeKey))
panelStore.put(storeKey, (panel=new TextActivityEditorTextPanel(this)));
}
if(panel!=null)
addInternalPanel(panel, title, tooltip);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
mainPanel = new javax.swing.JPanel();
tabbedPane = new javax.swing.JTabbedPane();
setLayout(new java.awt.BorderLayout());
setToolTipText(options.getMsg("edit_act_descriptionTab_tooltip"));
mainPanel.setLayout(new java.awt.BorderLayout());
mainPanel.add(tabbedPane, java.awt.BorderLayout.CENTER);
add(mainPanel, java.awt.BorderLayout.CENTER);
}//GEN-END:initComponents
@Override
protected synchronized void setEditor(Editor e){
//System.out.println("SET EDITOR");
if(e instanceof ActivityEditor){
ActivityEditor ae=(ActivityEditor)e;
MediaBagEditor mbe=ae.getMediaBagEditor();
if(mbe!=null && Utils.lowMemoryCondition())
mbe.getMediaBag().clearData();
String s=ae.getActivity().getClass().getName();
if(!s.equals(currentActivityClass)){
int cs=Math.max(tabbedPane.getSelectedIndex(), 0);
//tabbedPane.setSelectedIndex(0);
int c=tabbedPane.getTabCount();
for(int i=c-1; i>=ActivityEditor.COMMON_PANELS; i--){
//internalPanels.remove(i);
//tabbedPane.remove(i);
tabbedPane.remove((Component)internalPanels.remove(i));
}
ae.createPanels(this);
final int csx=Math.min(cs, internalPanels.size()-1);
//tabbedPane.setSelectedIndex(csx);
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
if(internalPanels.size()>=csx)
tabbedPane.setSelectedIndex(csx);
}
});
}
currentActivityClass=s;
}
super.setEditor(e);
}
public boolean checkIfEditorValid(Editor e) {
return e instanceof ActivityEditor;
}
protected ActivityEditor getActivityEditor(){
return (ActivityEditor)editor;
}
protected Activity getActivity(){
if(editor==null)
return null;
else
return getActivityEditor().getActivity();
}
/*
public void clear() {
super.clear();
Iterator it=internalPanels.iterator();
while(it.hasNext())
((ActivityEditorInternalPanel)it.next()).clear();
}
*/
public void fillData() {
Activity act=getActivity();
if(act!=null){
Iterator<ActivityEditorInternalPanel> it=internalPanels.iterator();
while(it.hasNext())
it.next().fillData();
}
}
public void saveData(){
Activity act=getActivity();
if(act!=null){
Iterator<ActivityEditorInternalPanel> it=internalPanels.iterator();
while(it.hasNext())
it.next().saveData();
getActivityEditor().saveData();
}
}
@Override
protected javax.swing.Icon getIcon(){
return ActivityEditor.getIcon();
}
@Override
protected String getTitle(){
return "activity";
//return options.getMsg("menu_dlg_title");
}
@Override
public void focusLost(java.awt.event.FocusEvent focusEvent) {
if(editor!=null)
editor.collectData();
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel mainPanel;
private javax.swing.JTabbedPane tabbedPane;
// End of variables declaration//GEN-END:variables
}