/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.danielluedecke.zettelkasten; import de.danielluedecke.zettelkasten.database.Settings; import de.danielluedecke.zettelkasten.util.Constants; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.JComponent; import javax.swing.KeyStroke; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.jdesktop.application.Action; /** * * @author danielludecke */ public class CInsertManualLink extends javax.swing.JDialog { private String manlink; /** * * @param parent * @param selection * @param settingsObj */ public CInsertManualLink(java.awt.Frame parent, String selection, Settings settingsObj) { super(parent); initComponents(); // set application icon setIconImage(Constants.zknicon.getImage()); // disbale apply button jButtonApply.setEnabled(false); getRootPane().setDefaultButton(jButtonApply); if (settingsObj.isSeaGlass()) { jButtonApply.putClientProperty("JComponent.sizeVariant", "small"); jButtonCancel.putClientProperty("JComponent.sizeVariant", "small"); } // check for param if (selection!=null && !selection.isEmpty()) { // trim spaces selection = selection.trim(); // set text jTextFieldDesc.setText(selection); // set focus to next textfield jTextFieldNr.requestFocusInWindow(); } else { jTextFieldDesc.requestFocusInWindow(); } initListeners(); manlink = null; } @Action public void cancel() { manlink = null; dispose(); setVisible(false); } @Action public void insertManlink() { // get desc and manlink nr. String desc = jTextFieldDesc.getText(); String link = jTextFieldNr.getText(); // check for valid values if (desc!=null && link!=null && !link.isEmpty()) { // check for valid nr input try { Integer.parseInt(link); manlink = Constants.FORMAT_MANLINK_OPEN+" "+link+"]"+desc+Constants.FORMAT_MANLINK_CLOSE; } catch (NumberFormatException ex) { manlink = null; } } else { manlink = null; } dispose(); setVisible(false); } public String getManlink() { return manlink; } private void initListeners() { // these codelines add an escape-listener to the dialog. so, when the user // presses the escape-key, the same action is performed as if the user // presses the cancel button... KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); ActionListener cancelAction = new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent evt) { cancel(); } }; getRootPane().registerKeyboardAction(cancelAction, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW); // if the user inputs text into the textfield, check whether we have at least // the two necessary textfield filled with data jTextFieldDesc.getDocument().addDocumentListener(new DocumentListener() { @Override public void changedUpdate(DocumentEvent e) { enableApplyButton(); } @Override public void insertUpdate(DocumentEvent e) { enableApplyButton(); } @Override public void removeUpdate(DocumentEvent e) { enableApplyButton(); } }); jTextFieldNr.getDocument().addDocumentListener(new DocumentListener() { @Override public void changedUpdate(DocumentEvent e) { enableApplyButton(); } @Override public void insertUpdate(DocumentEvent e) { enableApplyButton(); } @Override public void removeUpdate(DocumentEvent e) { enableApplyButton(); } }); } private void enableApplyButton() { // check whether we have text in first textfield boolean check1 = jTextFieldDesc.getText()!=null && !jTextFieldDesc.getText().isEmpty(); // check whether we have text in second textfield boolean check2 = jTextFieldNr.getText()!=null && !jTextFieldNr.getText().isEmpty(); // third check, correct nr (int) boolean check3 = false; // check for valid nr input if (check2) { try { Integer.parseInt(jTextFieldNr.getText()); check3 = true; } catch (NumberFormatException ex) { } } // enable apply-button only if we have text in the obligatory text fields jButtonApply.setEnabled(check1 && check2 && check3); } /** * 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() { jLabelDesc = new javax.swing.JLabel(); jTextFieldDesc = new javax.swing.JTextField(); jLabelNr = new javax.swing.JLabel(); jTextFieldNr = new javax.swing.JTextField(); jButtonCancel = new javax.swing.JButton(); jButtonApply = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(de.danielluedecke.zettelkasten.ZettelkastenApp.class).getContext().getResourceMap(CInsertManualLink.class); setTitle(resourceMap.getString("FormInsertQuerverweis.title")); // NOI18N setModal(true); setName("FormInsertQuerverweis"); // NOI18N setResizable(false); jLabelDesc.setText(resourceMap.getString("jLabelDesc.text")); // NOI18N jLabelDesc.setName("jLabelDesc"); // NOI18N jTextFieldDesc.setToolTipText(resourceMap.getString("jTextFieldDesc.toolTipText")); // NOI18N jTextFieldDesc.setName("jTextFieldDesc"); // NOI18N jLabelNr.setText(resourceMap.getString("jLabelNr.text")); // NOI18N jLabelNr.setName("jLabelNr"); // NOI18N jTextFieldNr.setToolTipText(resourceMap.getString("jTextFieldNr.toolTipText")); // NOI18N jTextFieldNr.setName("jTextFieldNr"); // NOI18N javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(de.danielluedecke.zettelkasten.ZettelkastenApp.class).getContext().getActionMap(CInsertManualLink.class, this); jButtonCancel.setAction(actionMap.get("cancel")); // NOI18N jButtonCancel.setName("jButtonCancel"); // NOI18N jButtonApply.setAction(actionMap.get("insertManlink")); // NOI18N jButtonApply.setName("jButtonApply"); // NOI18N org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jLabelDesc) .add(jLabelNr)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jTextFieldNr) .add(jTextFieldDesc))) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(0, 262, Short.MAX_VALUE) .add(jButtonCancel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jButtonApply))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabelDesc) .add(jTextFieldDesc, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabelNr) .add(jTextFieldNr, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jButtonCancel) .add(jButtonApply)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonApply; private javax.swing.JButton jButtonCancel; private javax.swing.JLabel jLabelDesc; private javax.swing.JLabel jLabelNr; private javax.swing.JTextField jTextFieldDesc; private javax.swing.JTextField jTextFieldNr; // End of variables declaration//GEN-END:variables }