/*
* EditorPreferencePanel.java
*
* Created on January 10, 2007, 6:31 PM
*/
package org.jmeld.ui.settings;
import com.l2fprod.common.swing.JFontChooser;
import org.jmeld.JMeld;
import org.jmeld.settings.EditorSettings;
import org.jmeld.settings.JMeldSettings;
import org.jmeld.ui.util.EmptyIcon;
import org.jmeld.ui.util.FontUtil;
import org.jmeld.ui.util.LookAndFeelManager;
import org.jmeld.ui.util.TypeTokenizerManager;
import org.jmeld.util.CharsetDetector;
import org.jmeld.util.Ignore;
import org.jmeld.util.conf.ConfigurationListenerIF;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author kees
*/
public class EditorSettingsPanel
extends EditorSettingsForm
implements ConfigurationListenerIF
{
private static JDialog colorDialog;
private static JColorChooser colorChooser;
private boolean originalAntialias;
public EditorSettingsPanel()
{
originalAntialias = getEditorSettings().isAntialiasEnabled();
initConfiguration();
init();
JMeldSettings.getInstance().addConfigurationListener(this);
}
private void init()
{
// ignore:
ignoreWhitespaceAtBeginCheckBox
.addActionListener(getIgnoreWhitespaceAtBeginAction());
ignoreWhitespaceInBetweenCheckBox
.addActionListener(getIgnoreWhitespaceInBetweenAction());
ignoreWhitespaceAtEndCheckBox
.addActionListener(getIgnoreWhitespaceAtEndAction());
ignoreEOLCheckBox.addActionListener(getIgnoreEOLAction());
ignoreBlankLinesCheckBox.addActionListener(getIgnoreBlankLinesAction());
ignoreCaseCheckBox.addActionListener(getIgnoreCaseAction());
// Miscellaneous:
leftsideReadonlyCheckBox.addActionListener(getLeftsideReadonlyAction());
rightsideReadonlyCheckBox.addActionListener(getRightsideReadonlyAction());
antialiasCheckBox.addActionListener(getAntialiasAction());
tabSizeSpinner.addChangeListener(getTabSizeChangeListener());
showLineNumbersCheckBox.addActionListener(getShowLineNumbersAction());
lookAndFeelComboBox.setModel(getLookAndFeelModel());
lookAndFeelComboBox.setSelectedItem(LookAndFeelManager.getInstance()
.getInstalledLookAndFeelName());
lookAndFeelComboBox.addActionListener(getLookAndFeelAction());
// Colors:
colorAddedButton.addActionListener(getColorAddedAction());
colorDeletedButton.addActionListener(getColorDeletedAction());
colorChangedButton.addActionListener(getColorChangedAction());
restoreOriginalColorsButton
.addActionListener(getRestoreOriginalColorsAction());
// Font:
defaultFontRadioButton.addActionListener(getDefaultFontAction());
customFontRadioButton.addActionListener(getCustomFontAction());
fontChooserButton.addActionListener(getFontChooserAction());
// File encoding:
defaultEncodingRadioButton.setText(defaultEncodingRadioButton.getText()
+ " ("
+ CharsetDetector.getInstance()
.getDefaultCharset() + ")");
defaultEncodingRadioButton.addActionListener(getDefaultEncodingAction());
detectEncodingRadioButton.addActionListener(getDetectEncodingAction());
specificEncodingRadioButton.addActionListener(getSpecificEncodingAction());
specificEncodingComboBox.setModel(new DefaultComboBoxModel(CharsetDetector
.getInstance().getCharsetNameList().toArray()));
specificEncodingComboBox.setSelectedItem(getEditorSettings()
.getSpecificFileEncodingName());
specificEncodingComboBox.addActionListener(getSpecificEncodingNameAction());
// Toolbar appearance:
toolbarButtonIconComboBox.setModel(getToolbarButtonIconModel());
toolbarButtonIconComboBox.setSelectedItem(getEditorSettings()
.getToolbarButtonIcon());
toolbarButtonIconComboBox.addActionListener(getToolbarButtonIconAction());
toolbarButtonTextEnabledCheckBox
.addActionListener(getToolbarButtonTextEnabledAction());
showLevensteinCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
getEditorSettings().setShowLevenstheinEditor(
showLevensteinCheckBox.isSelected());
}
});
showTreeChunksCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setShowTreeChunks(
showTreeChunksCheckBox.isSelected());
}
});
showTreeRawCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
getEditorSettings().setShowTreeRaw(
showTreeRawCheckBox.isSelected());
}
});
//Tokenizer Type
typeTokenizerComboBox.setModel(getTypeTokenizerModel());
typeTokenizerComboBox.setSelectedItem(getEditorSettings()
.getTypeTokenizerName());
typeTokenizerComboBox.addActionListener(getTypeTokenizerAction());
}
private ChangeListener getTabSizeChangeListener()
{
return new ChangeListener()
{
public void stateChanged(ChangeEvent evt)
{
getEditorSettings().setTabSize((Integer) tabSizeSpinner.getValue());
}
};
}
private ActionListener getColorAddedAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Color color;
color = chooseColor(getEditorSettings().getAddedColor());
if (color != null)
{
getEditorSettings().setAddedColor(color);
}
}
};
}
private ActionListener getColorDeletedAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Color color;
color = chooseColor(getEditorSettings().getDeletedColor());
if (color != null)
{
getEditorSettings().setDeletedColor(color);
}
}
};
}
private ActionListener getColorChangedAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Color color;
color = chooseColor(getEditorSettings().getChangedColor());
if (color != null)
{
getEditorSettings().setChangedColor(color);
}
}
};
}
private ActionListener getShowLineNumbersAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setShowLineNumbers(
showLineNumbersCheckBox.isSelected());
}
};
}
private ActionListener getIgnoreWhitespaceAtBeginAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setIgnoreWhitespaceAtBegin(
ignoreWhitespaceAtBeginCheckBox.isSelected());
}
};
}
private ActionListener getIgnoreWhitespaceInBetweenAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setIgnoreWhitespaceInBetween(
ignoreWhitespaceInBetweenCheckBox.isSelected());
}
};
}
private ActionListener getIgnoreWhitespaceAtEndAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setIgnoreWhitespaceAtEnd(
ignoreWhitespaceAtEndCheckBox.isSelected());
}
};
}
private ActionListener getIgnoreEOLAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setIgnoreEOL(ignoreEOLCheckBox.isSelected());
}
};
}
private ActionListener getIgnoreBlankLinesAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setIgnoreBlankLines(
ignoreBlankLinesCheckBox.isSelected());
}
};
}
private ActionListener getIgnoreCaseAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setIgnoreCase(ignoreCaseCheckBox.isSelected());
}
};
}
private ActionListener getLeftsideReadonlyAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setLeftsideReadonly(
leftsideReadonlyCheckBox.isSelected());
}
};
}
private ActionListener getRightsideReadonlyAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().setRightsideReadonly(
rightsideReadonlyCheckBox.isSelected());
}
};
}
private ActionListener getAntialiasAction()
{
return new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
getEditorSettings().enableAntialias(antialiasCheckBox.isSelected());
}
};
}
private ActionListener getRestoreOriginalColorsAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().restoreColors();
}
};
}
private ActionListener getDefaultEncodingAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setDefaultFileEncodingEnabled(true);
getEditorSettings().setDetectFileEncodingEnabled(false);
getEditorSettings().setSpecificFileEncodingEnabled(false);
}
};
}
private ActionListener getDetectEncodingAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setDefaultFileEncodingEnabled(false);
getEditorSettings().setDetectFileEncodingEnabled(true);
getEditorSettings().setSpecificFileEncodingEnabled(false);
}
};
}
private ActionListener getSpecificEncodingAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setDefaultFileEncodingEnabled(false);
getEditorSettings().setDetectFileEncodingEnabled(false);
getEditorSettings().setSpecificFileEncodingEnabled(true);
}
};
}
private ActionListener getSpecificEncodingNameAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setSpecificFileEncodingName(
(String) specificEncodingComboBox.getSelectedItem());
}
};
}
private ActionListener getLookAndFeelAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setLookAndFeelName(
(String) lookAndFeelComboBox.getSelectedItem());
LookAndFeelManager.getInstance().install();
}
};
}
private ActionListener getTypeTokenizerAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setTypeTokenizerName((String)typeTokenizerComboBox.getSelectedItem());
}
};
}
private ActionListener getToolbarButtonIconAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setToolbarButtonIcon(
(EditorSettings.ToolbarButtonIcon) toolbarButtonIconComboBox
.getSelectedItem());
JMeld.getJMeldPanel().addToolBar();
}
};
}
private ActionListener getToolbarButtonTextEnabledAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().setToolbarButtonTextEnabled(
toolbarButtonTextEnabledCheckBox.isSelected());
JMeld.getJMeldPanel().addToolBar();
}
};
}
private ActionListener getDefaultFontAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings().enableCustomFont(
!defaultFontRadioButton.isSelected());
}
};
}
private ActionListener getCustomFontAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
getEditorSettings()
.enableCustomFont(customFontRadioButton.isSelected());
}
};
}
private ActionListener getFontChooserAction()
{
return new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Font font;
font = chooseFont(getEditorFont());
if (font != null)
{
getEditorSettings().setFont(font);
}
}
};
}
private Color chooseColor(Color initialColor)
{
// Do not instantiate ColorChooser multiple times because it contains
// a memory leak.
if (colorDialog == null)
{
colorChooser = new JColorChooser(initialColor);
colorDialog = JColorChooser.createDialog(null, "Choose color", true,
colorChooser, null, null);
}
colorChooser.setColor(initialColor);
colorDialog.setVisible(true);
return colorChooser.getColor();
}
private Font chooseFont(Font initialFont)
{
JFontChooser fontChooser;
fontChooser = new JFontChooser();
fontChooser.setSelectedFont(initialFont);
fontChooser.setVisible(true);
return fontChooser.getSelectedFont();
}
private ComboBoxModel getLookAndFeelModel()
{
return new DefaultComboBoxModel(LookAndFeelManager.getInstance()
.getInstalledLookAndFeels().toArray());
}
private ComboBoxModel getTypeTokenizerModel() {
return new DefaultComboBoxModel<>(TypeTokenizerManager.getInstance()
.getTypeTokenizers());
}
private ComboBoxModel getToolbarButtonIconModel()
{
return new DefaultComboBoxModel(getEditorSettings().getToolbarButtonIcons());
}
public void configurationChanged()
{
initConfiguration();
}
private void initConfiguration()
{
EditorSettings settings;
Font font;
Ignore ignore;
settings = getEditorSettings();
ignore = settings.getIgnore();
colorAddedButton.setIcon(new EmptyIcon(settings.getAddedColor(), 20, 20));
colorAddedButton.setText("");
colorDeletedButton
.setIcon(new EmptyIcon(settings.getDeletedColor(), 20, 20));
colorDeletedButton.setText("");
colorChangedButton
.setIcon(new EmptyIcon(settings.getChangedColor(), 20, 20));
colorChangedButton.setText("");
showLineNumbersCheckBox.setSelected(settings.getShowLineNumbers());
ignoreWhitespaceAtBeginCheckBox.setSelected(ignore.ignoreWhitespaceAtBegin);
ignoreWhitespaceInBetweenCheckBox
.setSelected(ignore.ignoreWhitespaceInBetween);
ignoreWhitespaceAtEndCheckBox.setSelected(ignore.ignoreWhitespaceAtEnd);
ignoreEOLCheckBox.setSelected(ignore.ignoreEOL);
ignoreBlankLinesCheckBox.setSelected(ignore.ignoreBlankLines);
ignoreCaseCheckBox.setSelected(ignore.ignoreCase);
leftsideReadonlyCheckBox.setSelected(settings.getLeftsideReadonly());
rightsideReadonlyCheckBox.setSelected(settings.getRightsideReadonly());
showLevensteinCheckBox.setSelected(settings.isShowLevenstheinEditor());
showTreeChunksCheckBox.setSelected(settings.isShowTreeChunks());
showTreeRawCheckBox.setSelected(settings.isShowTreeRaw());
antialiasCheckBox.setSelected(settings.isAntialiasEnabled());
if (originalAntialias != settings.isAntialiasEnabled())
{
antialiasCheckBox.setText("antialias on (NEED A RESTART)");
}
else
{
antialiasCheckBox.setText("antialias on");
}
tabSizeSpinner.setValue(settings.getTabSize());
font = getEditorFont();
fontChooserButton.setFont(font);
fontChooserButton.setText(font.getName() + " (" + font.getSize() + ")");
defaultFontRadioButton.setSelected(!settings.isCustomFontEnabled());
customFontRadioButton.setSelected(settings.isCustomFontEnabled());
defaultEncodingRadioButton.setSelected(settings
.getDefaultFileEncodingEnabled());
detectEncodingRadioButton.setSelected(settings
.getDetectFileEncodingEnabled());
specificEncodingRadioButton.setSelected(settings
.getSpecificFileEncodingEnabled());
toolbarButtonIconComboBox.setSelectedItem(getEditorSettings()
.getToolbarButtonIcon());
toolbarButtonTextEnabledCheckBox.setSelected(getEditorSettings()
.isToolbarButtonTextEnabled());
revalidate();
}
private EditorSettings getEditorSettings()
{
return JMeldSettings.getInstance().getEditor();
}
private Font getEditorFont()
{
Font font;
font = getEditorSettings().getFont();
font = font == null ? FontUtil.defaultTextAreaFont : font;
return font;
}
}