Git commit 76d298d048bd7f519c4c022489151793650e8e7a by Paul Mendez. Committed on 16/05/2011 at 17:49. Pushed by mendez into branch 'master'.
Store zoom config in Calligra Stage Calligra Stage now store zoom config between sessions. SlidesSorter view mode stores a separate zoom value. Some zoom options was removed in slides sorter, because they haven't meaning in that view. REVIEW: 101129 GUI: Remove not applicable zoom options from slides sorter view in Stage M +59 -0 kpresenter/part/KPrView.cpp M +41 -2 kpresenter/part/KPrView.h M +64 -9 kpresenter/part/KPrViewModeSlidesSorter.cpp M +27 -2 kpresenter/part/KPrViewModeSlidesSorter.h M +14 -0 libs/kopageapp/KoPAView.cpp M +2 -0 libs/kopageapp/KoPAView.h http://commits.kde.org/calligra/76d298d048bd7f519c4c022489151793650e8e7a diff --git a/kpresenter/part/KPrView.cpp b/kpresenter/part/KPrView.cpp index 0ba563a..04d502d 100644 --- a/kpresenter/part/KPrView.cpp +++ b/kpresenter/part/KPrView.cpp @@ -38,6 +38,7 @@ #include <KoDocumentInfo.h> #include <KoShapeRegistry.h> #include <KoShapeLayer.h> +#include <KoZoomController.h> #include "KPrDocument.h" #include "KPrPage.h" @@ -50,6 +51,7 @@ #include "KPrShapeManagerDisplayMasterStrategy.h" #include "KPrPageSelectStrategyActive.h" #include "KPrPicturesImport.h" +#include "KPrFactory.h" #include "commands/KPrAnimationCreateCommand.h" #include "commands/KPrSetCustomSlideShowsCommand.h" #include "dockers/KPrPageLayoutDockerFactory.h" @@ -101,10 +103,12 @@ KPrView::KPrView( KPrDocument *document, QWidget *parent ) if (canvas) { m_slidesSorterMode = new KPrViewModeSlidesSorter(this, canvas); } + connect(zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode,qreal)), this, SLOT(zoomChanged(KoZoomMode::Mode,qreal))); } KPrView::~KPrView() { + saveZoomConfig(zoomMode(), zoom()); delete m_presentationMode; delete m_notesMode; delete m_slidesSorterMode; @@ -180,6 +184,7 @@ void KPrView::initGUI() if ( !group.hasKey( "State" ) ) { group.writeEntry( "State", state ); } + initZoomConfig(); } void KPrView::initActions() @@ -433,4 +438,58 @@ void KPrView::insertPictures() pictureImport.import(this); } +void KPrView::initZoomConfig() +{ + KSharedConfigPtr config = KPrFactory::componentData().config(); + int m_zoom = 100; + KoZoomMode::Mode m_zoomMode = KoZoomMode::ZOOM_PAGE; + + if (config->hasGroup("Interface")) { + const KConfigGroup interface = config->group("Interface"); + m_zoom = interface.readEntry("Zoom", m_zoom); + m_zoomMode = static_cast<KoZoomMode::Mode>(interface.readEntry("ZoomMode", (int) m_zoomMode)); + } + zoomController()->setZoom(m_zoomMode, m_zoom/100.); + setZoom(m_zoomMode, m_zoom); + centerPage(); +} + +void KPrView::zoomChanged(KoZoomMode::Mode mode, qreal zoom) +{ + setZoom(mode, qRound(zoom * 100.)); +} + +void KPrView::saveZoomConfig(KoZoomMode::Mode mode, int zoom) +{ + KSharedConfigPtr config = KPrFactory::componentData().config(); + + if (config->hasGroup("Interface")) { + KConfigGroup interface = config->group("Interface"); + interface.writeEntry("Zoom", zoom); + interface.writeEntry("ZoomMode", (int)mode); + } +} + +void KPrView::setZoom(KoZoomMode::Mode zoomMode, int zoom) +{ + m_zoom = zoom; + m_zoomMode = zoomMode; +} + +int KPrView::zoom() +{ + return m_zoom; +} + +KoZoomMode::Mode KPrView::zoomMode() +{ + return m_zoomMode; +} + +void KPrView::restoreZoomConfig() +{ + zoomController()->setZoom(zoomMode(), zoom()/100.); + centerPage(); +} + #include "KPrView.moc" diff --git a/kpresenter/part/KPrView.h b/kpresenter/part/KPrView.h index 80b6752..a558a2e 100644 --- a/kpresenter/part/KPrView.h +++ b/kpresenter/part/KPrView.h @@ -22,9 +22,7 @@ #define KPRVIEW_H #include "stage_export.h" - #include <QObject> - #include <KoPAView.h> class KPrDocument; @@ -66,6 +64,43 @@ public: */ bool isPresentationRunning() const; + /** + * Load zoom configuration + */ + void initZoomConfig(); + + /** + * Restore zoom configuration + */ + void restoreZoomConfig(); + + /** + * Save zoom value + */ + void saveZoomConfig(KoZoomMode::Mode zoomMode, int zoom); + + /** + * Setter of the zoom + * + * @param zoom percent + * @param zoom mode + */ + void setZoom(KoZoomMode::Mode zoomMode, int zoom); + + /** + * Return the last zoom stored + * + * @return the last zoom stored + */ + int zoom(); + + /** + * Return the last zoom mode stored + * + * @return the last zoom mode stored + */ + KoZoomMode::Mode zoomMode(); + public slots: /** * Activate the presentation view mode @@ -101,6 +136,8 @@ protected slots: void highlightPresentation(); void blackPresentation(); void showStatusBar(bool toggled); + /// called if the zoom changed + void zoomChanged(KoZoomMode::Mode mode, qreal zoom); private: KActionMenu *m_actionStartPresentation; @@ -121,6 +158,8 @@ private: KPrViewModeSlidesSorter *m_slidesSorterMode; KPrViewAdaptor *m_dbus; + int m_zoom; + KoZoomMode::Mode m_zoomMode; virtual KoPrintJob *createPdfPrintJob(); }; diff --git a/kpresenter/part/KPrViewModeSlidesSorter.cpp b/kpresenter/part/KPrViewModeSlidesSorter.cpp index b4fee3c..b71c1b9 100644 --- a/kpresenter/part/KPrViewModeSlidesSorter.cpp +++ b/kpresenter/part/KPrViewModeSlidesSorter.cpp @@ -28,6 +28,7 @@ #include <QtCore/qmath.h> #include "KPrSlidesSorterDocumentModel.h" +#include "KPrFactory.h" #include <KoResourceManager.h> #include <KoRuler.h> #include <KoSelection.h> @@ -51,6 +52,7 @@ #include <klocale.h> #include <KDebug> +#include <kconfiggroup.h> KPrViewModeSlidesSorter::KPrViewModeSlidesSorter(KoPAView *view, KoPACanvas *canvas) : KoPAViewMode( view, canvas ) @@ -73,6 +75,8 @@ KPrViewModeSlidesSorter::KPrSlidesSorter::~KPrSlidesSorter() KPrViewModeSlidesSorter::~KPrViewModeSlidesSorter() { + //save zoom value + saveZoomConfig(zoom()); } void KPrViewModeSlidesSorter::paint(KoPACanvasBase* /*canvas*/, QPainter& /*painter*/, const QRectF &/*paintRect*/) @@ -219,10 +223,20 @@ void KPrViewModeSlidesSorter::activate(KoPAViewMode *previousViewMode) connect(m_slidesSorter, SIGNAL(pressed(QModelIndex)), this, SLOT(itemClicked(const QModelIndex))); connect(this, SIGNAL(pageChanged(KoPAPageBase*)), m_view->proxyObject, SLOT(updateActivePage(KoPAPageBase*))); - connect(m_view->proxyObject, SIGNAL(activePageChanged()), this, SLOT(updatePageAdded())); + connect(m_view->proxyObject, SIGNAL(activePageChanged()), this, SLOT(updateToActivePageIndex())); connect(m_view->kopaDocument(),SIGNAL(pageAdded(KoPAPageBase*)),this, SLOT(updateModel())); connect(m_view->kopaDocument(),SIGNAL(pageRemoved(KoPAPageBase*)),this, SLOT(updateModel())); - connect(m_view->zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode,qreal)), this, SLOT(updateZoom(KoZoomMode::Mode,qreal))); + + //change zoom saving slot + connect(m_view->zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode, qreal)), this, SLOT(updateZoom(KoZoomMode::Mode, qreal))); + + KPrView *kPrview = dynamic_cast<KPrView *>(m_view); + if (kPrview) { + disconnect(kPrview->zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode, qreal)), kPrview, SLOT(zoomChanged(KoZoomMode::Mode, qreal))); + m_view->zoomController()->zoomAction()->setZoomModes(KoZoomMode::ZOOM_CONSTANT); + loadZoomConfig(); + } + } void KPrViewModeSlidesSorter::deactivate() @@ -237,20 +251,30 @@ void KPrViewModeSlidesSorter::deactivate() if (view) { view->show(); } + + //save zoom value + saveZoomConfig(zoom()); + + //change zoom saving slot and restore normal view zoom values + disconnect(m_view->zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode, qreal)), this, SLOT(updateZoom(KoZoomMode::Mode, qreal))); + + m_view->zoomController()->zoomAction()->setZoomModes(KoZoomMode::ZOOM_PAGE | KoZoomMode::ZOOM_WIDTH); + m_view->setActivePage(m_view->kopaDocument()->pageByIndex(m_slidesSorter->currentIndex().row(), false)); + + KPrView *kPrview = dynamic_cast<KPrView *>(m_view); + if (kPrview) { + kPrview->restoreZoomConfig(); + connect(kPrview->zoomController(), SIGNAL(zoomChanged(KoZoomMode::Mode, qreal)), kPrview, SLOT(zoomChanged(KoZoomMode::Mode, qreal))); + } + + } void KPrViewModeSlidesSorter::updateModel() { m_documentModel->update(); updateToActivePageIndex(); } -void KPrViewModeSlidesSorter::updatePageAdded() -{ - m_documentModel->update(); - int row = m_view->kopaDocument()->pageIndex(m_view->activePage()); - QModelIndex index = m_documentModel->index(row, 0); - m_slidesSorter->setCurrentIndex(index); -} void KPrViewModeSlidesSorter::updateActivePage( KoPAPageBase *page ) { @@ -536,6 +560,8 @@ void KPrViewModeSlidesSorter::updateZoom(KoZoomMode::Mode mode, qreal zoom) //update item size QModelIndex item = m_documentModel->index(0,0); setItemSize(m_slidesSorter->visualRect(item)); + + setZoom(qRound(zoom * 100.)); } void KPrViewModeSlidesSorter::setIconSize(QSize size) @@ -545,3 +571,32 @@ void KPrViewModeSlidesSorter::setIconSize(QSize size) } } + +void KPrViewModeSlidesSorter::loadZoomConfig() +{ + KSharedConfigPtr config = KPrFactory::componentData().config(); + int s_zoom = 100; + + if (config->hasGroup("Interface")) { + const KConfigGroup interface = config->group("Interface"); + s_zoom = interface.readEntry("ZoomSlidesSorter", s_zoom); + } + m_view->zoomController()->setZoom(KoZoomMode::ZOOM_CONSTANT, s_zoom/100.); +} + +void KPrViewModeSlidesSorter::saveZoomConfig(int zoom) +{ + KSharedConfigPtr config = KPrFactory::componentData().config(); + KConfigGroup interface = config->group("Interface"); + interface.writeEntry("ZoomSlidesSorter", zoom); +} + +void KPrViewModeSlidesSorter::setZoom(int zoom) +{ + m_zoom = zoom; +} + +int KPrViewModeSlidesSorter::zoom() +{ + return m_zoom; +} diff --git a/kpresenter/part/KPrViewModeSlidesSorter.h b/kpresenter/part/KPrViewModeSlidesSorter.h index ec5f669..917bd37 100644 --- a/kpresenter/part/KPrViewModeSlidesSorter.h +++ b/kpresenter/part/KPrViewModeSlidesSorter.h @@ -53,7 +53,6 @@ public: void updateActivePage( KoPAPageBase *page ); void updateDocumentModel(); void activateNormalViewMode(); - void updateToActivePageIndex(); void addShape( KoShape *shape ); void removeShape( KoShape *shape ); @@ -138,6 +137,31 @@ protected: void setIconSize(QSize size); /** + * load the last zoom value used + */ + void loadZoomConfig(); + + /** + * Setter of the zoom value + * + * @param zoom percent + */ + void setZoom(int zoom); + + /** + * Return the last zoom stored + * + * @return the last zoom stored + */ + int zoom(); + + /** + * save zoom value + */ + void saveZoomConfig(int zoom); + + + /** * This class manage the QListWidget itself. * Use all the getters and setters of the KPrViewModeSlidesSorter. * Most of the functions are Qt overrides to have the wished comportment. @@ -190,11 +214,11 @@ private: const int m_pageCount; bool m_dragingFlag; int m_lastItemNumber; + int m_zoom; private slots: void updateDocumentDock(); void updateModel(); - void updatePageAdded(); void itemClicked(const QModelIndex); void deleteSlide(); void addSlide(); @@ -202,6 +226,7 @@ private slots: void editCopy(); void editPaste(); void updateZoom(KoZoomMode::Mode mode, qreal zoom); + void updateToActivePageIndex(); signals: void pageChanged(KoPAPageBase *page); diff --git a/libs/kopageapp/KoPAView.cpp b/libs/kopageapp/KoPAView.cpp index c53edec..141e46c 100644 --- a/libs/kopageapp/KoPAView.cpp +++ b/libs/kopageapp/KoPAView.cpp @@ -1068,4 +1068,18 @@ bool KoPAView::isMasterUsed( KoPAPageBase * page ) return used; } +void KoPAView::centerPage() +{ + KoPageLayout &layout = d->activePage->pageLayout(); + QSizeF pageSize( layout.width, layout.height ); + + QPoint documentCenter = + zoomHandler()->documentToView(QPoint(pageSize.width(), + pageSize.height())).toPoint(); + + d->canvasController->setPreferredCenter(documentCenter); + d->canvasController->recenterPreferred(); + +} + #include <KoPAView.moc> diff --git a/libs/kopageapp/KoPAView.h b/libs/kopageapp/KoPAView.h index 5585364..f5dd5fb 100644 --- a/libs/kopageapp/KoPAView.h +++ b/libs/kopageapp/KoPAView.h @@ -150,6 +150,8 @@ public: /// Insert a new page after the current one void insertPage(); + void centerPage(); + protected: /// creates the widgets (called from the constructor)
