1 /*
2 * This file is part of the KDE project
3 *
4 * Copyright (C) 2006-2009 Thorsten Zachmann <zachmann@kde.org>
5 * Copyright (C) 2007 Thomas Zander <zander@kde.org>
6 * Copyright (C) 2009 Inge Wallin <inge@lysator.liu.se>
7 * Copyright (C) 2010 Boudewijn Rempt <boud@kogmbh.com>
8 * Copyright (C) 2011 Shantanu Tushar <shaan7in@gmail.com>
9 * Copyright (C) 2013 Arjen Hiemstra <ahiemstra@heimr.nl>
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of
14 * the License, or (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 * 02110-1301 USA
25 */
26
27 #include "CQPresentationView.h"
28 #include "CQCanvasController.h"
29
30 #include <KoZoomController.h>
31 #include <KoPADocument.h>
32 #include <KoPACanvasBase.h>
33 #include <KoPAPageBase.h>
34 #include <KoPAViewModeNormal.h>
35 #include <stage/part/KPrDocument.h>
36 #include <KoShapeManager.h>
37 #include <KoShapeLayer.h>
38 #include <KoSelection.h>
39 #include <KoPAPage.h>
40 #include <KoPAMasterPage.h>
41 #include <KoCanvasController.h>
42 #include <KoPACanvasItem.h>
43 #include <KoZoomHandler.h>
44 #include <KoPart.h>
45
46 #include <QGraphicsItem>
47
48 //TODO: Cleanup code that is not called
CQPresentationView(KoCanvasController * canvasController,KoPACanvasBase * canvas,KPrDocument * prDocument)49 CQPresentationView::CQPresentationView (KoCanvasController* canvasController, KoPACanvasBase* canvas, KPrDocument* prDocument)
50 : m_canvasController (canvasController), m_zoomController(0), m_paCanvas (canvas), m_prDocument (prDocument), m_page (0)
51 {
52 KoPAViewModeNormal* mode = new KoPAViewModeNormal (this, m_paCanvas);
53 setViewMode (mode);
54 }
55
~CQPresentationView()56 CQPresentationView::~CQPresentationView()
57 {
58
59 }
60
setShowRulers(bool show)61 void CQPresentationView::setShowRulers (bool show)
62 {
63 Q_UNUSED(show);
64 }
65
editPaste()66 void CQPresentationView::editPaste()
67 {
68
69 }
70
pagePaste()71 void CQPresentationView::pagePaste()
72 {
73
74 }
75
insertPage()76 void CQPresentationView::insertPage()
77 {
78
79 }
80
updatePageNavigationActions()81 void CQPresentationView::updatePageNavigationActions()
82 {
83
84 }
85
setActionEnabled(int actions,bool enable)86 void CQPresentationView::setActionEnabled (int actions, bool enable)
87 {
88 Q_UNUSED(actions);
89 Q_UNUSED(enable);
90
91 }
92
navigatePage(KoPageApp::PageNavigation pageNavigation)93 void CQPresentationView::navigatePage (KoPageApp::PageNavigation pageNavigation)
94 {
95 Q_UNUSED(pageNavigation);
96 }
97
activePage() const98 KoPAPageBase* CQPresentationView::activePage() const
99 {
100 return m_page;
101 }
102
setActivePage(KoPAPageBase * page)103 void CQPresentationView::setActivePage (KoPAPageBase* page)
104 {
105 KoShapeManager* shapeManager = m_paCanvas->shapeManager();
106 KoShapeManager* masterShapeManager = m_paCanvas->masterShapeManager();
107 shapeManager->removeAdditional (m_page);
108 m_page = page;
109 shapeManager->addAdditional (page);
110 QList<KoShape*> shapes = page->shapes();
111 shapeManager->setShapes (shapes, KoShapeManager::AddWithoutRepaint);
112 //Make the top most layer active
113 if (!shapes.isEmpty()) {
114 KoShapeLayer* layer = dynamic_cast<KoShapeLayer*> (shapes.last());
115 shapeManager->selection()->setActiveLayer (layer);
116 }
117
118 // if the page is not a master page itself set shapes of the master page
119 KoPAPage* paPage = dynamic_cast<KoPAPage*> (page);
120 if (paPage) {
121 KoPAMasterPage* masterPage = paPage->masterPage();
122 QList<KoShape*> masterShapes = masterPage->shapes();
123 masterShapeManager->setShapes (masterShapes, KoShapeManager::AddWithoutRepaint);
124 //Make the top most layer active
125 if (!masterShapes.isEmpty()) {
126 KoShapeLayer* layer = dynamic_cast<KoShapeLayer*> (masterShapes.last());
127 masterShapeManager->selection()->setActiveLayer (layer);
128 }
129 } else {
130 // if the page is a master page no shapes are in the masterShapeManager
131 masterShapeManager->setShapes (QList<KoShape*>());
132 }
133
134 // Set the current page number in the canvas resource provider
135 m_paCanvas->resourceManager()->setResource (KoCanvasResourceManager::CurrentPage, m_prDocument->pageIndex (page) + 1);
136 }
137
doUpdateActivePage(KoPAPageBase * page)138 void CQPresentationView::doUpdateActivePage (KoPAPageBase* page)
139 {
140 // save the old offset into the page so we can use it also on the new page
141 setActivePage (page);
142
143 m_paCanvas->updateSize();
144 KoPageLayout& layout = page->pageLayout();
145
146 QSizeF pageSize (layout.width, layout.height);
147 //m_paCanvas->setDocumentOrigin(QPointF(layout.width, layout.height));
148 m_paCanvas->setDocumentOrigin (QPointF (0, 0));
149 // the page is in the center of the canvas
150 m_paCanvas->resourceManager()->setResource (KoCanvasResourceManager::PageSize, pageSize);
151 zoomController()->setPageSize(pageSize);
152 zoomController()->setDocumentSize(pageSize);
153 //zoomController()->setZoom(KoZoomMode::ZOOM_PAGE, 1);
154
155 m_paCanvas->updateSize();
156 QGraphicsItem* item = dynamic_cast<QGraphicsItem*> (m_paCanvas);
157 item->update();
158
159 proxyObject->emitActivePageChanged();
160 }
161
zoomController() const162 KoZoomController* CQPresentationView::zoomController() const
163 {
164 return m_zoomController;
165 }
166
kopaDocument() const167 KoPADocument* CQPresentationView::kopaDocument() const
168 {
169 return m_prDocument;
170 }
171
kopaCanvas() const172 KoPACanvasBase* CQPresentationView::kopaCanvas() const
173 {
174 return m_paCanvas;
175 }
176
connectToZoomController()177 void CQPresentationView::connectToZoomController()
178 {
179 connect (zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode,qreal)), SLOT(slotZoomChanged(KoZoomMode::Mode,qreal)));
180 }
181
slotZoomChanged(KoZoomMode::Mode mode,qreal zoom)182 void CQPresentationView::slotZoomChanged (KoZoomMode::Mode mode, qreal zoom)
183 {
184 Q_UNUSED (zoom);
185 if (m_page) {
186 if (mode == KoZoomMode::ZOOM_PAGE) {
187 KoPageLayout& layout = m_page->pageLayout();
188 QRectF pageRect (0, 0, layout.width, layout.height);
189 m_canvasController->ensureVisible (m_paCanvas->viewConverter()->documentToView (pageRect));
190 } else if (mode == KoZoomMode::ZOOM_WIDTH) {
191 // horizontally center the page
192 KoPageLayout& layout = m_page->pageLayout();
193 QRectF pageRect (0, 0, layout.width, layout.height);
194 QRect viewRect = m_paCanvas->viewConverter()->documentToView (pageRect).toRect();
195 viewRect.translate (m_paCanvas->documentOrigin());
196 QRect currentVisible (qMax (0, -m_canvasController->canvasOffsetX()),
197 qMax (0, -m_canvasController->canvasOffsetY()),
198 m_canvasController->visibleWidth(),
199 m_canvasController->visibleHeight());
200 int horizontalMove = viewRect.center().x() - currentVisible.center().x();
201 m_canvasController->pan (QPoint (horizontalMove, 0));
202 }
203 dynamic_cast<KoPACanvasItem*> (m_paCanvas)->update();
204 }
205 }
206
setZoomController(KoZoomController * controller)207 void CQPresentationView::setZoomController(KoZoomController* controller)
208 {
209 m_zoomController = controller;
210 }
211