22 #include <QtGui/QStyle>
23 #include <QtCore/QString>
24 #include <QtCore/QTimer>
25 #include <QtGui/QScrollBar>
26 #include <QtCore/QMap>
27 #include <QtGui/QSplitter>
28 #include <QtGui/QApplication>
29 #include <QtGui/QPainter>
30 #include <QtGui/QPixmap>
31 #include <QtGui/QKeyEvent>
32 #include <QtGui/QGridLayout>
33 #include <QtGui/QResizeEvent>
34 #include <QtCore/QChildEvent>
35 #include <QtCore/QEvent>
36 #include <QtGui/QWheelEvent>
40 #include <kapplication.h>
41 #include <kglobalsettings.h>
47 #include "diffmodel.h"
48 #include "difference.h"
50 using namespace Diff2;
54 m_settings( settings )
59 scrollFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain );
60 scrollFrame->setLineWidth(scrollFrame->style()->pixelMetric(QStyle::PM_DefaultFrameWidth));
61 QGridLayout *pairlayout =
new QGridLayout(scrollFrame);
62 pairlayout->setSpacing(0);
63 pairlayout->setContentsMargins( 0, 0, 0, 0 );
64 m_vScroll =
new QScrollBar( Qt::Vertical, scrollFrame );
65 pairlayout->addWidget( m_vScroll, 0, 1 );
66 m_hScroll =
new QScrollBar( Qt::Horizontal, scrollFrame );
67 pairlayout->addWidget( m_hScroll, 1, 0 );
71 pairlayout->addWidget(
this, 0, 0 );
74 setLineWidth( style()->pixelMetric( QStyle::PM_DefaultFrameWidth ) );
77 setChildrenCollapsible(
false );
78 setFrameStyle( QFrame::NoFrame );
79 setSizePolicy( QSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored ));
80 setOpaqueResize(
true );
81 setFocusPolicy( Qt::WheelFocus );
88 connect( m_vScroll, SIGNAL(valueChanged(
int)), SLOT(
slotScrollToId(
int)) );
89 connect( m_vScroll, SIGNAL(sliderMoved(
int)), SLOT(
slotScrollToId(
int)) );
90 connect( m_hScroll, SIGNAL(valueChanged(
int)), SIGNAL(
setXOffset(
int)) );
91 connect( m_hScroll, SIGNAL(sliderMoved(
int)), SIGNAL(
setXOffset(
int)) );
93 m_scrollTimer=
new QTimer(
this);
94 m_restartTimer =
false;
95 connect (m_scrollTimer, SIGNAL(timeout()), SLOT(
timerTimeout()) );
99 kapp->sendPostedEvents(
this, QEvent::ChildAdded);
121 const int end = count();
122 for (
int i = 1; i < end; ++i )
128 if ( m_restartTimer )
129 m_restartTimer =
false;
131 m_scrollTimer->stop();
137 m_vScroll->setValue( m_scrollTo );
147 if( m_scrollTimer->isActive() )
149 m_restartTimer =
true;
155 m_vScroll->setValue(
id );
156 m_scrollTimer->start( 30 );
167 const int end = count();
168 for (
int i = 0; i < end; ++i ) {
170 int minHScroll = minHScrollId();
177 int m_pageSize = pageSize();
179 if( needVScrollBar() )
183 m_vScroll->blockSignals(
true );
184 m_vScroll->setRange( minVScrollId(),
186 m_vScroll->setValue( scrollId() );
187 m_vScroll->setSingleStep( m_scrollDistance );
188 m_vScroll->setPageStep( m_pageSize );
189 m_vScroll->blockSignals(
false );
196 if( needHScrollBar() )
199 m_hScroll->blockSignals(
true );
200 m_hScroll->setRange( minHScrollId(), maxHScrollId() );
201 m_hScroll->setValue( maxContentsX() );
202 m_hScroll->setSingleStep( 10 );
203 m_hScroll->setPageStep( minVisibleWidth() - 10 );
204 m_hScroll->blockSignals(
false );
219 m_vScroll->setValue( scrollId() );
225 switch ( e->key() ) {
228 m_hScroll->triggerAction( QAbstractSlider::SliderSingleStepAdd );
232 m_hScroll->triggerAction( QAbstractSlider::SliderSingleStepSub );
236 m_vScroll->triggerAction( QAbstractSlider::SliderSingleStepSub );
240 m_vScroll->triggerAction( QAbstractSlider::SliderSingleStepAdd );
242 case Qt::Key_PageDown:
243 m_vScroll->triggerAction( QAbstractSlider::SliderPageStepAdd );
246 m_vScroll->triggerAction( QAbstractSlider::SliderPageStepSub );
255 if ( e->orientation() == Qt::Vertical )
257 if ( e->modifiers() & Qt::ControlModifier ) {
258 if ( e->delta() < 0 )
259 m_vScroll->triggerAction( QAbstractSlider::SliderPageStepAdd );
261 m_vScroll->triggerAction( QAbstractSlider::SliderPageStepSub );
263 if ( e->delta() < 0 )
264 m_vScroll->triggerAction( QAbstractSlider::SliderSingleStepAdd );
266 m_vScroll->triggerAction( QAbstractSlider::SliderSingleStepSub );
271 if ( e->modifiers() & Qt::ControlModifier ) {
272 if ( e->delta() < 0 )
273 m_hScroll->triggerAction( QAbstractSlider::SliderPageStepAdd );
275 m_hScroll->triggerAction( QAbstractSlider::SliderPageStepSub );
277 if ( e->delta() < 0 )
278 m_hScroll->triggerAction( QAbstractSlider::SliderSingleStepAdd );
280 m_hScroll->triggerAction( QAbstractSlider::SliderSingleStepSub );
291 int KompareSplitter::scrollId()
295 return minVScrollId();
298 int KompareSplitter::lineHeight()
301 return listView(0)->fontMetrics().height();
305 int KompareSplitter::pageSize()
309 return view->
visibleHeight() - view->style()->pixelMetric( QStyle::PM_ScrollBarExtent );
314 bool KompareSplitter::needVScrollBar()
316 int pagesize = pageSize();
317 const int end = count();
318 for (
int i = 0; i < end; ++i ) {
320 if( view ->contentsHeight() > pagesize)
326 int KompareSplitter::minVScrollId()
331 const int end = count();
332 for (
int i = 0; i < end; ++i ) {
334 if (mSId < min || min == -1)
337 return ( min == -1 ) ? 0 : min;
340 int KompareSplitter::maxVScrollId()
344 const int end = count();
345 for (
int i = 0; i < end; ++i ) {
353 bool KompareSplitter::needHScrollBar()
355 const int end = count();
356 for (
int i = 0; i < end; ++i ) {
364 int KompareSplitter::minHScrollId()
370 int KompareSplitter::maxHScrollId()
374 const int end = count();
375 for (
int i = 0; i < end; ++i ) {
384 int KompareSplitter::maxContentsX()
388 const int end = count();
389 for (
int i = 0; i < end; ++i ) {
397 int KompareSplitter::minVisibleWidth()
406 const int end = count();
407 for (
int i = 0; i < end; ++i ) {
409 if ( vW < min || min == -1 )
412 return ( min == -1 ) ? 0 : min;
427 const int end = count();
428 for (
int i = 0; i < end; ++i ) {
440 const int end = count();
441 for (
int i = 0; i < end; ++i ) {
452 const int end = count();
453 for (
int i = 0; i < end; ++i )
460 const int end = count();
461 for (
int i = 0; i < end; ++i )
469 const int end = count();
470 for (
int i = 0; i < end; ++i )
477 const int end = count();
478 for (
int i = 0; i < end; ++i )
485 const int end = count();
486 for (
int i = 0; i < end; ++i ) {
488 view->setFont( m_settings->
m_font );
492 #include "komparesplitter.moc"
void scrollViewsToId(int id)
void slotDelayedRepaintHandles()
void slotUpdateScrollBars()
void slotApplyAllDifferences(bool apply)
void slotSetSelection(const Diff2::DiffModel *model, const Diff2::Difference *diff)
KompareConnectWidget * connectWidget(int index)
void slotUpdateVScrollValue()
void slotDelayedUpdateScrollBars()
void slotApplyDifference(bool apply)
void keyPressEvent(QKeyEvent *e)
void setSelectedDifference(const Diff2::Difference *diff, bool scroll)
void wheelEvent(QWheelEvent *e)
KompareSplitter(ViewSettings *settings, QWidget *parent)
void slotSetSelection(const Diff2::DiffModel *model, const Diff2::Difference *diff)
void slotRepaintHandles()
void slotApplyDifference(bool apply)
void slotDelayedUpdateVScrollValue()
void slotDifferenceClicked(const Diff2::Difference *diff)
void slotScrollToId(int id)
KompareListView * listView(int index)
void selectionChanged(const Diff2::Difference *diff)
void slotApplyAllDifferences(bool apply)
friend class KompareConnectWidgetFrame