Warning, file /office/calligra/libs/pageapp/KoPAViewModeNormal.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* This file is part of the KDE project 0002 * Copyright (C) 2007-2008 Thorsten Zachmann <zachmann@kde.org> 0003 * 0004 * This library is free software; you can redistribute it and/or 0005 * modify it under the terms of the GNU Library General Public 0006 * License as published by the Free Software Foundation; either 0007 * version 2 of the License, or (at your option) any later version. 0008 * 0009 * This library is distributed in the hope that it will be useful, 0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0012 * Library General Public License for more details. 0013 * 0014 * You should have received a copy of the GNU Library General Public License 0015 * along with this library; see the file COPYING.LIB. If not, write to 0016 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0017 * Boston, MA 02110-1301, USA. 0018 */ 0019 0020 #include "KoPAViewModeNormal.h" 0021 0022 #include <QKeyEvent> 0023 #include <QPainter> 0024 0025 #include <KoToolProxy.h> 0026 #include <KoShapeManager.h> 0027 #include <KoShapePaintingContext.h> 0028 #include <KoGridData.h> 0029 #include <KoGuidesData.h> 0030 #include "KoPACanvasBase.h" 0031 #include "KoPADocument.h" 0032 #include "KoPAPage.h" 0033 #include "KoPAMasterPage.h" 0034 #include "KoPAViewBase.h" 0035 #include "commands/KoPAChangePageLayoutCommand.h" 0036 0037 KoPAViewModeNormal::KoPAViewModeNormal( KoPAViewBase * view, KoPACanvasBase * canvas ) 0038 : KoPAViewMode( view, canvas ) 0039 , m_masterMode( false ) 0040 , m_savedPage( 0 ) 0041 { 0042 } 0043 0044 KoPAViewModeNormal::~KoPAViewModeNormal() 0045 { 0046 } 0047 0048 void KoPAViewModeNormal::paint(KoPACanvasBase* canvas, QPainter& painter, const QRectF &paintRect) 0049 { 0050 #ifdef NDEBUG 0051 Q_UNUSED(canvas) 0052 #else 0053 Q_ASSERT( m_canvas == canvas ); 0054 #endif 0055 0056 painter.translate( -m_canvas->documentOffset() ); 0057 painter.setRenderHint( QPainter::Antialiasing ); 0058 QRect clipRect = paintRect.translated( m_canvas->documentOffset() ).toRect(); 0059 painter.setClipRect( clipRect ); 0060 0061 painter.translate( m_canvas->documentOrigin().x(), m_canvas->documentOrigin().y() ); 0062 0063 KoViewConverter * converter = m_view->viewConverter( m_canvas ); 0064 QRectF updateRect = converter->viewToDocument( m_canvas->widgetToView( clipRect ) ); 0065 KoShapePaintingContext context; 0066 m_view->activePage()->paintBackground( painter, *converter, context ); 0067 0068 const KoPageLayout &layout = activePageLayout(); 0069 QSizeF pageSize(layout.width, layout.height); 0070 QRectF gridRect = QRectF(QPointF(), pageSize).intersected(updateRect); 0071 if (m_canvas->document()->gridData().paintGridInBackground()) { 0072 painter.setRenderHint(QPainter::Antialiasing, false); 0073 m_canvas->document()->gridData().paintGrid(painter, *converter, gridRect ); 0074 } 0075 0076 // paint the page margins 0077 paintMargins( painter, *converter ); 0078 0079 painter.setRenderHint( QPainter::Antialiasing ); 0080 0081 // paint the shapes 0082 if ( m_view->activePage()->displayMasterShapes() ) { 0083 m_canvas->masterShapeManager()->paint( painter, *converter, false ); 0084 } 0085 m_canvas->shapeManager()->paint( painter, *converter, false ); 0086 0087 painter.setRenderHint( QPainter::Antialiasing, false ); 0088 0089 if (!m_canvas->document()->gridData().paintGridInBackground()) { 0090 m_canvas->document()->gridData().paintGrid(painter, *converter, gridRect); 0091 } 0092 m_canvas->document()->guidesData().paintGuides(painter, *converter, updateRect); 0093 0094 painter.setRenderHint(QPainter::Antialiasing); 0095 m_toolProxy->paint(painter, *converter); 0096 } 0097 0098 void KoPAViewModeNormal::tabletEvent( QTabletEvent *event, const QPointF &point ) 0099 { 0100 m_toolProxy->tabletEvent( event, point ); 0101 } 0102 0103 void KoPAViewModeNormal::mousePressEvent( QMouseEvent *event, const QPointF &point ) 0104 { 0105 m_toolProxy->mousePressEvent( event, point ); 0106 } 0107 0108 void KoPAViewModeNormal::mouseDoubleClickEvent( QMouseEvent *event, const QPointF &point ) 0109 { 0110 m_toolProxy->mouseDoubleClickEvent( event, point ); 0111 } 0112 0113 void KoPAViewModeNormal::mouseMoveEvent( QMouseEvent *event, const QPointF &point ) 0114 { 0115 m_toolProxy->mouseMoveEvent( event, point ); 0116 } 0117 0118 void KoPAViewModeNormal::mouseReleaseEvent( QMouseEvent *event, const QPointF &point ) 0119 { 0120 m_toolProxy->mouseReleaseEvent( event, point ); 0121 } 0122 0123 void KoPAViewModeNormal::shortcutOverrideEvent( QKeyEvent *event ) 0124 { 0125 m_toolProxy->shortcutOverrideEvent( event ); 0126 } 0127 0128 void KoPAViewModeNormal::keyPressEvent( QKeyEvent *event ) 0129 { 0130 m_toolProxy->keyPressEvent( event ); 0131 0132 if ( ! event->isAccepted() ) { 0133 event->accept(); 0134 0135 switch ( event->key() ) 0136 { 0137 case Qt::Key_Home: 0138 m_view->navigatePage( KoPageApp::PageFirst ); 0139 break; 0140 case Qt::Key_PageUp: 0141 m_view->navigatePage( KoPageApp::PagePrevious ); 0142 break; 0143 case Qt::Key_PageDown: 0144 m_view->navigatePage( KoPageApp::PageNext ); 0145 break; 0146 case Qt::Key_End: 0147 m_view->navigatePage( KoPageApp::PageLast ); 0148 break; 0149 default: 0150 event->ignore(); 0151 break; 0152 } 0153 } 0154 } 0155 0156 void KoPAViewModeNormal::keyReleaseEvent( QKeyEvent *event ) 0157 { 0158 m_toolProxy->keyReleaseEvent( event ); 0159 } 0160 0161 void KoPAViewModeNormal::wheelEvent( QWheelEvent * event, const QPointF &point ) 0162 { 0163 m_toolProxy->wheelEvent( event, point ); 0164 } 0165 0166 void KoPAViewModeNormal::setMasterMode( bool master ) 0167 { 0168 m_masterMode = master; 0169 KoPAPage * page = dynamic_cast<KoPAPage *>( m_view->activePage() ); 0170 if ( m_masterMode ) { 0171 if ( page ) { 0172 m_view->doUpdateActivePage( page->masterPage() ); 0173 m_savedPage = page; 0174 } 0175 } 0176 else if ( m_savedPage ) { 0177 m_view->doUpdateActivePage( m_savedPage ); 0178 m_savedPage = 0; 0179 } 0180 } 0181 0182 bool KoPAViewModeNormal::masterMode() 0183 { 0184 return m_masterMode; 0185 } 0186 0187 void KoPAViewModeNormal::addShape( KoShape *shape ) 0188 { 0189 // the KoShapeController sets the active layer as parent 0190 KoPAPageBase * page( m_view->kopaDocument()->pageByShape( shape ) ); 0191 0192 bool isMaster = dynamic_cast<KoPAMasterPage*>( page ) != 0; 0193 0194 KoPAPage * p; 0195 if ( page == m_view->activePage() ) { 0196 m_view->kopaCanvas()->shapeManager()->addShape( shape ); 0197 } 0198 else if ( isMaster && ( p = dynamic_cast<KoPAPage*>( m_view->activePage() ) ) != 0 ) { 0199 if ( p->masterPage() == page ) { 0200 m_view->kopaCanvas()->masterShapeManager()->addShape( shape ); 0201 } 0202 } 0203 } 0204 0205 void KoPAViewModeNormal::removeShape( KoShape *shape ) 0206 { 0207 KoPAPageBase * page( m_view->kopaDocument()->pageByShape( shape ) ); 0208 0209 bool isMaster = dynamic_cast<KoPAMasterPage*>( page ) != 0; 0210 0211 KoPAPage * p; 0212 if ( page == m_view->activePage() ) { 0213 m_view->kopaCanvas()->shapeManager()->remove( shape ); 0214 } 0215 else if ( isMaster && ( p = dynamic_cast<KoPAPage*>( m_view->activePage() ) ) != 0 ) { 0216 if ( p->masterPage() == page ) { 0217 m_view->kopaCanvas()->masterShapeManager()->remove( shape ); 0218 } 0219 } 0220 } 0221 0222 void KoPAViewModeNormal::changePageLayout( const KoPageLayout &pageLayout, bool applyToDocument, KUndo2Command *parent ) 0223 { 0224 KoPAPageBase *page = m_view->activePage(); 0225 KoPAMasterPage *masterPage = dynamic_cast<KoPAMasterPage *>( page ); 0226 if ( !masterPage ) { 0227 masterPage = static_cast<KoPAPage *>( page )->masterPage(); 0228 } 0229 0230 new KoPAChangePageLayoutCommand( m_canvas->document(), masterPage, pageLayout, applyToDocument, parent ); 0231 } 0232 0233 void KoPAViewModeNormal::paintMargins( QPainter &painter, const KoViewConverter &converter ) 0234 { 0235 if (!canvas()->showPageMargins()) { 0236 return; 0237 } 0238 KoPAPageBase *page = m_view->activePage(); 0239 KoPageLayout pl = page->pageLayout(); 0240 0241 QSizeF pageSize = QSizeF( pl.width, pl.height ); 0242 QRectF marginRect( pl.leftMargin, pl.topMargin, 0243 pageSize.width() - pl.leftMargin - pl.rightMargin, 0244 pageSize.height() - pl.topMargin - pl.bottomMargin ); 0245 0246 QPen pen(Qt::gray, 0); 0247 painter.setPen( pen ); 0248 painter.drawRect( converter.documentToView( marginRect ) ); 0249 } 0250