/* * File : ActiveBagContentEditor.java * Created : 09-oct-2002 17:10 * 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.boxes; import edu.xtec.jclic.Activity; import edu.xtec.jclic.ActivityEditorInternalPanel; import edu.xtec.jclic.ActivityEditorPanel; import edu.xtec.jclic.Constants; import edu.xtec.jclic.bags.MediaBagEditor; import edu.xtec.util.ResourceManager; import java.awt.BorderLayout; import javax.swing.JComponent; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.09.09 */ public class ActiveBagContentEditor extends ActivityEditorInternalPanel { JTabbedPane ctrlTab; ActiveBagContentPreviewPanel abcpp; ActiveBagContentControlPanel[] cp; TextGridContentControlPanel tgp; ActiveBagContentRelPanel rp; ActiveBagContentLayoutPanel lp; MediaBagEditor mediaBagEditor; //int abcIndex=0; //int altAbcIndex=-1; //ActiveBagContent abc, altAbc; boolean useRel=false; boolean useBoolRel=false; boolean crossWord=false; int relIndex=-1; public static final int SINGLE=0, // puzzles and info SINGLE_ALT=1, // memory SINGLE_BOOL_ALT=2, // identify SINGLE_LAYOUT=3, // double puzzle DOUBLE_ALT=4, // simple ass. DOUBLE_REL=5, // explore DOUBLE_REL_ALT=6, // complex ass. written answ. TEXTGRID_ALT=7, // wordsearch TEXTGRID_CRW=8; //crossWord /** Creates new form ActiveBagContentEditor */ public ActiveBagContentEditor(ActivityEditorPanel parent, int type) { super(parent); int altIndex=-1; int indexBis=-1; boolean showLayout=false; boolean useTextGrid=false; switch(type){ case SINGLE_BOOL_ALT: useBoolRel=true; altIndex=1; break; case SINGLE_ALT: showLayout=true; altIndex=1; break; case SINGLE_LAYOUT: showLayout=true; case SINGLE: break; case DOUBLE_REL_ALT: altIndex=2; case DOUBLE_REL: useRel=true; indexBis=1; showLayout=true; break; case DOUBLE_ALT: altIndex=2; indexBis=1; showLayout=true; break; case TEXTGRID_ALT: useTextGrid=true; indexBis=0; showLayout=true; break; case TEXTGRID_CRW: useTextGrid=true; indexBis=0; altIndex=1; showLayout=true; crossWord=true; break; } initComponents(); abcpp=(ActiveBagContentPreviewPanel)previewPanel; cp=new ActiveBagContentControlPanel[2]; if(useTextGrid) tgp=new TextGridContentControlPanel(this, 0, !crossWord); else cp[0]=new ActiveBagContentControlPanel(this, 0, altIndex, 0, crossWord); if(indexBis>=0){ cp[1]=new ActiveBagContentControlPanel(this, indexBis, crossWord ? 1 : -1, useTextGrid ? 1 : indexBis, crossWord); } if(cp[1]!=null || useRel || useBoolRel || showLayout){ ctrlTab=new JTabbedPane(); ctrlTab.addTab (options.getMsg("edit_act_grid"+(cp[1]==null ? "" : "_A")) , ResourceManager.getImageIcon("icons/grid.gif"), getFirstComponent()); if(cp[1]!=null) ctrlTab.addTab (options.getMsg("edit_act_grid_B") , ResourceManager.getImageIcon("icons/grid.gif"), cp[1]); if(showLayout){ lp=new ActiveBagContentLayoutPanel(this); ctrlTab.addTab (options.getMsg("edit_act_grid_layout") , ResourceManager.getImageIcon("icons/grid_layout.gif"), lp); } if(useRel || useBoolRel){ relIndex=ctrlTab.getTabCount(); rp=new ActiveBagContentRelPanel(this, useBoolRel); ctrlTab.addTab (options.getMsg("edit_act_grid_relationship") , ResourceManager.getImageIcon("icons/relationship.gif"), rp); } add(ctrlTab, BorderLayout.NORTH); ctrlTab.getModel().addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e){ abcpp.setEditMode( ctrlTab.getSelectedIndex()==relIndex ? useBoolRel ? ActiveBagContentPreviewPanel.EDIT_BOOL : ActiveBagContentPreviewPanel.EDIT_LINKS : ActiveBagContentPreviewPanel.EDIT_GRIDS); } }); } else add(getFirstComponent(), BorderLayout.NORTH); if(type==DOUBLE_ALT && cp[0]!=null && cp[1]!=null){ cp[0].setSyncpanel(cp[1]); cp[1].setSyncpanel(cp[0]); } } private JComponent getFirstComponent(){ JComponent result=tgp; if(result==null) result=cp[0]; return result; } /** 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 previewScroll = new javax.swing.JScrollPane(); previewPanel = new ActiveBagContentPreviewPanel(this, crossWord); setLayout(new java.awt.BorderLayout()); previewPanel.setPreferredSize(new java.awt.Dimension(800, 600)); previewScroll.setViewportView(previewPanel); add(previewScroll, java.awt.BorderLayout.CENTER); }//GEN-END:initComponents public void fillData() { saveBag=null; saveBagAlt=null; Activity act=getActivity(); mediaBagEditor = act==null ? null : getActivityEditor().getMediaBagEditor(); if(tgp!=null) tgp.fillData(act); if(cp[0]!=null) cp[0].fillData(act); if(cp[1]!=null) cp[1].fillData(act); if(rp!=null) rp.fillData(act); if(lp!=null) lp.fillData(act); checkTabs(); abcpp.setMediaBagEditor(mediaBagEditor); abcpp.setBoxGridPos(act==null ? Activity.AB : act.boxGridPos); } public void saveData(){ Activity act=getActivity(); if(act!=null){ if(tgp!=null) tgp.saveData(act); if(cp[0]!=null) cp[0].saveData(act); if(cp[1]!=null) cp[1].saveData(act); if(rp!=null) rp.saveData(act); if(lp!=null) lp.saveData(act); } } private ActiveBagContent saveBag, saveBagAlt; protected void enableGridB(boolean value){ Activity act=getActivity(); if(cp[1]!=null && act!=null && act.abc!=null){ int index=cp[1].index; if(value==false){ saveBag=cp[1].abc; saveBagAlt=cp[1].altAbc; act.abc[index]=null; } else{ if(saveBag!=null){ act.abc[index]=saveBag; if(cp[1].altIndex>=0) act.abc[cp[1].altIndex]=saveBagAlt; } else{ act.abc[index]=ActiveBagContent.initNew(2, 2, 'A'); } } cp[1].setInitializing(true); cp[1].fillData(act); cp[1].setInitializing(false); setModified(true); checkTabs(); } } protected void checkTabs(){ Activity act=getActivity(); if(act!=null && cp[1]!=null && lp!=null && ctrlTab!=null){ boolean visible=(cp[1].abc!=null); if(!visible && ctrlTab.getTabCount()==3){ ctrlTab.remove(lp); ctrlTab.remove(cp[1]); } else if(visible && ctrlTab.getTabCount()==1){ ctrlTab.addTab (options.getMsg("edit_act_grid_B") , ResourceManager.getImageIcon("icons/grid.gif"), cp[1]); ctrlTab.addTab (options.getMsg("edit_act_grid_layout") , ResourceManager.getImageIcon("icons/grid_layout.gif"), lp); } } } /* public boolean dataChanged(){ return false; } */ protected javax.swing.Icon getIcon(){ return edu.xtec.util.ResourceManager.getImageIcon("icons/panel.gif"); } protected String getTitle() { return options.getMsg("edit_act_panels_panel"); } protected String getTooltip() { return options.getMsg("edit_act_panels_panel_tooltip"); } // only called by abcpp; protected void panelSelected(int panel){ if(ctrlTab!=null && panel>=0 && panel<ctrlTab.getTabCount()) ctrlTab.setSelectedIndex(panel); } protected void resized(int panel){ if(panel>=0 && (ctrlTab==null || panel<ctrlTab.getTabCount())){ if(panel==0 && tgp!=null) tgp.resized(); else if(cp!=null && panel<cp.length && cp[panel]!=null) cp[panel].resized(); } } public static boolean nameChanged(ActiveBagContent abc, int type, String oldName, String newName){ boolean result=false; if((type & Constants.T_IMAGE)!=0 && oldName.equals(abc.imgName)){ abc.imgName=newName; result=true; } if(abc.backgroundContent!=null) result|=ActiveBoxContentEditor.nameChanged(abc.backgroundContent, type, oldName, newName); for(int i=0; i<abc.activeBoxContentArray.size(); i++) result|=ActiveBoxContentEditor.nameChanged(abc.getActiveBoxContent(i), type, oldName, newName); return result; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel previewPanel; private javax.swing.JScrollPane previewScroll; // End of variables declaration//GEN-END:variables }