Example usage for com.intellij.openapi.ide KillRingTransferable getStartOffset

List of usage examples for com.intellij.openapi.ide KillRingTransferable getStartOffset

Introduction

In this page you can find the example usage for com.intellij.openapi.ide KillRingTransferable getStartOffset.

Prototype

public int getStartOffset() 

Source Link

Usage

From source file:com.intellij.ide.CopyPasteManagerEx.java

License:Apache License

/**
 * Merges given new data with the given old one and returns merge result in case of success.
 *
 * @param newData new data to merge//from   ww w.  ja v  a  2 s .c  o m
 * @param oldData old data to merge
 * @return merge result of the given data if possible; <code>null</code> otherwise
 * @throws IOException                as defined by {@link Transferable#getTransferData(DataFlavor)}
 * @throws UnsupportedFlavorException as defined by {@link Transferable#getTransferData(DataFlavor)}
 */
@Nullable
private static Transferable merge(@NotNull KillRingTransferable newData, @NotNull KillRingTransferable oldData)
        throws IOException, UnsupportedFlavorException {
    if (!oldData.isReadyToCombine() || !newData.isReadyToCombine()) {
        return null;
    }

    Document document = newData.getDocument();
    if (document == null || document != oldData.getDocument()) {
        return null;
    }

    Object newDataText = newData.getTransferData(DataFlavor.stringFlavor);
    Object oldDataText = oldData.getTransferData(DataFlavor.stringFlavor);
    if (newDataText == null || oldDataText == null) {
        return null;
    }

    if (oldData.isCut()) {
        if (newData.getStartOffset() == oldData.getStartOffset()) {
            return new KillRingTransferable(oldDataText.toString() + newDataText, document,
                    oldData.getStartOffset(), newData.getEndOffset(), newData.isCut());
        }
    }

    if (newData.getStartOffset() == oldData.getEndOffset()) {
        return new KillRingTransferable(oldDataText.toString() + newDataText, document,
                oldData.getStartOffset(), newData.getEndOffset(), false);
    }

    if (newData.getEndOffset() == oldData.getStartOffset()) {
        return new KillRingTransferable(newDataText.toString() + oldDataText, document,
                newData.getStartOffset(), oldData.getEndOffset(), false);
    }

    return null;
}