Hi! This is the new version of my patch! The USer
Index: ui/presentationwidget.h =================================================================== --- ui/presentationwidget.h (Revision 1009790) +++ ui/presentationwidget.h (Arbeitskopie) @@ -14,6 +14,7 @@ #include <qpixmap.h> #include <qstringlist.h> #include <qwidget.h> +#include <kicon.h> #include "core/observer.h" #include "core/pagetransition.h" @@ -25,6 +26,7 @@ class AnnotatorEngine; struct PresentationFrame; class PresentationSearchBar; +class QSpinBox; namespace Okular { class Action; @@ -120,9 +122,13 @@ QStringList m_metaStrings; QToolBar * m_topBar; QLineEdit *m_pagesEdit; + QSpinBox *m_speedBox; PresentationSearchBar *m_searchBar; KActionCollection * m_ac; KSelectAction * m_screenSelect; + QAction *m_playPauseAction; + KIcon m_playIcon; + KIcon m_pauseIcon; bool m_isSetup; bool m_blockNotifications; bool m_inBlackScreenMode; @@ -141,6 +147,8 @@ void screenResized( int ); void chooseScreen( QAction * ); void toggleBlackScreenMode( bool ); + void changeSpeed( int ); + void playPause(); }; #endif Index: ui/presentationwidget.cpp =================================================================== --- ui/presentationwidget.cpp (Revision 1009790) +++ ui/presentationwidget.cpp (Arbeitskopie) @@ -28,6 +28,7 @@ #include <qvalidator.h> #include <qapplication.h> #include <qdesktopwidget.h> +#include <qspinbox.h> #include <kcursor.h> #include <krandom.h> #include <qtoolbar.h> @@ -40,6 +41,7 @@ #include <kselectaction.h> #include <kshortcut.h> #include <kdialog.h> +#include <kicon.h> // system includes #include <stdlib.h> @@ -128,9 +130,10 @@ PresentationWidget::PresentationWidget( QWidget * parent, Okular::Document * doc, KActionCollection * collection ) : QWidget( 0 /* must be null, to have an independent widget */, Qt::FramelessWindowHint ), m_pressedLink( 0 ), m_handCursor( false ), m_drawingEngine( 0 ), m_screenSaverCookie( -1 ), - m_parentWidget( parent ), - m_document( doc ), m_frameIndex( -1 ), m_topBar( 0 ), m_pagesEdit( 0 ), m_searchBar( 0 ), - m_screenSelect( 0 ), m_isSetup( false ), m_blockNotifications( false ), m_inBlackScreenMode( false ) + m_parentWidget( parent ), m_document( doc ), m_frameIndex( -1 ), m_topBar( 0 ), m_pagesEdit( 0 ), + m_speedBox( 0 ), m_searchBar( 0 ), m_screenSelect( 0 ), m_playPauseAction( 0 ), + m_playIcon( "media-playback-start" ), m_pauseIcon( "media-playback-pause" ), + m_isSetup( false ), m_blockNotifications( false ), m_inBlackScreenMode( false ) { Q_UNUSED( parent ) setAttribute( Qt::WA_DeleteOnClose ); @@ -156,6 +159,17 @@ QSizePolicy sp = m_pagesEdit->sizePolicy(); sp.setHorizontalPolicy( QSizePolicy::Minimum ); m_pagesEdit->setSizePolicy( sp ); + m_speedBox = new QSpinBox( m_topBar ); + if(Okular::Settings::slidesAdvance()) + m_playPauseAction = new QAction( m_pauseIcon, i18n( "Pause" ), m_topBar ); + else + { + m_playPauseAction = new QAction( m_playIcon, i18n( "Continue" ), m_topBar ); + m_playPauseAction->setDisabled(true); + } + sp = m_speedBox->sizePolicy(); + sp.setHorizontalPolicy( QSizePolicy::Minimum ); + m_speedBox->setSizePolicy(sp); QFontMetrics fm( m_pagesEdit->font() ); QStyleOptionFrame option; option.initFrom( m_pagesEdit ); @@ -177,6 +191,9 @@ connect( eraseDrawingAct, SIGNAL( triggered() ), SLOT( clearDrawings() ) ); m_topBar->addAction( eraseDrawingAct ); addAction( eraseDrawingAct ); + m_topBar->addSeparator(); + m_topBar->addWidget(m_speedBox); + m_topBar->addAction(m_playPauseAction); QDesktopWidget *desktop = QApplication::desktop(); if ( desktop->numScreens() > 1 ) { @@ -216,7 +233,12 @@ m_nextPageTimer = new QTimer( this ); m_nextPageTimer->setSingleShot( true ); connect( m_nextPageTimer, SIGNAL( timeout() ), this, SLOT( slotNextPage() ) ); - + m_speedBox->setSuffix( i18n( "s" ) ); + m_speedBox->setValue(Okular::Settings::slidesAdvanceTime()); + m_speedBox->setMinimum(0); + connect( m_speedBox, SIGNAL( valueChanged( int ) ), this, SLOT( changeSpeed( int ) ) ); + connect( m_playPauseAction, SIGNAL( triggered() ), this, SLOT( playPause() ) ); + // handle cursor appearance as specified in configuration if ( Okular::Settings::slidesCursor() == Okular::Settings::EnumSlidesCursor::HiddenDelay ) { @@ -261,7 +283,6 @@ drawingAct->toggle(); m_document->removePageAnnotations( m_document->viewport().pageNumber, m_currentPageDrawings ); delete m_drawingEngine; - // delete frames QVector< PresentationFrame * >::iterator fIt = m_frames.begin(), fEnd = m_frames.end(); for ( ; fIt != fEnd; ++fIt ) @@ -432,6 +453,11 @@ else close(); break; + case Qt::Key_Enter: + case Qt::Key_P: + if( Okular::Settings::slidesAdvance() ) + playPause(); + break; } } @@ -1169,6 +1195,9 @@ changePage( m_frameIndex + 1 ); // auto advance to the next page if set startAutoChangeTimer(); + + // if you wouldn't call update pages would sometimes be skipped (because they are never drawn) + update(); } else { @@ -1919,5 +1948,31 @@ m_transitionTimer->start( 0 ); } +void PresentationWidget::changeSpeed( int seconds ) +{ + Okular::Settings::setSlidesAdvanceTime( seconds ); + m_nextPageTimer->stop(); + m_playPauseAction->setDisabled( seconds == 0 ); + m_playPauseAction->setIcon( m_playIcon ); + m_playPauseAction->setText( i18n( "Continue" ) ); +} +void PresentationWidget::playPause() +{ + if(m_nextPageTimer->isActive()) + { + m_nextPageTimer->stop(); + m_playPauseAction->setIcon( m_playIcon ); + m_playPauseAction->setText( i18n( "Continue" ) ); + } + else + { + // When you press continue, you usually want to see the next page + slotNextPage(); + startAutoChangeTimer(); + m_playPauseAction->setIcon( m_pauseIcon ); + m_playPauseAction->setText( i18n( "Pause" ) ); + } +} + #include "presentationwidget.moc"
_______________________________________________ Okular-devel mailing list Okular-devel@kde.org https://mail.kde.org/mailman/listinfo/okular-devel