/*
* ContractEditor.java
*
* Created on 18. August 2005, 12:19
*/
package MrSystem;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.table.*;
import javax.swing.event.*;
/**
*
* @author Phil
*/
public class ContractEditor extends javax.swing.JPanel
{
private final String[] EDITMODES_ = {"Felder", "Paragraphen"};
Contract contract_;
/** Creates new form ContractEditor */
public ContractEditor(ContractT ct)
{
initComponents();
for(int mode = 0; mode < EDITMODES_.length; mode++)
chooseeditmode_.addItem(EDITMODES_[mode]);
chooseeditmode_.setSelectedIndex(0);
SetEdit();
contract_ = new Contract(ct);
contract_.AddToTextPane(contractview_);
FieldTableModel mdl = new FieldTableModel(contractview_);
mdl.setData(contract_);
DefaultTableColumnModel cmdl = new DefaultTableColumnModel();
cmdl.addColumn(new TableColumn(0));
cmdl.addColumn(new TableColumn(1));
cmdl.addColumn(new TableColumn(2));
cmdl.addColumn(new TableColumn(3, 100, new ButtonCellRenderer("Edit"),
new ButtonCellEditor("Edit")));
edit_.setModel(mdl);
edit_.setColumnModel(cmdl);
mdl.setEnableEvents(true);
}
private void SetEdit()
{
if(chooseeditmode_.getSelectedIndex() == 0)
{
}
}
private class FieldTableModel extends AbstractTableModel implements
TableModelListener
{
private final String SPLITSEQ = "::";
private Object[][] data_;
private String[] colnames_ = {"Name", "Typ", "Wert", "Extra"};
private Contract contract_;
private boolean enableevents_ = false;
private JTextPane pane_;
public FieldTableModel(JTextPane pane)
{
pane_ = pane;
this.addTableModelListener(this);
}
public void setEnableEvents(boolean enable) {enableevents_ = enable;}
public void tableChanged(TableModelEvent e)
{
//Check if an Editor needs to be opened
System.out.println(e.getColumn());
System.out.println(e.getFirstRow());
//Otherwise
if(!enableevents_)
return;
//determine the paragraph
String editname = (String)data_[e.getFirstRow()][0];
String[] splitnames = editname.split(SPLITSEQ);
Paragraph[] pars = contract_.getParagraphs();
try
{
for(int p = 0; p < pars.length; p++)
{
if(splitnames[0].equals(pars[p].getName()))
{
pars[p].SetFieldValue(splitnames[1],
(String)data_[e.getFirstRow()][1],
(String)data_[e.getFirstRow()][2]);
}
}
StyledDocument doc = pane_.getStyledDocument();
doc.remove(0, doc.getLength());
contract_.AddToTextPane(pane_);
}
catch(TagsCorruptedException ex)
{
MrUtils.ErrorMsgBox("FATAL ERROR [tableChanged]:\n" + ex);
}
catch(SetFieldException ex)
{
MrUtils.ErrorMsgBox("FATAL ERROR [tableChanged]:\n" + ex);
}
catch(BadLocationException ex)
{
MrUtils.ErrorMsgBox("FATAL ERROR [tableChanged]:\n" + ex);
}
}
public void setData(Contract c)
{
contract_ = c;
Paragraph[] paragraphs = c.getParagraphs();
try
{
int numfields = 0;
for(int par = 0; par < paragraphs.length; par++)
numfields += paragraphs[par].GetFields().length;
data_ = new Object[numfields][4];
int line = 0;
for(int par = 0; par < paragraphs.length; par++)
{
String parname = paragraphs[par].getName() + SPLITSEQ;
Field[] f = paragraphs[par].GetFields();
for(int field = 0; field < f.length; field++)
{
data_[line][0] = parname + f[field].getName();
data_[line][1] = f[field].getType();
data_[line][2] = f[field].getValue();
if(f[field].getType().equals(GlobConst.Tags.Types.OBJECTSEL))
{
data_[line++][3] = new JButton("Edit");
}
else
data_[line++][3] = null;
}
}
}
catch(TagsCorruptedException e)
{
MrUtils.ErrorMsgBox("FATAL ERROR [setData]:\n" + e);
}
fireTableDataChanged();
}
public int getRowCount() {return data_.length;}
public int getColumnCount() {return colnames_.length;}
public String getColumnName(int index) {return colnames_[index];}
public boolean isCellEditable(int x, int y)
{
if(x < 1) //Every Cell in the first col is not editable
return false;
return true;
}
public Object getValueAt(int x, int y) {return data_[x][y];}
public void setValueAt(Object obj, int x, int y)
{
data_[x][y] = obj;
fireTableDataChanged();
}
public Class getColumnClass(int col)
{
switch(col)
{
case 0: case 1: case 2: return String.class;
case 3: return JButton.class;
}
return String.class;
}
}
private class ButtonCellRenderer implements TableCellRenderer
{
private final JButton button_;
public ButtonCellRenderer(String buttonlabel)
{
button_ = new JButton(buttonlabel);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean selected, boolean focus, int row, int col)
{
return button_;
}
}
private class ButtonCellEditor extends AbstractCellEditor implements
TableCellEditor
{
private JButton button_;
private String label_;
private boolean pushed_;
public ButtonCellEditor(String buttonlabel)
{
button_ = new JButton(buttonlabel);
button_.setOpaque(true);
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int col)
{
return button_;
}
public Object getCellEditorValue()
{
return null;
}
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents()
{
toppanel_ = new javax.swing.JPanel();
contractviewscroll_ = new javax.swing.JScrollPane();
contractview_ = new javax.swing.JTextPane();
bottompanel_ = new javax.swing.JPanel();
chooseeditmode_ = new javax.swing.JComboBox();
editpanel_ = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
edit_ = new javax.swing.JTable();
setLayout(new java.awt.GridLayout(2, 1));
toppanel_.setLayout(null);
toppanel_.setBackground(new java.awt.Color(204, 51, 255));
contractviewscroll_.setViewportView(contractview_);
toppanel_.add(contractviewscroll_);
contractviewscroll_.setBounds(30, 30, 500, 160);
add(toppanel_);
bottompanel_.setLayout(null);
bottompanel_.setBackground(new java.awt.Color(153, 255, 153));
bottompanel_.add(chooseeditmode_);
chooseeditmode_.setBounds(20, 10, 500, 22);
edit_.setModel(new javax.swing.table.DefaultTableModel(
new Object [][]
{
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String []
{
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
edit_.setRowSelectionAllowed(false);
jScrollPane1.setViewportView(edit_);
editpanel_.add(jScrollPane1);
bottompanel_.add(editpanel_);
editpanel_.setBounds(20, 50, 500, 160);
add(bottompanel_);
}
// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JPanel bottompanel_;
private javax.swing.JComboBox chooseeditmode_;
private javax.swing.JTextPane contractview_;
private javax.swing.JScrollPane contractviewscroll_;
private javax.swing.JTable edit_;
private javax.swing.JPanel editpanel_;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel toppanel_;
// End of variables declaration
}