idleditorkit.java

来自「UCS (Ultra Corba Simulator) is one more 」· Java 代码 · 共 136 行

JAVA
136
字号
/**
 * (c) 2007 UCS_2008
 *
 * Project    UCS (Ultra Corba Simulator)
 * Subproject CorbaMNQ
 * File       IdlEditorKit.java
 * Created on Sep 13, 2007 by ucs_2008
 *
 * History:
 * Date(Y.M.D) User           Reason (plus CR, LM, Fault number)
 *
 */

package com.corba.mnq.ui.text.idl;

import java.awt.event.ActionEvent;

import javax.swing.text.DefaultEditorKit;
import javax.swing.text.Document;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent;
import javax.swing.text.Segment;
import javax.swing.text.TextAction;
import javax.swing.text.ViewFactory;

/**
 * name: "IdlEditorKit"
 * 
 * @author ucs_2008
 */
public class IdlEditorKit extends DefaultEditorKit {

    /**
     * type: long name: serialVersionUID
     */
    private static final long serialVersionUID = -961644294063617794L;

    /**
     * This is one class constructor
     */
    public IdlEditorKit() {
        super();
        // TODO Auto-generated constructor stub
    }

    private ViewFactory idlViewFactory = new IdlViewFactory();

    public String getContentType() {
        return "text/idl";
    }

    public Document createDefaultDocument() {
        Document doc = new IdlDocument();
        return doc;
    }

    public final ViewFactory getViewFactory() {
        return idlViewFactory;
    }

    public static class InsertBreakAction extends TextAction {

        /**
         * type: long name: serialVersionUID
         */
        private static final long serialVersionUID = 6235477004886609778L;

        public InsertBreakAction() {
            super(DefaultEditorKit.insertBreakAction);
        }

        public void actionPerformed(ActionEvent e) {
            JTextComponent target = getTextComponent(e);
            if (target != null) {
                if ((!target.isEditable()) || (!target.isEnabled())) {
                    target.getToolkit().beep();
                    return;
                }
                Boolean insertOnBreak = (Boolean) target
                        .getClientProperty(IdlTextEditor.INDENT_ON_INSERT_BREAK);
                if (insertOnBreak != null && insertOnBreak.booleanValue()) {
                    Document document = target.getDocument();
                    int selectionStart = target.getSelectionStart();
                    int selectionEnd = target.getSelectionEnd();
                    int lineNumber = document.getDefaultRootElement().getElementIndex(
                            selectionStart);
                    Element lineElement = document.getDefaultRootElement().getElement(lineNumber);
                    int lastLineNumber = document.getDefaultRootElement().getElementIndex(
                            selectionEnd);
                    Element lastLineElement = document.getDefaultRootElement().getElement(
                            lastLineNumber);
                    int startOffset = lineElement.getStartOffset();
                    int endOffset = selectionStart;
                    int length = endOffset - startOffset;
                    try {
                        Segment lineHead = new Segment();
                        target.getDocument().getText(startOffset, length, lineHead);
                        StringBuffer spaces = new StringBuffer();
                        for (int i = lineHead.offset; i < lineHead.offset + lineHead.count; i++) {
                            if (lineHead.array[i] == ' ')
                                spaces.append(" ");
                            else if (lineHead.array[i] == '\t')
                                spaces.append("\t");
                            else
                                break;
                        }
                        String newLine = document.getText(selectionEnd, Math.min(lastLineElement
                                .getEndOffset(), document.getLength())
                                - selectionEnd);
                        newLine = newLine.trim();
                        String lastChar = document.getText(selectionEnd - 1, 1);
                        String nextChar = null;
                        try {
                            nextChar = document.getText(selectionEnd, 1);
                        } catch (StringIndexOutOfBoundsException strexc) {
                            System.out.println(strexc);
                        }
                        target.select(target.getSelectionStart(), Math.min(lastLineElement
                                .getEndOffset(), document.getLength()));
                        if (lastChar.equals("{") && (nextChar == null || !nextChar.equals("}"))) {
                            spaces.append(IdlTextEditor.TAB_SIZE);
                        }
                        target.replaceSelection("\n" + spaces + newLine + "\n");
                        target.setCaretPosition(endOffset + spaces.length() + 1);
                    } catch (Exception exc) {
                        target.replaceSelection("\n");
                    }
                } else
                    target.replaceSelection("\n");
            }
        }
    }

}
/* EOF */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?