
org.fife.tmm.StringLexingPanel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tokenmakermaker Show documentation
Show all versions of tokenmakermaker Show documentation
An application to easily create syntax highlighting for custom languages in RSyntaxTextArea.
The newest version!
package org.fife.tmm;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
/**
* A panel containing string lexing options.
*
* @author Robert Futrell
* @version 1.0
*/
class StringLexingPanel extends TmmPanel {
private JCheckBox stringCB;
private JTextField stringDelimField;
private JCheckBox stringMultiLineCB;
private JCheckBox charCB;
private JTextField charDelimField;
private JCheckBox charMultiLineCB;
private JCheckBox verbatimCB;
private JTextField verbatimDelimField;
StringLexingPanel(TokenMakerMaker app) {
super(app);
Listener listener = new Listener();
stringCB = createCheckBox(app.getString("EnableStrings"));
stringCB.addActionListener(listener);
stringDelimField = new JTextField();
stringMultiLineCB = createCheckBox(app.getString("StringsMultiLine"));
charCB = createCheckBox(app.getString("EnableCharLiterals"));
charCB.addActionListener(listener);
charDelimField = new JTextField();
charMultiLineCB = createCheckBox(app.getString("CharLiteralsMultiLine"));
verbatimCB = createCheckBox(app.getString("EnableVerbatimStrings"));
verbatimCB.addActionListener(listener);
verbatimDelimField = new JTextField();
panel.setLayout(new MigLayout("wrap 2", "[][grow,fill]"));
panel.add(new Divider(app.getString("Strings")), "span 2,growx");
panel.add(stringCB, "span 2,growx");
JLabel label = new JLabel(app.getString("Delimiter"));
panel.add(label, "gap 20");
panel.add(stringDelimField);
stringDelimField.setText("\"");
stringDelimField.setEnabled(false);
stringDelimField.putClientProperty(DONT_ENABLE, Boolean.TRUE);
panel.add(stringMultiLineCB, "gap 20,span 2,growx");
panel.add(new Divider(app.getString("CharLiterals")), "span 2,growx");
panel.add(charCB, "span 2,growx");
label = new JLabel(app.getString("Delimiter"));
panel.add(label, "gap 20");
panel.add(charDelimField);
charDelimField.setText("'");
charDelimField.setEnabled(false);
charDelimField.putClientProperty(DONT_ENABLE, Boolean.TRUE);
panel.add(charMultiLineCB, "gap 20,span 2,growx");
panel.add(new Divider(app.getString("VerbatimStrings")), "span 2,growx");
panel.add(verbatimCB, "span 2,growx");
JLabel mlsLabel = new JLabel(app.getString("Delimiter"));
panel.add(mlsLabel, "gap 20");
panel.add(verbatimDelimField);
stringCB.setSelected(true);
charCB.setSelected(true);
verbatimCB.setSelected(false);
verbatimDelimField.setEnabled(false);
// TODO: Add support for verbatim strings.
verbatimCB.setEnabled(false);
mlsLabel.setEnabled(false);
}
@Override
public void configureTokenMakerInfo(TokenMakerInfo info) {
info.setBackticksEnabled(false);
info.setCharsEnabled(charCB.isSelected());
info.setCharsMultiLine(charMultiLineCB.isSelected());
info.setStringsEnabled(stringCB.isSelected());
info.setStringsMultiLine(stringMultiLineCB.isSelected());
}
@Override
public void initializeFrom(TokenMakerInfo info) {
stringCB.setSelected(info.getStringsEnabled());
stringMultiLineCB.setSelected(info.getStringsMultiLine());
charCB.setSelected(info.getCharsEnabled());
charMultiLineCB.setSelected(info.getCharsMultiLine());
verbatimCB.setSelected(false);
}
@Override
public boolean verifyInput() {
return true;
}
/**
* Listens for events in this panel.
*/
protected static class Listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JCheckBox) {
JCheckBox cb = (JCheckBox)e.getSource();
boolean enabled = cb.isSelected();
Container parent = cb.getParent();
int index = getIndexOf(parent, cb);
if (index>-1) { // Always true
for (int i=index+1; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy