/*
* File : SelectActivityClass.java
* Created : 09-aug-2004 11: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.bags;
import edu.xtec.jclic.ActivityEditor;
import edu.xtec.util.Options;
import edu.xtec.util.StrUtils;
import edu.xtec.util.TripleString;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.09.16
*/
public class SelectActivityClass extends javax.swing.JPanel {
Options options;
private List<TripleString> activityClasses;
private List<TripleString> currentSet;
private String currentClassName;
/** Creates new form SelectActivityClass */
public SelectActivityClass(Options options) {
this.options=options;
activityClasses=ActivityEditor.getSystemActivityList(options);
currentSet=new ArrayList<TripleString>();
initComponents();
classList.getSelectionModel().addListSelectionListener(
new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
if(!e.getValueIsAdjusting()){
updateSelection();
}
}
}
);
setListFilter(null, true);
}
/** 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.JLabel classLb;
java.awt.GridBagConstraints gridBagConstraints;
javax.swing.JPanel rightPanel;
javax.swing.JScrollPane scroll;
jSplitPane1 = new javax.swing.JSplitPane();
scroll = new javax.swing.JScrollPane();
classList = new javax.swing.JList();
rightPanel = new javax.swing.JPanel();
scroll2 = new javax.swing.JScrollPane();
descText = new javax.swing.JEditorPane();
promptPanel = new javax.swing.JPanel();
classLb = new javax.swing.JLabel();
classField = new javax.swing.JTextField();
setLayout(new java.awt.BorderLayout());
setPreferredSize(new java.awt.Dimension(500, 300));
setMinimumSize(new java.awt.Dimension(400, 300));
scroll.setMinimumSize(new java.awt.Dimension(100, 200));
classList.setMinimumSize(new java.awt.Dimension(200, 0));
scroll.setViewportView(classList);
jSplitPane1.setLeftComponent(scroll);
rightPanel.setLayout(new java.awt.GridBagLayout());
scroll2.setMinimumSize(new java.awt.Dimension(200, 200));
descText.setEditable(false);
descText.setContentType("text/html");
scroll2.setViewportView(descText);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
rightPanel.add(scroll2, gridBagConstraints);
promptPanel.setLayout(new java.awt.GridBagLayout());
classLb.setText(options.getMsg("edit_act_newActivity_class"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
promptPanel.add(classLb, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
promptPanel.add(classField, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
rightPanel.add(promptPanel, gridBagConstraints);
jSplitPane1.setRightComponent(rightPanel);
add(jSplitPane1, java.awt.BorderLayout.CENTER);
}//GEN-END:initComponents
public final void setListFilter(String[] allowedClasses, boolean allowOther){
List<TripleString> v = new ArrayList<TripleString>();
if(allowedClasses!=null){
for(int i=0; i<allowedClasses.length; i++){
int p=TripleString.getFirstItemWithClass(activityClasses, allowedClasses[i]);
if(p>=0)
v.add(activityClasses.get(p));
}
}
else{
v.addAll(activityClasses);
}
if(allowOther){
v.add(new TripleString(options.getMsg("edit_act_newActivity_other"), null, null));
}
classList.setListData(v.toArray());
currentSet=v;
setCurrentClassName(currentClassName);
}
private void updateSelection(){
Object o=classList.getSelectedValue();
boolean showPrompt=false;
if(o instanceof TripleString){
TripleString ts=(TripleString)o;
currentClassName=ts.getClassName();
descText.setContentType("text/html");
descText.setText(getFormattedHtmlText(ts.toString(), ts.getDescription(), ts.getClassName()));
} else if(o!=null){
showPrompt=true;
currentClassName=StrUtils.nullableString(classField.getText());
descText.setContentType("text/html");
descText.setText(getFormattedHtmlText(o.toString(), options.getMsg("edit_act_newActivity_info"), null));
} else{
currentClassName=null;
descText.setContentType("text/html");
descText.setText("");
}
promptPanel.setVisible(showPrompt);
if(classList.getSelectedIndex()>=0){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
classList.ensureIndexIsVisible(classList.getSelectedIndex());
}});
}
}
private static final String TYPE_STYLE="font-family:Helvetica;font-size:12;font-weight:bold;";
private static final String DESC_STYLE="font-family:Helvetica;font-size:12;";
String getFormattedHtmlText(String type, String desc, String className){
StringBuilder sb=new StringBuilder();
sb.append("<html><body>");
if(type!=null){
sb.append("<p style=\"").append(TYPE_STYLE).append("\">").append(type).append("</p>");
}
if(desc!=null){
sb.append("<p style=\"").append(DESC_STYLE).append("\">").append(desc).append("</p>");
}
if(className!=null){
sb.append("<p style=\"").append(DESC_STYLE).append("\">");
sb.append(options.getMsg("edit_act_newActivity_class")).append(" <i>").append(className);
sb.append("</i></p>");
}
sb.append("</body></html>");
return sb.substring(0);
}
/** Getter for property currentClassName.
* @return Value of property currentClassName.
*
*/
public java.lang.String getCurrentClassName() {
updateSelection();
return StrUtils.nullableString(currentClassName);
}
/** Setter for property currentClassName.
* @param currentClassName New value of property currentClassName.
*
*/
public void setCurrentClassName(java.lang.String currentClassName) {
this.currentClassName = currentClassName;
if(currentClassName!=null){
int p=TripleString.getFirstItemWithClass(currentSet, currentClassName);
if(p>=0)
classList.setSelectedIndex(p);
else
classField.setText(StrUtils.secureString(currentClassName));
}
updateSelection();
}
private JLabel alertLabel;
public void setAlertMsg(String alertMsg){
if(alertLabel!=null)
remove(alertLabel);
alertLabel=new JLabel(alertMsg);
add(alertLabel, BorderLayout.NORTH);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
protected javax.swing.JTextField classField;
private javax.swing.JList classList;
private javax.swing.JEditorPane descText;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JPanel promptPanel;
private javax.swing.JScrollPane scroll2;
// End of variables declaration//GEN-END:variables
}