All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fife.tmm.GeneralPanel Maven / Gradle / Ivy

Go to download

An application to easily create syntax highlighting for custom languages in RSyntaxTextArea.

The newest version!
package org.fife.tmm;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.fife.ui.LabelValueComboBox;

import net.miginfocom.swing.MigLayout;


/**
 * Panel for general information about the lexer class.
 *
 * @author Robert Futrell
 * @version 1.0
 */
class GeneralPanel extends TmmPanel {

	private JTextField packageField;
	private JTextField classNameField;
	private LabelValueComboBox extendedClassCombo;
	private JTextArea classCommentArea;
	private JCheckBox caseSensitiveCB;
	private JCheckBox booleanLiteralCB;


	/**
	 * Constructor.
	 *
	 * @param app The parent application.
	 */
	GeneralPanel(TokenMakerMaker app) {

		super(app);

		packageField = new JTextField();
		classNameField = new JTextField();
		String[] baseClasses = {
				app.getString("TokenMakerType.CDerivedSyntax"),
				app.getString("TokenMakerType.AllOthers"),
		};
		extendedClassCombo = new LabelValueComboBox<>();
		extendedClassCombo.addLabelValuePair(baseClasses[0], "AbstractJFlexCTokenMaker");
		extendedClassCombo.addLabelValuePair(baseClasses[1], "AbstractJFlexTokenMaker");
		classCommentArea = new JTextArea(10, 50);
		caseSensitiveCB = createCheckBox(app.getString("CaseSensitive"), true);
		booleanLiteralCB = createCheckBox(app.getString("BooleanLiterals"), false);

		panel.setLayout(new MigLayout("wrap 2", "[][grow,fill]"));
		panel.add(new JLabel(app.getString("Package")));
		panel.add(packageField);
		panel.add(new JLabel(app.getString("ClassName")));
		panel.add(classNameField);
		panel.add(new JLabel(app.getString("TokenMakerType")));
		panel.add(extendedClassCombo);
		panel.add(new JLabel(app.getString("ClassComment")));
		panel.add(new JScrollPane(classCommentArea));
		panel.add(caseSensitiveCB, "span 2,growx");
		panel.add(booleanLiteralCB, "span 2,growx");

	}


	/**
	 * {@inheritDoc}
	 */
	@Override
	public void configureTokenMakerInfo(TokenMakerInfo info) {
		info.setClassDoc(classCommentArea.getText());
		info.setClassName(classNameField.getText().trim());
		info.setExtendedClass(extendedClassCombo.getSelectedValue());
		info.setIgnoreCase(!caseSensitiveCB.isSelected());
		info.setBooleanLiterals(booleanLiteralCB.isSelected());
		info.setPackage(packageField.getText().trim());
	}


	/**
	 * {@inheritDoc}
	 */
	@Override
	public void initializeFrom(TokenMakerInfo info) {
		packageField.setText(info.getPackage());
		classNameField.setText(info.getClassName());
		extendedClassCombo.setSelectedItem(info.getExtendedClass());
		classCommentArea.setText(info.getClassDoc());
		caseSensitiveCB.setSelected(!info.getIgnoreCase());
		booleanLiteralCB.setSelected(info.getBooleanLiterals());
	}


	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean verifyInput() {

		String pkgName = packageField.getText().trim();
		if (pkgName.length()>0 && !pkgName.matches("\\w+(?:\\.\\w+)*")) {
			app.validateError(packageField, "Error.InvalidPackage");
			return false;
		}

		String className = classNameField.getText().trim();
		if (!className.matches("\\p{Alpha}\\p{Alnum}*")) {
			app.validateError(classNameField, "Error.InvalidClassName");
			return false;
		}

		return true;

	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy