Пример #1
0
  protected void paintLineHighlight(Graphics gfx, int line, int y) {
    int height = fm.getHeight();
    y += fm.getLeading() + fm.getMaxDescent();

    int selectionStart = textArea.getSelectionStart();
    int selectionEnd = textArea.getSelectionStop();

    if (selectionStart == selectionEnd) {
      if (lineHighlight) {
        gfx.setColor(lineHighlightColor);
        gfx.fillRect(0, y, getWidth(), height);
      }
    } else {
      gfx.setColor(selectionColor);

      int selectionStartLine = textArea.getSelectionStartLine();
      int selectionEndLine = textArea.getSelectionStopLine();
      int lineStart = textArea.getLineStartOffset(line);

      int x1, x2;
      if (textArea.isSelectionRectangular()) {
        int lineLen = textArea.getLineLength(line);
        x1 =
            textArea._offsetToX(
                line,
                Math.min(
                    lineLen, selectionStart - textArea.getLineStartOffset(selectionStartLine)));
        x2 =
            textArea._offsetToX(
                line,
                Math.min(lineLen, selectionEnd - textArea.getLineStartOffset(selectionEndLine)));
        if (x1 == x2) x2++;
      } else if (selectionStartLine == selectionEndLine) {
        x1 = textArea._offsetToX(line, selectionStart - lineStart);
        x2 = textArea._offsetToX(line, selectionEnd - lineStart);
      } else if (line == selectionStartLine) {
        x1 = textArea._offsetToX(line, selectionStart - lineStart);
        x2 = getWidth();
      } else if (line == selectionEndLine) {
        // x1 = 0;
        // hack from stendahl to avoid doing weird side selection thing
        x1 = textArea._offsetToX(line, 0);
        // attempt at getting the gutter too, but doesn't seem to work
        // x1 = textArea._offsetToX(line, -textArea.getHorizontalOffset());
        x2 = textArea._offsetToX(line, selectionEnd - lineStart);
      } else {
        // x1 = 0;
        // hack from stendahl to avoid doing weird side selection thing
        x1 = textArea._offsetToX(line, 0);
        // attempt at getting the gutter too, but doesn't seem to work
        // x1 = textArea._offsetToX(line, -textArea.getHorizontalOffset());
        x2 = getWidth();
      }

      // "inlined" min/max()
      gfx.fillRect(x1 > x2 ? x2 : x1, y, x1 > x2 ? (x1 - x2) : (x2 - x1), height);
    }
  }
Пример #2
0
  protected void paintHighlight(Graphics gfx, int line, int y) {
    if (line >= textArea.getSelectionStartLine() && line <= textArea.getSelectionEndLine())
      paintLineHighlight(gfx, line, y);

    if (highlights != null) highlights.paintHighlight(gfx, line, y);

    if (bracketHighlight && line == textArea.getBracketLine()) paintBracketHighlight(gfx, line, y);

    if (line == textArea.getCaretLine()) paintCaret(gfx, line, y);
  }
Пример #3
0
 private int getLastRelevantSelectionLine() {
   int startline = editor.getSelectionStartLine();
   int endline = editor.getSelectionEndLine();
   int lastLineStart = editor.getLineStartOffset(endline);
   if (lastLineStart == editor.getSelectionEnd() && endline > startline) {
     // ignore the last selection line (of a multiline selection) if there isn't something selected
     endline--;
   }
   return endline;
 }
Пример #4
0
  private void doComment(String commentChar, boolean addComment) {
    int startline = editor.getSelectionStartLine();
    int endline = getLastRelevantSelectionLine();

    if (commentChar == null) commentChar = "--";

    int cLength = commentChar.length();

    int pos = editor.getSelectionEnd(endline) - editor.getLineStartOffset(endline);
    SyntaxDocument document = editor.getDocument();

    if (addComment && commentChar.equals("--")) {
      // workaround for an Oracle bug, where a comment like
      //
      // --commit;
      //
      // would not be treated correctly when sent to the database.
      // Apparently Oracle requires a blank after the two dashes.
      //
      // Adding the blank shouldn't do any harm for other databases
      commentChar = "-- ";
    }

    boolean ansiComment = "--".equals(commentChar);

    try {
      document.beginCompoundEdit();
      for (int line = startline; line <= endline; line++) {
        String text = editor.getLineText(line);
        int lineStart = editor.getLineStartOffset(line);
        if (addComment) {
          document.insertString(lineStart, commentChar, null);
        } else {
          pos = text.indexOf(commentChar);
          if (pos > -1) {
            int commentLength = cLength;
            // remove the blank following the comment character to cater
            // for the blank that was inserted by commenting the lines (see above)
            if (ansiComment
                && text.length() > pos + cLength
                && Character.isWhitespace(text.charAt(pos + cLength))) {
              commentLength++;
            }
            document.remove(lineStart, pos + commentLength);
          }
        }
      }
    } catch (BadLocationException e) {
      LogMgr.logError("TextManipulator.doComment()", "Error when processing comment", e);
    } finally {
      document.endCompoundEdit();
    }
  }
Пример #5
0
  protected boolean isSelectionCommented(String commentChar) {
    int startline = editor.getSelectionStartLine();
    int endline = getLastRelevantSelectionLine();
    if (commentChar == null) commentChar = "--";

    for (int line = startline; line <= endline; line++) {
      String text = editor.getLineText(line);
      if (StringUtil.isBlank(text)) return false;
      if (!text.startsWith(commentChar)) return false;
    }
    return true;
  }
Пример #6
0
  protected void paintLineHighlight(Graphics gfx, int line, int y) {
    int height = fm.getHeight();
    y += fm.getLeading() + fm.getMaxDescent();

    int selectionStart = textArea.getSelectionStart();
    int selectionEnd = textArea.getSelectionEnd();

    if (selectionStart == selectionEnd) {
      if (lineHighlight) {
        gfx.setColor(lineHighlightColor);
        gfx.fillRect(0, y, getWidth(), height);
      }
    } else {
      gfx.setColor(selectionColor);

      int selectionStartLine = textArea.getSelectionStartLine();
      int selectionEndLine = textArea.getSelectionEndLine();
      int lineStart = textArea.getLineStartOffset(line);

      int x1, x2;
      if (textArea.isSelectionRectangular()) {
        int lineLen = textArea.getLineLength(line);
        x1 =
            textArea._offsetToX(
                line,
                Math.min(
                    lineLen, selectionStart - textArea.getLineStartOffset(selectionStartLine)));
        x2 =
            textArea._offsetToX(
                line,
                Math.min(lineLen, selectionEnd - textArea.getLineStartOffset(selectionEndLine)));
        if (x1 == x2) x2++;
      } else if (selectionStartLine == selectionEndLine) {
        x1 = textArea._offsetToX(line, selectionStart - lineStart);
        x2 = textArea._offsetToX(line, selectionEnd - lineStart);
      } else if (line == selectionStartLine) {
        x1 = textArea._offsetToX(line, selectionStart - lineStart);
        x2 = getWidth();
      } else if (line == selectionEndLine) {
        x1 = 0;
        x2 = textArea._offsetToX(line, selectionEnd - lineStart);
      } else {
        x1 = 0;
        x2 = getWidth();
      }

      // "inlined" min/max()
      gfx.fillRect(x1 > x2 ? x2 : x1, y, x1 > x2 ? (x1 - x2) : (x2 - x1), height);
    }
  }