• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

kompare

  • sources
  • kde-4.14
  • kdesdk
  • kompare
  • komparepart
komparelistview.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  komparelistview.h
3  -----------------
4  begin : Sun Mar 4 2001
5  Copyright 2001-2009 Otto Bruggeman <bruggie@gmail.com>
6  Copyright 2001-2003 John Firebaugh <jfirebaugh@kde.org>
7  Copyright 2004 Jeff Snyder <jeff@caffeinated.me.uk>
8  Copyright 2007-2012 Kevin Kofler <kevin.kofler@chello.at>
9 ****************************************************************************/
10 
11 /***************************************************************************
12 **
13 ** This program is free software; you can redistribute it and/or modify
14 ** it under the terms of the GNU General Public License as published by
15 ** the Free Software Foundation; either version 2 of the License, or
16 ** (at your option) any later version.
17 **
18 ***************************************************************************/
19 
20 #include "komparelistview.h"
21 
22 #include <QtGui/QStyle>
23 #include <QtGui/QPainter>
24 #include <QtCore/QRegExp>
25 #include <QtCore/QTimer>
26 #include <QtGui/QResizeEvent>
27 #include <QtGui/QMouseEvent>
28 #include <QtGui/QWheelEvent>
29 #include <QtGui/QScrollBar>
30 
31 #include <kdebug.h>
32 #include <kglobal.h>
33 #include <kglobalsettings.h>
34 
35 #include "diffmodel.h"
36 #include "diffhunk.h"
37 #include "difference.h"
38 #include "viewsettings.h"
39 #include "komparemodellist.h"
40 #include "komparesplitter.h"
41 
42 #define COL_LINE_NO 0
43 #define COL_MAIN 1
44 
45 #define BLANK_LINE_HEIGHT 3
46 #define HUNK_LINE_HEIGHT 5
47 
48 #define ITEM_MARGIN 3
49 
50 using namespace Diff2;
51 
52 KompareListViewFrame::KompareListViewFrame( bool isSource,
53  ViewSettings* settings,
54  KompareSplitter* parent,
55  const char* name ):
56  QFrame ( parent ),
57  m_view ( isSource, settings, this, name ),
58  m_label ( isSource?"Source":"Dest", this ),
59  m_layout ( this )
60 {
61  setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored) );
62  m_label.setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) );
63  QFrame *bottomLine = new QFrame(this);
64  bottomLine->setFrameShape(QFrame::HLine);
65  bottomLine->setFrameShadow ( QFrame::Plain );
66  bottomLine->setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) );
67  bottomLine->setFixedHeight(1);
68  m_label.setMargin(3);
69  m_layout.setSpacing(0);
70  m_layout.setMargin(0);
71  m_layout.addWidget(&m_label);
72  m_layout.addWidget(bottomLine);
73  m_layout.addWidget(&m_view);
74 
75  connect( &m_view, SIGNAL(differenceClicked(const Diff2::Difference*)),
76  parent, SLOT(slotDifferenceClicked(const Diff2::Difference*)) );
77 
78  connect( parent, SIGNAL(scrollViewsToId(int)), &m_view, SLOT(scrollToId(int)) );
79  connect( parent, SIGNAL(setXOffset(int)), &m_view, SLOT(setXOffset(int)) );
80  connect( &m_view, SIGNAL(resized()), parent, SLOT(slotUpdateScrollBars()) );
81 }
82 
83 void KompareListViewFrame::slotSetModel( const DiffModel* model )
84 {
85  if( model )
86  {
87  if( view()->isSource() ) {
88  if( !model->sourceRevision().isEmpty() )
89  m_label.setText( model->sourceFile() + " (" + model->sourceRevision() + ')' );
90  else
91  m_label.setText( model->sourceFile() );
92  } else {
93  if( !model->destinationRevision().isEmpty() )
94  m_label.setText( model->destinationFile() + " (" + model->destinationRevision() + ')' );
95  else
96  m_label.setText( model->destinationFile() );
97  }
98  } else {
99  m_label.setText( QString::null ); //krazy:exclude=nullstrassign for old broken gcc
100  }
101 }
102 
103 KompareListView::KompareListView( bool isSource,
104  ViewSettings* settings,
105  QWidget* parent, const char* name ) :
106  QTreeWidget( parent ),
107  m_isSource( isSource ),
108  m_settings( settings ),
109  m_scrollId( -1 ),
110  m_selectedModel( 0 ),
111  m_selectedDifference( 0 )
112 {
113  setObjectName( name );
114  setItemDelegate( new KompareListViewItemDelegate( this ) );
115  setHeaderHidden( true );
116  setColumnCount( 3 ); // Line Number, Main, Blank
117  setAllColumnsShowFocus( true );
118  setRootIsDecorated( false );
119  setIndentation( 0 );
120  setFrameStyle( QFrame::NoFrame );
121  setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
122  setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
123  setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
124  setFocusPolicy( Qt::NoFocus );
125  setFont( m_settings->m_font );
126  setFocusProxy( parent->parentWidget() );
127 }
128 
129 KompareListView::~KompareListView()
130 {
131  m_settings = 0;
132  m_selectedModel = 0;
133  m_selectedDifference = 0;
134 }
135 
136 KompareListViewItem* KompareListView::itemAtIndex( int i )
137 {
138  return m_items[ i ];
139 }
140 
141 int KompareListView::firstVisibleDifference()
142 {
143  QTreeWidgetItem* item = itemAt( QPoint( 0, 0 ) );
144 
145  if( item == 0 )
146  {
147  kDebug(8104) << "no item at viewport coordinates (0,0)" << endl;
148  }
149 
150  while( item ) {
151  KompareListViewLineItem* lineItem = dynamic_cast<KompareListViewLineItem*>(item);
152  if( lineItem && lineItem->diffItemParent()->difference()->type() != Difference::Unchanged )
153  break;
154  item = itemBelow(item);
155  }
156 
157  if( item )
158  return m_items.indexOf( ((KompareListViewLineItem*)item)->diffItemParent() );
159 
160  return -1;
161 }
162 
163 int KompareListView::lastVisibleDifference()
164 {
165  QTreeWidgetItem* item = itemAt( QPoint( 0, visibleHeight() - 1 ) );
166 
167  if( item == 0 )
168  {
169  kDebug(8104) << "no item at viewport coordinates (0," << visibleHeight() - 1 << ")" << endl;
170  // find last item
171  item = itemAt( QPoint( 0, 0 ) );
172  if( item ) {
173  QTreeWidgetItem* nextItem = item;
174  do {
175  item = nextItem;
176  nextItem = itemBelow( item );
177  } while( nextItem );
178  }
179  }
180 
181  while( item ) {
182  KompareListViewLineItem* lineItem = dynamic_cast<KompareListViewLineItem*>(item);
183  if( lineItem && lineItem->diffItemParent()->difference()->type() != Difference::Unchanged )
184  break;
185  item = itemAbove(item);
186  }
187 
188  if( item )
189  return m_items.indexOf( ((KompareListViewLineItem*)item)->diffItemParent() );
190 
191  return -1;
192 }
193 
194 QRect KompareListView::totalVisualItemRect( QTreeWidgetItem* item )
195 {
196  QRect total = visualItemRect( item );
197  int n = item->childCount();
198  for( int i=0; i<n; i++ ) {
199  QTreeWidgetItem* child = item->child( i );
200  if( !child->isHidden() )
201  total = total.united( totalVisualItemRect( child ) );
202  }
203  return total;
204 }
205 
206 QRect KompareListView::itemRect( int i )
207 {
208  QTreeWidgetItem* item = itemAtIndex( i );
209  return totalVisualItemRect( item );
210 }
211 
212 int KompareListView::minScrollId()
213 {
214  return visibleHeight() / 2;
215 }
216 
217 int KompareListView::maxScrollId()
218 {
219  int n = topLevelItemCount();
220  if(!n) return 0;
221  KompareListViewItem* item = (KompareListViewItem*)topLevelItem( n-1 );
222  int maxId = item->scrollId() + item->maxHeight() - minScrollId();
223  kDebug(8104) << "Max ID = " << maxId << endl;
224  return maxId;
225 }
226 
227 int KompareListView::contentsHeight()
228 {
229  return verticalScrollBar()->maximum() + viewport()->height() - style()->pixelMetric( QStyle::PM_ScrollBarExtent );
230 }
231 
232 int KompareListView::contentsWidth()
233 {
234  return ( columnWidth(COL_LINE_NO) + columnWidth(COL_MAIN) );
235 }
236 
237 int KompareListView::visibleHeight()
238 {
239  return viewport()->height();
240 }
241 
242 int KompareListView::visibleWidth()
243 {
244  return viewport()->width();
245 }
246 
247 int KompareListView::contentsX()
248 {
249  return horizontalOffset();
250 }
251 
252 int KompareListView::contentsY()
253 {
254  return verticalOffset();
255 }
256 
257 int KompareListView::nextPaintOffset() const
258 {
259  return m_nextPaintOffset;
260 }
261 
262 void KompareListView::setNextPaintOffset(int offset)
263 {
264  m_nextPaintOffset = offset;
265 }
266 
267 void KompareListView::setXOffset( int x )
268 {
269  kDebug(8104) << "SetXOffset : Scroll to x position: " << x << endl;
270  horizontalScrollBar()->setValue( x );
271 }
272 
273 void KompareListView::scrollToId( int id )
274 {
275 // kDebug(8104) << "ScrollToID : Scroll to id : " << id << endl;
276  int n = topLevelItemCount();
277  KompareListViewItem* item = 0;
278  if( n ) {
279  int i = 1;
280  for( ; i<n; i++ ) {
281  if( ((KompareListViewItem*)topLevelItem( i ))->scrollId() > id )
282  break;
283  }
284  item = (KompareListViewItem*)topLevelItem( i-1 );
285  }
286 
287  if( item ) {
288  QRect rect = totalVisualItemRect( item );
289  int pos = rect.top() + verticalOffset();
290  int itemId = item->scrollId();
291  int height = rect.height();
292  double r = (double)( id - itemId ) / (double)item->maxHeight();
293  int y = pos + (int)( r * (double)height ) - minScrollId();
294 // kDebug(8104) << "scrollToID: " << endl;
295 // kDebug(8104) << " id = " << id << endl;
296 // kDebug(8104) << " pos = " << pos << endl;
297 // kDebug(8104) << " itemId = " << itemId << endl;
298 // kDebug(8104) << " r = " << r << endl;
299 // kDebug(8104) << " height = " << height << endl;
300 // kDebug(8104) << " minID = " << minScrollId() << endl;
301 // kDebug(8104) << " y = " << y << endl;
302 // kDebug(8104) << "contentsHeight = " << contentsHeight() << endl;
303 // kDebug(8104) << " c - y = " << contentsHeight() - y << endl;
304  verticalScrollBar()->setValue( y );
305  }
306 
307  m_scrollId = id;
308 }
309 
310 int KompareListView::scrollId()
311 {
312  if( m_scrollId < 0 )
313  m_scrollId = minScrollId();
314  return m_scrollId;
315 }
316 
317 void KompareListView::setSelectedDifference( const Difference* diff, bool scroll )
318 {
319  kDebug(8104) << "KompareListView::setSelectedDifference(" << diff << ", " << scroll << ")" << endl;
320 
321  // When something other than a click causes this function to be called,
322  // it'll only get called once, and all is simple.
323  //
324  // When the user clicks on a diff, this function will get called once when
325  // komparesplitter::slotDifferenceClicked runs, and again when the
326  // setSelection signal from the modelcontroller arrives.
327  //
328  // the first call (which will always be from the splitter) will have
329  // scroll==false, and the second call will bail out here.
330  // Which is why clicking on a difference does not cause the listviews to
331  // scroll.
332  if ( m_selectedDifference == diff )
333  return;
334 
335  m_selectedDifference = diff;
336 
337  KompareListViewItem* item = m_itemDict[ diff ];
338  if( !item ) {
339  kDebug(8104) << "KompareListView::slotSetSelection(): couldn't find our selection!" << endl;
340  return;
341  }
342 
343  // why does this not happen when the user clicks on a diff? see the comment above.
344  if( scroll )
345  scrollToId(item->scrollId());
346  setUpdatesEnabled( false );
347  int x = horizontalScrollBar()->value();
348  int y = verticalScrollBar()->value();
349  setCurrentItem( item );
350  horizontalScrollBar()->setValue( x );
351  verticalScrollBar()->setValue( y );
352  setUpdatesEnabled( true );
353 }
354 
355 void KompareListView::slotSetSelection( const Difference* diff )
356 {
357  kDebug(8104) << "KompareListView::slotSetSelection( const Difference* diff )" << endl;
358 
359  setSelectedDifference( diff, true );
360 }
361 
362 void KompareListView::slotSetSelection( const DiffModel* model, const Difference* diff )
363 {
364  kDebug(8104) << "KompareListView::slotSetSelection( const DiffModel* model, const Difference* diff )" << endl;
365 
366  if( m_selectedModel && m_selectedModel == model ) {
367  slotSetSelection( diff );
368  return;
369  }
370 
371  clear();
372  m_items.clear();
373  m_itemDict.clear();
374  m_selectedModel = model;
375 
376  DiffHunkListConstIterator hunkIt = model->hunks()->begin();
377  DiffHunkListConstIterator hEnd = model->hunks()->end();
378 
379  KompareListViewItem* item = 0;
380  m_nextPaintOffset = 0;
381 
382  for ( ; hunkIt != hEnd; ++hunkIt )
383  {
384  if( item )
385  item = new KompareListViewHunkItem( this, item, *hunkIt, model->isBlended() );
386  else
387  item = new KompareListViewHunkItem( this, *hunkIt, model->isBlended() );
388 
389  DifferenceListConstIterator diffIt = (*hunkIt)->differences().begin();
390  DifferenceListConstIterator dEnd = (*hunkIt)->differences().end();
391 
392  for ( ; diffIt != dEnd; ++diffIt )
393  {
394  item = new KompareListViewDiffItem( this, item, *diffIt );
395 
396  int type = (*diffIt)->type();
397 
398  if ( type != Difference::Unchanged )
399  {
400  m_items.append( (KompareListViewDiffItem*)item );
401  m_itemDict.insert( *diffIt, (KompareListViewDiffItem*)item );
402  }
403  }
404  }
405 
406  resizeColumnToContents( COL_LINE_NO );
407  resizeColumnToContents( COL_MAIN );
408 
409  slotSetSelection( diff );
410 }
411 
412 KompareListViewDiffItem* KompareListView::diffItemAt( const QPoint& pos )
413 {
414  KompareListViewItem* item = static_cast<KompareListViewItem*>( itemAt( pos ) );
415  if( !item )
416  return 0;
417  switch( item->type() ) {
418  case KompareListViewItem::Hunk:
419  if( item->paintHeight() ) return 0; // no diff item here
420  // zero height (fake 1 pixel height), so a diff item shines through
421  return static_cast<KompareListViewDiffItem*>( itemBelow( item ) );
422  case KompareListViewItem::Line:
423  case KompareListViewItem::Blank:
424  return static_cast<KompareListViewLineItem*>( item )->diffItemParent();
425  case KompareListViewItem::Container:
426  return static_cast<KompareListViewLineContainerItem*>( item )->diffItemParent();
427  case KompareListViewItem::Diff:
428  return static_cast<KompareListViewDiffItem*>( item );
429  default:
430  return 0;
431  }
432 }
433 
434 void KompareListView::mousePressEvent( QMouseEvent* e )
435 {
436  QPoint vp = e->pos();
437  KompareListViewDiffItem* diffItem = diffItemAt( vp );
438  if( diffItem && diffItem->difference()->type() != Difference::Unchanged ) {
439  emit differenceClicked( diffItem->difference() );
440  }
441 }
442 
443 void KompareListView::mouseDoubleClickEvent( QMouseEvent* e )
444 {
445  QPoint vp = e->pos();
446  KompareListViewDiffItem* diffItem = diffItemAt( vp );
447  if ( diffItem && diffItem->difference()->type() != Difference::Unchanged ) {
448  // FIXME: make a new signal that does both
449  emit differenceClicked( diffItem->difference() );
450  emit applyDifference( !diffItem->difference()->applied() );
451  }
452 }
453 
454 void KompareListView::renumberLines( void )
455 {
456 // kDebug( 8104 ) << "Begin" << endl;
457  unsigned int newLineNo = 1;
458  if( !topLevelItemCount() ) return;
459  KompareListViewItem* item = (KompareListViewItem*)topLevelItem( 0 );
460  while( item ) {
461 // kDebug( 8104 ) << "type: " << item->type() << endl;
462  if ( item->type() != KompareListViewItem::Container
463  && item->type() != KompareListViewItem::Blank
464  && item->type() != KompareListViewItem::Hunk )
465  {
466 // kDebug( 8104 ) << QString::number( newLineNo ) << endl;
467  item->setText( COL_LINE_NO, QString::number( newLineNo++ ) );
468  }
469  item = (KompareListViewItem*)itemBelow( item );
470  }
471 }
472 
473 void KompareListView::slotApplyDifference( bool apply )
474 {
475  m_itemDict[ m_selectedDifference ]->applyDifference( apply );
476  // now renumber the line column if this is the destination
477  if ( !m_isSource )
478  renumberLines();
479 }
480 
481 void KompareListView::slotApplyAllDifferences( bool apply )
482 {
483  QHash<const Diff2::Difference*, KompareListViewDiffItem*>::ConstIterator it = m_itemDict.constBegin();
484  QHash<const Diff2::Difference*, KompareListViewDiffItem*>::ConstIterator end = m_itemDict.constEnd();
485  for ( ; it != end; ++it )
486  it.value()->applyDifference( apply );
487 
488  // now renumber the line column if this is the destination
489  if ( !m_isSource )
490  renumberLines();
491  update();
492 }
493 
494 void KompareListView::slotApplyDifference( const Difference* diff, bool apply )
495 {
496  m_itemDict[ diff ]->applyDifference( apply );
497  // now renumber the line column if this is the destination
498  if ( !m_isSource )
499  renumberLines();
500 }
501 
502 void KompareListView::wheelEvent( QWheelEvent* e )
503 {
504  e->ignore(); // we want the parent to catch wheel events
505 }
506 
507 void KompareListView::resizeEvent( QResizeEvent* e )
508 {
509  QTreeWidget::resizeEvent(e);
510  emit resized();
511 }
512 
513 KompareListViewItemDelegate::KompareListViewItemDelegate( QObject* parent )
514  : QStyledItemDelegate( parent )
515 {
516 }
517 
518 KompareListViewItemDelegate::~KompareListViewItemDelegate()
519 {
520 }
521 
522 void KompareListViewItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
523 {
524  int column = index.column();
525  QStyleOptionViewItemV4 changedOption = option;
526  if( column == COL_LINE_NO )
527  changedOption.displayAlignment = Qt::AlignRight;
528  KompareListViewItem* item = static_cast<KompareListViewItem*>( static_cast<KompareListView*>( parent() )->itemFromIndex( index ) );
529  item->paintCell( painter, changedOption, column );
530 }
531 
532 QSize KompareListViewItemDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
533 {
534  KompareListViewItem* item = static_cast<KompareListViewItem*>( static_cast<KompareListView*>( parent() )->itemFromIndex( index ) );
535  QSize hint = QStyledItemDelegate::sizeHint( option, index );
536  return QSize( hint.width() + ITEM_MARGIN, item->height() );
537 }
538 
539 KompareListViewItem::KompareListViewItem( KompareListView* parent, int type )
540  : QTreeWidgetItem( parent, type ),
541  m_scrollId( 0 ),
542  m_height( 0 ),
543  m_paintHeight( 0 ),
544  m_paintOffset( parent->nextPaintOffset() )
545 {
546 // kDebug(8104) << "Created KompareListViewItem with scroll id " << m_scrollId << endl;
547 }
548 
549 KompareListViewItem::KompareListViewItem( KompareListView* parent, KompareListViewItem* after, int type )
550  : QTreeWidgetItem( parent, after, type ),
551  m_scrollId( after->scrollId() + after->maxHeight() ),
552  m_height( 0 ),
553  m_paintHeight( 0 ),
554  m_paintOffset( parent->nextPaintOffset() )
555 {
556 // kDebug(8104) << "Created KompareListViewItem with scroll id " << m_scrollId << endl;
557 }
558 
559 KompareListViewItem::KompareListViewItem( KompareListViewItem* parent, int type )
560  : QTreeWidgetItem( parent, type ),
561  m_scrollId( 0 ),
562  m_height( 0 ),
563  m_paintHeight( 0 ),
564  m_paintOffset( parent->kompareListView()->nextPaintOffset() )
565 {
566 }
567 
568 KompareListViewItem::KompareListViewItem( KompareListViewItem* parent, KompareListViewItem* /*after*/, int type )
569  : QTreeWidgetItem( parent, type ),
570  m_scrollId( 0 ),
571  m_height( 0 ),
572  m_paintHeight( 0 ),
573  m_paintOffset( parent->kompareListView()->nextPaintOffset() )
574 {
575 }
576 
577 int KompareListViewItem::height() const
578 {
579  return m_height;
580 }
581 
582 void KompareListViewItem::setHeight( int h )
583 {
584  m_height = m_paintHeight = h;
585  // QTreeWidget doesn't like zero height, fudge around it.
586  m_height -= m_paintOffset;
587  if( m_height <= 0 ) {
588  kompareListView()->setNextPaintOffset( 1 - m_height );
589  m_height = 1;
590  } else kompareListView()->setNextPaintOffset( 0 );
591 }
592 
593 int KompareListViewItem::paintHeight() const
594 {
595  return m_paintHeight;
596 }
597 
598 int KompareListViewItem::paintOffset() const
599 {
600  return m_paintOffset;
601 }
602 
603 bool KompareListViewItem::isCurrent() const
604 {
605  return treeWidget()->currentItem() == this;
606 }
607 
608 KompareListView* KompareListViewItem::kompareListView() const
609 {
610  return (KompareListView*)treeWidget();
611 }
612 
613 void KompareListViewItem::paintCell( QPainter* p, const QStyleOptionViewItem& option, int column )
614 {
615  // Default implementation for zero-height items.
616  // We have to paint the item which shines through or we'll end up with glitches.
617  KompareListViewItem* nextItem = (KompareListViewItem*)kompareListView()->itemBelow(this);
618  if( nextItem ) {
619  QStyleOptionViewItemV4 changedOption = option;
620  changedOption.rect.translate( 0, height() );
621  nextItem->paintCell( p, changedOption, column );
622  }
623 }
624 
625 KompareListViewDiffItem::KompareListViewDiffItem( KompareListView* parent, Difference* difference )
626  : KompareListViewItem( parent, Diff ),
627  m_difference( difference ),
628  m_sourceItem( 0L ),
629  m_destItem( 0L )
630 {
631  init();
632 }
633 
634 KompareListViewDiffItem::KompareListViewDiffItem( KompareListView* parent, KompareListViewItem* after, Difference* difference )
635  : KompareListViewItem( parent, after, Diff ),
636  m_difference( difference ),
637  m_sourceItem( 0L ),
638  m_destItem( 0L )
639 {
640  init();
641 }
642 
643 KompareListViewDiffItem::~KompareListViewDiffItem()
644 {
645  m_difference = 0;
646 }
647 
648 void KompareListViewDiffItem::init()
649 {
650  setHeight( 0 );
651  setExpanded( true );
652  int nextPaintOffset = kompareListView()->nextPaintOffset();
653  m_destItem = new KompareListViewLineContainerItem( this, false );
654  kompareListView()->setNextPaintOffset(nextPaintOffset);
655  m_sourceItem = new KompareListViewLineContainerItem( this, true );
656  setVisibility();
657 }
658 
659 void KompareListViewDiffItem::setVisibility()
660 {
661  m_sourceItem->setHidden( !(kompareListView()->isSource() || m_difference->applied()) );
662  m_destItem->setHidden( !m_sourceItem->isHidden() );
663 }
664 
665 void KompareListViewDiffItem::applyDifference( bool apply )
666 {
667  kDebug(8104) << "KompareListViewDiffItem::applyDifference( " << apply << " )" << endl;
668  setVisibility();
669 }
670 
671 int KompareListViewDiffItem::maxHeight()
672 {
673  int lines = qMax( m_difference->sourceLineCount(), m_difference->destinationLineCount() );
674  if( lines == 0 )
675  return BLANK_LINE_HEIGHT;
676  else
677  return lines * treeWidget()->fontMetrics().height();
678 }
679 
680 KompareListViewLineContainerItem::KompareListViewLineContainerItem( KompareListViewDiffItem* parent, bool isSource )
681  : KompareListViewItem( parent, Container ),
682  m_blankLineItem( 0 ),
683  m_isSource( isSource )
684 {
685 // kDebug(8104) << "isSource ? " << (isSource ? " Yes!" : " No!") << endl;
686  setHeight( 0 );
687  setExpanded( true );
688 
689  int lines = lineCount();
690  int line = lineNumber();
691 // kDebug(8104) << "LineNumber : " << lineNumber() << endl;
692  if( lines == 0 ) {
693  m_blankLineItem = new KompareListViewBlankLineItem( this );
694  return;
695  }
696 
697  for( int i = 0; i < lines; i++, line++ ) {
698  new KompareListViewLineItem( this, line, lineAt( i ) );
699  }
700 }
701 
702 KompareListViewLineContainerItem::~KompareListViewLineContainerItem()
703 {
704 }
705 
706 KompareListViewDiffItem* KompareListViewLineContainerItem::diffItemParent() const
707 {
708  return (KompareListViewDiffItem*)parent();
709 }
710 
711 int KompareListViewLineContainerItem::lineCount() const
712 {
713  return m_isSource ? diffItemParent()->difference()->sourceLineCount() :
714  diffItemParent()->difference()->destinationLineCount();
715 }
716 
717 int KompareListViewLineContainerItem::lineNumber() const
718 {
719  return m_isSource ? diffItemParent()->difference()->sourceLineNumber() :
720  diffItemParent()->difference()->destinationLineNumber();
721 }
722 
723 DifferenceString* KompareListViewLineContainerItem::lineAt( int i ) const
724 {
725  return m_isSource ? diffItemParent()->difference()->sourceLineAt( i ) :
726  diffItemParent()->difference()->destinationLineAt( i );
727 }
728 
729 KompareListViewLineItem::KompareListViewLineItem( KompareListViewLineContainerItem* parent, int line, DifferenceString* text )
730  : KompareListViewItem( parent, Line )
731 {
732  init( line, text );
733 }
734 
735 KompareListViewLineItem::KompareListViewLineItem( KompareListViewLineContainerItem* parent, int line, DifferenceString* text, int type )
736  : KompareListViewItem( parent, type )
737 {
738  init( line, text );
739 }
740 
741 KompareListViewLineItem::~KompareListViewLineItem()
742 {
743  m_text = 0;
744 }
745 
746 void KompareListViewLineItem::init( int line, DifferenceString* text )
747 {
748  setHeight( treeWidget()->fontMetrics().height() );
749  setText( COL_LINE_NO, QString::number( line ) );
750  setText( COL_MAIN, text->string() );
751  m_text = text;
752 }
753 
754 void KompareListViewLineItem::paintCell( QPainter* p, const QStyleOptionViewItem& option, int column )
755 {
756  int width = option.rect.width();
757  Qt::Alignment align = option.displayAlignment;
758 
759  p->setRenderHint(QPainter::Antialiasing);
760  p->translate(option.rect.topLeft());
761  p->translate(0, -paintOffset());
762 
763  QColor bg( Qt::white ); // Always make the background white when it is not a real difference
764  if ( diffItemParent()->difference()->type() == Difference::Unchanged )
765  {
766  if ( column == COL_LINE_NO )
767  {
768  bg = QColor( Qt::lightGray );
769  }
770  }
771  else
772  {
773  bg = kompareListView()->settings()->colorForDifferenceType(
774  diffItemParent()->difference()->type(),
775  diffItemParent()->isCurrent(),
776  diffItemParent()->difference()->applied() );
777  }
778 
779  // Paint background
780  p->fillRect( 0, 0, width, paintHeight(), bg );
781 
782  // Paint foreground
783  if ( diffItemParent()->difference()->type() == Difference::Unchanged )
784  p->setPen( QColor( Qt::darkGray ) ); // always make normal text gray
785  else
786  p->setPen( QColor( Qt::black ) ); // make text with changes black
787 
788  paintText( p, bg, column, width, align );
789 
790  // Paint darker lines around selected item
791  if ( diffItemParent()->isCurrent() )
792  {
793  p->translate(0.5,0.5);
794  p->setPen( bg.dark(135) );
795  QTreeWidgetItem* parentItem = parent();
796  if ( this == parentItem->child( 0 ) )
797  p->drawLine( 0, 0, width, 0 );
798  if ( this == parentItem->child( parentItem->childCount() - 1 ) )
799  p->drawLine( 0, paintHeight() - 1, width, paintHeight() - 1 );
800  }
801 
802  p->resetTransform();
803 }
804 
805 void KompareListViewLineItem::paintText( QPainter* p, const QColor& bg, int column, int width, int align )
806 {
807  if ( column == COL_MAIN )
808  {
809  QString textChunk;
810  int offset = ITEM_MARGIN;
811  int prevValue = 0;
812  int charsDrawn = 0;
813  int chunkWidth;
814  QBrush changeBrush( bg, Qt::Dense3Pattern );
815  QBrush normalBrush( bg, Qt::SolidPattern );
816  QBrush brush;
817 
818  if ( m_text->string().isEmpty() )
819  {
820  p->fillRect( 0, 0, width, paintHeight(), normalBrush );
821  return;
822  }
823 
824  p->fillRect( 0, 0, offset, paintHeight(), normalBrush );
825 
826  if ( !m_text->markerList().isEmpty() )
827  {
828  MarkerListConstIterator markerIt = m_text->markerList().begin();
829  MarkerListConstIterator mEnd = m_text->markerList().end();
830  Marker* m = *markerIt;
831 
832  for ( ; markerIt != mEnd; ++markerIt )
833  {
834  m = *markerIt;
835  textChunk = m_text->string().mid( prevValue, m->offset() - prevValue );
836 // kDebug(8104) << "TextChunk = \"" << textChunk << "\"" << endl;
837 // kDebug(8104) << "c->offset() = " << c->offset() << endl;
838 // kDebug(8104) << "prevValue = " << prevValue << endl;
839  expandTabs(textChunk, kompareListView()->settings()->m_tabToNumberOfSpaces, charsDrawn);
840  charsDrawn += textChunk.length();
841  prevValue = m->offset();
842  if ( m->type() == Marker::End )
843  {
844  QFont font( p->font() );
845  font.setBold( true );
846  p->setFont( font );
847 // p->setPen( Qt::blue );
848  brush = changeBrush;
849  }
850  else
851  {
852  QFont font( p->font() );
853  font.setBold( false );
854  p->setFont( font );
855 // p->setPen( Qt::black );
856  brush = normalBrush;
857  }
858  chunkWidth = p->fontMetrics().width( textChunk );
859  p->fillRect( offset, 0, chunkWidth, paintHeight(), brush );
860  p->drawText( offset, 0,
861  chunkWidth, paintHeight(),
862  align, textChunk );
863  offset += chunkWidth;
864  }
865  }
866  if ( prevValue < m_text->string().length() )
867  {
868  // Still have to draw some string without changes
869  textChunk = m_text->string().mid( prevValue, qMax( 1, m_text->string().length() - prevValue ) );
870  expandTabs(textChunk, kompareListView()->settings()->m_tabToNumberOfSpaces, charsDrawn);
871 // kDebug(8104) << "TextChunk = \"" << textChunk << "\"" << endl;
872  QFont font( p->font() );
873  font.setBold( false );
874  p->setFont( font );
875  chunkWidth = p->fontMetrics().width( textChunk );
876  p->fillRect( offset, 0, chunkWidth, paintHeight(), normalBrush );
877  p->drawText( offset, 0,
878  chunkWidth, paintHeight(),
879  align, textChunk );
880  offset += chunkWidth;
881  }
882  p->fillRect( offset, 0, width - offset, paintHeight(), normalBrush );
883  }
884  else
885  {
886  p->fillRect( 0, 0, width, paintHeight(), bg );
887  p->drawText( ITEM_MARGIN, 0,
888  width - ITEM_MARGIN, paintHeight(),
889  align, text( column ) );
890  }
891 }
892 
893 void KompareListViewLineItem::expandTabs(QString& text, int tabstop, int startPos) const
894 {
895  int index;
896  while((index = text.indexOf(QChar(9)))!= -1)
897  text.replace(index, 1, QString(tabstop-((startPos+index)%tabstop),' '));
898 }
899 
900 KompareListViewDiffItem* KompareListViewLineItem::diffItemParent() const
901 {
902  KompareListViewLineContainerItem* p = (KompareListViewLineContainerItem*)parent();
903  return p->diffItemParent();
904 }
905 
906 KompareListViewBlankLineItem::KompareListViewBlankLineItem( KompareListViewLineContainerItem* parent )
907  : KompareListViewLineItem( parent, 0, new DifferenceString(), Blank )
908 {
909  setHeight( BLANK_LINE_HEIGHT );
910 }
911 
912 void KompareListViewBlankLineItem::paintText( QPainter* p, const QColor& bg, int column, int width, int /* align */ )
913 {
914  if ( column == COL_MAIN )
915  {
916  QBrush normalBrush( bg, Qt::SolidPattern );
917  p->fillRect( 0, 0, width, paintHeight(), normalBrush );
918  }
919 }
920 
921 KompareListViewHunkItem::KompareListViewHunkItem( KompareListView* parent, DiffHunk* hunk, bool zeroHeight )
922  : KompareListViewItem( parent, Hunk ),
923  m_zeroHeight( zeroHeight ),
924  m_hunk( hunk )
925 {
926  setHeight( maxHeight() );
927  setFlags( flags() & ~Qt::ItemIsSelectable );
928 }
929 
930 KompareListViewHunkItem::KompareListViewHunkItem( KompareListView* parent, KompareListViewItem* after, DiffHunk* hunk, bool zeroHeight )
931  : KompareListViewItem( parent, after, Hunk ),
932  m_zeroHeight( zeroHeight ),
933  m_hunk( hunk )
934 {
935  setHeight( maxHeight() );
936  setFlags( flags() & ~Qt::ItemIsSelectable );
937 }
938 
939 KompareListViewHunkItem::~KompareListViewHunkItem()
940 {
941  m_hunk = 0;
942 }
943 
944 int KompareListViewHunkItem::maxHeight()
945 {
946  if( m_zeroHeight ) {
947  return 0;
948  } else if( m_hunk->function().isEmpty() ) {
949  return HUNK_LINE_HEIGHT;
950  } else {
951  return treeWidget()->fontMetrics().height();
952  }
953 }
954 
955 void KompareListViewHunkItem::paintCell( QPainter* p, const QStyleOptionViewItem& option, int column )
956 {
957  if( m_zeroHeight ) {
958  KompareListViewItem::paintCell( p, option, column );
959  } else {
960  int x = option.rect.left();
961  int y = option.rect.top() - paintOffset();
962  int width = option.rect.width();
963  Qt::Alignment align = option.displayAlignment;
964 
965  p->fillRect( x, y, width, paintHeight(), QColor( Qt::lightGray ) ); // Hunk headers should be lightgray
966  p->setPen( QColor( Qt::black ) ); // Text color in hunk should be black
967  if( column == COL_MAIN ) {
968  p->drawText( x + ITEM_MARGIN, y, width - ITEM_MARGIN, paintHeight(),
969  align, m_hunk->function() );
970  }
971  }
972 }
973 
974 #include "komparelistview.moc"
QObject::child
QObject * child(const char *objName, const char *inheritsClass, bool recursiveSearch) const
KompareListView::KompareListView
KompareListView(bool isSource, ViewSettings *settings, QWidget *parent, const char *name=0)
Definition: komparelistview.cpp:103
KompareListView::KompareListViewItemDelegate
friend class KompareListViewItemDelegate
Definition: komparelistview.h:51
QFrame::QFrame
QFrame(QWidget *parent, QFlags< Qt::WindowType > f)
KompareListViewItem::paintCell
virtual void paintCell(QPainter *p, const QStyleOptionViewItem &option, int column)
Definition: komparelistview.cpp:613
QList::clear
void clear()
QModelIndex
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
KompareListView::itemRect
QRect itemRect(int i)
Definition: komparelistview.cpp:206
QResizeEvent
QWidget
KompareListViewDiffItem::difference
Diff2::Difference * difference()
Definition: komparelistview.h:185
KompareListView::scrollId
int scrollId()
Definition: komparelistview.cpp:310
KompareListViewBlankLineItem::paintText
virtual void paintText(QPainter *p, const QColor &bg, int column, int width, int align)
Definition: komparelistview.cpp:912
QHash::insert
iterator insert(const Key &key, const T &value)
KompareListView::lastVisibleDifference
int lastVisibleDifference()
Definition: komparelistview.cpp:163
QSize::width
int width() const
COL_MAIN
#define COL_MAIN
Definition: komparelistview.cpp:43
QPainter::fillRect
void fillRect(const QRectF &rectangle, const QBrush &brush)
KompareListViewItemDelegate::~KompareListViewItemDelegate
virtual ~KompareListViewItemDelegate()
Definition: komparelistview.cpp:518
QPainter::setRenderHint
void setRenderHint(RenderHint hint, bool on)
KompareListView::mouseDoubleClickEvent
virtual void mouseDoubleClickEvent(QMouseEvent *)
Definition: komparelistview.cpp:443
KompareListViewLineItem
Definition: komparelistview.h:222
QTreeWidgetItem::child
QTreeWidgetItem * child(int index) const
KompareListViewDiffItem::maxHeight
virtual int maxHeight()
Definition: komparelistview.cpp:671
QFrame::setFrameShape
void setFrameShape(Shape)
KompareListViewItem::scrollId
int scrollId() const
Definition: komparelistview.h:161
QWidget::setFocusPolicy
void setFocusPolicy(Qt::FocusPolicy policy)
QChar
QPainter::font
const QFont & font() const
QFont
KompareListViewItem::isCurrent
bool isCurrent() const
Definition: komparelistview.cpp:603
QWidget::style
QStyle * style() const
QStyle::pixelMetric
virtual int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const =0
KompareListViewLineContainerItem::diffItemParent
KompareListViewDiffItem * diffItemParent() const
Definition: komparelistview.cpp:706
QSizePolicy
KompareListView::differenceClicked
void differenceClicked(const Diff2::Difference *diff)
QWheelEvent
KompareListView::itemAtIndex
KompareListViewItem * itemAtIndex(int i)
Definition: komparelistview.cpp:136
KompareListViewHunkItem::maxHeight
virtual int maxHeight()
Definition: komparelistview.cpp:944
KompareListView::contentsY
int contentsY()
Definition: komparelistview.cpp:252
QWidget::y
int y() const
KompareListView::slotApplyDifference
void slotApplyDifference(bool apply)
Definition: komparelistview.cpp:473
QAbstractScrollArea::viewport
QWidget * viewport() const
KompareListView
Definition: komparelistview.h:47
komparesplitter.h
QRect::height
int height() const
QTreeWidget::itemBelow
QTreeWidgetItem * itemBelow(const QTreeWidgetItem *item) const
QBrush
QAbstractItemView::resizeEvent
virtual void resizeEvent(QResizeEvent *event)
QPoint
QAbstractItemView::setVerticalScrollMode
void setVerticalScrollMode(ScrollMode mode)
KompareListViewItem::maxHeight
virtual int maxHeight()=0
QMouseEvent
QFrame::setFrameStyle
void setFrameStyle(int style)
QPainter::drawLine
void drawLine(const QLineF &line)
Qt::Alignment
typedef Alignment
KompareListViewItem::kompareListView
KompareListView * kompareListView() const
Definition: komparelistview.cpp:608
KompareListViewItem::paintOffset
int paintOffset() const
Definition: komparelistview.cpp:598
KompareListViewHunkItem
Definition: komparelistview.h:255
QWidget::update
void update()
QColor::dark
QColor dark(int factor) const
QTreeWidget::clear
void clear()
QList::indexOf
int indexOf(const T &value, int from) const
KompareListViewItem::height
int height() const
Definition: komparelistview.cpp:577
KompareListViewLineContainerItem::KompareListViewLineContainerItem
KompareListViewLineContainerItem(KompareListViewDiffItem *parent, bool isSource)
Definition: komparelistview.cpp:680
QWidget::width
width
QFont::setBold
void setBold(bool enable)
QPainter::resetTransform
void resetTransform()
QTreeView::horizontalOffset
virtual int horizontalOffset() const
KompareListView::setSelectedDifference
void setSelectedDifference(const Diff2::Difference *diff, bool scroll)
Definition: komparelistview.cpp:317
QTreeWidgetItem::setFlags
void setFlags(QFlags< Qt::ItemFlag > flags)
QTreeWidget
QRect
QTreeView::columnWidth
int columnWidth(int column) const
QPainter::setFont
void setFont(const QFont &font)
BLANK_LINE_HEIGHT
#define BLANK_LINE_HEIGHT
Definition: komparelistview.cpp:45
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
QString::number
QString number(int n, int base)
QList::append
void append(const T &value)
KompareListViewLineItem::maxHeight
virtual int maxHeight()
Definition: komparelistview.h:229
QEvent::ignore
void ignore()
KompareListViewItemDelegate::sizeHint
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
Definition: komparelistview.cpp:532
KompareListViewFrame::slotSetModel
void slotSetModel(const Diff2::DiffModel *model)
Definition: komparelistview.cpp:83
QHash::constEnd
const_iterator constEnd() const
QWidget::x
int x() const
KompareListViewBlankLineItem
Definition: komparelistview.h:246
QHash
QRect::top
int top() const
QTreeView::resizeColumnToContents
void resizeColumnToContents(int column)
QStyleOptionViewItem
QWidget::setUpdatesEnabled
void setUpdatesEnabled(bool enable)
QObject
QPainter::setPen
void setPen(const QColor &color)
KompareListViewItem::Diff
Definition: komparelistview.h:167
KompareListViewLineItem::diffItemParent
KompareListViewDiffItem * diffItemParent() const
Definition: komparelistview.cpp:900
QAbstractScrollArea::setHorizontalScrollBarPolicy
void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)
komparelistview.h
QPainter
QObject::setObjectName
void setObjectName(const QString &name)
QWidget::setFocusProxy
void setFocusProxy(QWidget *w)
KompareListViewItem::KompareListViewItem
KompareListViewItem(KompareListView *parent, int type)
Definition: komparelistview.cpp:539
QAbstractItemView::setItemDelegate
void setItemDelegate(QAbstractItemDelegate *delegate)
QTreeWidgetItem::font
QFont font(int column) const
KompareListView::scrollToId
void scrollToId(int id)
Definition: komparelistview.cpp:273
QTreeWidget::itemAt
QTreeWidgetItem * itemAt(const QPoint &p) const
QWidget::pos
QPoint pos() const
KompareListViewItemDelegate::paint
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
Definition: komparelistview.cpp:522
QTreeWidgetItem::isHidden
bool isHidden() const
QStyledItemDelegate::sizeHint
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
KompareListView::setNextPaintOffset
void setNextPaintOffset(int offset)
Definition: komparelistview.cpp:262
QPainter::drawText
void drawText(const QPointF &position, const QString &text)
KompareListView::settings
ViewSettings * settings() const
Definition: komparelistview.h:73
KompareListViewLineItem::~KompareListViewLineItem
~KompareListViewLineItem()
Definition: komparelistview.cpp:741
KompareListViewItem::Container
Definition: komparelistview.h:167
QLabel::setText
void setText(const QString &)
QTreeView::setAllColumnsShowFocus
void setAllColumnsShowFocus(bool enable)
QTreeWidget::currentItem
QTreeWidgetItem * currentItem() const
QString
QColor
KompareSplitter
Definition: komparesplitter.h:40
QAbstractScrollArea::verticalScrollBar
QScrollBar * verticalScrollBar() const
QTreeView::setIndentation
void setIndentation(int i)
QTreeWidgetItem::treeWidget
QTreeWidget * treeWidget() const
QLayout::setMargin
void setMargin(int margin)
KompareListViewItem::setHeight
void setHeight(int h)
Definition: komparelistview.cpp:582
QTreeWidget::setColumnCount
void setColumnCount(int columns)
QWidget::setSizePolicy
void setSizePolicy(QSizePolicy)
QWidget::rect
QRect rect() const
KompareListViewHunkItem::KompareListViewHunkItem
KompareListViewHunkItem(KompareListView *parent, Diff2::DiffHunk *hunk, bool zeroHeight=false)
QTreeWidgetItem::setHidden
void setHidden(bool hide)
QHash::clear
void clear()
HUNK_LINE_HEIGHT
#define HUNK_LINE_HEIGHT
Definition: komparelistview.cpp:46
QHash::value
const T value(const Key &key) const
KompareListViewHunkItem::paintCell
virtual void paintCell(QPainter *p, const QStyleOptionViewItem &option, int column)
Definition: komparelistview.cpp:955
KompareListViewFrame::view
KompareListView * view()
Definition: komparelistview.h:123
QSize
QWidget::setFont
void setFont(const QFont &)
QAbstractSlider::setValue
void setValue(int)
KompareListView::applyDifference
void applyDifference(bool apply)
QFrame
QFontMetrics::width
int width(const QString &text, int len) const
KompareListView::nextPaintOffset
int nextPaintOffset() const
Definition: komparelistview.cpp:257
KompareListView::slotSetSelection
void slotSetSelection(const Diff2::DiffModel *model, const Diff2::Difference *diff)
KompareListViewItem::Line
Definition: komparelistview.h:167
KompareListViewBlankLineItem::KompareListViewBlankLineItem
KompareListViewBlankLineItem(KompareListViewLineContainerItem *parent)
Definition: komparelistview.cpp:906
QTreeWidgetItem::parent
QTreeWidgetItem * parent() const
ITEM_MARGIN
#define ITEM_MARGIN
Definition: komparelistview.cpp:48
KompareListView::~KompareListView
virtual ~KompareListView()
Definition: komparelistview.cpp:129
QFrame::setFrameShadow
void setFrameShadow(Shadow)
KompareListView::contentsHeight
int contentsHeight()
Definition: komparelistview.cpp:227
QTreeWidget::itemAbove
QTreeWidgetItem * itemAbove(const QTreeWidgetItem *item) const
QTreeWidget::setCurrentItem
void setCurrentItem(QTreeWidgetItem *item)
KompareListView::wheelEvent
virtual void wheelEvent(QWheelEvent *e)
Definition: komparelistview.cpp:502
QString::replace
QString & replace(int position, int n, QChar after)
QHash::constBegin
const_iterator constBegin() const
ViewSettings::colorForDifferenceType
QColor colorForDifferenceType(int type, bool selected=false, bool applied=false)
Definition: viewsettings.cpp:77
QTreeWidgetItem::setExpanded
void setExpanded(bool expand)
KompareListViewLineItem::paintCell
virtual void paintCell(QPainter *p, const QStyleOptionViewItem &option, int column)
Definition: komparelistview.cpp:754
KompareListViewHunkItem::~KompareListViewHunkItem
~KompareListViewHunkItem()
Definition: komparelistview.cpp:939
QTreeWidgetItem::flags
Qt::ItemFlags flags() const
QWidget::fontMetrics
QFontMetrics fontMetrics() const
KompareListViewItem::Hunk
Definition: komparelistview.h:167
QTreeWidgetItem
QTreeWidget::visualItemRect
QRect visualItemRect(const QTreeWidgetItem *item) const
QTreeView::setHeaderHidden
void setHeaderHidden(bool hide)
QWidget::setFixedHeight
void setFixedHeight(int h)
KompareListViewItem::Blank
Definition: komparelistview.h:167
QPainter::fontMetrics
QFontMetrics fontMetrics() const
ViewSettings
Definition: viewsettings.h:29
ViewSettings::m_font
QFont m_font
Definition: viewsettings.h:58
QWidget::parentWidget
QWidget * parentWidget() const
QTreeView::verticalOffset
virtual int verticalOffset() const
COL_LINE_NO
#define COL_LINE_NO
Definition: komparelistview.cpp:42
viewsettings.h
QFontMetrics::height
int height() const
KompareListViewDiffItem
Definition: komparelistview.h:176
KompareListViewLineItem::paintText
virtual void paintText(QPainter *p, const QColor &bg, int column, int width, int align)
Definition: komparelistview.cpp:805
QTreeWidgetItem::setText
void setText(int column, const QString &text)
KompareListViewDiffItem::~KompareListViewDiffItem
~KompareListViewDiffItem()
Definition: komparelistview.cpp:643
KompareListView::setXOffset
void setXOffset(int x)
Definition: komparelistview.cpp:267
QModelIndex::column
int column() const
QString::length
int length() const
QPainter::translate
void translate(const QPointF &offset)
KompareListView::minScrollId
int minScrollId()
Definition: komparelistview.cpp:212
KompareListViewLineContainerItem
Definition: komparelistview.h:202
KompareListView::mousePressEvent
virtual void mousePressEvent(QMouseEvent *e)
Definition: komparelistview.cpp:434
KompareListView::visibleWidth
int visibleWidth()
Definition: komparelistview.cpp:242
KompareListView::maxScrollId
int maxScrollId()
Definition: komparelistview.cpp:217
QAbstractScrollArea::horizontalScrollBar
QScrollBar * horizontalScrollBar() const
KompareListViewLineContainerItem::~KompareListViewLineContainerItem
~KompareListViewLineContainerItem()
Definition: komparelistview.cpp:702
QTreeWidgetItem::type
int type() const
KompareListView::firstVisibleDifference
int firstVisibleDifference()
Definition: komparelistview.cpp:141
QTreeWidget::topLevelItem
QTreeWidgetItem * topLevelItem(int index) const
QMouseEvent::pos
const QPoint & pos() const
QStyleOptionViewItemV4
KompareListViewItem
Definition: komparelistview.h:145
KompareListView::contentsX
int contentsX()
Definition: komparelistview.cpp:247
QAbstractItemView::model
QAbstractItemModel * model() const
KompareListViewDiffItem::KompareListViewDiffItem
KompareListViewDiffItem(KompareListView *parent, Diff2::Difference *difference)
KompareListView::slotApplyAllDifferences
void slotApplyAllDifferences(bool apply)
Definition: komparelistview.cpp:481
KompareListViewLineItem::KompareListViewLineItem
KompareListViewLineItem(KompareListViewLineContainerItem *parent, int line, Diff2::DifferenceString *text)
QTreeView::setRootIsDecorated
void setRootIsDecorated(bool show)
KompareListView::contentsWidth
int contentsWidth()
Definition: komparelistview.cpp:232
QTreeWidget::topLevelItemCount
int topLevelItemCount() const
QAbstractSlider::maximum
maximum
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject::parent
QObject * parent() const
KompareListView::resizeEvent
virtual void resizeEvent(QResizeEvent *e)
Definition: komparelistview.cpp:507
QTreeWidgetItem::childCount
int childCount() const
KompareListViewItemDelegate::KompareListViewItemDelegate
KompareListViewItemDelegate(QObject *parent)
Definition: komparelistview.cpp:513
QAbstractScrollArea::setVerticalScrollBarPolicy
void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)
KompareListView::resized
void resized()
KompareListViewFrame::KompareListViewFrame
KompareListViewFrame(bool isSource, ViewSettings *settings, KompareSplitter *parent, const char *name=0)
Definition: komparelistview.cpp:52
QRect::united
QRect united(const QRect &rectangle) const
QTreeWidgetItem::text
QString text(int column) const
KompareListViewDiffItem::applyDifference
void applyDifference(bool apply)
Definition: komparelistview.cpp:665
QLabel::setMargin
void setMargin(int)
KompareListView::visibleHeight
int visibleHeight()
Definition: komparelistview.cpp:237
QBoxLayout::setSpacing
void setSpacing(int spacing)
QWidget::height
height
KompareListViewItem::paintHeight
int paintHeight() const
Definition: komparelistview.cpp:593
QStyledItemDelegate
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:40:01 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kompare

Skip menu "kompare"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal