Results 1 to 4 of 4
  1. #1
    kjiu is offline Member
    Join Date
    Oct 2009
    Posts
    8
    Rep Power
    0

    Default CodeEditor = problem

    Hello,

    I have a problem :cool: which is this:

    Java Code:
    private void setupEditor() 
        { 
            QFont font = new QFont(); 
            font.setFamily("Courier"); 
            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)
    Why the CodeEditor doesn't display ? Highlighter display and is okej

    Please help me :)

  2. #2
    r035198x is offline Senior Member
    Join Date
    Aug 2009
    Posts
    2,388
    Rep Power
    7

    Default

    Don't know the difference between Highlighter and CodeEditor so can't say why they behave differently. Did you write both classes yourself?

  3. #3
    kjiu is offline Member
    Join Date
    Oct 2009
    Posts
    8
    Rep Power
    0

    Default

    no, this is :

    Code Editor Example // QT Jambi

  4. #4
    kjiu is offline Member
    Join Date
    Oct 2009
    Posts
    8
    Rep Power
    0

    Default

    this is my CodeEditor:

    Java Code:
    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

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •