Search in sources :

Example 1 with Pos

use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.

the class EditScreen method updateActiveLine.

private void updateActiveLine() {
    Pos p = cmEdit.getCursor("end");
    cursLine.setInnerText(Integer.toString(p.line() + 1));
    cursCol.setInnerText(Integer.toString(p.ch() + 1));
    cmEdit.extras().activeLine(cmEdit.getLineHandleVisualStart(p.line()));
}
Also used : Pos(net.codemirror.lib.Pos)

Example 2 with Pos

use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.

the class SideBySideChunkManager method markEdit.

private void markEdit(CodeMirror cm, int startLine, JsArrayString lines, JsArray<Span> edits) {
    if (lines == null || edits == null) {
        return;
    }
    EditIterator iter = new EditIterator(lines, startLine);
    Configuration bg = Configuration.create().set("className", SideBySideTable.style.intralineBg()).set("readOnly", true);
    Configuration diff = Configuration.create().set("className", SideBySideTable.style.diff()).set("readOnly", true);
    Pos last = Pos.create(0, 0);
    for (Span span : Natives.asList(edits)) {
        Pos from = iter.advance(span.skip());
        Pos to = iter.advance(span.mark());
        if (from.line() == last.line()) {
            getMarkers().add(cm.markText(last, from, bg));
        } else {
            getMarkers().add(cm.markText(Pos.create(from.line(), 0), from, bg));
        }
        getMarkers().add(cm.markText(from, to, diff));
        last = to;
        colorLines(cm, LineClassWhere.BACKGROUND, SideBySideTable.style.diff(), from.line(), to.line());
    }
}
Also used : Configuration(net.codemirror.lib.Configuration) Pos(net.codemirror.lib.Pos) Span(com.google.gerrit.client.diff.DiffInfo.Span)

Example 3 with Pos

use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.

the class UnifiedCommentManager method newDraft.

@Override
void newDraft(CodeMirror cm) {
    if (cm.somethingSelected()) {
        FromTo fromTo = adjustSelection(cm);
        Pos from = fromTo.from();
        Pos to = fromTo.to();
        Unified unified = (Unified) host;
        UnifiedChunkManager manager = unified.getChunkManager();
        LineRegionInfo fromInfo = unified.getLineRegionInfoFromCmLine(from.line());
        LineRegionInfo toInfo = unified.getLineRegionInfoFromCmLine(to.line());
        DisplaySide side = toInfo.getSide();
        // start line to be on the same side as the end line.
        if ((fromInfo.type == RegionType.INSERT || fromInfo.type == RegionType.COMMON) && toInfo.type == RegionType.DELETE) {
            LineOnOtherInfo infoOnSideA = manager.lineMapper.lineOnOther(DisplaySide.B, fromInfo.line);
            int startLineOnSideA = infoOnSideA.getLine();
            if (infoOnSideA.isAligned()) {
                from.line(startLineOnSideA);
            } else {
                from.line(startLineOnSideA + 1);
            }
            from.ch(0);
            to.line(toInfo.line);
        } else if (fromInfo.type == RegionType.DELETE && toInfo.type == RegionType.INSERT) {
            LineOnOtherInfo infoOnSideB = manager.lineMapper.lineOnOther(DisplaySide.A, fromInfo.line);
            int startLineOnSideB = infoOnSideB.getLine();
            if (infoOnSideB.isAligned()) {
                from.line(startLineOnSideB);
            } else {
                from.line(startLineOnSideB + 1);
            }
            from.ch(0);
            to.line(toInfo.line);
        } else if (fromInfo.type == RegionType.DELETE && toInfo.type == RegionType.COMMON) {
            int toLineOnSideA = manager.lineMapper.lineOnOther(DisplaySide.B, toInfo.line).getLine();
            from.line(fromInfo.line);
            // Force the end line to be on the same side as the start line.
            to.line(toLineOnSideA);
            side = DisplaySide.A;
        } else {
            // Common case
            from.line(fromInfo.line);
            to.line(toInfo.line);
        }
        addDraftBox(side, CommentInfo.create(getPath(), getStoredSideFromDisplaySide(side), to.line() + 1, CommentRange.create(fromTo), false)).setEdit(true);
        cm.setCursor(Pos.create(host.getCmLine(to.line(), side), to.ch()));
        cm.setSelection(cm.getCursor());
    } else {
        int cmLine = cm.getLineNumber(cm.extras().activeLine());
        LineRegionInfo info = ((Unified) host).getLineRegionInfoFromCmLine(cmLine);
        insertNewDraft(info.getSide(), cmLine + 1);
    }
}
Also used : Pos(net.codemirror.lib.Pos) FromTo(net.codemirror.lib.TextMarker.FromTo) LineOnOtherInfo(com.google.gerrit.client.diff.LineMapper.LineOnOtherInfo) LineRegionInfo(com.google.gerrit.client.diff.UnifiedChunkManager.LineRegionInfo)

Example 4 with Pos

use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.

the class CommentRange method create.

public static CommentRange create(FromTo fromTo) {
    if (fromTo == null) {
        return null;
    }
    Pos from = fromTo.from();
    Pos to = fromTo.to();
    return create(from.line() + 1, from.ch(), to.line() + 1, to.ch());
}
Also used : Pos(net.codemirror.lib.Pos)

Example 5 with Pos

use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.

the class EditIterator method advance.

Pos advance(int numOfChar) {
    numOfChar = adjustForNegativeDelta(numOfChar);
    while (line < lines.length()) {
        // + 1 for LF
        int len = lines.get(line).length() - pos + 1;
        if (numOfChar < len) {
            Pos at = Pos.create(startLine + line, numOfChar + pos);
            pos += numOfChar;
            return at;
        }
        numOfChar -= len;
        line++;
        pos = 0;
        if (numOfChar == 0) {
            return Pos.create(startLine + line, 0);
        }
    }
    throw new IllegalStateException("EditIterator index out of bounds");
}
Also used : Pos(net.codemirror.lib.Pos)

Aggregations

Pos (net.codemirror.lib.Pos)7 Span (com.google.gerrit.client.diff.DiffInfo.Span)2 Configuration (net.codemirror.lib.Configuration)2 FromTo (net.codemirror.lib.TextMarker.FromTo)2 LineOnOtherInfo (com.google.gerrit.client.diff.LineMapper.LineOnOtherInfo)1 LineRegionInfo (com.google.gerrit.client.diff.UnifiedChunkManager.LineRegionInfo)1