/* * GutterOptionPane.java - Gutter options panel * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2000 mike dillon * Portions copyright (C) 2001, 2002 Slava Pestov * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit.options; //{{{ Imports import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import org.gjt.sp.jedit.gui.*; import org.gjt.sp.jedit.textarea.JEditTextArea; import org.gjt.sp.jedit.*; //}}} import org.gjt.sp.util.SyntaxUtilities; public class GutterOptionPane extends AbstractOptionPane { //{{{ GutterOptionPane constructor public GutterOptionPane() { super("gutter"); } //}}} //{{{ _init() method public void _init() { /* Gutter enable */ gutterEnabled = new JCheckBox(jEdit.getProperty( "options.gutter.enabled")); gutterEnabled.setSelected(isGutterEnabled()); addComponent(gutterEnabled); /* Gutter components frame */ GridBagConstraints cons = new GridBagConstraints(); cons.gridheight = 1; cons.gridwidth = GridBagConstraints.REMAINDER; cons.fill = GridBagConstraints.HORIZONTAL; cons.anchor = GridBagConstraints.WEST; cons.weightx = 1.0f; cons.ipadx = 0; cons.ipady = 0; cons.insets = new Insets(0,0,0,0); gutterComponents = new JPanel(new GridBagLayout()); gutterComponents.setBorder(BorderFactory.createTitledBorder( jEdit.getProperty("options.gutter.optionalComponents"))); IntegerInputVerifier integerInputVerifier = new IntegerInputVerifier(); /* Line numbering */ lineNumbersEnabled = new JCheckBox(jEdit.getProperty( "options.gutter.lineNumbers")); lineNumbersEnabled.setSelected(jEdit.getBooleanProperty( "view.gutter.lineNumbers")); gutterComponents.add(lineNumbersEnabled, cons); minLineNumberDigits = new JTextField(String.valueOf( getMinLineNumberDigits()),1); minLineNumberDigits.setInputVerifier(integerInputVerifier); JPanel minLineNumberDigitsPanel = new JPanel(); minLineNumberDigitsPanel.add(new JLabel( jEdit.getProperty("options.gutter.minLineNumberDigits"))); minLineNumberDigitsPanel.add(minLineNumberDigits); cons.gridy = 1; gutterComponents.add(minLineNumberDigitsPanel, cons); /* Selection area enable */ selectionAreaEnabled = new JCheckBox(jEdit.getProperty( "options.gutter.selectionAreaEnabled")); selectionAreaEnabled.setSelected(isSelectionAreaEnabled()); cons.gridy = 2; gutterComponents.add(selectionAreaEnabled, cons); addComponent(gutterComponents); // Disable gutter components when 'show gutter' is unchecked setGutterComponentsEnabledState(); gutterEnabled.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { setGutterComponentsEnabledState(); } }); /* Selection area background color */ addComponent(jEdit.getProperty("options.gutter.selectionAreaBgColor"), selectionAreaBgColor = new ColorWellButton( getSelectionAreaBackground()), GridBagConstraints.VERTICAL); /* Selection area width */ selectionAreaWidth = new JTextField(String.valueOf( getSelectionAreaWidth()),DEFAULT_SELECTION_GUTTER_WIDTH); selectionAreaWidth.setInputVerifier(integerInputVerifier); addComponent(jEdit.getProperty("options.gutter.selectionAreaWidth"), selectionAreaWidth); /* Text font */ gutterFont = new FontSelector( jEdit.getFontProperty("view.gutter.font", new Font("Monospaced",Font.PLAIN,10))); addComponent(jEdit.getProperty("options.gutter.font"),gutterFont); /* Text color */ addComponent(jEdit.getProperty("options.gutter.foreground"), gutterForeground = new ColorWellButton( jEdit.getColorProperty("view.gutter.fgColor")), GridBagConstraints.VERTICAL); /* Background color */ addComponent(jEdit.getProperty("options.gutter.background"), gutterBackground = new ColorWellButton( jEdit.getColorProperty("view.gutter.bgColor")), GridBagConstraints.VERTICAL); /* Border width */ /* gutterBorderWidth = new JTextField(jEdit.getProperty( "view.gutter.borderWidth")); addComponent(jEdit.getProperty("options.gutter.borderWidth"), gutterBorderWidth); */ /* Number alignment */ /* String[] alignments = new String[] { "Left", "Center", "Right" }; gutterNumberAlignment = new JComboBox(alignments); String alignment = jEdit.getProperty("view.gutter.numberAlignment"); if("right".equals(alignment)) gutterNumberAlignment.setSelectedIndex(2); else if("center".equals(alignment)) gutterNumberAlignment.setSelectedIndex(1); else gutterNumberAlignment.setSelectedIndex(0); addComponent(jEdit.getProperty("options.gutter.numberAlignment"), gutterNumberAlignment); */ /* Current line highlight */ gutterCurrentLineHighlightEnabled = new JCheckBox(jEdit.getProperty( "options.gutter.currentLineHighlight")); gutterCurrentLineHighlightEnabled.setSelected(jEdit.getBooleanProperty( "view.gutter.highlightCurrentLine")); addComponent(gutterCurrentLineHighlightEnabled, gutterCurrentLineHighlight = new ColorWellButton( jEdit.getColorProperty("view.gutter.currentLineColor")), GridBagConstraints.VERTICAL); /* Highlight interval and color */ gutterHighlightInterval = new JTextField(jEdit.getProperty( "view.gutter.highlightInterval"),3); Box gutterHighlightBox = new Box(BoxLayout.X_AXIS); gutterHighlightBox.add(new JLabel(jEdit.getProperty( "options.gutter.interval-1"))); gutterHighlightBox.add(Box.createHorizontalStrut(3)); gutterHighlightBox.add(gutterHighlightInterval); gutterHighlightBox.add(Box.createHorizontalStrut(3)); gutterHighlightBox.add(new JLabel(jEdit.getProperty( "options.gutter.interval-2"))); gutterHighlightBox.add(Box.createHorizontalStrut(12)); addComponent(gutterHighlightBox,gutterHighlightColor = new ColorWellButton(jEdit.getColorProperty( "view.gutter.highlightColor")), GridBagConstraints.VERTICAL); /* Structure highlight */ gutterStructureHighlightEnabled = new JCheckBox(jEdit.getProperty( "options.gutter.structureHighlight")); gutterStructureHighlightEnabled.setSelected(jEdit.getBooleanProperty( "view.gutter.structureHighlight")); addComponent(gutterStructureHighlightEnabled, gutterStructureHighlight = new ColorWellButton( jEdit.getColorProperty("view.gutter.structureHighlightColor")), GridBagConstraints.VERTICAL); /* Marker highlight */ gutterMarkerHighlightEnabled = new JCheckBox(jEdit.getProperty( "options.gutter.markerHighlight")); gutterMarkerHighlightEnabled.setSelected(jEdit.getBooleanProperty( "view.gutter.markerHighlight")); addComponent(gutterMarkerHighlightEnabled, gutterMarkerHighlight = new ColorWellButton( jEdit.getColorProperty("view.gutter.markerColor")), GridBagConstraints.VERTICAL); /* Fold marker color */ addComponent(jEdit.getProperty("options.gutter.foldColor"), gutterFoldMarkers = new ColorWellButton( jEdit.getColorProperty("view.gutter.foldColor")), GridBagConstraints.VERTICAL); /* Focused border color */ addComponent(jEdit.getProperty("options.gutter.focusBorderColor"), gutterFocusBorder = new ColorWellButton( jEdit.getColorProperty("view.gutter.focusBorderColor")), GridBagConstraints.VERTICAL); /* unfocused border color */ addComponent(jEdit.getProperty("options.gutter.noFocusBorderColor"), gutterNoFocusBorder = new ColorWellButton( jEdit.getColorProperty("view.gutter.noFocusBorderColor")), GridBagConstraints.VERTICAL); addFoldStyleChooser(); } //}}} //{{{ _save() method public void _save() { jEdit.setBooleanProperty("view.gutter.lineNumbers", lineNumbersEnabled .isSelected()); jEdit.setIntegerProperty("view.gutter.minDigitCount", Integer.valueOf(minLineNumberDigits.getText())); jEdit.setFontProperty("view.gutter.font",gutterFont.getFont()); jEdit.setColorProperty("view.gutter.fgColor",gutterForeground .getSelectedColor()); jEdit.setColorProperty("view.gutter.bgColor",gutterBackground .getSelectedColor()); /* jEdit.setProperty("view.gutter.borderWidth", gutterBorderWidth.getText()); String alignment = null; switch(gutterNumberAlignment.getSelectedIndex()) { case 2: alignment = "right"; break; case 1: alignment = "center"; break; case 0: default: alignment = "left"; } jEdit.setProperty("view.gutter.numberAlignment", alignment); */ jEdit.setBooleanProperty("view.gutter.highlightCurrentLine", gutterCurrentLineHighlightEnabled.isSelected()); jEdit.setColorProperty("view.gutter.currentLineColor", gutterCurrentLineHighlight.getSelectedColor()); jEdit.setProperty("view.gutter.highlightInterval", gutterHighlightInterval.getText()); jEdit.setColorProperty("view.gutter.highlightColor", gutterHighlightColor.getSelectedColor()); jEdit.setBooleanProperty("view.gutter.structureHighlight", gutterStructureHighlightEnabled.isSelected()); jEdit.setColorProperty("view.gutter.structureHighlightColor", gutterStructureHighlight.getSelectedColor()); jEdit.setBooleanProperty("view.gutter.markerHighlight", gutterMarkerHighlightEnabled.isSelected()); jEdit.setColorProperty("view.gutter.markerColor", gutterMarkerHighlight.getSelectedColor()); jEdit.setColorProperty("view.gutter.foldColor", gutterFoldMarkers.getSelectedColor()); jEdit.setProperty(JEditTextArea.FOLD_PAINTER_PROPERTY, painters[foldPainter.getSelectedIndex()]); jEdit.setColorProperty("view.gutter.focusBorderColor", gutterFocusBorder.getSelectedColor()); jEdit.setColorProperty("view.gutter.noFocusBorderColor", gutterNoFocusBorder.getSelectedColor()); jEdit.setBooleanProperty(GUTTER_ENABLED_PROPERTY, gutterEnabled.isSelected()); jEdit.setBooleanProperty(SELECTION_AREA_ENABLED_PROPERTY, selectionAreaEnabled.isSelected()); jEdit.setColorProperty(SELECTION_AREA_BGCOLOR_PROPERTY, selectionAreaBgColor.getSelectedColor()); jEdit.setIntegerProperty("view.gutter.selectionAreaWidth", Integer.valueOf(selectionAreaWidth.getText())); } //}}} //{{{ setGutterComponentsEnabledState private void setGutterComponentsEnabledState() { GUIUtilities.setEnabledRecursively(gutterComponents, gutterEnabled.isSelected()); } //}}} //{{{ addFoldStyleChooser() method private void addFoldStyleChooser() { painters = ServiceManager.getServiceNames(JEditTextArea.FOLD_PAINTER_SERVICE); foldPainter = new JComboBox(); String current = JEditTextArea.getFoldPainterName(); int selected = 0; for (int i = 0; i < painters.length; i++) { String painter = painters[i]; foldPainter.addItem(jEdit.getProperty( "options.gutter.foldStyleNames." + painter, painter)); if (painter.equals(current)) selected = i; } foldPainter.setSelectedIndex(selected); addComponent(new JLabel(jEdit.getProperty("options.gutter.foldStyle.label")), foldPainter); } //}}} //{{{ isGutterEnabled() method public static boolean isGutterEnabled() { return jEdit.getBooleanProperty(GUTTER_ENABLED_PROPERTY); } //}}} //{{{ getMinLineNumberDigits() method public static int getMinLineNumberDigits() { int n = jEdit.getIntegerProperty("view.gutter.minDigitCount", 2); if (n < 0) n = 2; return n; } //}}} //{{{ isSelectionAreaEnabled() method public static boolean isSelectionAreaEnabled() { return jEdit.getBooleanProperty(SELECTION_AREA_ENABLED_PROPERTY); } //}}} //{{{ getSelectionAreaBgColor() method public static Color getSelectionAreaBackground() { String color = jEdit.getProperty(SELECTION_AREA_BGCOLOR_PROPERTY); if (color == null) return jEdit.getColorProperty("view.gutter.bgColor"); return SyntaxUtilities.parseColor(color, Color.black); } //}}} //{{{ getSelectionAreaWidth() method public static int getSelectionAreaWidth() { int n = jEdit.getIntegerProperty("view.gutter.selectionAreaWidth", DEFAULT_SELECTION_GUTTER_WIDTH); if (n < 0) n = DEFAULT_SELECTION_GUTTER_WIDTH; return n; } //}}} //{{{ Private members private static final String GUTTER_ENABLED_PROPERTY = "view.gutter.enabled"; private static final String SELECTION_AREA_ENABLED_PROPERTY = "view.gutter.selectionAreaEnabled"; private static final String SELECTION_AREA_BGCOLOR_PROPERTY = "view.gutter.selectionAreaBgColor"; private static final int DEFAULT_SELECTION_GUTTER_WIDTH = 12; private FontSelector gutterFont; private ColorWellButton gutterForeground; private ColorWellButton gutterBackground; private JTextField gutterHighlightInterval; private ColorWellButton gutterHighlightColor; private JCheckBox lineNumbersEnabled; private JCheckBox gutterCurrentLineHighlightEnabled; private ColorWellButton gutterCurrentLineHighlight; private JCheckBox gutterStructureHighlightEnabled; private ColorWellButton gutterStructureHighlight; private JCheckBox gutterMarkerHighlightEnabled; private ColorWellButton gutterMarkerHighlight; private ColorWellButton gutterFoldMarkers; private JComboBox foldPainter; private ColorWellButton gutterFocusBorder; private ColorWellButton gutterNoFocusBorder; private String [] painters; private JCheckBox gutterEnabled; private JPanel gutterComponents; private JTextField minLineNumberDigits; private JCheckBox selectionAreaEnabled; private ColorWellButton selectionAreaBgColor; private JTextField selectionAreaWidth; //}}} }