1
/***************************************************************************
2
* Copyright (C) 2005 by Robert Gruber *
3
* rgruber@users.sourceforge.net *
5
* This file has been taken from cervisia an adapted to fit my needs: *
6
* Copyright (C) 1999-2002 Bernd Gehrmann <bernd@mail.berlios.de> *
7
* Copyright (c) 2003-2005 André Wöbbeking <Woebbeking@web.de> *
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
14
***************************************************************************/
16
#include "annotateview.h"
19
#include <qdatetime.h>
21
#include <kglobalsettings.h>
26
#include "annotatepage.h"
28
class AnnotateViewItem : public QListViewItem
30
friend class AnnotateView;
33
enum { LineNumberColumn, AuthorColumn, DateColumn,ContentColumn };
35
AnnotateViewItem(AnnotateView *parent, QString rev, QString author,
36
QDateTime date, QString content, QString comment,
37
bool odd, int linenumber);
39
virtual int compare(QListViewItem *item, int col, bool ascending) const;
40
virtual int width(const QFontMetrics &, const QListView *, int col) const;
41
virtual QString text(int col) const;
42
virtual void paintCell(QPainter *, const QColorGroup &, int, int, int);
53
static const int BORDER;
57
const int AnnotateViewItem::BORDER = 4;
60
AnnotateViewItem::AnnotateViewItem(AnnotateView *parent, QString rev,
61
QString author, QDateTime date, QString content, QString comment,
62
bool odd, int linenumber)
63
: QListViewItem(parent)
70
, m_lineNumber(linenumber)
74
int AnnotateViewItem::compare(QListViewItem *item, int, bool) const
76
int linenum1 = m_lineNumber;
77
int linenum2 = static_cast<AnnotateViewItem*>(item)->m_lineNumber;
79
return (linenum2 > linenum1)? -1 : (linenum2 < linenum1)? 1 : 0;
83
QString AnnotateViewItem::text(int col) const
87
case LineNumberColumn:
88
return QString::number(m_lineNumber);
90
return (m_revision + QChar(' ') + m_author);
92
return KGlobal::locale()->formatDate(m_logDate.date(), true);
103
void AnnotateViewItem::paintCell(QPainter *p, const QColorGroup &, int col, int width, int align)
105
QColor backgroundColor;
109
case LineNumberColumn:
110
backgroundColor = KGlobalSettings::highlightColor();
111
p->setPen(KGlobalSettings::highlightedTextColor());
114
backgroundColor = m_odd ? KGlobalSettings::baseColor()
115
: KGlobalSettings::alternateBackgroundColor();
116
p->setPen(KGlobalSettings::textColor());
120
p->fillRect(0, 0, width, height(), backgroundColor);
122
QString str = text(col);
126
if (align & (AlignTop || AlignBottom) == 0)
127
align |= AlignVCenter;
129
p->drawText(BORDER, 0, width - 2*BORDER, height(), align, str);
133
int AnnotateViewItem::width(const QFontMetrics &fm, const QListView *, int col) const
135
return fm.width(text(col)) + 2*BORDER;
139
/******************************************************************************/
140
/*****************Definition of class AnnotateView ****************************/
141
/******************************************************************************/
143
AnnotateView::AnnotateView(AnnotatePage *parent, const char *name)
144
: KListView(parent, name), QToolTip( viewport() ),
147
setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
148
setAllColumnsShowFocus(true);
149
setShowToolTips(false);
152
addColumn(QString::null);
153
addColumn(QString::null);
154
addColumn(QString::null);
155
addColumn(QString::null);
157
setSorting(AnnotateViewItem::LineNumberColumn);
158
setColumnAlignment(AnnotateViewItem::LineNumberColumn, Qt::AlignRight);
160
connect( this, SIGNAL(executed(QListViewItem*)),
161
this, SLOT(itemClicked(QListViewItem*)) );
165
void AnnotateView::addLine(QString rev, QString author, QDateTime date,
166
QString content, QString comment, bool odd)
168
new AnnotateViewItem(this, rev, author, date, content, comment,
169
odd, childCount()+1);
173
QSize AnnotateView::sizeHint() const
175
QFontMetrics fm(fontMetrics());
176
return QSize(100 * fm.width("0"), 20 * fm.lineSpacing());
180
void AnnotateView::maybeTip( const QPoint & p )
182
AnnotateViewItem * item = dynamic_cast<AnnotateViewItem*>( itemAt( p ) );
186
const int column(header()->sectionAt(p.x()));
187
if (column != AnnotateViewItem::AuthorColumn &&
188
column != AnnotateViewItem::DateColumn) {
192
QRect r = itemRect( item );
193
//get the dimension of the author + the date column
194
QRect headerRect = header()->sectionRect(AnnotateViewItem::AuthorColumn);
195
headerRect = headerRect.unite(header()->sectionRect(AnnotateViewItem::DateColumn));
197
r.setLeft(headerRect.left());
198
r.setWidth(headerRect.width());
202
tip( r, "<nobr><b>"+item->text(AnnotateViewItem::AuthorColumn)+"</b></nobr><br>"
203
"<nobr>"+item->text(AnnotateViewItem::DateColumn)+"</nobr>"
204
"<pre>"+item->m_comment+"</pre>");
208
void AnnotateView::itemClicked(QListViewItem *item)
210
kdDebug(9006) << "itemClicked()" << endl;
212
AnnotateViewItem * line = dynamic_cast<AnnotateViewItem*>(item);
214
kdDebug(9006) << "requesting annotate for revision " << line->m_revision << endl;
215
emit m_page->requestAnnotate(line->m_revision);
217
kdDebug(9006) << "This is not an AnnotateViewItem" << endl;
221
#include "annotateview.moc"