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

org.yaoqiang.bpmn.editor.dialog.XMLMultiLineTextPanel Maven / Gradle / Ivy

package org.yaoqiang.bpmn.editor.dialog;

import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fife.ui.rtextarea.RTextScrollPane;
import org.yaoqiang.bpmn.model.elements.XMLElement;
import org.yaoqiang.bpmn.model.elements.XMLExtensionElement;
import org.yaoqiang.dialog.PanelContainer;
import org.yaoqiang.util.Resources;


/**
 * XMLMultiLineTextPanel
 * 
 * @author Shi Yaoqiang([email protected])
 */
public class XMLMultiLineTextPanel extends XMLPanel {

	private static final long serialVersionUID = 1L;

	protected RSyntaxTextArea jta;

	public XMLMultiLineTextPanel(PanelContainer pc, XMLElement owner, String title, int width, int height) {
		this(pc, owner, title, SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT, width, height);
	}

	public XMLMultiLineTextPanel(PanelContainer pc, XMLElement owner, String title, String style, int width, int height) {
		super(pc, owner);

		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		if (title != null && title.length() != 0) {
			this.setBorder(BorderFactory.createTitledBorder(Resources.get(title)));
		} else {
			this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
		}

		Dimension dim = new Dimension(width, height);
		jta = new RSyntaxTextArea();
		jta.setEditable(true);
		jta.setSyntaxEditingStyle(style);
		jta.setCodeFoldingEnabled(true);
		jta.setAntiAliasingEnabled(true);
		if (owner != null) {
			jta.setText(owner.toValue());
		}
		jta.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
				getPanelContainer().panelChanged();
			}

			public void removeUpdate(DocumentEvent e) {
				changedUpdate(e);
			}

			public void insertUpdate(DocumentEvent e) {
				changedUpdate(e);
			}
		});

		RTextScrollPane sp = new RTextScrollPane(jta);
		sp.setFoldIndicatorEnabled(true);
		sp.setPreferredSize(dim);
		this.add(sp);
	}

	public void saveObjects() {
		getOwner().setValue(getText());
		if (owner instanceof XMLExtensionElement && getOwner().toValue().length() == 0) {
			((XMLExtensionElement) getOwner().getParent()).removeChildElement((XMLExtensionElement) owner);
		}
	}

	public String getText() {
		return jta.getText().trim();
	}

	public RSyntaxTextArea getTextArea() {
		return jta;
	}

	public void setText(String text) {
		jta.setText(text);
	}

	public void appendText(String txt) {
		int cp = jta.getCaretPosition();
		String ct = jta.getText();
		String text = ct.substring(0, cp) + txt + ct.substring(cp);
		jta.setText(text);
		jta.setCaretPosition(cp + txt.length());
		jta.requestFocus();
	}

	public void setEnabled(boolean b) {
		super.setEnabled(b);
		jta.setEditable(b);
		jta.setEnabled(b);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy