WheelMouse works as in kghostview

svn path=/trunk/kdegraphics/kpdf/; revision=251103
This commit is contained in:
Laurent Montel 2003-09-14 21:49:26 +00:00
parent 5e89aedf16
commit 0ff129b678
4 changed files with 117 additions and 2 deletions

View file

@ -181,6 +181,40 @@ namespace KPDF
}
e->accept();
}
bool PageWidget::atTop() const
{
return verticalScrollBar()->value() == verticalScrollBar()->minValue();
}
bool PageWidget::atBottom() const
{
return verticalScrollBar()->value() == verticalScrollBar()->maxValue();
}
void PageWidget::wheelEvent( QWheelEvent *e )
{
int delta = e->delta();
e->accept();
if ((e->state() & ShiftButton) == ShiftButton) {
if ( e->delta() > 0 )
emit ZoomOut();
else
emit ZoomIn();
}
else if ( delta <= -120 && atBottom() )
{
emit ReadDown();
}
else if ( delta >= 120 && atTop())
{
emit ReadUp();
}
else
QScrollView::wheelEvent( e );
}
void PageWidget::updatePixmap()
{
if ( m_doc )
@ -200,6 +234,50 @@ namespace KPDF
viewport()->update();
}
}
bool PageWidget::readUp()
{
if( atTop() )
return false;
else {
int newValue = QMAX( verticalScrollBar()->value() - height() + 50,
verticalScrollBar()->minValue() );
/*
int step = 10;
int value = verticalScrollBar()->value();
while( value > newValue - step ) {
verticalScrollBar()->setValue( value );
value -= step;
}
*/
verticalScrollBar()->setValue( newValue );
return true;
}
}
bool PageWidget::readDown()
{
if( atBottom() )
return false;
else {
int newValue = QMIN( verticalScrollBar()->value() + height() - 50,
verticalScrollBar()->maxValue() );
/*
int step = 10;
int value = verticalScrollBar()->value();
while( value < newValue + step ) {
verticalScrollBar()->setValue( value );
value += step;
}
*/
verticalScrollBar()->setValue( newValue );
return true;
}
}
}
// vim:ts=2:sw=2:tw=78:et

View file

@ -31,6 +31,11 @@ namespace KPDF
void setPage(int pagenum);
int getPage() const { return m_currentPage; };
void enableScrollBars( bool b );
/**
* Return true if the top resp. bottom of the page is visible.
*/
bool atTop() const;
bool atBottom() const;
public slots:
void nextPage();
void previousPage();
@ -44,15 +49,20 @@ namespace KPDF
void scrollLeft();
void scrollBottom();
void scrollTop();
bool readUp();
bool readDown();
signals:
void linkClicked(LinkAction*);
void ReadUp();
void ReadDown();
void ZoomOut();
void ZoomIn();
protected:
virtual void keyPressEvent( QKeyEvent* );
void contentsMousePressEvent(QMouseEvent*);
void contentsMouseReleaseEvent(QMouseEvent*);
void contentsMouseMoveEvent(QMouseEvent*);
virtual void wheelEvent( QWheelEvent * );
virtual void drawContents ( QPainter *p, int, int, int, int );
private:

View file

@ -105,6 +105,10 @@ Part::Part(QWidget *parentWidget, const char *widgetName,
// set our XML-UI resource file
setXMLFile("kpdf_part.rc");
connect( m_outputDev, SIGNAL( ZoomIn() ), SLOT( slotZoomIn() ));
connect( m_outputDev, SIGNAL( ZoomOut() ), SLOT( slotZoomOut() ));
connect( m_outputDev, SIGNAL( ReadUp() ), SLOT( slotReadUp() ));
connect( m_outputDev, SIGNAL( ReadDown() ), SLOT( slotReadDown() ));
readSettings();
}
@ -114,7 +118,28 @@ Part::~Part()
writeSettings();
}
void Part::slotReadUp()
{
if( !m_doc )
return;
if( !m_outputDev->readUp() ) {
slotPreviousPage();
m_outputDev->scrollBottom();
}
}
void Part::slotReadDown()
{
if( !m_doc )
return;
if( !m_outputDev->readDown() ) {
//todo fix if we can "next page" as in kghostview
slotNextPage();
m_outputDev->scrollTop();
}
}
void Part::writeSettings()
{

View file

@ -98,6 +98,8 @@ namespace KPDF
void showScrollBars( bool );
void showMarkList( bool );
void slotReadUp();
void slotReadDown();
private:
PDFDoc* m_doc;