/*
* File : CopyAttributesPanel.java
* Created : 30-jun-2004 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;
import edu.xtec.jclic.activities.text.TextActivityBase;
import edu.xtec.jclic.activities.text.TextActivityDocument;
import edu.xtec.jclic.bags.ActivityBagEditor;
import edu.xtec.jclic.bags.ActivityBagElementEditor;
import edu.xtec.jclic.beans.CheckBoxTreeObject;
import edu.xtec.util.Options;
import edu.xtec.util.ProgressDialog;
import javax.swing.text.StyleContext;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.29
*/
public class CopyActivityAttributesPanel extends javax.swing.JPanel {
Options options;
ActivityBagElementEditor abed;
ActivityBagEditor abe;
/** Creates new form CopyActivityAttributesPanel */
public CopyActivityAttributesPanel(Options options, ActivityBagElementEditor abed) {
this.options=options;
this.abed=abed;
abe=(ActivityBagEditor)abed.getEditorParent();
initComponents();
}
/** 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
javax.swing.JPanel actPanel;
javax.swing.JScrollPane actScroll;
java.awt.GridBagConstraints gridBagConstraints;
javax.swing.JScrollPane scroll;
scroll = new javax.swing.JScrollPane();
checkBoxTree = new edu.xtec.jclic.beans.CheckBoxTree();
actPanel = new javax.swing.JPanel();
actScroll = new javax.swing.JScrollPane();
actList = new javax.swing.JList();
selectAllBtn = new javax.swing.JButton();
selectNoneBtn = new javax.swing.JButton();
setLayout(new java.awt.BorderLayout());
scroll.setPreferredSize(new java.awt.Dimension(300, 300));
checkBoxTree.setModel(getTreeModel());
int k=checkBoxTree.getRowCount();
for(int i=k+1; i>=0; i--){
checkBoxTree.expandRow(i);
}
scroll.setViewportView(checkBoxTree);
add(scroll, java.awt.BorderLayout.CENTER);
actPanel.setLayout(new java.awt.GridBagLayout());
actPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_act_copy_dest")));
actScroll.setPreferredSize(new java.awt.Dimension(200, 300));
actList.setModel(abe.getListModel());
actScroll.setViewportView(actList);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
actPanel.add(actScroll, gridBagConstraints);
selectAllBtn.setText(options.getMsg("SELECT_ALL"));
selectAllBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectAllBtnActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
actPanel.add(selectAllBtn, gridBagConstraints);
selectNoneBtn.setText(options.getMsg("SELECT_NONE"));
selectNoneBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectNoneBtnActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
actPanel.add(selectNoneBtn, gridBagConstraints);
add(actPanel, java.awt.BorderLayout.EAST);
}//GEN-END:initComponents
private void selectNoneBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectNoneBtnActionPerformed
actList.clearSelection();
}//GEN-LAST:event_selectNoneBtnActionPerformed
private void selectAllBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllBtnActionPerformed
actList.setSelectionInterval(0, actList.getModel().getSize()-1);
}//GEN-LAST:event_selectAllBtnActionPerformed
public boolean showDialog(java.awt.Component parent){
boolean result=false;
if(options.getMessages().showInputDlg(parent, this, "edit_act_copy_title")){
final Object[] selectedItems=actList.getSelectedValues();
if(selectedItems==null || selectedItems.length==0){
options.getMessages().showAlert(this, "edit_act_copy_err_noSelection");
}
else{
final ActivityEditor srcActEd=abed.getActivityEditor();
srcActEd.collectData();
final Activity srcAct=srcActEd.getActivity();
final ProgressDialog pd=new ProgressDialog(this, options);
edu.xtec.util.SwingWorker sw=new edu.xtec.util.SwingWorker(){
@Override
public Object construct(){
int modifiedItems=0;
for(int i=0; i<selectedItems.length; i++){
ActivityBagElementEditor targetEd=(ActivityBagElementEditor)selectedItems[i];
if(targetEd!=abed){
ActivityEditor targetActEd=targetEd.getActivityEditor();
Activity targetAct=targetActEd.getActivity();
pd.setFileLabel(targetAct.name);
copyAttributes(srcAct, targetAct);
pd.setProgressValue(modifiedItems++);
targetActEd.setModified(true);
targetEd.forgetActivityEditor();
}
if(isCancelled() || Thread.currentThread().isInterrupted())
break;
}
return new Integer(modifiedItems);
}
@Override
public void finished(){
pd.setVisible(false);
}
};
pd.setProgressMax(selectedItems.length);
pd.start("WORKING", "edit_act_copy_action_prefix", sw, true, true, false);
}
}
return result;
}
private CheckBoxTreeObject bgColor, bgGradient, bgImage,
activityBgColor, activityBgGradient, transparentBg, border, position, margin,
msgPrev, msgIni, msgEnd, msgErr, repInclude, repActions,
skin, evSounds,
cTime, maxTime, cTries, maxTries, cScore, scramble,
helpBtn, infoBtn,
gridA, gridB, textGrid,
textFontFace, textFontSize, textStyle, textColour, targetColour, errorColour, tabSpace;
private TreeModel getTreeModel(){
DefaultMutableTreeNode root=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_attributes"));
// Main Window
DefaultMutableTreeNode node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_style_main"));
node.add(bgColor=new CheckBoxTreeObject(options.getMsg("edit_act_copy_bgColor"), true));
node.add(bgGradient=new CheckBoxTreeObject(options.getMsg("edit_act_copy_gradient"), true));
node.add(bgImage=new CheckBoxTreeObject(options.getMsg("edit_act_copy_bgImage"), true));
root.add(node);
// Play Window
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_style_play"));
node.add(activityBgColor=new CheckBoxTreeObject(options.getMsg("edit_act_copy_bgColor"), true));
node.add(activityBgGradient=new CheckBoxTreeObject(options.getMsg("edit_act_copy_gradient"), true));
node.add(transparentBg=new CheckBoxTreeObject(options.getMsg("edit_act_copy_transparentBg"), true));
node.add(border=new CheckBoxTreeObject(options.getMsg("edit_act_copy_border"), true));
node.add(margin=new CheckBoxTreeObject(options.getMsg("edit_act_copy_margin"), true));
node.add(position=new CheckBoxTreeObject(options.getMsg("edit_act_copy_position"), false));
root.add(node);
// Messages
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_messages"));
node.add(msgPrev=new CheckBoxTreeObject(options.getMsg("edit_act_copy_messages_prev"), true));
node.add(msgIni=new CheckBoxTreeObject(options.getMsg("edit_act_copy_messages_ini"), true));
node.add(msgEnd=new CheckBoxTreeObject(options.getMsg("edit_act_copy_messages_end"), true));
node.add(msgErr=new CheckBoxTreeObject(options.getMsg("edit_act_copy_messages_err"), true));
root.add(node);
// Reports
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_reports"));
node.add(repInclude=new CheckBoxTreeObject(options.getMsg("edit_act_copy_rep_include"), false));
node.add(repActions=new CheckBoxTreeObject(options.getMsg("edit_act_copy_rep_actions"), false));
root.add(node);
// Interface
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_interface"));
node.add(skin=new CheckBoxTreeObject(options.getMsg("edit_act_copy_skin"), false));
node.add(evSounds=new CheckBoxTreeObject(options.getMsg("edit_act_copy_evSounds"), false));
root.add(node);
// Counters
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_counters"));
node.add(cTime=new CheckBoxTreeObject(options.getMsg("edit_act_copy_cTime"), true));
node.add(maxTime=new CheckBoxTreeObject(options.getMsg("edit_act_copy_maxTime"), false));
node.add(cTries=new CheckBoxTreeObject(options.getMsg("edit_act_copy_cTries"), true));
node.add(maxTries=new CheckBoxTreeObject(options.getMsg("edit_act_copy_maxTries"), false));
node.add(cScore=new CheckBoxTreeObject(options.getMsg("edit_act_copy_cScore"), true));
node.add(scramble=new CheckBoxTreeObject(options.getMsg("edit_act_copy_scramble"), false));
root.add(node);
// Buttons
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_buttons"));
node.add(helpBtn=new CheckBoxTreeObject(options.getMsg("edit_act_copy_btnHelp"), false));
node.add(infoBtn=new CheckBoxTreeObject(options.getMsg("edit_act_copy_btnInfo"), false));
root.add(node);
// Grids
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_grids"));
node.add(gridA=new CheckBoxTreeObject(options.getMsg("edit_act_copy_gridA"), true));
node.add(gridB=new CheckBoxTreeObject(options.getMsg("edit_act_copy_gridB"), true));
node.add(textGrid=new CheckBoxTreeObject(options.getMsg("edit_act_copy_textGrid"), true));
root.add(node);
// Text
node=new DefaultMutableTreeNode(options.getMsg("edit_act_copy_text"));
node.add(textFontFace=new CheckBoxTreeObject(options.getMsg("edit_act_copy_fontFace"), true));
node.add(textFontSize=new CheckBoxTreeObject(options.getMsg("edit_act_copy_fontSize"), true));
node.add(textStyle=new CheckBoxTreeObject(options.getMsg("edit_act_copy_fontStyle"), true));
node.add(textColour=new CheckBoxTreeObject(options.getMsg("edit_act_copy_textColour"), true));
node.add(targetColour=new CheckBoxTreeObject(options.getMsg("edit_act_copy_textTargetColour"), true));
node.add(errorColour=new CheckBoxTreeObject(options.getMsg("edit_act_copy_textErrorColour"), true));
node.add(tabSpace=new CheckBoxTreeObject(options.getMsg("edit_act_copy_tabSpace"), false));
root.add(node);
return new DefaultTreeModel(root);
}
private void copyAttributes(Activity srcAct, Activity targetAct){
// Main window
if(bgColor.isSelected())
targetAct.bgColor=srcAct.bgColor;
if(bgGradient.isSelected())
targetAct.bgGradient=srcAct.bgGradient;
if(bgImage.isSelected()){
targetAct.bgImageFile=srcAct.bgImageFile;
targetAct.tiledBgImg=srcAct.tiledBgImg;
}
if(margin.isSelected())
targetAct.margin=srcAct.margin;
// Play window
if(activityBgColor.isSelected())
targetAct.activityBgColor=srcAct.activityBgColor;
if(activityBgGradient.isSelected())
targetAct.activityBgGradient=srcAct.activityBgGradient;
if(transparentBg.isSelected())
targetAct.transparentBg=srcAct.transparentBg;
if(border.isSelected())
targetAct.border=srcAct.border;
if(position.isSelected()){
targetAct.absolutePositioned=srcAct.absolutePositioned;
targetAct.absolutePosition=srcAct.absolutePosition;
}
//messages
if(msgPrev.isSelected() && srcAct.messages[Activity.PREVIOUS]!=null && targetAct.messages[Activity.PREVIOUS]!=null)
srcAct.messages[Activity.PREVIOUS].copyStyleTo(targetAct.messages[Activity.PREVIOUS]);
if(msgIni.isSelected() && srcAct.messages[Activity.MAIN]!=null && targetAct.messages[Activity.MAIN]!=null)
srcAct.messages[Activity.MAIN].copyStyleTo(targetAct.messages[Activity.MAIN]);
if(msgEnd.isSelected() && srcAct.messages[Activity.END]!=null && targetAct.messages[Activity.END]!=null)
srcAct.messages[Activity.END].copyStyleTo(targetAct.messages[Activity.END]);
if(msgErr.isSelected() && srcAct.messages[Activity.END_ERROR]!=null && targetAct.messages[Activity.END_ERROR]!=null)
srcAct.messages[Activity.END_ERROR].copyStyleTo(targetAct.messages[Activity.END_ERROR]);
// reports
if(repInclude.isSelected())
targetAct.includeInReports=srcAct.includeInReports;
if(repActions.isSelected())
targetAct.reportActions=srcAct.reportActions;
// interface
if(skin.isSelected())
targetAct.skinFileName=srcAct.skinFileName;
if(evSounds.isSelected())
targetAct.eventSounds=srcAct.eventSounds;
// counters
if(cTime.isSelected())
targetAct.bTimeCounter=srcAct.bTimeCounter;
if(maxTime.isSelected()){
targetAct.maxTime=srcAct.maxTime;
targetAct.countDownTime=srcAct.countDownTime;
}
if(cTries.isSelected())
targetAct.bActionsCounter=srcAct.bActionsCounter;
if(maxTries.isSelected()){
targetAct.maxActions=srcAct.maxActions;
targetAct.countDownActions=srcAct.countDownActions;
}
if(cScore.isSelected())
targetAct.bScoreCounter=srcAct.bScoreCounter;
if(scramble.isSelected())
targetAct.shuffles=srcAct.shuffles;
// Buttons
if(helpBtn.isSelected()){
targetAct.helpWindow=srcAct.helpWindow;
targetAct.showSolution=srcAct.showSolution;
}
if(infoBtn.isSelected()){
targetAct.infoUrl=srcAct.infoUrl;
targetAct.infoCmd=srcAct.infoCmd;
}
// Grids
if(gridA.isSelected()
&& srcAct.abc!=null && srcAct.abc.length>0 && srcAct.abc[0]!=null
&& targetAct.abc!=null && targetAct.abc.length>0 && targetAct.abc[0]!=null)
srcAct.abc[0].copyStyleTo(targetAct.abc[0]);
if(gridB.isSelected()
&& srcAct.abc!=null && srcAct.abc.length>1 && srcAct.abc[1]!=null
&& targetAct.abc!=null && targetAct.abc.length>1 && targetAct.abc[1]!=null)
srcAct.abc[1].copyStyleTo(targetAct.abc[1]);
if(textGrid.isSelected() && srcAct.tgc!=null && targetAct.tgc!=null)
srcAct.tgc.copyStyleTo(targetAct.tgc);
if(srcAct instanceof TextActivityBase && targetAct instanceof TextActivityBase){
TextActivityBase txSrcAct=(TextActivityBase)srcAct;
TextActivityBase txTargetAct=(TextActivityBase)targetAct;
if(textFontFace.isSelected() || textFontSize.isSelected()
|| textStyle.isSelected() || textColour.isSelected()
|| targetColour.isSelected() || errorColour.isSelected()
|| tabSpace.isSelected()){
StyleContext sc=TextActivityDocument.copyStylesFrom(
txSrcAct.getStyleContext(), txTargetAct.getStyleContext(),
textFontFace.isSelected(), textFontSize.isSelected(),
textStyle.isSelected(), textColour.isSelected(),
targetColour.isSelected(), errorColour.isSelected());
if(sc!=null){
txTargetAct.setStyleContext(sc);
}
if(tabSpace.isSelected())
txTargetAct.getDocument().setTabSpc(txSrcAct.getDocument().getTabSpc());
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JList actList;
private edu.xtec.jclic.beans.CheckBoxTree checkBoxTree;
private javax.swing.JButton selectAllBtn;
private javax.swing.JButton selectNoneBtn;
// End of variables declaration//GEN-END:variables
}