1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
/****************************************************************************
**
** Copyright (C) 2006-2009 fullmetalcoder <fullmetalcoder@hotmail.fr>
**
** This file is part of the Edyuk project <http://edyuk.org>
**
** This file may be used under the terms of the GNU General Public License
** version 3 as published by the Free Software Foundation and appearing in the
** file GPL.txt included in the packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#include "qlinechangepanel.h"
/*!
\file qlinechangepanel.cpp
\brief Implementation of the QLineChangePanel class.
*/
#include "qeditor.h"
#include "qdocument.h"
#include "qdocumentline.h"
/*!
\ingroup widgets
@{
*/
/*!
\class QLineMarkPanel
\brief A specific panel in charge of drawing line numbers of an editor
\see QEditorInterface
*/
QCE_AUTO_REGISTER(QLineChangePanel)
/*!
\brief Constructor
*/
QLineChangePanel::QLineChangePanel(QWidget *p)
: QPanel(p)
{
setFixedWidth(4);
setObjectName("lineChangePanel");
}
/*!
\brief Empty destructor
*/
QLineChangePanel::~QLineChangePanel()
{
}
/*!
*/
QString QLineChangePanel::type() const
{
return "Line changes";
}
/*!
\internal
*/
bool QLineChangePanel::paint(QPainter *p, QEditor *e)
{
if ( !e || !e->document() )
return true;
int n, posY,
as = QFontMetrics(e->document()->font()).ascent(),
ls = e->document()->getLineSpacing(),
pageBottom = e->viewport()->height(),
contentsY = e->verticalOffset();
QString txt;
QDocument *d = e->document();
n = d->lineNumber(contentsY);
posY = 2 + d->y(n) - contentsY;
for ( ; ; ++n )
{
//qDebug("n = %i; pos = %i", n, posY);
QDocumentLine line = d->line(n);
if ( line.isNull() || ((posY - as) > pageBottom) )
break;
if ( line.isHidden() )
continue;
int span = line.lineSpan();
if ( d->isLineModified(line) )
{
p->fillRect(1, posY, 2, ls * span, QColor(255, 216, 0)); // yellow
} else if ( d->hasLineEverBeenModified(line) ) {
p->fillRect(1, posY, 2, ls * span, QColor(70, 191, 0)); // green
}
posY += ls * span;
}
return true;
}
/*! @} */
|