|
What this is
Other links
The source code
/*
* EditingOptionPane.java - Mode-specific options panel
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 1998, 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 java.awt.event.*;
import org.gjt.sp.jedit.*;
import org.gjt.sp.jedit.buffer.FoldHandler;
//}}}
public class EditingOptionPane extends AbstractOptionPane
{
//{{{ EditingOptionPane constructor
public EditingOptionPane()
{
super("editing");
} //}}}
//{{{ _init() method
protected void _init()
{
Mode[] modes = jEdit.getModes();
MiscUtilities.quicksort(modes,new MiscUtilities.StringICaseCompare());
global = new ModeProperties();
modeProps = new ModeProperties[modes.length];
String[] modeNames = new String[modes.length + 1];
modeNames[0] = jEdit.getProperty("options.editing.global");
for(int i = 0; i < modes.length; i++)
{
modeProps[i] = new ModeProperties(modes[i]);
modeNames[i + 1] = modes[i].getName();
}
mode = new JComboBox(modeNames);
mode.addActionListener(new ActionHandler());
captionBox = new Box(BoxLayout.X_AXIS);
addComponent(captionBox);
addComponent(jEdit.getProperty("options.editing.mode"),mode);
useDefaults = new JCheckBox(jEdit.getProperty("options.editing.useDefaults"));
useDefaults.addActionListener(new ActionHandler());
addComponent(useDefaults);
addComponent(jEdit.getProperty("options.editing.noWordSep"),
noWordSep = new JTextField());
String[] foldModes = FoldHandler.getFoldModes();
addComponent(jEdit.getProperty("options.editing.folding"),
folding = new JComboBox(foldModes));
addComponent(jEdit.getProperty("options.editing.collapseFolds"),
collapseFolds = new JTextField());
String[] wrapModes = {
"none",
"soft",
"hard"
};
addComponent(jEdit.getProperty("options.editing.wrap"),
wrap = new JComboBox(wrapModes));
wrap.addActionListener(new ActionHandler());
String[] lineLens = { "0", "72", "76", "80" };
addComponent(jEdit.getProperty("options.editing.maxLineLen"),
maxLineLen = new JComboBox(lineLens));
maxLineLen.setEditable(true);
maxLineLen.addActionListener(new ActionHandler());
String[] tabSizes = { "2", "4", "8" };
addComponent(jEdit.getProperty("options.editing.tabSize"),
tabSize = new JComboBox(tabSizes));
tabSize.setEditable(true);
addComponent(jEdit.getProperty("options.editing.indentSize"),
indentSize = new JComboBox(tabSizes));
indentSize.setEditable(true);
addComponent(noTabs = new JCheckBox(jEdit.getProperty(
"options.editing.noTabs")));
addComponent(deepIndent = new JCheckBox(jEdit.getProperty(
"options.editing.deepIndent")));
addComponent(jEdit.getProperty("options.editing.filenameGlob"),
filenameGlob = new JTextField());
addComponent(jEdit.getProperty("options.editing.firstlineGlob"),
firstlineGlob = new JTextField());
selectMode();
addSeparator();
defaultMode = new JComboBox(modes);
defaultMode.setSelectedItem(jEdit.getMode(
jEdit.getProperty("buffer.defaultMode")));
addComponent(jEdit.getProperty("options.editing.defaultMode"),
defaultMode);
undoCount = new JTextField(jEdit.getProperty("buffer.undoCount"));
addComponent(jEdit.getProperty("options.editing.undoCount"),undoCount);
} //}}}
//{{{ _save() method
protected void _save()
{
jEdit.setProperty("buffer.defaultMode",
((Mode)defaultMode.getSelectedItem()).getName());
jEdit.setProperty("buffer.undoCount",undoCount.getText());
saveMode();
global.save();
for(int i = 0; i < modeProps.length; i++)
{
modeProps[i].save();
}
} //}}}
//{{{ Private members
//{{{ Instance variables
private JComboBox defaultMode;
private JTextField undoCount;
private ModeProperties global;
private ModeProperties[] modeProps;
private ModeProperties current;
private Box captionBox;
private JComboBox mode;
private JCheckBox useDefaults;
private JTextField filenameGlob;
private JTextField firstlineGlob;
private JTextField noWordSep;
private JComboBox folding;
private JTextField collapseFolds;
private JComboBox wrap;
private JComboBox maxLineLen;
private JComboBox tabSize;
private JComboBox indentSize;
private JCheckBox noTabs;
private JCheckBox deepIndent;
//}}}
//{{{ saveMode() method
private void saveMode()
{
current.useDefaults = useDefaults.isSelected();
current.filenameGlob = filenameGlob.getText();
current.firstlineGlob = firstlineGlob.getText();
current.noWordSep = noWordSep.getText();
current.folding = (String)folding.getSelectedItem();
current.collapseFolds = collapseFolds.getText();
current.wrap = (String)wrap.getSelectedItem();
current.maxLineLen = (String)maxLineLen.getSelectedItem();
current.tabSize = (String)tabSize.getSelectedItem();
current.indentSize = (String)indentSize.getSelectedItem();
current.noTabs = noTabs.isSelected();
current.deepIndent = deepIndent.isSelected();
} //}}}
//{{{ selectMode() method
private void selectMode()
{
int index = mode.getSelectedIndex();
current = (index == 0 ? global : modeProps[index - 1]);
current.edited = true;
current.load();
captionBox.removeAll();
captionBox.add(GUIUtilities.createMultilineLabel(
jEdit.getProperty("options.editing.caption-"
+ (index == 0 ? "0" : "1"))));
useDefaults.setSelected(current.useDefaults);
filenameGlob.setText(current.filenameGlob);
firstlineGlob.setText(current.firstlineGlob);
noWordSep.setText(current.noWordSep);
folding.setSelectedItem(current.folding);
collapseFolds.setText(current.collapseFolds);
wrap.setSelectedItem(current.wrap);
maxLineLen.setSelectedItem(current.maxLineLen);
tabSize.setSelectedItem(current.tabSize);
indentSize.setSelectedItem(current.indentSize);
noTabs.setSelected(current.noTabs);
deepIndent.setSelected(current.deepIndent);
updateEnabled();
revalidate();
} //}}}
//{{{ updateEnabled() method
private void updateEnabled()
{
boolean enabled;
if(current == global)
{
enabled = true;
useDefaults.setEnabled(false);
filenameGlob.setEnabled(false);
firstlineGlob.setEnabled(false);
}
else
{
enabled = !modeProps[mode.getSelectedIndex() - 1]
.useDefaults;
useDefaults.setEnabled(true);
filenameGlob.setEnabled(enabled);
firstlineGlob.setEnabled(enabled);
}
noWordSep.setEnabled(enabled);
folding.setEnabled(enabled);
collapseFolds.setEnabled(enabled);
wrap.setEnabled(enabled);
maxLineLen.setEnabled(enabled);
tabSize.setEnabled(enabled);
indentSize.setEnabled(enabled);
noTabs.setEnabled(enabled);
deepIndent.setEnabled(enabled);
} //}}}
//}}}
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
if(source == mode)
{
saveMode();
selectMode();
}
else if(source == useDefaults)
{
modeProps[mode.getSelectedIndex() - 1].useDefaults =
useDefaults.isSelected();
updateEnabled();
}
else if(source == wrap)
{
if(!wrap.getSelectedItem().equals("none"))
{
if(maxLineLen.getSelectedItem()
.equals("0"))
{
maxLineLen.setSelectedItem("80");
}
}
}
else if(source == maxLineLen)
{
if(!wrap.getSelectedItem().equals("none"))
{
if(maxLineLen.getSelectedItem()
.equals("0"))
{
wrap.setSelectedItem("none");
}
}
}
}
} //}}}
//{{{ ModeProperties class
class ModeProperties
{
//{{{ Instance variables
Mode mode;
boolean edited;
boolean loaded;
boolean useDefaults;
String filenameGlob;
String firstlineGlob;
String noWordSep;
String folding;
String collapseFolds;
String wrap;
String maxLineLen;
String tabSize;
String indentSize;
boolean noTabs;
boolean deepIndent;
//}}}
//{{{ ModeProperties constructor
ModeProperties()
{
} //}}}
//{{{ ModeProperties constructor
ModeProperties(Mode mode)
{
this.mode = mode;
} //}}}
//{{{ load() method
void load()
{
if(loaded)
return;
loaded = true;
if(mode != null)
{
mode.loadIfNecessary();
useDefaults = !jEdit.getBooleanProperty("mode."
+ mode.getName() + ".customSettings");
filenameGlob = (String)mode.getProperty("filenameGlob");
firstlineGlob = (String)mode.getProperty("firstlineGlob");
noWordSep = (String)mode.getProperty("noWordSep");
folding = mode.getProperty("folding").toString();
collapseFolds = mode.getProperty("collapseFolds").toString();
wrap = mode.getProperty("wrap").toString();
maxLineLen = mode.getProperty("maxLineLen").toString();
tabSize = mode.getProperty("tabSize").toString();
indentSize = mode.getProperty("indentSize").toString();
noTabs = mode.getBooleanProperty("noTabs");
deepIndent = mode.getBooleanProperty("deepIndent");
}
else
{
noWordSep = jEdit.getProperty("buffer.noWordSep");
folding = jEdit.getProperty("buffer.folding");
collapseFolds = jEdit.getProperty("buffer.collapseFolds");
wrap = jEdit.getProperty("buffer.wrap");
maxLineLen = jEdit.getProperty("buffer.maxLineLen");
tabSize = jEdit.getProperty("buffer.tabSize");
indentSize = jEdit.getProperty("buffer.indentSize");
noTabs = jEdit.getBooleanProperty("buffer.noTabs");
deepIndent = jEdit.getBooleanProperty("buffer.deepIndent");
}
} //}}}
//{{{ save() method
void save()
{
// don't do anything if the user didn't change
// any settings
if(!edited)
return;
String prefix;
if(mode != null)
{
prefix = "mode." + mode.getName() + ".";
jEdit.setBooleanProperty(prefix + "customSettings",!useDefaults);
// need to call Mode.init() if the file name or first line
// globs change
String oldFilenameGlob = (String)mode.getProperty("filenameGlob");
String oldFirstlineGlob = (String)mode.getProperty("firstlineGlob");
if(useDefaults)
{
jEdit.resetProperty(prefix + "filenameGlob");
jEdit.resetProperty(prefix + "firstlineGlob");
jEdit.resetProperty(prefix + "noWordSep");
jEdit.resetProperty(prefix + "folding");
jEdit.resetProperty(prefix + "collapseFolds");
jEdit.resetProperty(prefix + "wrap");
jEdit.resetProperty(prefix + "maxLineLen");
jEdit.resetProperty(prefix + "tabSize");
jEdit.resetProperty(prefix + "indentSize");
jEdit.resetProperty(prefix + "noTabs");
jEdit.resetProperty(prefix + "deepIndent");
if(!(MiscUtilities.objectsEqual(oldFilenameGlob,
(String)mode.getProperty("filenameGlob"))
&& MiscUtilities.objectsEqual(oldFirstlineGlob,
(String)mode.getProperty("firstlineGlob"))))
{
mode.init();
}
return;
}
else
{
jEdit.setProperty(prefix + "filenameGlob",filenameGlob);
jEdit.setProperty(prefix + "firstlineGlob",firstlineGlob);
if(!(MiscUtilities.objectsEqual(oldFilenameGlob,
filenameGlob)
&& MiscUtilities.objectsEqual(oldFirstlineGlob,
firstlineGlob)))
{
mode.init();
}
}
}
else
{
prefix = "buffer.";
}
jEdit.setProperty(prefix + "noWordSep",noWordSep);
jEdit.setProperty(prefix + "folding",folding);
jEdit.setProperty(prefix + "collapseFolds",collapseFolds);
jEdit.setProperty(prefix + "wrap",wrap);
jEdit.setProperty(prefix + "maxLineLen",maxLineLen);
jEdit.setProperty(prefix + "tabSize",tabSize);
jEdit.setProperty(prefix + "indentSize",indentSize);
jEdit.setBooleanProperty(prefix + "noTabs",noTabs);
jEdit.setBooleanProperty(prefix + "deepIndent",deepIndent);
} //}}}
} //}}}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.