/** * Metaphase Editor - WYSIWYG HTML Editor Component * Copyright (C) 2010 Rudolf Visagie * Full text of license can be found in com/metaphaseeditor/LICENSE.txt * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * The author can be contacted at metaphase.editor@gmail.com. */ package com.metaphaseeditor; import org.openflexo.toolbox.ImageIconResource; /** * * @author Rudolf Visagie */ public class TableDialog extends javax.swing.JDialog { private String tableHtml; private enum Alignment { NONE("None", null), LEFT("Left", "left"), CENTER("Center", "center"), RIGHT("Right", "right"); private String text; private String attrValue; Alignment(String text, String attrValue) { this.text = text; this.attrValue = attrValue; } public String getAttrValue() { return attrValue; } public String getText() { return text; } @Override public String toString() { return text; } }; private enum WidthType { PIXELS("Pixels"), PERCENTAGE("Percentage"); private String text; WidthType(String text) { this.text = text; } public String getText() { return text; } @Override public String toString() { return text; } } private enum HeaderType { NONE("None"), FIRST_ROW("First Row"), FIRST_COLUMN("First Column"), BOTH("Both"); private String text; HeaderType(String text) { this.text = text; } public String getText() { return text; } @Override public String toString() { return text; } } /** Creates new form TableDialog */ public TableDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); setIconImage(new ImageIconResource("Icons/MetaphaseEditor/icons/metaphase16x16.png").getImage()); setLocationRelativeTo(null); alignmentComboBox.removeAllItems(); Alignment[] alignments = Alignment.values(); for (int i = 0; i < alignments.length; i++) { alignmentComboBox.addItem(alignments[i]); } headersComboBox.removeAllItems(); HeaderType[] headerTypes = HeaderType.values(); for (int i = 0; i < headerTypes.length; i++) { headersComboBox.addItem(headerTypes[i]); } widthTypeComboBox.removeAllItems(); WidthType[] widthTypes = WidthType.values(); for (int i = 0; i < widthTypes.length; i++) { widthTypeComboBox.addItem(widthTypes[i]); } pack(); } /** * 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { rowsLabel = new javax.swing.JLabel(); rowsSpinner = new javax.swing.JSpinner(); columnsLabel = new javax.swing.JLabel(); columnsSpinner = new javax.swing.JSpinner(); widthLabel = new javax.swing.JLabel(); heightLabel = new javax.swing.JLabel(); heightSpinner = new javax.swing.JSpinner(); widthSpinner = new javax.swing.JSpinner(); widthTypeComboBox = new javax.swing.JComboBox(); headersLabel = new javax.swing.JLabel(); headersComboBox = new javax.swing.JComboBox(); cellPaddingLabel = new javax.swing.JLabel(); cellPaddingSpinner = new javax.swing.JSpinner(); cellSpacingLabel = new javax.swing.JLabel(); cellSpacingSpinner = new javax.swing.JSpinner(); borderSizeLabel = new javax.swing.JLabel(); borderSizeSpinner = new javax.swing.JSpinner(); alignmentLabel = new javax.swing.JLabel(); alignmentComboBox = new javax.swing.JComboBox(); captionLabel = new javax.swing.JLabel(); captionTextField = new javax.swing.JTextField(); summaryLabel = new javax.swing.JLabel(); summaryTextField = new javax.swing.JTextField(); cancelButton = new javax.swing.JButton(); okButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Insert Table"); rowsLabel.setText("Rows"); rowsSpinner.setModel(new javax.swing.SpinnerNumberModel(1, 1, 50, 1)); columnsLabel.setText("Columns"); columnsSpinner.setModel(new javax.swing.SpinnerNumberModel(1, 1, 50, 1)); widthLabel.setText("Width"); heightLabel.setText("Height"); heightSpinner.setModel(new javax.swing.SpinnerNumberModel(100, 1, 2000, 1)); widthSpinner.setModel(new javax.swing.SpinnerNumberModel(200, 1, 2000, 1)); widthTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Pixels", "Percent" })); headersLabel.setText("Headers"); headersComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "First Row", "First Column", "Both" })); cellPaddingLabel.setText("Cell Padding"); cellPaddingSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(0), null, Integer.valueOf(1))); cellSpacingLabel.setText("Cell Spacing"); cellSpacingSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(0), null, Integer.valueOf(1))); borderSizeLabel.setText("Border Size"); borderSizeSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(0), null, Integer.valueOf(1))); alignmentLabel.setText("Alignment"); alignmentComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Left", "Center", "Right" })); captionLabel.setText("Caption"); summaryLabel.setText("Summary"); cancelButton.setText("Cancel"); cancelButton.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); okButton.setText("OK"); okButton.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { okButtonActionPerformed(evt); } }); 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) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(headersLabel).addComponent(rowsLabel) .addComponent(borderSizeLabel).addComponent(columnsLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(borderSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent( rowsSpinner, javax.swing.GroupLayout.Alignment.LEADING) .addComponent( columnsSpinner, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 64, Short.MAX_VALUE)) .addComponent(headersComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(widthLabel) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent( cellPaddingLabel) .addComponent(heightLabel) .addComponent( cellSpacingLabel)) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(heightSpinner) .addComponent(widthSpinner) .addComponent( cellPaddingSpinner) .addComponent( cellSpacingSpinner)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(widthTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(alignmentLabel).addComponent(summaryLabel) .addComponent(captionLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(summaryTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) .addComponent(captionTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) .addComponent(alignmentComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup( javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addComponent(okButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cancelButton))).addContainerGap())); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] { cancelButton, okButton }); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup() .addContainerGap() .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(rowsLabel) .addComponent(rowsSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(columnsSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(columnsLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(headersLabel) .addComponent(headersComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(borderSizeLabel) .addComponent(borderSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(alignmentLabel) .addComponent(alignmentComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(widthLabel) .addComponent(widthSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(widthTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(heightLabel) .addComponent(heightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cellPaddingLabel) .addComponent(cellPaddingSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cellSpacingLabel) .addComponent(cellSpacingSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(captionLabel) .addComponent(captionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(summaryLabel) .addComponent(summaryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(cancelButton) .addComponent(okButton)).addContainerGap())); pack(); }// </editor-fold>//GEN-END:initComponents private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_cancelButtonActionPerformed setVisible(false); }// GEN-LAST:event_cancelButtonActionPerformed private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_okButtonActionPerformed int rows = ((Integer) rowsSpinner.getValue()).intValue(); int columns = ((Integer) columnsSpinner.getValue()).intValue(); int borderSize = ((Integer) borderSizeSpinner.getValue()).intValue(); int width = ((Integer) widthSpinner.getValue()).intValue(); int height = ((Integer) heightSpinner.getValue()).intValue(); int cellPadding = ((Integer) cellPaddingSpinner.getValue()).intValue(); int cellSpacing = ((Integer) cellSpacingSpinner.getValue()).intValue(); Alignment alignment = (Alignment) alignmentComboBox.getSelectedItem(); WidthType widthType = (WidthType) widthTypeComboBox.getSelectedItem(); HeaderType headerType = (HeaderType) headersComboBox.getSelectedItem(); boolean rowHeaders = headerType == HeaderType.FIRST_ROW || headerType == HeaderType.BOTH; boolean columnHeaders = headerType == HeaderType.FIRST_COLUMN || headerType == HeaderType.BOTH; String caption = captionTextField.getText(); String summary = summaryTextField.getText(); StringBuffer buffer = new StringBuffer(); buffer.append("<table "); if (alignment != Alignment.NONE) { buffer.append("align='"); buffer.append(alignment.attrValue); buffer.append("' "); } if (summary.length() > 0) { buffer.append("summary='"); buffer.append(summary); buffer.append("' "); } buffer.append("border='"); buffer.append(borderSize); buffer.append("' width='"); buffer.append(width); if (widthType == WidthType.PERCENTAGE) { buffer.append("%"); } buffer.append("' height='"); buffer.append(height); buffer.append("' cellpadding='"); buffer.append(cellPadding); buffer.append("' cellspacing='"); buffer.append(cellSpacing); buffer.append("'>"); if (caption.length() > 0) { buffer.append("<caption>"); buffer.append(caption); buffer.append("</caption>"); } for (int i = 0; i < rows; i++) { buffer.append("<tr>"); for (int j = 0; j < columns; j++) { if (i == 0 && rowHeaders || j == 0 && columnHeaders) { buffer.append("<th> </th>"); } else { buffer.append("<td> </td>"); } } buffer.append("</tr>"); } buffer.append("</table>"); tableHtml = buffer.toString(); setVisible(false); }// GEN-LAST:event_okButtonActionPerformed public String showDialog() { setVisible(true); return tableHtml; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox alignmentComboBox; private javax.swing.JLabel alignmentLabel; private javax.swing.JLabel borderSizeLabel; private javax.swing.JSpinner borderSizeSpinner; private javax.swing.JButton cancelButton; private javax.swing.JLabel captionLabel; private javax.swing.JTextField captionTextField; private javax.swing.JLabel cellPaddingLabel; private javax.swing.JSpinner cellPaddingSpinner; private javax.swing.JLabel cellSpacingLabel; private javax.swing.JSpinner cellSpacingSpinner; private javax.swing.JLabel columnsLabel; private javax.swing.JSpinner columnsSpinner; private javax.swing.JComboBox headersComboBox; private javax.swing.JLabel headersLabel; private javax.swing.JLabel heightLabel; private javax.swing.JSpinner heightSpinner; private javax.swing.JButton okButton; private javax.swing.JLabel rowsLabel; private javax.swing.JSpinner rowsSpinner; private javax.swing.JLabel summaryLabel; private javax.swing.JTextField summaryTextField; private javax.swing.JLabel widthLabel; private javax.swing.JSpinner widthSpinner; private javax.swing.JComboBox widthTypeComboBox; // End of variables declaration//GEN-END:variables }