28
28
#include "kompareconnectwidget.h"
30
KompareConnectWidget::KompareConnectWidget( KompareModelList* models, KompareListView* left, KompareListView* right,
30
KompareConnectWidget::KompareConnectWidget( KompareListView* left, KompareListView* right,
31
31
GeneralSettings* settings, KompareView* parent, const char* name )
32
32
: QWidget(parent, name),
34
33
m_settings( settings ),
35
34
m_diffView( parent ),
36
35
m_leftView( left ),
37
36
m_rightView( right ),
38
m_selectedModel( -1 ),
38
m_selectedDifference( 0 )
41
40
connect( m_settings, SIGNAL( settingsChanged() ), this, SLOT( repaint() ) );
42
41
setBackgroundMode( NoBackground );
50
void KompareConnectWidget::slotSetSelection( int model, int diff ) {
51
if( m_selectedModel == model && m_selectedDiff == diff )
54
if( m_selectedModel >= 0 ) {
55
disconnect( m_models->modelAt( m_selectedModel ), SIGNAL( appliedChanged( const Difference* ) ),
49
void KompareConnectWidget::slotSetSelection( const DiffModel* model, const Difference* diff )
51
if( m_selectedModel == model && m_selectedDifference == diff )
54
if ( m_selectedModel == model && m_selectedDifference != diff )
56
m_selectedDifference = diff;
61
if( m_selectedModel != model )
63
disconnect( m_selectedModel, SIGNAL( appliedChanged( const Difference* ) ),
56
64
this, SLOT( repaint() ) );
59
67
m_selectedModel = model;
60
m_selectedDiff = diff;
62
if( m_selectedModel >= 0 ) {
63
connect( m_models->modelAt( m_selectedModel ), SIGNAL( appliedChanged( const Difference* ) ),
64
this, SLOT( repaint() ) );
68
m_selectedDifference = diff;
70
connect( m_selectedModel, SIGNAL( appliedChanged(const Difference*) ),
71
this, SLOT( repaint() ) );
76
void KompareConnectWidget::slotSetSelection( const Difference* diff )
78
if ( m_selectedDifference == diff )
81
m_selectedDifference = diff;
75
91
void KompareConnectWidget::paintEvent( QPaintEvent* /* e */ )
77
93
kdDebug() << "KompareConnectWidget::paintEvent()" << endl;
79
95
QPixmap pixbuf(size());
80
96
QPainter paint(&pixbuf, this);
81
97
QPainter* p = &paint;
83
99
p->fillRect( 0, 0, pixbuf.width(), pixbuf.height(), white );
85
if( m_selectedModel >= 0 ) {
87
DiffModel* selectedModel = m_models->modelAt( m_selectedModel );
88
const Difference* selectedDiff = selectedModel->differenceAt( m_selectedDiff );
101
if( m_selectedModel )
90
103
int firstL = m_leftView->firstVisibleDifference();
91
104
int firstR = m_rightView->firstVisibleDifference();
92
105
int lastL = m_leftView->lastVisibleDifference();
93
106
int lastR = m_rightView->lastVisibleDifference();
95
108
int first = firstL < 0 ? firstR : QMIN( firstL, firstR );
96
109
int last = lastL < 0 ? lastR : QMAX( lastL, lastR );
98
111
kdDebug() << " left: " << firstL << " - " << lastL << endl;
99
112
kdDebug() << " right: " << firstR << " - " << lastR << endl;
100
113
kdDebug() << " drawing: " << first << " - " << last << endl;
101
if( first >= 0 && last >= 0 && first <= last ) {
114
if( first >= 0 && last >= 0 && first <= last )
103
116
QPtrListIterator<Difference> diffIt =
104
QPtrListIterator<Difference>( selectedModel->differences() );
117
QPtrListIterator<Difference>( m_selectedModel->differences() );
106
for( int i = first; diffIt.current() && i <= last; ++diffIt, ++i ) {
108
const Difference* d = diffIt.current();
109
bool selected = (d == selectedDiff);
119
for( int i = first; diffIt.current() && i <= last; ++diffIt, ++i )
121
const Difference* diff = diffIt.current();
122
bool selected = (diff == m_selectedDifference);
111
124
QRect leftRect = m_leftView->itemRect( i );
112
125
QRect rightRect = m_rightView->itemRect( i );
119
132
QPointArray topBezier = makeTopBezier( tl, tr );
120
133
QPointArray bottomBezier = makeBottomBezier( bl, br );
122
p->setPen( m_settings->colorForDifferenceType( d->type(), selected, d->applied() ) );
123
p->setBrush( m_settings->colorForDifferenceType( d->type(), selected, d->applied() ) );
135
p->setPen( m_settings->colorForDifferenceType( diff->type(), selected, diff->applied() ) );
136
p->setBrush( m_settings->colorForDifferenceType( diff->type(), selected, diff->applied() ) );
124
137
p->drawPolygon ( makeConnectPoly( topBezier, bottomBezier ) );
127
141
p->setPen( black );
128
142
p->drawPolyline( topBezier );
129
143
p->drawPolyline( bottomBezier );
149
163
QPointArray controlPoints;
150
controlPoints.setPoints( 4, l,tl, 20,tl, r-20,tr, r,tr );
151
return controlPoints.cubicBezier();
167
controlPoints.setPoints( 4, l,tl, 20,tl, r-20,tr, r,tr );
168
return controlPoints.cubicBezier();
172
controlPoints.setPoints( 2, l,tl, r,tr );
173
return controlPoints;
154
177
QPointArray KompareConnectWidget::makeBottomBezier( int bl, int br )
158
181
QPointArray controlPoints;
159
controlPoints.setPoints( 4, r,br, r-20,br, 20,bl, l,bl );
160
return controlPoints.cubicBezier();
185
controlPoints.setPoints( 4, r,br, r-20,br, 20,bl, l,bl );
186
return controlPoints.cubicBezier();
190
controlPoints.setPoints( 2, r,br, l,bl );
191
return controlPoints;
163
195
QPointArray KompareConnectWidget::makeConnectPoly( const QPointArray& topBezier, const QPointArray& bottomBezier )