/*
* BufferOptionPane.java -
* :tabSize=4:indentSize=4:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 1998, 2003 Slava Pestov
* Portions copyright (C) 1999 mike dillon
*
* 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;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import org.gjt.sp.jedit.AbstractOptionPane;
import org.gjt.sp.jedit.Buffer;
import org.gjt.sp.jedit.GUIUtilities;
import org.gjt.sp.jedit.MiscUtilities;
import org.gjt.sp.jedit.Mode;
import org.gjt.sp.jedit.jEdit;
import org.gjt.sp.jedit.buffer.FoldHandler;
import org.gjt.sp.jedit.buffer.JEditBuffer;
import org.gjt.sp.util.StandardUtilities;
public class BufferOptionPane extends AbstractOptionPane
{
private JComboBox<String> encoding;
private JComboBox<String> lineSeparator;
private JCheckBox gzipped;
private Mode[] modes;
private JComboBox<Mode> mode;
private JComboBox<String> folding;
private JComboBox<String> wrap;
private JComboBox<String> maxLineLen;
private JComboBox<String> tabSize;
private JComboBox<String> indentSize;
private JComboBox<String> checkModStatus;
private JCheckBox noTabs;
private Buffer buffer;
private JCheckBox elasticTabstops;
private JComboBox<String> autoIndent;
public BufferOptionPane()
{
super("Buffer Options");
init();
}
//{{{ _init() method
@Override
protected void _init()
{
buffer = jEdit.getActiveView().getBuffer();
String filename = buffer.getName();
setName("Buffer: " + filename);
addComponent(GUIUtilities.createMultilineLabel(
jEdit.getProperty("buffer-options.caption")));
addSeparator("buffer-options.loading-saving");
//{{{ Line separator
String[] lineSeps = { jEdit.getProperty("lineSep.unix"),
jEdit.getProperty("lineSep.windows"),
jEdit.getProperty("lineSep.mac") };
lineSeparator = new JComboBox<String>(lineSeps);
String lineSep = buffer.getStringProperty(JEditBuffer.LINESEP);
if(lineSep == null)
lineSep = System.getProperty("line.separator");
if("\n".equals(lineSep))
lineSeparator.setSelectedIndex(0);
else if("\r\n".equals(lineSep))
lineSeparator.setSelectedIndex(1);
else if("\r".equals(lineSep))
lineSeparator.setSelectedIndex(2);
addComponent(jEdit.getProperty("buffer-options.lineSeparator"),
lineSeparator);
//}}}
//{{{ Encoding
String[] encodings = MiscUtilities.getEncodings(true);
Arrays.sort(encodings,new StandardUtilities.StringCompare<String>(true));
encoding = new JComboBox<String>(encodings);
encoding.setEditable(true);
encoding.setSelectedItem(buffer.getStringProperty(JEditBuffer.ENCODING));
addComponent(jEdit.getProperty("buffer-options.encoding"),
encoding);
//}}}
//{{{ GZipped setting
gzipped = new JCheckBox(jEdit.getProperty(
"buffer-options.gzipped"));
gzipped.setSelected(buffer.getBooleanProperty(Buffer.GZIPPED));
addComponent(gzipped);
//}}}
//{{{ Autoreload settings
/* Check mod status on focus */
String[] modCheckOptions = {
jEdit.getProperty("options.general.checkModStatus.nothing"),
jEdit.getProperty("options.general.checkModStatus.prompt"),
jEdit.getProperty("options.general.checkModStatus.reload"),
jEdit.getProperty("options.general.checkModStatus.silentReload")
};
checkModStatus = new JComboBox<String>(modCheckOptions);
if(buffer.getAutoReload())
{
if(buffer.getAutoReloadDialog())
// reload and notify
checkModStatus.setSelectedIndex(2);
else // reload silently
checkModStatus.setSelectedIndex(3);
}
else
{
if(buffer.getAutoReloadDialog())
// prompt
checkModStatus.setSelectedIndex(1);
else // do nothing
checkModStatus.setSelectedIndex(0);
}
addComponent(jEdit.getProperty("options.general.checkModStatus"),
checkModStatus);
// }}}
addSeparator("buffer-options.editing");
//{{{ Edit mode
modes = jEdit.getModes();
Arrays.sort(modes,new StandardUtilities.StringCompare<Mode>(true));
mode = new JComboBox<Mode>(modes);
mode.setSelectedItem(buffer.getMode());
ActionHandler actionListener = new ActionHandler();
mode.addActionListener(actionListener);
addComponent(jEdit.getProperty("buffer-options.mode"),mode);
//}}}
//{{{ Fold mode
String[] foldModes = FoldHandler.getFoldModes();
folding = new JComboBox<String>(foldModes);
folding.setSelectedItem(buffer.getStringProperty("folding"));
addComponent(jEdit.getProperty("options.editing.folding"),
folding);
//}}}
//{{{ Automatic indentation
String[] indentModes = {"none", "simple", "full"};
autoIndent = new JComboBox<String>(indentModes);
autoIndent.setSelectedItem(buffer.getStringProperty("autoIndent"));
addComponent(jEdit.getProperty("options.editing.autoIndent"), autoIndent);
//}}}
//{{{ Wrap mode
String[] wrapModes = {
"none",
"soft",
"hard"
};
wrap = new JComboBox<String>(wrapModes);
wrap.setSelectedItem(buffer.getStringProperty("wrap"));
addComponent(jEdit.getProperty("options.editing.wrap"),
wrap);
//}}}
//{{{ Max line length
String[] lineLengths = { "0", "72", "76", "80" };
maxLineLen = new JComboBox<String>(lineLengths);
maxLineLen.setEditable(true);
maxLineLen.setSelectedItem(buffer.getStringProperty("maxLineLen"));
addComponent(jEdit.getProperty("options.editing.maxLineLen"),
maxLineLen);
//}}}
//{{{ Tab size
String[] tabSizes = { "2", "4", "8" };
tabSize = new JComboBox<String>(tabSizes);
tabSize.setEditable(true);
tabSize.setSelectedItem(buffer.getStringProperty("tabSize"));
addComponent(jEdit.getProperty("options.editing.tabSize"),tabSize);
//}}}
//{{{ Indent size
indentSize = new JComboBox<String>(tabSizes);
indentSize.setEditable(true);
indentSize.setSelectedItem(buffer.getStringProperty("indentSize"));
addComponent(jEdit.getProperty("options.editing.indentSize"),
indentSize);
//}}}
//{{{ Soft tabs
noTabs = new JCheckBox(jEdit.getProperty(
"options.editing.noTabs"));
noTabs.setSelected(buffer.getBooleanProperty("noTabs"));
addComponent(noTabs);
//}}}
//{{{ Elastic tabstops
elasticTabstops = new JCheckBox(jEdit.getProperty(
"options.editing.elasticTabstops"));
elasticTabstops.setToolTipText(jEdit.getProperty("options.editing.elasticTabstops.tooltip"));
elasticTabstops.setSelected(buffer.getBooleanProperty("elasticTabstops"));
addComponent(elasticTabstops);
//}}}
} //}}}
//{{{ _save() method
@Override
protected void _save()
{
int index = lineSeparator.getSelectedIndex();
String lineSep;
if(index == 0)
lineSep = "\n";
else if(index == 1)
lineSep = "\r\n";
else if(index == 2)
lineSep = "\r";
else
throw new InternalError();
String oldLineSep = buffer.getStringProperty(JEditBuffer.LINESEP);
if(oldLineSep == null)
oldLineSep = System.getProperty("line.separator");
if(!oldLineSep.equals(lineSep))
{
buffer.setStringProperty(JEditBuffer.LINESEP, lineSep);
buffer.setDirty(true);
}
String encoding = (String)this.encoding.getSelectedItem();
String oldEncoding = buffer.getStringProperty(JEditBuffer.ENCODING);
if(!oldEncoding.equals(encoding))
{
buffer.setStringProperty(JEditBuffer.ENCODING,encoding);
buffer.setDirty(true);
// Disable auto-detect because user explicitly
// specify an encoding.
buffer.setBooleanProperty(Buffer.ENCODING_AUTODETECT,false);
}
boolean gzippedValue = gzipped.isSelected();
boolean oldGzipped = buffer.getBooleanProperty(
Buffer.GZIPPED);
if(gzippedValue != oldGzipped)
{
buffer.setBooleanProperty(Buffer.GZIPPED,gzippedValue);
buffer.setDirty(true);
}
buffer.setStringProperty("folding",(String)folding.getSelectedItem());
buffer.setStringProperty("wrap",(String)wrap.getSelectedItem());
try
{
buffer.setProperty("maxLineLen",new Integer(
maxLineLen.getSelectedItem().toString()));
}
catch(NumberFormatException nf)
{
}
try
{
buffer.setProperty("tabSize",new Integer(
tabSize.getSelectedItem().toString()));
}
catch(NumberFormatException nf)
{
}
try
{
buffer.setProperty("indentSize",new Integer(
indentSize.getSelectedItem().toString()));
}
catch(NumberFormatException nf)
{
}
buffer.setBooleanProperty("noTabs",noTabs.isSelected());
buffer.setBooleanProperty("elasticTabstops",elasticTabstops.isSelected());
buffer.setStringProperty("autoIndent", (String)autoIndent.getSelectedItem());
index = mode.getSelectedIndex();
buffer.setMode(modes[index]);
switch(checkModStatus.getSelectedIndex())
{
case 0:
buffer.setAutoReloadDialog(false);
buffer.setAutoReload(false);
break;
case 1:
buffer.setAutoReloadDialog(true);
buffer.setAutoReload(false);
break;
case 2:
buffer.setAutoReloadDialog(true);
buffer.setAutoReload(true);
break;
case 3:
buffer.setAutoReloadDialog(false);
buffer.setAutoReload(true);
break;
}
} //}}}
//{{{ ActionHandler() class
private class ActionHandler implements ActionListener
{
//{{{ actionPerformed() method
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
if(source == mode)
{
Mode _mode = (Mode)mode.getSelectedItem();
folding.setSelectedItem(_mode.getProperty(
"folding"));
wrap.setSelectedItem(_mode.getProperty(
"wrap"));
maxLineLen.setSelectedItem(_mode.getProperty(
"maxLineLen"));
tabSize.setSelectedItem(_mode.getProperty(
"tabSize"));
indentSize.setSelectedItem(_mode.getProperty(
"indentSize"));
noTabs.setSelected(_mode.getBooleanProperty(
"noTabs"));
elasticTabstops.setSelected(_mode.getBooleanProperty(
"elasticTabstops"));
}
} //}}}
} //}}}
}