Hello,
I have a problem which is this:
private void setupEditor()
{
QFont font = new QFont();
font.setFamily("Lucida Console");
font.setFixedPitch(true);
font.setPointSize(10);
textEdit = new QTextEdit();
textEdit.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap);
textEdit.setFont(font);
new Highlighter(textEdit.document());
new CodeEditor(textEdit.document());
}
public class CodeEditor extends QPlainTextEdit
{
public CodeEditor(QTextDocument textDocument)
// public CodeEditor()
{
lineNumberArea = new LineNumberArea(this);
blockCountChanged.connect(this, "updateLineNumberAreaWidth(Integer)");
updateRequest.connect(this, "updateLineNumberArea(QRect,Integer)");
cursorPositionChanged.connect(this, "highlightCurrentLine()");
updateLineNumberAreaWidth(0);
highlightCurrentLine();
}
public int lineNumberAreaWidth()
{
int digits = 1;
int max = Math.max(1, blockCount());
while (max >= 10) {
max /= 10;
++digits;
}
int space = 3 + fontMetrics().width('9') * digits;
return space;
}
public void updateLineNumberAreaWidth(Integer newBlockCount)
{
setViewportMargins(lineNumberAreaWidth(), 0, 0, 0);
}
public void updateLineNumberArea(QRect rect, Integer dy)
{
if (dy > 0)
lineNumberArea.scroll(0, dy);
else
lineNumberArea.update(0, rect.y(), lineNumberArea.width(),
rect.height());
if (rect.contains(viewport().rect()))
updateLineNumberAreaWidth(0);
}
protected void resizeEvent(QResizeEvent e)
{
super.resizeEvent(e);
QRect cr = contentsRect();
lineNumberArea.setGeometry(new QRect(cr.left(), cr.top(),
lineNumberAreaWidth(), cr.height()));
}
private void highlightCurrentLine()
{
List<QTextEdit_ExtraSelection> extraSelections =
new Vector<QTextEdit_ExtraSelection>();
if (!isReadOnly()) {
QTextEdit_ExtraSelection selection =
new QTextEdit_ExtraSelection();
QColor lineColor = QColor.yellow.lighter(160);
QTextCharFormat format = selection.format();
format.setBackground(new QBrush(lineColor));
format.setProperty(QTextFormat.Property.FullWidthSelection.value(), new Boolean(true));
selection.setFormat(format);
QTextCursor cursor = textCursor();
cursor.clearSelection();
selection.setCursor(cursor);
extraSelections.add(selection);
}
setExtraSelections(extraSelections);
}
public void lineNumberAreaPaintEvent(QPaintEvent event)
{
QPainter painter = new QPainter(lineNumberArea);
painter.setPen(new QPen(QColor.black));
painter.fillRect(event.rect(), new QBrush(QColor.lightGray));
QTextBlock block = firstVisibleBlock();
int blockNumber = block.blockNumber();
int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top();
int bottom = top + (int) blockBoundingRect(block).height();
while (block.isValid() && top <= event.rect().bottom()) {
if (block.isVisible() && bottom >= event.rect().top()) {
String number = String.valueOf(blockNumber + 1);
painter.drawText(0, top, lineNumberArea.width(), fontMetrics().height(),
Qt.AlignmentFlag.AlignRight.value(), number);
}
block = block.next();
top = bottom;
bottom = top + (int) blockBoundingRect(block).height();
++blockNumber;
}
}
private class LineNumberArea extends QWidget
{
public LineNumberArea(CodeEditor editor)
{
codeEditor = editor;
setParent(codeEditor);
}
public QSize sizeHint()
{
return new QSize(codeEditor.lineNumberAreaWidth(), 0);
}
protected void paintEvent(QPaintEvent event)
{
codeEditor.lineNumberAreaPaintEvent(event);
}
private CodeEditor codeEditor;
}
private LineNumberArea lineNumberArea;
}
and the problem is there:
new CodeEditor(textEdit.document());
it does't appear at TextEdit
Kjiu