From: <se...@us...> - 2008-05-14 21:06:42
|
Revision: 138 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=138&view=rev Author: sem62 Date: 2008-05-14 14:05:22 -0700 (Wed, 14 May 2008) Log Message: ----------- Added CompileQ model. Not working properly jet. Modified Paths: -------------- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/TreeDataModel.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ItemModels.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java Added Paths: ----------- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/ WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/CompileQPropertiestsDlg.java WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineCellRenderer.java WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineTableCellEditor.java WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/PartOptionsPanel.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQData.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQModel.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPart.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPartsTableModel.java Added: WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/CompileQPropertiestsDlg.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/CompileQPropertiestsDlg.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/CompileQPropertiestsDlg.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,508 @@ +package edu.lnu.FireFly.WebEditor.GUI.Dialogs.CompileQ; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.ListSelectionModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.table.DefaultTableColumnModel; + +import edu.lnu.FireFly.WebEditor.GUI.Dialogs.PropertyDlg; +import edu.lnu.FireFly.WebEditor.ItemModels.CompileQ.CompileQData; +import edu.lnu.FireFly.WebEditor.ItemModels.CompileQ.CompileQModel; +import edu.lnu.FireFly.WebEditor.ItemModels.CompileQ.CompileQPartsTableModel; + +/** + * + * @author Yura + */ +public class CompileQPropertiestsDlg extends PropertyDlg implements + ActionListener, ChangeListener { + + private static final long serialVersionUID = 1961383080461718171L; + + private javax.swing.JCheckBox sameAsTitleCheckBox; + private javax.swing.JCheckBox oneAnswerCheckBox; + private javax.swing.JLabel titleLabel; + private javax.swing.JPanel generalPanel; + private javax.swing.JPanel captionPanel; + private javax.swing.JPanel partsPanel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTable partsTable; + private javax.swing.JTextField titleTextField; + private javax.swing.JTextField captionTextField; + private javax.swing.JTextField questionTextField; + private javax.swing.JButton editCaptionInHtmlBtn; + private javax.swing.JButton editQuestionInHtmlBtn; + private javax.swing.JButton editAnswerVariantInHtmlEditor; + private javax.swing.JButton insertAnswerVariantBtn; + private javax.swing.JButton deleteAnswerVariantBtn; + private javax.swing.JButton moveUpAnswerVariantBtn; + private javax.swing.JButton moveDownAnswerVariantBtn; + private CompileQPartsTableModel simpleQuestionAnswersDataModel; + + private javax.swing.JTextField currentAnswerVariant; + + public CompileQPropertiestsDlg() { + obj = this; + + initComponents(); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + super.actionPerformed(arg0); + + if (arg0.getSource() == editQuestionInHtmlBtn) { + editTextFieldInHtmlEditor(questionTextField); + } + + if (arg0.getSource() == editCaptionInHtmlBtn) { + editTextFieldInHtmlEditor(captionTextField); + } + + if (arg0.getSource() == editAnswerVariantInHtmlEditor) { + int selectedRow = partsTable.getSelectedRow(); + + if (selectedRow < 0) { + return; + } + + String text = partsTable.getModel().getValueAt(selectedRow, 1) + .toString(); + + currentAnswerVariant.setText(text); + + editTextFieldInHtmlEditor(currentAnswerVariant); + } + + if (arg0.getSource() == insertAnswerVariantBtn) { + int selectedRow = partsTable.getSelectedRow(); + + if (selectedRow < 0) { + return; + } + + simpleQuestionAnswersDataModel.insertRow(selectedRow); + partsTable.getSelectionModel().setSelectionInterval(selectedRow + 1, selectedRow + 1); + } + + if (arg0.getSource() == deleteAnswerVariantBtn) { + int selectedRow = partsTable.getSelectedRow(); + + if (selectedRow < 0) { + return; + } + + simpleQuestionAnswersDataModel.deleteRow(selectedRow); + + if (selectedRow >= simpleQuestionAnswersDataModel.getRowCount()){ + selectedRow--; + } + + partsTable.getSelectionModel().setSelectionInterval(selectedRow, + selectedRow); + } + if (arg0.getSource() == moveUpAnswerVariantBtn) { + int selectedRow = partsTable.getSelectedRow(); + + if (selectedRow < 0) { + return; + } + + if (simpleQuestionAnswersDataModel.moveUp(selectedRow)){ + partsTable.getSelectionModel().setSelectionInterval(selectedRow - 1, selectedRow - 1); + } + } + + if (arg0.getSource() == moveDownAnswerVariantBtn) { + int selectedRow = partsTable.getSelectedRow(); + + if (selectedRow < 0) { + return; + } + + if (simpleQuestionAnswersDataModel.moveDown(selectedRow)){ + partsTable.getSelectionModel().setSelectionInterval(selectedRow + 1, selectedRow+1); + } + } + } + + @Override + protected void fillFields() { + CompileQPropertiestsDlg dlg = (CompileQPropertiestsDlg) obj; + dlg.titleTextField.setText(manifestItem.getTitle()); + + CompileQModel itemModel = new CompileQModel(); + + dlg.captionTextField.setText(itemModel.getData(manifestItem) + .getCaption()); + dlg.sameAsTitleCheckBox.setSelected(dlg.titleTextField.getText() + .equals(dlg.captionTextField.getText())); + dlg.questionTextField.setText(itemModel.getData(manifestItem) + .getQuestion()); + + dlg.simpleQuestionAnswersDataModel = itemModel.getData(manifestItem) + .getAnswers(); + dlg.partsTable.setModel(dlg.simpleQuestionAnswersDataModel); + partsTable.getColumnModel().getColumn(1).setCellEditor(new MultiLineTableCellEditor()); + + DefaultTableColumnModel columnModel = (DefaultTableColumnModel) dlg.partsTable + .getColumnModel(); + columnModel.getColumn(0).setPreferredWidth(1); + columnModel.getColumn(1).setPreferredWidth(300); + columnModel.getColumn(2).setPreferredWidth(1); + + dlg.titleTextField.selectAll(); + } + + @Override + public void editedHtmlTextWasSet() { + super.editedHtmlTextWasSet(); + + String text = currentAnswerVariant.getText(); + int selectedRow = partsTable.getSelectedRow(); + partsTable.getModel().setValueAt(text, selectedRow, 1); + } + + private void initComponents() { + setTitle("Propertiests..."); + + generalPanel = new javax.swing.JPanel(); + titleLabel = new javax.swing.JLabel(); + titleTextField = new javax.swing.JTextField(); + captionPanel = new javax.swing.JPanel(); + captionTextField = new javax.swing.JTextField(); + sameAsTitleCheckBox = new javax.swing.JCheckBox(); + questionTextField = new javax.swing.JTextField(); + oneAnswerCheckBox = new javax.swing.JCheckBox(); + partsPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + cancelButton = new javax.swing.JButton("Cancel"); + okButton = new javax.swing.JButton("Ok"); + editCaptionInHtmlBtn = new JButton("..."); + editQuestionInHtmlBtn = new JButton("..."); + editAnswerVariantInHtmlEditor = new JButton("HTML Editor"); + insertAnswerVariantBtn = new JButton("Insert"); + deleteAnswerVariantBtn = new JButton("Delete"); + + moveDownAnswerVariantBtn = new JButton("Down"); + moveUpAnswerVariantBtn = new JButton("Up"); + + insertAnswerVariantBtn.addActionListener(this); + deleteAnswerVariantBtn.addActionListener(this); + moveDownAnswerVariantBtn.addActionListener(this); + moveUpAnswerVariantBtn.addActionListener(this); + + currentAnswerVariant = new javax.swing.JTextField(); + captionTextField.addActionListener(this); + + cancelButton.addActionListener(this); + okButton.addActionListener(this); + sameAsTitleCheckBox.addChangeListener(this); + oneAnswerCheckBox.addChangeListener(this); + editCaptionInHtmlBtn.addActionListener(this); + editQuestionInHtmlBtn.addActionListener(this); + editAnswerVariantInHtmlEditor.addActionListener(this); + + partsTable = new javax.swing.JTable(); + partsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + partsTable.setDefaultRenderer(String.class, new MultiLineCellRenderer()); + partsTable.setDefaultRenderer(Object.class, new MultiLineCellRenderer()); + partsTable.setDefaultRenderer(PartOptionsPanel.class, new PartOptionsPanel()); + + setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE); + + generalPanel.setBorder(javax.swing.BorderFactory + .createTitledBorder("General")); + titleLabel.setText("Title"); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout( + generalPanel); + generalPanel.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING).addGroup( + jPanel1Layout.createSequentialGroup().addContainerGap() + .addComponent(titleLabel)).addGroup( + jPanel1Layout.createSequentialGroup().addContainerGap() + .addComponent(titleTextField, + javax.swing.GroupLayout.DEFAULT_SIZE, 364, + Short.MAX_VALUE).addContainerGap())); + jPanel1Layout + .setVerticalGroup(jPanel1Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addGroup( + jPanel1Layout + .createSequentialGroup() + .addComponent(titleLabel) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent( + titleTextField, + javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap())); + + captionPanel.setBorder(javax.swing.BorderFactory + .createTitledBorder("Caption")); + sameAsTitleCheckBox.setText("Some as the title"); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout( + captionPanel); + captionPanel.setLayout(jPanel2Layout); + jPanel2Layout + .setHorizontalGroup(jPanel2Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addGroup( + jPanel2Layout + .createSequentialGroup() + .addContainerGap() + .addGroup( + jPanel2Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addComponent( + sameAsTitleCheckBox)) + .addContainerGap(283, Short.MAX_VALUE)) + .addGroup( + javax.swing.GroupLayout.Alignment.TRAILING, + jPanel2Layout + .createSequentialGroup() + .addContainerGap() + .addComponent( + captionTextField, + javax.swing.GroupLayout.DEFAULT_SIZE, + 370, Short.MAX_VALUE) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent( + editCaptionInHtmlBtn, + javax.swing.GroupLayout.PREFERRED_SIZE, + 30, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap())); + jPanel2Layout + .setVerticalGroup(jPanel2Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addGroup( + jPanel2Layout + .createSequentialGroup() + .addComponent(sameAsTitleCheckBox) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup( + jPanel2Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent( + editCaptionInHtmlBtn, + javax.swing.GroupLayout.PREFERRED_SIZE, + 20, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent( + captionTextField, + javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap())); + + oneAnswerCheckBox.setText("Only one correct answer"); + + partsPanel.setBorder(javax.swing.BorderFactory + .createTitledBorder("Variants of answer")); + + jScrollPane1.setViewportView(partsTable); + + javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout( + partsPanel); + partsPanel.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup(jPanel4Layout.createParallelGroup( + javax.swing.GroupLayout.Alignment.TRAILING).addGroup( + jPanel4Layout.createSequentialGroup() + .addComponent(moveUpAnswerVariantBtn) + .addContainerGap(10, 10) + .addComponent(moveDownAnswerVariantBtn) + .addContainerGap(10, 10) + .addComponent(insertAnswerVariantBtn) + .addContainerGap(10, 10) + .addComponent(deleteAnswerVariantBtn) + .addContainerGap(10, 10) + .addComponent( + editAnswerVariantInHtmlEditor) + .addContainerGap()).addGroup( + jPanel4Layout.createSequentialGroup().addContainerGap() + .addComponent(jScrollPane1, + javax.swing.GroupLayout.DEFAULT_SIZE, 364, + Short.MAX_VALUE).addContainerGap())); + + jPanel4Layout + .setVerticalGroup(jPanel4Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addGroup( + jPanel4Layout + .createSequentialGroup() + .addContainerGap() + .addComponent( + jScrollPane1, + javax.swing.GroupLayout.DEFAULT_SIZE, + 111, Short.MAX_VALUE) + .addContainerGap(10, 10) + .addGroup( + jPanel4Layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent( + moveUpAnswerVariantBtn, + 20, 20, 20) + .addComponent( + moveDownAnswerVariantBtn, + 20, 20, 20) + .addComponent( + insertAnswerVariantBtn, + 20, 20, 20) + .addComponent( + deleteAnswerVariantBtn, + 20, 20, 20) + .addComponent( + editAnswerVariantInHtmlEditor, + 20, 20, 20)) + .addContainerGap())); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout( + getContentPane()); + getContentPane().setLayout(layout); + layout + .setHorizontalGroup(layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addGroup( + layout + .createSequentialGroup() + .addContainerGap() + .addGroup( + layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addComponent( + partsPanel, + 600, + 600, + Short.MAX_VALUE) + .addComponent( + captionPanel, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent( + generalPanel, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addGroup( + javax.swing.GroupLayout.Alignment.TRAILING, + layout + .createSequentialGroup() + .addComponent( + okButton) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent( + cancelButton))) + .addContainerGap())); + layout + .setVerticalGroup(layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING) + .addGroup( + layout + .createSequentialGroup() + .addContainerGap() + .addComponent( + generalPanel, + javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent( + captionPanel, + javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent( + partsPanel, + 300, + 300, + 300) + .addPreferredGap( + javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup( + layout + .createParallelGroup( + javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent( + cancelButton, + 20, 20, 20) + .addComponent(okButton, + 20, 20, 20)) + .addContainerGap( + javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE))); + + this.getRootPane().setDefaultButton(okButton); + + pack(); + } + + @Override + protected void saveChanges() { + CompileQModel itemModel = new CompileQModel(); + + manifestItem.setTitle(titleTextField.getText()); + + CompileQData data = itemModel.getData(manifestItem); + + if (sameAsTitleCheckBox.isSelected()) { + data.setCaption(titleTextField.getText()); + } else { + data.setCaption(captionTextField.getText()); + } + + data.setQuestion(questionTextField.getText()); + + data.setAnswers(simpleQuestionAnswersDataModel); + + itemModel.updateItemResource(manifestItem, true); + } + + @Override + public void stateChanged(ChangeEvent e) { + if (e.getSource() == sameAsTitleCheckBox) { + if (sameAsTitleCheckBox.isSelected() + && captionTextField.isEnabled()) { + captionTextField.setText(titleTextField.getText()); + } + captionTextField.setEnabled(!sameAsTitleCheckBox.isSelected()); + } + + if (e.getSource() == oneAnswerCheckBox) { + simpleQuestionAnswersDataModel.setSingleVariant(oneAnswerCheckBox + .isSelected()); + } + } + +} Added: WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineCellRenderer.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineCellRenderer.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineCellRenderer.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,45 @@ +package edu.lnu.FireFly.WebEditor.GUI.Dialogs.CompileQ; + +import java.awt.Component; + +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; +import javax.swing.table.TableCellRenderer; + +class MultiLineCellRenderer extends JTextArea implements TableCellRenderer { + /** + * + */ + private static final long serialVersionUID = 1L; + + public MultiLineCellRenderer() { + setLineWrap(true); + setWrapStyleWord(true); + setOpaque(true); + } + + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + if (isSelected) { + setForeground(table.getSelectionForeground()); + setBackground(table.getSelectionBackground()); + } else { + setForeground(table.getForeground()); + setBackground(table.getBackground()); + } + setFont(table.getFont()); + if (hasFocus) { + setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); + if (table.isCellEditable(row, column)) { + setForeground(UIManager.getColor("Table.focusCellForeground")); + setBackground(UIManager.getColor("Table.focusCellBackground")); + } + } else { + setBorder(new EmptyBorder(1, 2, 1, 2)); + } + setText((value == null) ? "" : value.toString()); + return this; + } +} Added: WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineTableCellEditor.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineTableCellEditor.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/MultiLineTableCellEditor.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,51 @@ +package edu.lnu.FireFly.WebEditor.GUI.Dialogs.CompileQ; + +import java.awt.Component; + +import javax.swing.AbstractCellEditor; +import javax.swing.BorderFactory; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.table.TableCellEditor; + +public class MultiLineTableCellEditor extends AbstractCellEditor implements TableCellEditor +{ + /** + * + */ + private static final long serialVersionUID = 1L; + protected JTextArea myEditor; + protected JScrollPane myScrollPane; + + public MultiLineTableCellEditor() { + myEditor = new JTextArea(); + myEditor.setWrapStyleWord(true); + myEditor.setLineWrap(true); + myEditor.setOpaque(true); +// myEditor.setRows(3); + myScrollPane = new JScrollPane(myEditor); + myScrollPane.setBorder(BorderFactory.createEmptyBorder()); + myScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + myScrollPane.getVerticalScrollBar().setFocusable(false); + myScrollPane.getHorizontalScrollBar().setFocusable(false); + } + + public Component getTableCellEditorComponent(JTable table, Object value, + boolean isSelected, int row, int column) + { + myEditor.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); + myEditor.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); + myEditor.setText(value == null ? "" : value.toString()); + + myScrollPane.setBounds(0,0,table.getColumnModel().getColumn(column).getWidth(), 0); + int thisHeight = myEditor.getPreferredSize().height+2; + table.setRowHeight(row, thisHeight); + + return myScrollPane; + } + + public Object getCellEditorValue() { + return myEditor.getText(); + } +} Added: WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/PartOptionsPanel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/PartOptionsPanel.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/Dialogs/CompileQ/PartOptionsPanel.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,83 @@ +package edu.lnu.FireFly.WebEditor.GUI.Dialogs.CompileQ; + +import java.awt.Component; +import java.awt.FlowLayout; +import java.awt.LayoutManager; + +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; +import javax.swing.table.TableCellRenderer; + +public class PartOptionsPanel extends JPanel implements TableCellRenderer { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + if (isSelected) { + setForeground(table.getSelectionForeground()); + setBackground(table.getSelectionBackground()); + + readOnlyCheckBox.setForeground(table.getSelectionForeground()); + isAnswerCheckBox.setForeground(table.getSelectionForeground()); + isVisibleCheckBox.setForeground(table.getSelectionForeground()); + + readOnlyCheckBox.setBackground(table.getSelectionBackground()); + isAnswerCheckBox.setBackground(table.getSelectionBackground()); + isVisibleCheckBox.setBackground(table.getSelectionBackground()); + } else { + setForeground(table.getForeground()); + setBackground(table.getBackground()); + + readOnlyCheckBox.setForeground(table.getForeground()); + isAnswerCheckBox.setForeground(table.getForeground()); + isVisibleCheckBox.setForeground(table.getForeground()); + + readOnlyCheckBox.setBackground(table.getBackground()); + isAnswerCheckBox.setBackground(table.getBackground()); + isVisibleCheckBox.setBackground(table.getBackground()); + } + setFont(table.getFont()); + if (hasFocus) { + setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); + if (table.isCellEditable(row, column)) { + setForeground(UIManager.getColor("Table.focusCellForeground")); + setBackground(UIManager.getColor("Table.focusCellBackground")); + } + } else { + setBorder(new EmptyBorder(1, 2, 1, 2)); + } + + + + return this; + } + + /** + * + */ + private static final long serialVersionUID = 1L; + + public JCheckBox readOnlyCheckBox; + public JCheckBox isAnswerCheckBox; + public JCheckBox isVisibleCheckBox; + + public PartOptionsPanel() { + initComponents(); + } + + private void initComponents() { + LayoutManager layout = new FlowLayout(FlowLayout.LEFT); + setLayout(layout); + + readOnlyCheckBox = new JCheckBox("read only"); + isAnswerCheckBox = new JCheckBox("is answer"); + isVisibleCheckBox = new JCheckBox("is visible"); + + add(readOnlyCheckBox); + add(isAnswerCheckBox); + add(isVisibleCheckBox); + } +} Modified: WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/TreeDataModel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/TreeDataModel.java 2008-05-14 18:01:48 UTC (rev 137) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/GUI/TreeDataModel.java 2008-05-14 21:05:22 UTC (rev 138) @@ -133,16 +133,16 @@ } public void treeNodesDeleted(TreeItem item) { + TreePath path = getItemPath(item); + + int[] indicies = new int[1]; + indicies[0] = item.getParent().getChildIndex(item); + Object[] children = new Object[1]; + children[0] = item; + TreeModelEvent event = new TreeModelEvent(this, path.getParentPath(), indicies, children); + for (int i=0; i < listeners.size(); i++){ TreeModelListener listener = listeners.get(i); - - TreePath path = getItemPath(item); - - int[] indicies = new int[1]; - indicies[0] = item.getParent().getChildIndex(item); - Object[] children = new Object[1]; - children[0] = item; - TreeModelEvent event = new TreeModelEvent(this, path.getParentPath(), indicies, children); listener.treeNodesRemoved(event); } } Added: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQData.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQData.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQData.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,108 @@ +package edu.lnu.FireFly.WebEditor.ItemModels.CompileQ; + +import java.io.Reader; +import java.util.Iterator; + +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; + +import edu.lnu.FireFly.FFManifest.TreeItem; +import edu.lnu.FireFly.WebEditor.ItemModels.ItemData; + +public class CompileQData extends ItemData { + @Override + public String marshal(TreeItem anItem) { + Document doc = DocumentHelper.createDocument(); + Element root = doc.addElement("SimpleQuestion"); + root.addElement("caption").setText(getCaption()); + root.addElement("question").setText(getQuestion()); + + root.addElement("ShowOnSummaryPage").setText( + String.valueOf(getShowOnSummaryPage())); + + Element ans = root.addElement("answers"); + + ans.addAttribute("singleVariant", String.valueOf(getAnswers() + .getSingleVariant())); + + Iterator<CompileQPart> iter = getAnswers().answers.iterator(); + + while (iter.hasNext()) { + CompileQPart answer = iter.next(); + + Element ansEl = ans.addElement("answer"); + ansEl + .addAttribute("point", String.valueOf(answer + .getAnswerPoint())); + ansEl.setText(answer.getAnswerText()); + } + + return doc.asXML(); + } + + private CompileQPartsTableModel answers = new CompileQPartsTableModel(); + private String caption = ""; + private String question = ""; + + public CompileQPartsTableModel getAnswers() { + return answers; + } + public void setAnswers(CompileQPartsTableModel answers) { + this.answers = answers; + } + public String getCaption() { + return caption; + } + public void setCaption(String caption) { + this.caption = caption; + } + public String getQuestion() { + return question; + } + public void setQuestion(String question) { + this.question = question; + } + + @SuppressWarnings("unchecked") + public boolean unmarshal(Reader res, TreeItem anItem) { + SAXReader reader = new SAXReader(); + + Document doc = null; + try { + doc = reader.read(res); + + Element root = doc.getRootElement(); + Element answers = root.element("answers"); + + setCaption(root.elementTextTrim("caption")); + setQuestion(root.elementTextTrim("question")); + + boolean showOnSP = Boolean.valueOf(root + .elementTextTrim("ShowOnSummaryPage")); + setShowOnSummaryPage(showOnSP); + + getAnswers().setSingleVariant( + answers.attributeValue("singleVariant").equalsIgnoreCase( + "true")); + + getAnswers().answers.clear(); + + Iterator<Element> iter = answers.elementIterator("answer"); + while (iter.hasNext()) { + Element answer = iter.next(); + CompileQPart ans = new CompileQPart(answer + .getText()); + ans.setAnswerPoint(Double.valueOf(answer + .attributeValue("point"))); + getAnswers().answers.add(ans); + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + return true; + } +} Added: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQModel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQModel.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQModel.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,101 @@ +package edu.lnu.FireFly.WebEditor.ItemModels.CompileQ; + +import java.util.Iterator; + +import edu.lnu.FireFly.FFManifest.TreeItem; +import edu.lnu.FireFly.FFManifest.item.Item; +import edu.lnu.FireFly.FFManifest.resource.Resource; +import edu.lnu.FireFly.WebEditor.WebEditor; +import edu.lnu.FireFly.WebEditor.GUI.TreeDataModel; +import edu.lnu.FireFly.WebEditor.GUI.Dialogs.CompileQ.CompileQPropertiestsDlg; +import edu.lnu.FireFly.WebEditor.ItemModels.ItemData; +import edu.lnu.FireFly.WebEditor.ItemModels.ResourcedItemModel; +import edu.lnu.FireFly.WebEditor.ItemModels.Template; + +public class CompileQModel extends ResourcedItemModel { + @Override + protected String getDefaultTitle() { + return "New compile question"; + } + + @Override + public boolean getLimitConditionsMenuVisible(TreeItem anItem) { + return true; + } + + @Override + public boolean getShowOnSummaryPageMenuVisible() { + return true; + } + + public CompileQModel() { + modelName = "CompileQModel"; + } + + @Override + public boolean canAddToItem(TreeItem parent) { + // TODO Auto-generated method stub + return true; + } + + @Override + public boolean canConvertItem(TreeItem parent) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void ConfigureItem(TreeItem item) { + new CompileQPropertiestsDlg().showDialog(item); + + TreeDataModel.getInstance().treeNodesChanged(item); + WebEditor.tree.setSelectionPath(null); + WebEditor.tree.setSelectionPath(TreeDataModel.getInstance() + .getItemPath(item)); + } + + public CompileQData getData(TreeItem item) { + return ((CompileQData) getItemData(item)); + } + + @Override + public boolean isRemovable() { + return true; + } + + protected ItemData createItemDataInstance() { + return new CompileQData(); + } + + @Override + protected void updateResourceFile(TreeItem anItem) { + Resource resource = WebEditor.instance.getManifest().resources + .findResourceByIdentifier(((Item) anItem).identifierref); + + Template template = new Template(resource.getFullHref(), this); + + CompileQData itemData = getData(anItem); + + template.setProperty("Caption", itemData.getCaption()); + template.setProperty("Question", itemData.getQuestion()); + + Iterator<CompileQPart> iter = itemData.getAnswers().answers + .iterator(); + String answers = "\r\nsetSingleVariant(" + + itemData.getAnswers().getSingleVariant() + ");\r\n"; + + while (iter.hasNext()) { + CompileQPart answer = iter.next(); + answers += "addAnswer(\"" + answer.getAnswerText().replace("\"", "\\\"") + "\", " + + answer.getAnswerPoint() + ");" + "\r\n"; + } + + template.setProperty("answers", answers); + template.updateResource(); + } + + @Override + public boolean getShowSummaryPageMenuVisible() { + return false; + } +} \ No newline at end of file Added: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPart.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPart.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPart.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,26 @@ +package edu.lnu.FireFly.WebEditor.ItemModels.CompileQ; + +public class CompileQPart { + private String answerText = ""; + private double answerPoint = 0; + + public CompileQPart(String answerText) { + this.answerText = answerText; + } + + public double getAnswerPoint() { + return answerPoint; + } + + public String getAnswerText() { + return answerText; + } + + public void setAnswerPoint(double answerPoint) { + this.answerPoint = answerPoint; + } + + public void setAnswerText(String answerText) { + this.answerText = answerText; + } +} Added: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPartsTableModel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPartsTableModel.java (rev 0) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/CompileQ/CompileQPartsTableModel.java 2008-05-14 21:05:22 UTC (rev 138) @@ -0,0 +1,174 @@ +package edu.lnu.FireFly.WebEditor.ItemModels.CompileQ; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.table.DefaultTableModel; + +import edu.lnu.FireFly.WebEditor.GUI.Dialogs.CompileQ.PartOptionsPanel; + +public class CompileQPartsTableModel extends DefaultTableModel { + /** + * + */ + private static final long serialVersionUID = 1L; + + private boolean singleVariant = false; + + public List<CompileQPart> answers = new ArrayList<CompileQPart>(); + + @Override + public Class<?> getColumnClass(int col) { + + if (col == 2){ + return PartOptionsPanel.class; + } + + return Object.class; + } + + @Override + public int getColumnCount() { + return 3; + } + + @Override + public String getColumnName(int arg0) { + switch (arg0) { + case 0: + return "#"; + case 1: + return "Part content"; + default: + return "Options"; + } + } + + @Override + public int getRowCount() { + + if (answers == null) { + return 0; + } + + int answersCount = answers.size(); + + + + return answersCount > 0 ? answersCount : 1; + } + + @Override + public Object getValueAt(int row, int col) { + if (row == answers.size()) { + return ""; + } + + switch (col) { + case 0: + return row + 1; + case 1: + return answers.get(row).getAnswerText(); + case 2: + return answers.get(row).getAnswerPoint(); + default: + return ""; + } + } + + @Override + public boolean isCellEditable(int row, int col) { + switch (col){ + case 0: + return false; + case 1: + return true; + case 2: + return false; + default: + return false; + } + } + + public boolean isSingleVariant() { + return singleVariant; + } + + public void setSingleVariant(boolean singleVariant) { + this.singleVariant = singleVariant; + } + + public boolean getSingleVariant() { + return this.singleVariant; + } + + @Override + public void setValueAt(Object arg0, int arg1, int arg2) { + if (arg1 == answers.size()) { + answers.add(new CompileQPart("")); + } + + switch (arg2) { + case 1: + answers.get(arg1).setAnswerText(arg0.toString()); + break; + case 2: + try { + double value = 0; + if (!arg0.toString().equals("")) { + value = Double.valueOf(arg0.toString()); + } + answers.get(arg1).setAnswerPoint(value); + } catch (NumberFormatException e) { + System.out.print("Entered value is't a double value!\n"); + } + break; + } + + fireTableRowsUpdated(arg1, arg1); + } + + public void deleteRow(int selectedRow) { + if (selectedRow < answers.size() && selectedRow >= 0) { + answers.remove(selectedRow); + fireTableRowsDeleted(selectedRow, selectedRow); + } + } + + public void insertRow(int selectedRow) { + if (selectedRow >= answers.size()){ + selectedRow--; + } + + answers.add(selectedRow + 1, new CompileQPart("")); + fireTableRowsInserted(selectedRow + 1, selectedRow + 1); + } + + public boolean moveUp(int selectedRow) { + if (selectedRow < 1 || selectedRow >= answers.size()){ + return false; + } + + CompileQPart answer = answers.get(selectedRow); + answers.set(selectedRow, answers.get(selectedRow - 1)); + answers.set(selectedRow - 1, answer); + + fireTableRowsUpdated(selectedRow - 1, selectedRow); + + return true; + } + + public boolean moveDown(int selectedRow) { + if (selectedRow < 0 || selectedRow >= answers.size() - 1){ + return false; + } + + CompileQPart answer = answers.get(selectedRow); + answers.set(selectedRow, answers.get(selectedRow + 1)); + answers.set(selectedRow + 1, answer); + + fireTableRowsUpdated(selectedRow + 1, selectedRow); + + return true; + } +} Modified: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ItemModels.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ItemModels.java 2008-05-14 18:01:48 UTC (rev 137) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ItemModels.java 2008-05-14 21:05:22 UTC (rev 138) @@ -5,6 +5,7 @@ import edu.lnu.FireFly.FFManifest.Organization; import edu.lnu.FireFly.FFManifest.TreeItem; import edu.lnu.FireFly.WebEditor.ItemModels.Chapter.ChapterModel; +import edu.lnu.FireFly.WebEditor.ItemModels.CompileQ.CompileQModel; import edu.lnu.FireFly.WebEditor.ItemModels.Lecture.LectureModel; import edu.lnu.FireFly.WebEditor.ItemModels.SimpleQuestion.SimpleQuestionModel; import edu.lnu.FireFly.WebEditor.ItemModels.SummaryPageModel.SummaryPageModel; @@ -81,9 +82,10 @@ static { ItemModels.clear(); + ItemModels.registerModel(new ChapterModel()); ItemModels.registerModel(new LectureModel()); ItemModels.registerModel(new SimpleQuestionModel()); - ItemModels.registerModel(new ChapterModel()); + ItemModels.registerModel(new CompileQModel()); ItemModels.registerModel(new OrganizationModel()); ItemModels.registerModel(new SummaryPageModel()); } Modified: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java 2008-05-14 18:01:48 UTC (rev 137) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java 2008-05-14 21:05:22 UTC (rev 138) @@ -65,8 +65,8 @@ @Override public void remove(TreeItem anItem) { + TreeDataModel.getInstance().treeNodesDeleted(anItem); anItem.getParent().removeChild(anItem); - TreeDataModel.getInstance().treeNodesDeleted(anItem); deleteResource(anItem); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |