File indexing completed on 2024-05-12 16:36:50

0001 /* This file is part of the KDE project
0002  * Copyright (C) 2007-2008 Thorsten Zachmann <zachmann@kde.org>
0003  * Copyright (C) 2008 Fredy Yanardi <fyanardi@kde.org>
0004  * Copyright (C) 2008 C. Boemann <cbo@boemann.dk>
0005  *
0006  * This library is free software; you can redistribute it and/or
0007  * modify it under the terms of the GNU Library General Public
0008  * License as published by the Free Software Foundation; either
0009  * version 2 of the License, or (  at your option ) any later version.
0010  *
0011  * This library is distributed in the hope that it will be useful,
0012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014  * Library General Public License for more details.
0015  *
0016  * You should have received a copy of the GNU Library General Public License
0017  * along with this library; see the file COPYING.LIB.  If not, write to
0018  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0019  * Boston, MA 02110-1301, USA.
0020  */
0021 
0022 #include "KPrViewModePreviewPageEffect.h"
0023 
0024 #include <QEvent>
0025 #include <QKeyEvent>
0026 #include <QPainter>
0027 #include <QDesktopWidget>
0028 
0029 #include <KoPointerEvent.h>
0030 #include <KoPageApp.h>
0031 #include <KoPACanvasBase.h>
0032 #include <KoPAViewBase.h>
0033 #include <KoZoomHandler.h>
0034 
0035 #include "StageDebug.h"
0036 #include "KPrDocument.h"
0037 #include "KPrEndOfSlideShowPage.h"
0038 #include "KPrPage.h"
0039 #include "pageeffects/KPrPageEffect.h"
0040 #include "pageeffects/KPrPageEffectRunner.h"
0041 
0042 KPrViewModePreviewPageEffect::KPrViewModePreviewPageEffect( KoPAViewBase * view, KoPACanvasBase * canvas )
0043 : KoPAViewMode( view, canvas )
0044 , m_savedViewMode(0)
0045 , m_pageEffect(0)
0046 , m_pageEffectRunner(0)
0047 , m_page(0)
0048 , m_prevpage(0)
0049 {
0050     connect( &m_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(animate()) );
0051     connect( &m_timeLine, SIGNAL(finished()), this, SLOT(activateSavedViewMode()) );
0052 }
0053 
0054 KPrViewModePreviewPageEffect::~KPrViewModePreviewPageEffect()
0055 {
0056 }
0057 
0058 
0059 void KPrViewModePreviewPageEffect::paint(KoPACanvasBase* canvas, QPainter& painter, const QRectF &paintRect)
0060 {
0061     Q_UNUSED(canvas);
0062     Q_UNUSED(paintRect);
0063     //QRect framerect = canvas->rect();
0064 
0065     if (m_pageEffectRunner && m_timeLine.state() == QTimeLine::Running) {
0066         m_pageEffectRunner->paint(painter);
0067     }
0068 }
0069 
0070 
0071 void KPrViewModePreviewPageEffect::tabletEvent( QTabletEvent *event, const QPointF &point )
0072 {
0073     Q_UNUSED(event);
0074     Q_UNUSED(point);
0075 }
0076 
0077 
0078 void KPrViewModePreviewPageEffect::mousePressEvent( QMouseEvent *event, const QPointF &point )
0079 {
0080     Q_UNUSED(event);
0081     Q_UNUSED(point);
0082 }
0083 
0084 
0085 void KPrViewModePreviewPageEffect::mouseDoubleClickEvent( QMouseEvent *event, const QPointF &point )
0086 {
0087     Q_UNUSED(event);
0088     Q_UNUSED(point);
0089 }
0090 
0091 
0092 void KPrViewModePreviewPageEffect::mouseMoveEvent( QMouseEvent *event, const QPointF &point )
0093 {
0094     Q_UNUSED(event);
0095     Q_UNUSED(point);
0096 }
0097 
0098 
0099 void KPrViewModePreviewPageEffect::mouseReleaseEvent( QMouseEvent *event, const QPointF &point )
0100 {
0101     Q_UNUSED(event);
0102     Q_UNUSED(point);
0103 }
0104 
0105 void KPrViewModePreviewPageEffect::shortcutOverrideEvent( QKeyEvent *event )
0106 {
0107     Q_UNUSED(event);
0108 }
0109 
0110 void KPrViewModePreviewPageEffect::keyPressEvent( QKeyEvent *event )
0111 {
0112     Q_UNUSED(event);
0113 }
0114 
0115 
0116 void KPrViewModePreviewPageEffect::keyReleaseEvent( QKeyEvent *event )
0117 {
0118     Q_UNUSED(event);
0119 }
0120 
0121 
0122 void KPrViewModePreviewPageEffect::wheelEvent( QWheelEvent * event, const QPointF &point )
0123 {
0124     Q_UNUSED(event);
0125     Q_UNUSED(point);
0126 }
0127 
0128 
0129 void KPrViewModePreviewPageEffect::activate( KoPAViewMode * previousViewMode )
0130 {
0131     m_savedViewMode = previousViewMode;               // store the previous view mode
0132 
0133     // the update of the canvas is needed so that the old page gets drawn fully before the effect starts
0134     canvas()->repaint();
0135     m_timeLine.setDuration( m_pageEffect->duration() );
0136     m_timeLine.setCurrentTime( 0 );
0137     m_timeLine.start();
0138 }
0139 
0140 
0141 void KPrViewModePreviewPageEffect::deactivate()
0142 {
0143     m_savedViewMode = 0;               // store the previous view mode
0144 }
0145 
0146 
0147 void KPrViewModePreviewPageEffect::updateActivePage( KoPAPageBase *page )
0148 {
0149     m_view->setActivePage( page );
0150 }
0151 
0152 
0153 void KPrViewModePreviewPageEffect::activateSavedViewMode()
0154 {
0155     m_view->setViewMode( m_savedViewMode );
0156     //canvas()->update();
0157 }
0158 
0159 
0160 void KPrViewModePreviewPageEffect::setPageEffect( KPrPageEffect* pageEffect, KPrPage* page, KPrPage* prevpage )
0161 {
0162     if(m_savedViewMode) {//stop the previous playing
0163         activateSavedViewMode();
0164     }
0165 
0166     delete m_pageEffect;
0167     m_pageEffect = pageEffect;
0168     delete m_pageEffectRunner;
0169     m_pageEffectRunner = 0;
0170 
0171     m_page = page;
0172     m_prevpage = prevpage;
0173 
0174     if(m_page) {
0175         updatePixmaps();
0176 
0177         if(m_pageEffect) {
0178             m_pageEffectRunner = new KPrPageEffectRunner( m_oldPage, m_newPage, canvas()->canvasWidget(), m_pageEffect );
0179         }
0180     }
0181 }
0182 
0183 void KPrViewModePreviewPageEffect::animate()
0184 {
0185     if ( m_pageEffectRunner ) {
0186         m_pageEffectRunner->next( m_timeLine.currentTime() );
0187     }
0188 }
0189 
0190 void KPrViewModePreviewPageEffect::updatePixmaps()
0191 {
0192     if(!m_page)
0193         return;
0194 
0195     QSize size = canvas()->canvasWidget()->size(); // TODO wrong this should be page/document size
0196 
0197     m_newPage = m_page->thumbnail(size);
0198 
0199     if(m_newPage.isNull())
0200         return;
0201 
0202     if(m_prevpage && m_prevpage != m_page)
0203     {
0204         m_oldPage = m_prevpage->thumbnail(size);
0205     }
0206     else
0207     {
0208         QPixmap oldPage(size);
0209         oldPage.fill( QColor(Qt::black) );
0210         m_oldPage = oldPage;
0211     }
0212 }