Package reportgen.gui.genepanel.formatpanel.dlg

Source Code of reportgen.gui.genepanel.formatpanel.dlg.CellBorderPanel$InsetChanged

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

}
TOP

Related Classes of reportgen.gui.genepanel.formatpanel.dlg.CellBorderPanel$InsetChanged

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.