package flow.netbeans.markdown.options; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JCheckBox; import javax.swing.JEditorPane; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; import javax.swing.text.EditorKit; import org.netbeans.api.editor.DialogBinding; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileSystem; import org.openide.filesystems.FileUtil; import org.openide.loaders.DataObject; import org.openide.text.CloneableEditorSupport; import org.openide.util.Exceptions; public final class MarkdownPanel extends javax.swing.JPanel { private final MarkdownOptionsPanelController controller; private static final long serialVersionUID = -2655146103696320933L; MarkdownPanel(MarkdownOptionsPanelController controller) { this.controller = controller; initComponents(); setMimeType(HTML_TEMPLATE, "text/html", "html"); bindDefaultAction(this.getComponents(), new ActionHandler(), new ChangeHandler()); DocumentListener documentListener = new DocumentHandler(); HTML_TEMPLATE.getDocument().addDocumentListener(documentListener); } /** * Binds {@code ActionListener} and {@code ChangeListener} instances to the appropriate * components in this set of options. * * NOTE: This is a recursive method, calling itself when container components are encountered in the supplied array. * * @param comps the array of {@code Component}s to which listeners are bound * @param actionListener the {@code ActionListener} instance to bind to components issuing {@actionPerformed} messages * @param changeListener the {@code ChangeListener} instance to bind to components issuing {@stateChanged} messages */ private void bindDefaultAction(Component[] comps, ActionListener actionListener, ChangeListener changeListener) { for (Component comp : comps) { if (comp instanceof JTabbedPane) { bindDefaultAction(((JTabbedPane)comp).getComponents(), actionListener, changeListener); } else if(comp instanceof JPanel) { bindDefaultAction(((JPanel)comp).getComponents(), actionListener, changeListener); } else if (comp instanceof JCheckBox) { ((JCheckBox)comp).addActionListener(actionListener); } else if (comp instanceof JSpinner) { ((JSpinner)comp).addChangeListener(changeListener); } } } /** * 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">//GEN-BEGIN:initComponents private void initComponents() { TABS = new javax.swing.JTabbedPane(); EXTENSIONS_PANEL = new javax.swing.JPanel(); EXTENSIONS_PANEL_HEADER = new javax.swing.JLabel(); SMARTS = new javax.swing.JCheckBox(); QUOTES = new javax.swing.JCheckBox(); ABBREVIATIONS = new javax.swing.JCheckBox(); HARDWRAPS = new javax.swing.JCheckBox(); AUTOLINKS = new javax.swing.JCheckBox(); TABLES = new javax.swing.JCheckBox(); DEFINITION_LISTS = new javax.swing.JCheckBox(); FENCED_CODE_BLOCKS = new javax.swing.JCheckBox(); HTML_BLOCK_SUPPRESSION = new javax.swing.JCheckBox(); INLINE_HTML_SUPPRESSION = new javax.swing.JCheckBox(); WIKILINKS = new javax.swing.JCheckBox(); STRIKETHROUGH = new javax.swing.JCheckBox(); HTML_EXPORT_PANEL = new javax.swing.JPanel(); HTML_PANEL_HEADER = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); HTML_TEMPLATE = new javax.swing.JEditorPane(); MISC_PANEL = new javax.swing.JPanel(); VIEW_HTML_ON_SAVE = new javax.swing.JCheckBox(); SAVE_IN_SOURCE_DIR = new javax.swing.JCheckBox(); TYPING_HOOKS = new javax.swing.JCheckBox(); AUTO_ADDITION_LIST = new javax.swing.JCheckBox(); REMOVE_EMPTY_LIST = new javax.swing.JCheckBox(); REORDER_ORDERED_LIST_NUMBER = new javax.swing.JCheckBox(); REMOVE_ORDERED_LIST_NUMBER = new javax.swing.JCheckBox(); FX_HTML_VIEW_ENABLED = new javax.swing.JCheckBox(); EXPORT_ON_SAVE = new javax.swing.JCheckBox(); USE_CUSTOM_PREVIEW_REFRESH_INTERVAL = new javax.swing.JCheckBox(); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL = new javax.swing.JLabel(); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS = new javax.swing.JLabel(); CUSTOM_PREVIEW_REFRESH_INTERVAL = new javax.swing.JSpinner(); org.openide.awt.Mnemonics.setLocalizedText(EXTENSIONS_PANEL_HEADER, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.EXTENSIONS_PANEL_HEADER.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(SMARTS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.SMARTS.text")); // NOI18N SMARTS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.SMARTS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(QUOTES, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.QUOTES.text")); // NOI18N QUOTES.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.QUOTES.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(ABBREVIATIONS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.ABBREVIATIONS.text")); // NOI18N ABBREVIATIONS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.ABBREVIATIONS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(HARDWRAPS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.HARDWRAPS.text")); // NOI18N HARDWRAPS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.HARDWRAPS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(AUTOLINKS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.AUTOLINKS.text")); // NOI18N AUTOLINKS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.AUTOLINKS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(TABLES, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.TABLES.text")); // NOI18N TABLES.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.TABLES.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(DEFINITION_LISTS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.DEFINITION_LISTS.text")); // NOI18N DEFINITION_LISTS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.DEFINITION_LISTS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(FENCED_CODE_BLOCKS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.FENCED_CODE_BLOCKS.text")); // NOI18N FENCED_CODE_BLOCKS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.FENCED_CODE_BLOCKS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(HTML_BLOCK_SUPPRESSION, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.HTML_BLOCK_SUPPRESSION.text")); // NOI18N HTML_BLOCK_SUPPRESSION.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.HTML_BLOCK_SUPPRESSION.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(INLINE_HTML_SUPPRESSION, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.INLINE_HTML_SUPPRESSION.text")); // NOI18N INLINE_HTML_SUPPRESSION.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.INLINE_HTML_SUPPRESSION.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(WIKILINKS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.WIKILINKS.text")); // NOI18N WIKILINKS.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.WIKILINKS.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(STRIKETHROUGH, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.STRIKETHROUGH.text")); // NOI18N STRIKETHROUGH.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.STRIKETHROUGH.toolTipText")); // NOI18N javax.swing.GroupLayout EXTENSIONS_PANELLayout = new javax.swing.GroupLayout(EXTENSIONS_PANEL); EXTENSIONS_PANEL.setLayout(EXTENSIONS_PANELLayout); EXTENSIONS_PANELLayout.setHorizontalGroup( EXTENSIONS_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(EXTENSIONS_PANELLayout.createSequentialGroup() .addContainerGap() .addGroup(EXTENSIONS_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(EXTENSIONS_PANEL_HEADER, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(EXTENSIONS_PANELLayout.createSequentialGroup() .addGroup(EXTENSIONS_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(EXTENSIONS_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(INLINE_HTML_SUPPRESSION) .addComponent(SMARTS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(QUOTES, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(ABBREVIATIONS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(HARDWRAPS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(AUTOLINKS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(TABLES, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(DEFINITION_LISTS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(FENCED_CODE_BLOCKS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(HTML_BLOCK_SUPPRESSION, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(WIKILINKS, javax.swing.GroupLayout.PREFERRED_SIZE, 412, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(STRIKETHROUGH, javax.swing.GroupLayout.PREFERRED_SIZE, 412, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE)))) ); EXTENSIONS_PANELLayout.setVerticalGroup( EXTENSIONS_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, EXTENSIONS_PANELLayout.createSequentialGroup() .addContainerGap() .addComponent(EXTENSIONS_PANEL_HEADER) .addGap(17, 17, 17) .addComponent(SMARTS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(QUOTES) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(ABBREVIATIONS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(HARDWRAPS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(AUTOLINKS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(TABLES) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(DEFINITION_LISTS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(FENCED_CODE_BLOCKS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(HTML_BLOCK_SUPPRESSION) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(INLINE_HTML_SUPPRESSION) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(WIKILINKS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(STRIKETHROUGH) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); TABS.addTab(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.EXTENSIONS_PANEL.TabConstraints.tabTitle"), EXTENSIONS_PANEL); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(HTML_PANEL_HEADER, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.HTML_PANEL_HEADER.text")); // NOI18N jScrollPane1.setViewportView(HTML_TEMPLATE); javax.swing.GroupLayout HTML_EXPORT_PANELLayout = new javax.swing.GroupLayout(HTML_EXPORT_PANEL); HTML_EXPORT_PANEL.setLayout(HTML_EXPORT_PANELLayout); HTML_EXPORT_PANELLayout.setHorizontalGroup( HTML_EXPORT_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(HTML_EXPORT_PANELLayout.createSequentialGroup() .addContainerGap() .addGroup(HTML_EXPORT_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(HTML_PANEL_HEADER, javax.swing.GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE) .addGroup(HTML_EXPORT_PANELLayout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addContainerGap()))) ); HTML_EXPORT_PANELLayout.setVerticalGroup( HTML_EXPORT_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(HTML_EXPORT_PANELLayout.createSequentialGroup() .addContainerGap() .addComponent(HTML_PANEL_HEADER) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE) .addContainerGap()) ); TABS.addTab(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.HTML_EXPORT_PANEL.TabConstraints.tabTitle"), HTML_EXPORT_PANEL); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(VIEW_HTML_ON_SAVE, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.VIEW_HTML_ON_SAVE.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(SAVE_IN_SOURCE_DIR, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.SAVE_IN_SOURCE_DIR.text")); // NOI18N SAVE_IN_SOURCE_DIR.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { SAVE_IN_SOURCE_DIRActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(TYPING_HOOKS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.TYPING_HOOKS.text_1")); // NOI18N TYPING_HOOKS.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { TYPING_HOOKSActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(AUTO_ADDITION_LIST, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.AUTO_ADDITION_LIST.text")); // NOI18N AUTO_ADDITION_LIST.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.AUTO_ADDITION_LIST.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(REMOVE_EMPTY_LIST, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.REMOVE_EMPTY_LIST.text")); // NOI18N REMOVE_EMPTY_LIST.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.REMOVE_EMPTY_LIST.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(REORDER_ORDERED_LIST_NUMBER, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.REORDER_ORDERED_LIST_NUMBER.text")); // NOI18N REORDER_ORDERED_LIST_NUMBER.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.REORDER_ORDERED_LIST_NUMBER.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(REMOVE_ORDERED_LIST_NUMBER, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.REMOVE_ORDERED_LIST_NUMBER.text_1")); // NOI18N REMOVE_ORDERED_LIST_NUMBER.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.REMOVE_ORDERED_LIST_NUMBER.toolTipText")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(FX_HTML_VIEW_ENABLED, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.FX_HTML_VIEW_ENABLED.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(EXPORT_ON_SAVE, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.EXPORT_ON_SAVE.text_1")); // NOI18N EXPORT_ON_SAVE.setEnabled(false); EXPORT_ON_SAVE.setMaximumSize(new java.awt.Dimension(215, 23)); EXPORT_ON_SAVE.setMinimumSize(new java.awt.Dimension(215, 23)); EXPORT_ON_SAVE.setPreferredSize(new java.awt.Dimension(215, 23)); org.openide.awt.Mnemonics.setLocalizedText(USE_CUSTOM_PREVIEW_REFRESH_INTERVAL, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.USE_CUSTOM_PREVIEW_REFRESH_INTERVAL.text_1")); // NOI18N USE_CUSTOM_PREVIEW_REFRESH_INTERVAL.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { USE_CUSTOM_PREVIEW_REFRESH_INTERVALActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS, org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS.text")); // NOI18N CUSTOM_PREVIEW_REFRESH_INTERVAL.setModel(new javax.swing.SpinnerNumberModel(10, 10, 10000, 10)); CUSTOM_PREVIEW_REFRESH_INTERVAL.setToolTipText(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.CUSTOM_PREVIEW_REFRESH_INTERVAL.toolTipText")); // NOI18N CUSTOM_PREVIEW_REFRESH_INTERVAL.setEditor(new javax.swing.JSpinner.NumberEditor(CUSTOM_PREVIEW_REFRESH_INTERVAL, "")); javax.swing.GroupLayout MISC_PANELLayout = new javax.swing.GroupLayout(MISC_PANEL); MISC_PANEL.setLayout(MISC_PANELLayout); MISC_PANELLayout.setHorizontalGroup( MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(MISC_PANELLayout.createSequentialGroup() .addContainerGap() .addGroup(MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, MISC_PANELLayout.createSequentialGroup() .addGroup(MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(VIEW_HTML_ON_SAVE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(SAVE_IN_SOURCE_DIR, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(6, 6, 6)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, MISC_PANELLayout.createSequentialGroup() .addGroup(MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(FX_HTML_VIEW_ENABLED, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(TYPING_HOOKS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(MISC_PANELLayout.createSequentialGroup() .addGap(21, 21, 21) .addGroup(MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(REMOVE_ORDERED_LIST_NUMBER, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(REORDER_ORDERED_LIST_NUMBER, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(REMOVE_EMPTY_LIST, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(AUTO_ADDITION_LIST, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 389, Short.MAX_VALUE)))) .addContainerGap()) .addGroup(MISC_PANELLayout.createSequentialGroup() .addGap(21, 21, 21) .addComponent(EXPORT_ON_SAVE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) .addGroup(MISC_PANELLayout.createSequentialGroup() .addGroup(MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(MISC_PANELLayout.createSequentialGroup() .addGap(22, 22, 22) .addComponent(CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(CUSTOM_PREVIEW_REFRESH_INTERVAL, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS)) .addComponent(USE_CUSTOM_PREVIEW_REFRESH_INTERVAL)) .addGap(0, 159, Short.MAX_VALUE)))) ); MISC_PANELLayout.setVerticalGroup( MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(MISC_PANELLayout.createSequentialGroup() .addContainerGap() .addComponent(VIEW_HTML_ON_SAVE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(SAVE_IN_SOURCE_DIR) .addGap(0, 0, 0) .addComponent(EXPORT_ON_SAVE, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(FX_HTML_VIEW_ENABLED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(TYPING_HOOKS) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(AUTO_ADDITION_LIST) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(REMOVE_EMPTY_LIST) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(REORDER_ORDERED_LIST_NUMBER) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(REMOVE_ORDERED_LIST_NUMBER) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(USE_CUSTOM_PREVIEW_REFRESH_INTERVAL) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(MISC_PANELLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL) .addComponent(CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS) .addComponent(CUSTOM_PREVIEW_REFRESH_INTERVAL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(120, Short.MAX_VALUE)) ); TABS.addTab(org.openide.util.NbBundle.getMessage(MarkdownPanel.class, "MarkdownPanel.MISC_PANEL.TabConstraints.tabTitle"), MISC_PANEL); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(TABS) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(TABS) ); }// </editor-fold>//GEN-END:initComponents private void TYPING_HOOKSActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_TYPING_HOOKSActionPerformed setTypinghooksEnabled(TYPING_HOOKS.isSelected()); }//GEN-LAST:event_TYPING_HOOKSActionPerformed private void SAVE_IN_SOURCE_DIRActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SAVE_IN_SOURCE_DIRActionPerformed if (SAVE_IN_SOURCE_DIR.isSelected()) { EXPORT_ON_SAVE.setEnabled(true); } else { EXPORT_ON_SAVE.setSelected(false); EXPORT_ON_SAVE.setEnabled(false); } }//GEN-LAST:event_SAVE_IN_SOURCE_DIRActionPerformed private void USE_CUSTOM_PREVIEW_REFRESH_INTERVALActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_USE_CUSTOM_PREVIEW_REFRESH_INTERVALActionPerformed boolean useCustomSelected = USE_CUSTOM_PREVIEW_REFRESH_INTERVAL.isSelected(); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL.setEnabled(useCustomSelected); CUSTOM_PREVIEW_REFRESH_INTERVAL.setEnabled(useCustomSelected); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS.setEnabled(useCustomSelected); }//GEN-LAST:event_USE_CUSTOM_PREVIEW_REFRESH_INTERVALActionPerformed private void setMimeType(JEditorPane editorPane, String mimeType, String extension) { FileSystem fileSystem = FileUtil.createMemoryFileSystem(); try { FileObject file = fileSystem.getRoot().createData("template", extension); DataObject data = DataObject.find(file); if (data != null) { EditorKit kit = CloneableEditorSupport.getEditorKit(mimeType); editorPane.setEditorKit(kit); editorPane.getDocument().putProperty(Document.StreamDescriptionProperty, data); DialogBinding.bindComponentToFile(file, 0, 0, editorPane); editorPane.setText(" "); } } catch (IOException ex) { Exceptions.printStackTrace(ex); } } /** * Handles state changes for option panel components that communicate their changes via the * {@link java.awt.event.ActionListener ActionListener} interface. When any state change * occurs on these components, the option panel controller is notified that a changes has * been made that requires storage. */ private class ActionHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { controller.changed(); } } /** * Handles state changes for option panel components that communicate their changes via the * {@link javax.swing.event.ChangeListener ChangeListener} interface. When any state change * occurs on these components, the option panel controller is notified that a changes has * been made that requires storage. */ private class ChangeHandler implements ChangeListener { @Override public void stateChanged(ChangeEvent e) { controller.changed(); } } /** * Handles state changes for option panel components that communicate their changes via the * {@link javax.swing.event.DocumentListener DocumentListener} interface. When any state change * occurs on these components, the option panel controller is notified that a changes has * been made that requires storage. */ private class DocumentHandler implements DocumentListener { @Override public void insertUpdate(DocumentEvent e) { controller.changed(); } @Override public void removeUpdate(DocumentEvent e) { controller.changed(); } @Override public void changedUpdate(DocumentEvent e) { controller.changed(); } } void load() { // TODO read settings and initialize GUI // Example: // someCheckBox.setSelected(Preferences.userNodeForPackage(MarkdownPanel.class).getBoolean("someFlag", false)); // or for org.openide.util with API spec. version >= 7.4: // someCheckBox.setSelected(NbPreferences.forModule(MarkdownPanel.class).getBoolean("someFlag", false)); // or: // someTextField.setText(SomeSystemOption.getDefault().getSomeStringProperty()); MarkdownGlobalOptions options = MarkdownGlobalOptions.getInstance(); ABBREVIATIONS.setSelected(options.isAbbreviations()); AUTOLINKS.setSelected(options.isAutoLinks()); DEFINITION_LISTS.setSelected(options.isDefinitions()); FENCED_CODE_BLOCKS.setSelected(options.isFencedCodeBlocks()); HARDWRAPS.setSelected(options.isHardWraps()); HTML_BLOCK_SUPPRESSION.setSelected(options.isSuppressHTMLBlocks()); INLINE_HTML_SUPPRESSION.setSelected(options.isSuppressInlineHTML()); QUOTES.setSelected(options.isQuotes()); SMARTS.setSelected(options.isSmarts()); TABLES.setSelected(options.isTables()); WIKILINKS.setSelected(options.isWikiLinks()); STRIKETHROUGH.setSelected(options.isStrikeThrough()); HTML_TEMPLATE.setText(options.getHtmlTemplate()); VIEW_HTML_ON_SAVE.setSelected(options.isViewHtmlOnSave()); if (options.isSaveInSourceDir()) { SAVE_IN_SOURCE_DIR.setSelected(true); EXPORT_ON_SAVE.setEnabled(true); } EXPORT_ON_SAVE.setSelected(options.isExportOnSave()); // typing hooks TYPING_HOOKS.setSelected(options.isTypingHooks()); AUTO_ADDITION_LIST.setSelected(options.isAutoAdditionList()); REMOVE_EMPTY_LIST.setSelected(options.isRemoveEmptyList()); REORDER_ORDERED_LIST_NUMBER.setSelected(options.isReorderOrderedListNumber()); REMOVE_ORDERED_LIST_NUMBER.setSelected(options.isRemoveOrderedListNumber()); setTypinghooksEnabled(options.isTypingHooks()); FX_HTML_VIEW_ENABLED.setSelected(options.isFXHtmlViewEnabled()); if (options.isCustomPreviewRefreshIntervalUsed()) { USE_CUSTOM_PREVIEW_REFRESH_INTERVAL.setSelected(true); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL.setEnabled(true); CUSTOM_PREVIEW_REFRESH_INTERVAL.setEnabled(true); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS.setEnabled(true); } else { CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL.setEnabled(false); CUSTOM_PREVIEW_REFRESH_INTERVAL.setEnabled(false); CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS.setEnabled(false); } CUSTOM_PREVIEW_REFRESH_INTERVAL.setValue(options.getCustomPreviewRefreshInterval()); } void store() { // TODO store modified settings // Example: // Preferences.userNodeForPackage(MarkdownPanel.class).putBoolean("someFlag", someCheckBox.isSelected()); // or for org.openide.util with API spec. version >= 7.4: // NbPreferences.forModule(MarkdownPanel.class).putBoolean("someFlag", someCheckBox.isSelected()); // or: // SomeSystemOption.getDefault().setSomeStringProperty(someTextField.getText()); MarkdownGlobalOptions options = MarkdownGlobalOptions.getInstance(); options.setAbbreviations(ABBREVIATIONS.isSelected()); options.setAutoLinks(AUTOLINKS.isSelected()); options.setDefinitions(DEFINITION_LISTS.isSelected()); options.setFencedCodeBlocks(FENCED_CODE_BLOCKS.isSelected()); options.setHardWraps(HARDWRAPS.isSelected()); options.setSuppressHTMLBlocks(HTML_BLOCK_SUPPRESSION.isSelected()); options.setSuppressInlineHTML(INLINE_HTML_SUPPRESSION.isSelected()); options.setQuotes(QUOTES.isSelected()); options.setSmarts(SMARTS.isSelected()); options.setTables(TABLES.isSelected()); options.setWikiLinks(WIKILINKS.isSelected()); options.setStrikeThrough(STRIKETHROUGH.isSelected()); options.setHtmlTemplate(HTML_TEMPLATE.getText()); options.setViewHtmlOnSave(VIEW_HTML_ON_SAVE.isSelected()); options.setSaveInSourceDir(SAVE_IN_SOURCE_DIR.isSelected()); options.setExportOnSave(EXPORT_ON_SAVE.isSelected()); options.setUseCustomPreviewRefreshInterval(USE_CUSTOM_PREVIEW_REFRESH_INTERVAL.isSelected()); options.setCustomPreviewRefreshInterval((Integer)CUSTOM_PREVIEW_REFRESH_INTERVAL.getValue()); // typing hooks options.setTypingHooks(TYPING_HOOKS.isSelected()); options.setAutoAdditionList(AUTO_ADDITION_LIST.isSelected()); options.setRemoveEmptyList(REMOVE_EMPTY_LIST.isSelected()); options.setReorderOrderedListNumber(REORDER_ORDERED_LIST_NUMBER.isSelected()); options.setRemoveOrderedListNumber(REMOVE_ORDERED_LIST_NUMBER.isSelected()); options.setFXHtmlViewEnabled(FX_HTML_VIEW_ENABLED.isSelected()); } public static String getDefaultHtmlTemplate() { return "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n" + "<title>{%TITLE%}</title>\n" + "<style type=\"text/css\">/*...*/</style>\n" + "</head>\n" + "<body>\n" + "{%CONTENT%}\n" + "</body>\n" + "</html>"; } boolean valid() { int customPreviewRefreshInterval = (Integer)CUSTOM_PREVIEW_REFRESH_INTERVAL.getValue(); return ((customPreviewRefreshInterval >= MarkdownGlobalOptions.MIN_PREVIEW_INTERVAL) && (customPreviewRefreshInterval <= MarkdownGlobalOptions.MAX_PREVIEW_INTERVAL)); } private void setTypinghooksEnabled(boolean isEnabled) { AUTO_ADDITION_LIST.setEnabled(isEnabled); REMOVE_EMPTY_LIST.setEnabled(isEnabled); REORDER_ORDERED_LIST_NUMBER.setEnabled(isEnabled); REMOVE_ORDERED_LIST_NUMBER.setEnabled(isEnabled); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox ABBREVIATIONS; private javax.swing.JCheckBox AUTOLINKS; private javax.swing.JCheckBox AUTO_ADDITION_LIST; private javax.swing.JSpinner CUSTOM_PREVIEW_REFRESH_INTERVAL; private javax.swing.JLabel CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL; private javax.swing.JLabel CUSTOM_PREVIEW_REFRESH_INTERVAL_LBL_MS; private javax.swing.JCheckBox DEFINITION_LISTS; private javax.swing.JCheckBox EXPORT_ON_SAVE; private javax.swing.JPanel EXTENSIONS_PANEL; private javax.swing.JLabel EXTENSIONS_PANEL_HEADER; private javax.swing.JCheckBox FENCED_CODE_BLOCKS; private javax.swing.JCheckBox FX_HTML_VIEW_ENABLED; private javax.swing.JCheckBox HARDWRAPS; private javax.swing.JCheckBox HTML_BLOCK_SUPPRESSION; private javax.swing.JPanel HTML_EXPORT_PANEL; private javax.swing.JLabel HTML_PANEL_HEADER; private javax.swing.JEditorPane HTML_TEMPLATE; private javax.swing.JCheckBox INLINE_HTML_SUPPRESSION; private javax.swing.JPanel MISC_PANEL; private javax.swing.JCheckBox QUOTES; private javax.swing.JCheckBox REMOVE_EMPTY_LIST; private javax.swing.JCheckBox REMOVE_ORDERED_LIST_NUMBER; private javax.swing.JCheckBox REORDER_ORDERED_LIST_NUMBER; private javax.swing.JCheckBox SAVE_IN_SOURCE_DIR; private javax.swing.JCheckBox SMARTS; private javax.swing.JCheckBox STRIKETHROUGH; private javax.swing.JCheckBox TABLES; private javax.swing.JTabbedPane TABS; private javax.swing.JCheckBox TYPING_HOOKS; private javax.swing.JCheckBox USE_CUSTOM_PREVIEW_REFRESH_INTERVAL; private javax.swing.JCheckBox VIEW_HTML_ON_SAVE; private javax.swing.JCheckBox WIKILINKS; private javax.swing.JScrollPane jScrollPane1; // End of variables declaration//GEN-END:variables }