package reportgen.gui.genepanel.formatpanel.dlg;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import simplesheet.style.Style;
import simplesheet.style.CellBorder;
import simplesheet.style.CellEdge;
import simplesheet.style.EdgeType;
import simplesheet.style.Margin;
/**
*
* @author axe
*/
public class CellBorderPanel extends javax.swing.JPanel {
private final Style style;
private final TableListener tableListener;
public CellBorderPanel(Style style, TableListener tableListener) {
this.style = style;
this.tableListener = tableListener;
initComponents();
Margin insets = style.getMargin();
if(insets != null) {
topInset.setText(String.valueOf(insets.top));
bottomInset.setText(String.valueOf(insets.bottom));
leftInset.setText(String.valueOf(insets.left));
rightInset.setText(String.valueOf(insets.right));
}
topInset.getDocument().addDocumentListener(null);
topInset.getDocument().addDocumentListener(new InsetChanged(topInset));
bottomInset.getDocument().addDocumentListener(new InsetChanged(bottomInset));
rightInset.getDocument().addDocumentListener(new InsetChanged(rightInset));
leftInset.getDocument().addDocumentListener(new InsetChanged(leftInset));
CellBorder border = style.getBorder();
initEdgeControls(border == null ? null:border.top, topBorderCombo, topWidthField);
initEdgeControls(border == null ? null:border.bottom, bottomBorderCombo, bottomWidthField);
initEdgeControls(border == null ? null:border.left, leftBorderCombo, leftWidthField);
initEdgeControls(border == null ? null:border.right, rightBorderCombo, rightWidthField);
}
private void initEdgeControls(CellEdge edge, JComboBox typeCombo, JTextField widthField) {
typeCombo.setModel(new DefaultComboBoxModel(EdgeType.values()));
if(edge != null) {
typeCombo.setSelectedItem(edge.getType());
widthField.setText(String.valueOf(edge.getWidth()));
} else {
typeCombo.setSelectedItem(EdgeType.invisible);
widthField.setText("0");
}
widthField.getDocument().addDocumentListener(new DocumentListener() {
@Override public void insertUpdate(DocumentEvent e) { updateBorder(); }
@Override public void removeUpdate(DocumentEvent e) { updateBorder(); }
@Override public void changedUpdate(DocumentEvent e) { }
});
typeCombo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateBorder();
}
});
}
private void updateBorder() {
try {
CellBorder border = null;
if(allInOneBtn.isSelected()) {
CellEdge edge = getEdge(topBorderCombo, topWidthField);
border = new CellBorder(edge, edge, edge, edge);
} else if(topBottomBtn.isSelected()) {
CellEdge top = getEdge(topBorderCombo, topWidthField);
CellEdge bottom = getEdge(bottomBorderCombo, bottomWidthField);
border = new CellBorder(top, null, null, bottom);
} else if(leftRightBtn.isSelected()) {
CellEdge left = getEdge(leftBorderCombo, leftWidthField);
CellEdge right = getEdge(rightBorderCombo, rightWidthField);
border = new CellBorder(null, left, right, null);
} else {
CellEdge top = getEdge(topBorderCombo, topWidthField);
CellEdge bottom = getEdge(bottomBorderCombo, bottomWidthField);
CellEdge left = getEdge(leftBorderCombo, leftWidthField);
CellEdge right = getEdge(rightBorderCombo, rightWidthField);
border = new CellBorder(top, left, right, bottom);
}
if (border.isEmpty()) {
style.setBorder(null);
} else {
style.setBorder(border);
}
} catch (NumberFormatException e) {
style.setBorder(null);
}
tableListener.dataChanged();
}
private CellEdge getEdge(JComboBox typeCombo, JTextField widthField)
throws NumberFormatException{
int width = Integer.parseInt(widthField.getText());
EdgeType type = (EdgeType) typeCombo.getSelectedItem();
if(width == 0
|| type == null
|| type == EdgeType.invisible) {
return null;
}
return new CellEdge(type, width);
}
private class InsetChanged implements DocumentListener {
private JTextField field;
public InsetChanged(JTextField field) {
this.field = field;
}
@Override public void insertUpdate(DocumentEvent e) { update(); }
@Override public void removeUpdate(DocumentEvent e) { update(); }
@Override public void changedUpdate(DocumentEvent e) {}
private void update() {
String txt = field.getText();
int value = 0;
if(txt.length() != 0) {
try {
value = Integer.parseInt(txt);
} catch (NumberFormatException ex) {
//do nothing
}
}
Margin m = style.getMargin();
if(m == null) {
m = new Margin(0, 0, 0, 0);
}
if(field == topInset) {
m = new Margin(m.left, m.right, value, m.bottom);
} else if(field == bottomInset) {
m = new Margin(m.left, m.right, m.top, value);
} else if(field == leftInset) {
m = new Margin(value, m.right, m.top, m.bottom);
} else if(field == rightInset) {
m = new Margin(m.left, value, m.top, m.bottom);
}
if(m.bottom == 0
&& m.left == 0
&& m.right == 0
&& m.top == 0) {
style.setMargin(null);
} else {
style.setMargin(m);
}
tableListener.dataChanged();
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jPanel8 = new javax.swing.JPanel();
jPanel9 = new javax.swing.JPanel();
jPanel10 = new javax.swing.JPanel();
topInset = new javax.swing.JTextField();
bottomInset = new javax.swing.JTextField();
leftInset = new javax.swing.JTextField();
rightInset = new javax.swing.JTextField();
jPanel11 = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jPanel12 = new javax.swing.JPanel();
jPanel13 = new javax.swing.JPanel();
jPanel14 = new javax.swing.JPanel();
topWidthField = new javax.swing.JTextField();
topBorderCombo = new javax.swing.JComboBox();
bottomWidthField = new javax.swing.JTextField();
bottomBorderCombo = new javax.swing.JComboBox();
leftWidthField = new javax.swing.JTextField();
leftBorderCombo = new javax.swing.JComboBox();
rightWidthField = new javax.swing.JTextField();
rightBorderCombo = new javax.swing.JComboBox();
jPanel15 = new javax.swing.JPanel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jPanel16 = new javax.swing.JPanel();
jLabel14 = new javax.swing.JLabel();
allInOneBtn = new javax.swing.JToggleButton();
topBottomBtn = new javax.swing.JToggleButton();
leftRightBtn = new javax.swing.JToggleButton();
independentBtn = new javax.swing.JToggleButton();
jPanel8.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createTitledBorder("Отступы (в 0,1 единицах высоты шрифта)"), javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)));
jPanel9.setLayout(new java.awt.BorderLayout(5, 5));
jPanel10.setLayout(new java.awt.GridLayout(0, 1, 5, 5));
jPanel10.add(topInset);
jPanel10.add(bottomInset);
jPanel10.add(leftInset);
jPanel10.add(rightInset);
jPanel9.add(jPanel10, java.awt.BorderLayout.CENTER);
jPanel11.setLayout(new java.awt.GridLayout(0, 1, 5, 5));
jLabel6.setText("Сверху");
jPanel11.add(jLabel6);
jLabel7.setText("Снизу");
jPanel11.add(jLabel7);
jLabel8.setText("Слева");
jPanel11.add(jLabel8);
jLabel9.setText("Справа");
jPanel11.add(jLabel9);
jPanel9.add(jPanel11, java.awt.BorderLayout.WEST);
javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
jPanel8.setLayout(jPanel8Layout);
jPanel8Layout.setHorizontalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel8Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
.addContainerGap())
);
jPanel8Layout.setVerticalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
);
jPanel12.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createTitledBorder("Границы (в пикселях)"), javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)));
jPanel13.setLayout(new java.awt.BorderLayout(5, 5));
jPanel14.setLayout(new java.awt.GridLayout(0, 2, 5, 5));
jPanel14.add(topWidthField);
jPanel14.add(topBorderCombo);
jPanel14.add(bottomWidthField);
jPanel14.add(bottomBorderCombo);
jPanel14.add(leftWidthField);
jPanel14.add(leftBorderCombo);
jPanel14.add(rightWidthField);
jPanel14.add(rightBorderCombo);
jPanel13.add(jPanel14, java.awt.BorderLayout.CENTER);
jPanel15.setLayout(new java.awt.GridLayout(0, 1, 5, 5));
jLabel10.setText("Сверху");
jPanel15.add(jLabel10);
jLabel11.setText("Снизу");
jPanel15.add(jLabel11);
jLabel12.setText("Слева");
jPanel15.add(jLabel12);
jLabel13.setText("Справа");
jPanel15.add(jLabel13);
jPanel13.add(jPanel15, java.awt.BorderLayout.WEST);
jPanel16.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
jLabel14.setText("Режим:");
jPanel16.add(jLabel14);
buttonGroup1.add(allInOneBtn);
allInOneBtn.setText("О");
allInOneBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
allInOneBtnActionPerformed(evt);
}
});
jPanel16.add(allInOneBtn);
buttonGroup1.add(topBottomBtn);
topBottomBtn.setText("С");
topBottomBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
topBottomBtnActionPerformed(evt);
}
});
jPanel16.add(topBottomBtn);
buttonGroup1.add(leftRightBtn);
leftRightBtn.setText("П");
leftRightBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
leftRightBtnActionPerformed(evt);
}
});
jPanel16.add(leftRightBtn);
buttonGroup1.add(independentBtn);
independentBtn.setText("X");
independentBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
independentBtnActionPerformed(evt);
}
});
jPanel16.add(independentBtn);
javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
jPanel12.setLayout(jPanel12Layout);
jPanel12Layout.setHorizontalGroup(
jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel12Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel13, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
.addComponent(jPanel16, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE))
.addContainerGap())
);
jPanel12Layout.setVerticalGroup(
jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel12Layout.createSequentialGroup()
.addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel12, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel8, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 386, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void allInOneBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_allInOneBtnActionPerformed
topWidthField.setEnabled(true);
topBorderCombo.setEnabled(true);
bottomWidthField.setEnabled(false);
bottomBorderCombo.setEnabled(false);
rightWidthField.setEnabled(false);
rightBorderCombo.setEnabled(false);
leftWidthField.setEnabled(false);
leftBorderCombo.setEnabled(false);
}//GEN-LAST:event_allInOneBtnActionPerformed
private void topBottomBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_topBottomBtnActionPerformed
topWidthField.setEnabled(true);
topBorderCombo.setEnabled(true);
bottomWidthField.setEnabled(true);
bottomBorderCombo.setEnabled(true);
rightWidthField.setEnabled(false);
rightBorderCombo.setEnabled(false);
leftWidthField.setEnabled(false);
leftBorderCombo.setEnabled(false);
}//GEN-LAST:event_topBottomBtnActionPerformed
private void leftRightBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_leftRightBtnActionPerformed
topWidthField.setEnabled(false);
topBorderCombo.setEnabled(false);
bottomWidthField.setEnabled(false);
bottomBorderCombo.setEnabled(false);
rightWidthField.setEnabled(true);
rightBorderCombo.setEnabled(true);
leftWidthField.setEnabled(true);
leftBorderCombo.setEnabled(true);
}//GEN-LAST:event_leftRightBtnActionPerformed
private void independentBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_independentBtnActionPerformed
topWidthField.setEnabled(true);
topBorderCombo.setEnabled(true);
bottomWidthField.setEnabled(true);
bottomBorderCombo.setEnabled(true);
rightWidthField.setEnabled(true);
rightBorderCombo.setEnabled(true);
leftWidthField.setEnabled(true);
leftBorderCombo.setEnabled(true);
}//GEN-LAST:event_independentBtnActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JToggleButton allInOneBtn;
private javax.swing.JComboBox bottomBorderCombo;
private javax.swing.JTextField bottomInset;
private javax.swing.JTextField bottomWidthField;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JToggleButton independentBtn;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel10;
private javax.swing.JPanel jPanel11;
private javax.swing.JPanel jPanel12;
private javax.swing.JPanel jPanel13;
private javax.swing.JPanel jPanel14;
private javax.swing.JPanel jPanel15;
private javax.swing.JPanel jPanel16;
private javax.swing.JPanel jPanel8;
private javax.swing.JPanel jPanel9;
private javax.swing.JComboBox leftBorderCombo;
private javax.swing.JTextField leftInset;
private javax.swing.JToggleButton leftRightBtn;
private javax.swing.JTextField leftWidthField;
private javax.swing.JComboBox rightBorderCombo;
private javax.swing.JTextField rightInset;
private javax.swing.JTextField rightWidthField;
private javax.swing.JComboBox topBorderCombo;
private javax.swing.JToggleButton topBottomBtn;
private javax.swing.JTextField topInset;
private javax.swing.JTextField topWidthField;
// End of variables declaration//GEN-END:variables
}