blob: 5ffb13a45d808d644c3eb2e7637c0e9f9cafa283 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.terminal.nb;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyEditor;
import java.beans.PropertyEditorManager;
import javax.swing.JPanel;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.netbeans.lib.terminalemulator.LineDiscipline;
import org.netbeans.lib.terminalemulator.Term;
import org.netbeans.lib.terminalemulator.support.TermOptions;
import static org.netbeans.modules.terminal.nb.Bundle.*;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.util.NbBundle.Messages;
/**
* A copy of org.netbeans.lib.terminalemulator.support.TermOptionsPanel that
* uses NB's ColorComboBoxes
*/
public final class TermOptionsPanel extends JPanel {
private final Term term;
private final PropertyChangeListener propertyListener;
private boolean inApplyingModel;
private TermOptions termOptions;
/**
* Creates new form TermOptionPanel
*/
@Messages({
"MSG_Hello=Hello from Term",
"FontChooser.title=Font Chooser",
"FontChooser.defaultFont.label=Default Font"
})
public TermOptionsPanel() {
propertyListener = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent e) {
refreshView();
}
};
initComponents();
initCustomComponents();
term = new Term();
final String line1String = MSG_Hello() + "\r\n"; // NOI18N
final char line1[] = line1String.toCharArray();
term.putChars(line1, 0, line1.length);
term.pushStream(new LineDiscipline());
term.setRowsColumns(7, 60);
term.setClickToType(true);
previewPanel.add(term, BorderLayout.CENTER);
}
private boolean changingSelectByWordText = false;
private void initCustomComponents() {
selectByWordTextField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
textChangeActionPerformed();
}
@Override
public void removeUpdate(DocumentEvent e) {
textChangeActionPerformed();
}
@Override
public void changedUpdate(DocumentEvent e) {
// ignore
}
private void textChangeActionPerformed() {
if (inApplyingModel) {
return;
}
changingSelectByWordText = true;
String delimiters = selectByWordTextField.getText();
termOptions.setSelectByWordDelimiters(delimiters);
changingSelectByWordText = false;
}
});
}
/**
* 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() {
descriptionLabel = new javax.swing.JLabel();
restoreButton = new javax.swing.JButton();
fontLabel = new javax.swing.JLabel();
fontText = new javax.swing.JTextField();
fontButton = new javax.swing.JButton();
fontSizeLabel = new javax.swing.JLabel();
fontSizeSpinner = new javax.swing.JSpinner();
foregroundLabel = new javax.swing.JLabel();
foregroundComboBox = new org.openide.awt.ColorComboBox();
backgroundLabel = new javax.swing.JLabel();
backgroundComboBox = new org.openide.awt.ColorComboBox();
selectionLabel = new javax.swing.JLabel();
selectionComboBox = new org.openide.awt.ColorComboBox();
historySizeLabel = new javax.swing.JLabel();
historySizeSpinner = new javax.swing.JSpinner();
tabSizeLabel = new javax.swing.JLabel();
tabSizeSpinner = new javax.swing.JSpinner();
selectByWordLabel = new javax.swing.JLabel();
selectByWordTextField = new javax.swing.JTextField();
clickToTypeCheckBox = new javax.swing.JCheckBox();
ignoreKeymapCheckBox = new javax.swing.JCheckBox();
lineWrapCheckBox = new javax.swing.JCheckBox();
scrollOnInputCheckBox = new javax.swing.JCheckBox();
scrollOnOutputCheckBox = new javax.swing.JCheckBox();
previewLabel = new javax.swing.JLabel();
previewPanel = new javax.swing.JPanel();
altSendsEscapeCheckBox = new javax.swing.JCheckBox();
org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.descriptionLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(restoreButton, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.restoreButton.text")); // NOI18N
restoreButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
restoreButtonActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(fontLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.fontLabel.text")); // NOI18N
fontText.setEditable(false);
fontText.setText(org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.fontText.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(fontButton, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.fontButton.text")); // NOI18N
fontButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fontButtonActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(fontSizeLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.fontSizeLabel.text")); // NOI18N
fontSizeSpinner.setModel(new SpinnerNumberModel(12, TermOptions.MIN_FONT_SIZE, TermOptions.MAX_FONT_SIZE, 1));
fontSizeSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
fontSizeSpinnerStateChanged(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(foregroundLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.foregroundLabel.text")); // NOI18N
foregroundComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
foregroundComboBoxActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(backgroundLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.backgroundLabel.text")); // NOI18N
backgroundComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
backgroundComboBoxActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(selectionLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.selectionLabel.text")); // NOI18N
selectionComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectionComboBoxActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(historySizeLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.historySizeLabel.text")); // NOI18N
historySizeSpinner.setModel(new SpinnerNumberModel(5000, TermOptions.MIN_HISTORY_SIZE, TermOptions.MAX_HISTORY_SIZE, 1));
historySizeSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
historySizeSpinnerStateChanged(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(tabSizeLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.tabSizeLabel.text")); // NOI18N
tabSizeSpinner.setModel(new SpinnerNumberModel(8, TermOptions.MIN_TAB_SIZE, TermOptions.MAX_TAB_SIZE, 1));
tabSizeSpinner.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tabSizeSpinnerStateChanged(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(selectByWordLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.selectByWordLabel.text")); // NOI18N
selectByWordTextField.setText(org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.selectByWordTextField.text")); // NOI18N
clickToTypeCheckBox.setSelected(true);
org.openide.awt.Mnemonics.setLocalizedText(clickToTypeCheckBox, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.clickToTypeCheckBox.text")); // NOI18N
clickToTypeCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clickToTypeCheckBoxActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(ignoreKeymapCheckBox, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.ignoreKeymapCheckBox.text")); // NOI18N
ignoreKeymapCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ignoreKeymapCheckBoxActionPerformed(evt);
}
});
lineWrapCheckBox.setSelected(true);
org.openide.awt.Mnemonics.setLocalizedText(lineWrapCheckBox, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.lineWrapCheckBox.text")); // NOI18N
lineWrapCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lineWrapCheckBoxActionPerformed(evt);
}
});
scrollOnInputCheckBox.setSelected(true);
org.openide.awt.Mnemonics.setLocalizedText(scrollOnInputCheckBox, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.scrollOnInputCheckBox.text")); // NOI18N
scrollOnInputCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
scrollOnInputCheckBoxActionPerformed(evt);
}
});
scrollOnOutputCheckBox.setSelected(true);
org.openide.awt.Mnemonics.setLocalizedText(scrollOnOutputCheckBox, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.scrollOnOutputCheckBox.text")); // NOI18N
scrollOnOutputCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
scrollOnOutputCheckBoxActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(previewLabel, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.previewLabel.text")); // NOI18N
previewPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
previewPanel.setLayout(new java.awt.BorderLayout());
org.openide.awt.Mnemonics.setLocalizedText(altSendsEscapeCheckBox, org.openide.util.NbBundle.getMessage(TermOptionsPanel.class, "TermOptionsPanel.altSendsEscapeCheckBox.text")); // NOI18N
altSendsEscapeCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
altSendsEscapeCheckBoxActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(previewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(fontLabel)
.addComponent(fontSizeLabel)
.addComponent(foregroundLabel)
.addComponent(backgroundLabel)
.addComponent(selectionLabel)
.addComponent(historySizeLabel)
.addComponent(descriptionLabel))
.addGap(16, 16, 16)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(foregroundComboBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
.addComponent(backgroundComboBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(selectionComboBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(selectByWordTextField, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(fontText, javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(fontSizeSpinner, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(historySizeSpinner, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tabSizeSpinner, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(restoreButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(fontButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabSizeLabel)
.addComponent(previewLabel)
.addComponent(selectByWordLabel)
.addGroup(layout.createSequentialGroup()
.addComponent(ignoreKeymapCheckBox)
.addGap(86, 86, 86)
.addComponent(altSendsEscapeCheckBox))
.addGroup(layout.createSequentialGroup()
.addComponent(scrollOnInputCheckBox)
.addGap(18, 18, 18)
.addComponent(scrollOnOutputCheckBox))
.addGroup(layout.createSequentialGroup()
.addComponent(clickToTypeCheckBox)
.addGap(31, 31, 31)
.addComponent(lineWrapCheckBox)))
.addGap(0, 0, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(descriptionLabel)
.addComponent(restoreButton))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(fontLabel)
.addComponent(fontButton)
.addComponent(fontText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(fontSizeLabel)
.addComponent(fontSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(foregroundLabel)
.addComponent(foregroundComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(backgroundLabel)
.addComponent(backgroundComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(selectionLabel)
.addComponent(selectionComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(historySizeLabel)
.addComponent(historySizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(tabSizeLabel)
.addComponent(tabSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(selectByWordLabel)
.addComponent(selectByWordTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(16, 16, 16)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ignoreKeymapCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(altSendsEscapeCheckBox))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(clickToTypeCheckBox)
.addComponent(lineWrapCheckBox))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(scrollOnInputCheckBox)
.addComponent(scrollOnOutputCheckBox))
.addGap(18, 18, 18)
.addComponent(previewLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(previewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 45, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void fontSizeSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_fontSizeSpinnerStateChanged
if (inApplyingModel) {
return;
}
Object fontSizeObj = fontSizeSpinner.getValue();
if (fontSizeObj instanceof Integer) {
int fontSize = ((Integer) fontSizeObj).intValue();
termOptions.setFontSize(fontSize);
}
}//GEN-LAST:event_fontSizeSpinnerStateChanged
private void historySizeSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_historySizeSpinnerStateChanged
if (inApplyingModel) {
return;
}
Object historySizeObj = historySizeSpinner.getValue();
if (historySizeObj instanceof Integer) {
int historySize = ((Integer) historySizeObj).intValue();
termOptions.setHistorySize(historySize);
}
}//GEN-LAST:event_historySizeSpinnerStateChanged
private void tabSizeSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_tabSizeSpinnerStateChanged
if (inApplyingModel) {
return;
}
Object tabSizeObj = tabSizeSpinner.getValue();
if (tabSizeObj instanceof Integer) {
int tabSize = ((Integer) tabSizeObj).intValue();
termOptions.setTabSize(tabSize);
}
}//GEN-LAST:event_tabSizeSpinnerStateChanged
private void fontButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fontButtonActionPerformed
PropertyEditor pe = PropertyEditorManager.findEditor(Font.class);
if (pe != null) {
pe.setValue(termOptions.getFont());
DialogDescriptor dd = new DialogDescriptor(pe.getCustomEditor(), FontChooser_title());
String defaultFontString = FontChooser_defaultFont_label();
dd.setOptions(new Object[]{DialogDescriptor.OK_OPTION,
defaultFontString, DialogDescriptor.CANCEL_OPTION}); //NOI18N
DialogDisplayer.getDefault().createDialog(dd).setVisible(true);
if (dd.getValue() == DialogDescriptor.OK_OPTION) {
Font f = (Font) pe.getValue();
termOptions.setFont(f);
applyTermOptions();
} else if (dd.getValue() == defaultFontString) {
Font controlFont = UIManager.getFont("controlFont"); //NOI18N
int fontSize = (controlFont == null) ? 12 : controlFont.getSize();
termOptions.setFont(new Font("monospaced", Font.PLAIN, fontSize)); //NOI18N
}
}
}//GEN-LAST:event_fontButtonActionPerformed
private void restoreButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_restoreButtonActionPerformed
termOptions.resetToDefault();
}//GEN-LAST:event_restoreButtonActionPerformed
private void clickToTypeCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clickToTypeCheckBoxActionPerformed
if (inApplyingModel) {
return;
}
termOptions.setClickToType(clickToTypeCheckBox.isSelected());
}//GEN-LAST:event_clickToTypeCheckBoxActionPerformed
private void scrollOnInputCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scrollOnInputCheckBoxActionPerformed
if (inApplyingModel) {
return;
}
termOptions.setScrollOnInput(scrollOnInputCheckBox.isSelected());
}//GEN-LAST:event_scrollOnInputCheckBoxActionPerformed
private void scrollOnOutputCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scrollOnOutputCheckBoxActionPerformed
if (inApplyingModel) {
return;
}
termOptions.setScrollOnOutput(scrollOnOutputCheckBox.isSelected());
}//GEN-LAST:event_scrollOnOutputCheckBoxActionPerformed
private void lineWrapCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lineWrapCheckBoxActionPerformed
if (inApplyingModel) {
return;
}
termOptions.setLineWrap(lineWrapCheckBox.isSelected());
}//GEN-LAST:event_lineWrapCheckBoxActionPerformed
private void ignoreKeymapCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ignoreKeymapCheckBoxActionPerformed
if (inApplyingModel) {
return;
}
termOptions.setIgnoreKeymap(ignoreKeymapCheckBox.isSelected());
}//GEN-LAST:event_ignoreKeymapCheckBoxActionPerformed
private void foregroundComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_foregroundComboBoxActionPerformed
if (inApplyingModel) {
return;
}
Color c = foregroundComboBox.getSelectedColor();
if (c != null) {
termOptions.setForeground(c);
}
}//GEN-LAST:event_foregroundComboBoxActionPerformed
private void backgroundComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backgroundComboBoxActionPerformed
if (inApplyingModel) {
return;
}
Color c = backgroundComboBox.getSelectedColor();
if (c != null) {
termOptions.setBackground(c);
}
}//GEN-LAST:event_backgroundComboBoxActionPerformed
private void selectionComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectionComboBoxActionPerformed
if (inApplyingModel) {
return;
}
Color c = selectionComboBox.getSelectedColor();
if (c != null) {
termOptions.setSelectionBackground(c);
}
}//GEN-LAST:event_selectionComboBoxActionPerformed
private void altSendsEscapeCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_altSendsEscapeCheckBoxActionPerformed
if (inApplyingModel) {
return;
}
termOptions.setAltSendsEscape(altSendsEscapeCheckBox.isSelected());
}//GEN-LAST:event_altSendsEscapeCheckBoxActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox altSendsEscapeCheckBox;
private org.openide.awt.ColorComboBox backgroundComboBox;
private javax.swing.JLabel backgroundLabel;
private javax.swing.JCheckBox clickToTypeCheckBox;
private javax.swing.JLabel descriptionLabel;
private javax.swing.JButton fontButton;
private javax.swing.JLabel fontLabel;
private javax.swing.JLabel fontSizeLabel;
private javax.swing.JSpinner fontSizeSpinner;
private javax.swing.JTextField fontText;
private org.openide.awt.ColorComboBox foregroundComboBox;
private javax.swing.JLabel foregroundLabel;
private javax.swing.JLabel historySizeLabel;
private javax.swing.JSpinner historySizeSpinner;
private javax.swing.JCheckBox ignoreKeymapCheckBox;
private javax.swing.JCheckBox lineWrapCheckBox;
private javax.swing.JLabel previewLabel;
private javax.swing.JPanel previewPanel;
private javax.swing.JButton restoreButton;
private javax.swing.JCheckBox scrollOnInputCheckBox;
private javax.swing.JCheckBox scrollOnOutputCheckBox;
private javax.swing.JLabel selectByWordLabel;
private javax.swing.JTextField selectByWordTextField;
private org.openide.awt.ColorComboBox selectionComboBox;
private javax.swing.JLabel selectionLabel;
private javax.swing.JLabel tabSizeLabel;
private javax.swing.JSpinner tabSizeSpinner;
// End of variables declaration//GEN-END:variables
/**
* Set the model for this view. Changes in the panel are directly reflected
* in this model which may be {@link TermOptions#assign}ed later.
*
* @param termOptions
*/
public void setTermOptions(TermOptions termOptions) {
if (this.termOptions != null) {
this.termOptions.removePropertyChangeListener(propertyListener);
}
this.termOptions = termOptions;
if (this.termOptions != null) {
this.termOptions.addPropertyChangeListener(propertyListener);
}
refreshView();
}
private void applyTermOptions() {
inApplyingModel = true;
try {
fontSizeSpinner.setValue(termOptions.getFontSize());
fontText.setText(termOptions.getFont().getFamily()
+ " " + // NOI18N
termOptions.getFont().getSize());
foregroundComboBox.setSelectedColor(termOptions.getForeground());
backgroundComboBox.setSelectedColor(termOptions.getBackground());
selectionComboBox.setSelectedColor(termOptions.getSelectionBackground());
historySizeSpinner.setValue(termOptions.getHistorySize());
tabSizeSpinner.setValue(termOptions.getTabSize());
// Without this check we will get an
// IllegalStateException: Attempt to mutate in notification
if (!changingSelectByWordText) {
selectByWordTextField.setText(termOptions.getSelectByWordDelimiters());
}
clickToTypeCheckBox.setSelected(termOptions.getClickToType());
scrollOnInputCheckBox.setSelected(termOptions.getScrollOnInput());
scrollOnOutputCheckBox.setSelected(termOptions.getScrollOnOutput());
lineWrapCheckBox.setSelected(termOptions.getLineWrap());
ignoreKeymapCheckBox.setSelected(termOptions.getIgnoreKeymap());
altSendsEscapeCheckBox.setSelected(termOptions.getAltSendsEscape());
} finally {
inApplyingModel = false;
}
}
private void refreshView() {
if (termOptions != null) {
termOptions.removePropertyChangeListener(propertyListener);
}
try {
applyTermOptions();
} finally {
if (termOptions != null) {
termOptions.addPropertyChangeListener(propertyListener);
}
}
previewTermOptions();
}
/**
* Apply current models values to the preview area Term.
*/
private void previewTermOptions() {
if (term == null) {
return;
}
term.setFixedFont(true);
term.setFont(termOptions.getFont());
term.setBackground(termOptions.getBackground());
term.setForeground(termOptions.getForeground());
term.setHighlightColor(termOptions.getSelectionBackground());
term.setHistorySize(termOptions.getHistorySize());
term.setTabSize(termOptions.getTabSize());
term.setSelectByWordDelimiters(termOptions.getSelectByWordDelimiters());
term.setClickToType(termOptions.getClickToType());
term.setScrollOnInput(termOptions.getScrollOnInput());
term.setScrollOnOutput(termOptions.getScrollOnOutput());
term.setHorizontallyScrollable(!termOptions.getLineWrap());
term.setAltSendsEscape(termOptions.getAltSendsEscape());
term.setRowsColumns(7, 60);
patchSizes();
}
/**
* Adjust dialog size and layout. * If the chosen font size is >= 14 the
* term preview area grows too large for the dialog (I think). The result is
* that the term preview area, button sizes and the font name textarea all
* shrink to a point.
*
* This is an attempt to force the dialog to resize itself but it doesn't
* work.
*/
private void patchSizes() {
term.invalidate();
previewPanel.validate();
previewPanel.invalidate();
this.validate();
this.invalidate();
}
}