Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /****************************************************************************
- **
- ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
- ** All rights reserved.
- ** Contact: Nokia Corporation (qt-info@nokia.com)
- **
- ** This file is part of the examples of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:BSD$
- ** You may use this file under the terms of the BSD license as follows:
- **
- ** "Redistribution and use in source and binary forms, with or without
- ** modification, are permitted provided that the following conditions are
- ** met:
- ** * Redistributions of source code must retain the above copyright
- ** notice, this list of conditions and the following disclaimer.
- ** * Redistributions in binary form must reproduce the above copyright
- ** notice, this list of conditions and the following disclaimer in
- ** the documentation and/or other materials provided with the
- ** distribution.
- ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
- ** the names of its contributors may be used to endorse or promote
- ** products derived from this software without specific prior written
- ** permission.
- **
- ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
- #include <QtGui>
- #include "logEditor.h"
- logEditor::logEditor(QWidget *parent) : QPlainTextEdit(parent)
- {
- lineNumberArea = new LineNumberArea(this);
- connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
- connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
- connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine()));
- updateLineNumberAreaWidth(0);
- highlightCurrentLine();
- isUpdating=false;
- }
- void logEditor::setIsUpdating(bool updating)
- {
- isUpdating=updating;
- if(updating)
- { qDebug()<<"disco";
- disconnect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
- disconnect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
- disconnect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine()));
- } else { qDebug()<<"coco";
- connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
- connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
- connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine()));
- }
- }
- bool logEditor::event(QEvent *event)
- {
- if (event->type() == QEvent::ToolTip)
- {
- /* QHelpEvent* helpEvent = static_cast <QHelpEvent*>(event);
- QPoint adjustedPos=helpEvent->pos();
- adjustedPos.setX(adjustedPos.x()-lineNumberAreaWidth());
- QTextCursor cursor = cursorForPosition(adjustedPos);
- cursor.select(QTextCursor::WordUnderCursor);
- QToolTip::showText(helpEvent->globalPos(), cursor.selectedText());*/
- processTooltip(static_cast <QHelpEvent*>(event)->pos(),static_cast <QHelpEvent*>(event)->globalPos());
- return true;
- }
- return QPlainTextEdit::event(event);
- }
- int logEditor::lineNumberAreaWidth()
- {
- int digits = 1;
- int max = qMax(1, blockCount());
- while (max >= 10) {
- max /= 10;
- ++digits;
- }
- int space = 3 + fontMetrics().width(QLatin1Char('9')) * digits;
- return space;
- }
- void logEditor::processTooltip(QPoint pos, QPoint globalpos)
- {
- QPoint adjustedPos=pos;
- // adjustedPos.setX(adjustedPos.x()-lineNumberAreaWidth());
- QTextCursor cursor = cursorForPosition(adjustedPos);
- cursor.select(QTextCursor::WordUnderCursor);
- QToolTip::showText(globalpos, cursor.selectedText());
- }
- void logEditor::updateLineNumberAreaWidth(int /* newBlockCount */)
- {
- qDebug()<<"updateLineNumberAreaWidth";
- setViewportMargins(lineNumberAreaWidth(), 0, 0, 0);
- }
- void logEditor::updateLineNumberArea(const QRect &rect, int dy)
- {
- qDebug()<<"updateLineNumberArea";
- if (dy)
- lineNumberArea->scroll(0, dy);
- else
- lineNumberArea->update(0, rect.y(), lineNumberArea->width(), rect.height());
- if (rect.contains(viewport()->rect()))
- updateLineNumberAreaWidth(0);
- }
- void logEditor::resizeEvent(QResizeEvent *e)
- {
- QPlainTextEdit::resizeEvent(e);
- QRect cr = contentsRect();
- lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));
- }
- void logEditor::highlightCurrentLine()
- {
- qDebug()<<"highlightCurrentLine";
- QList<QTextEdit::ExtraSelection> extraSelections;
- if (!isReadOnly()) {
- QTextEdit::ExtraSelection selection;
- QColor lineColor = QColor(Qt::yellow).lighter(160);
- selection.format.setBackground(lineColor);
- selection.format.setProperty(QTextFormat::FullWidthSelection, true);
- selection.cursor = textCursor();
- selection.cursor.clearSelection();
- extraSelections.append(selection);
- }
- setExtraSelections(extraSelections);
- }
- void logEditor::lineNumberAreaPaintEvent(QPaintEvent *event)
- {
- if(isUpdating) {qDebug() << "skipped da fuck"; return; }
- qDebug() << "Painting da fuck";
- QPainter painter(lineNumberArea);
- painter.fillRect(event->rect(), Qt::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()) {
- QString number = QString::number(blockNumber + 1);
- painter.setPen(Qt::black);
- painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(),
- Qt::AlignCenter, number);
- }
- block = block.next();
- top = bottom;
- bottom = top + (int) blockBoundingRect(block).height();
- ++blockNumber;
- }
- }
- void logEditor::dropEvent(QDropEvent *de)
- {
- // Unpack dropped data and handle it the way you want
- const QMimeData* mimeData = de->mimeData();
- // check for our needed mime type, here a file or a list of files
- if (mimeData->hasUrls())
- {
- QList<QUrl> urlList = mimeData->urls();
- // extract the local paths of the files
- for (int i = 0; i < urlList.size(); ++i)
- {
- QFile file(urlList.at(i).toLocalFile());
- if (!file.open (QIODevice::ReadOnly))
- return;
- QTextStream stream ( &file );
- //QString line;
- setIsUpdating();
- while( !stream.atEnd() ) {
- //line = stream.readLine();
- this->appendPlainText(stream.readLine());
- }
- file.close(); // when your done.
- setIsUpdating(false);
- }
- }
- /* QFont fnt = this->font() ;
- fnt.setPointSize(24) ;
- QTextDocument* doc = this->document() ;
- QTextCharFormat test_fmt ;
- QPen pen_out(Qt::DashLine) ;
- QBrush bred (Qt::red);
- test_fmt.setFontUnderline(true);
- test_fmt.setUnderlineStyle(QTextCharFormat::WaveUnderline);
- test_fmt.setTextOutline(pen_out) ;
- test_fmt.setForeground(bred);
- test_fmt.setFont(fnt);
- QTextCursor curseur(doc) ;
- curseur.movePosition(QTextCursor::Start) ;
- curseur.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor) ;
- curseur.setCharFormat(test_fmt) ;
- //fnt.setPointSize(12);
- // curseur.movePosition(QTextCursor::Start) ;
- qDebug("Contents: %s", de->mimeData()->text().toLatin1().data());*/
- }
- void logEditor::dragMoveEvent(QDragMoveEvent *de)
- {
- // The event needs to be accepted here
- de->accept();
- }
- void logEditor::dragEnterEvent(QDragEnterEvent *event)
- {
- // Set the drop action to be the proposed action.
- event->acceptProposedAction();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement