From 2fd15cc0276882e14941b46c057406c2bcb3751c Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 14 Feb 2012 20:14:40 +0300 Subject: [PATCH] Improved document navigation for the ticket 382. --- src/adaptors/UBThumbnailAdaptor.cpp | 79 ++++++++++++++++++++++------- src/adaptors/UBThumbnailAdaptor.h | 15 ++---- src/board/UBBoardController.cpp | 5 +- src/gui/UBDocumentNavigator.cpp | 37 +++++++------- src/gui/UBDocumentNavigator.h | 2 +- 5 files changed, 88 insertions(+), 50 deletions(-) diff --git a/src/adaptors/UBThumbnailAdaptor.cpp b/src/adaptors/UBThumbnailAdaptor.cpp index b6087094..bb3b469f 100644 --- a/src/adaptors/UBThumbnailAdaptor.cpp +++ b/src/adaptors/UBThumbnailAdaptor.cpp @@ -31,22 +31,8 @@ #include "core/memcheck.h" -UBThumbnailAdaptor::UBThumbnailAdaptor(QObject *parent) - : QObject(parent) -{ - // NOOP -} - - -UBThumbnailAdaptor::~UBThumbnailAdaptor() -{ - // NOOP -} - - QList UBThumbnailAdaptor::load(UBDocumentProxy* proxy) { - QList thumbnails; if (!proxy || proxy->persistencePath().size() == 0) @@ -76,14 +62,14 @@ QList UBThumbnailAdaptor::load(UBDocumentProxy* proxy) thumbCount++; if (displayMessage && thumbCount == 1) - UBApplication::showMessage(tr("Generating preview thumbnails ...")); + UBApplication::showMessage(QObject::tr("Generating preview thumbnails ...")); persistScene(proxy->persistencePath(), scene, i); } } if (displayMessage && thumbCount > 0) - UBApplication::showMessage(tr("%1 thumbnails generated ...").arg(thumbCount)); + UBApplication::showMessage(QObject::tr("%1 thumbnails generated ...").arg(thumbCount)); } @@ -114,8 +100,65 @@ QList UBThumbnailAdaptor::load(UBDocumentProxy* proxy) return thumbnails; } +QPixmap UBThumbnailAdaptor::load(UBDocumentProxy* proxy, int index) +{ + int existingPageCount = proxy->pageCount(); + + if (!proxy || proxy->persistencePath().size() == 0 || index < 0 || index >= existingPageCount) + return QPixmap(); + //compatibility with older formats (<= 4.0.b.2.0) : generate missing thumbnails + + QString thumbFileName = proxy->persistencePath() + + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", existingPageCount); + + QFile thumbFile(thumbFileName); + + if (!thumbFile.exists()) + { + bool displayMessage = (existingPageCount > 5); + + int thumbCount = 0; + + for(int i = 0 ; i < existingPageCount; i++) + { + UBGraphicsScene* scene = UBSvgSubsetAdaptor::loadScene(proxy, i); + + if (scene) + { + thumbCount++; + + if (displayMessage && thumbCount == 1) + UBApplication::showMessage(QObject::tr("Generating preview thumbnails ...")); + + persistScene(proxy->persistencePath(), scene, i); + } + } + + if (displayMessage && thumbCount > 0) + UBApplication::showMessage(QObject::tr("%1 thumbnails generated ...").arg(thumbCount)); + + } + + //end compatibility with older format + QString fileName = proxy->persistencePath() + + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", index + 1); + + QFile file(fileName); + if (file.exists()) + { + QPixmap pix; + //Warning. Works only with modified Qt +#ifdef Q_WS_X11 + pix.load(fileName, 0, Qt::AutoColor); +#else + pix.load(fileName, 0, Qt::AutoColor, false); +#endif + return pix; + } + return QPixmap(); +} -void UBThumbnailAdaptor::persistScene(const QString& pDocPath, UBGraphicsScene* pScene, const int pageIndex, const bool overrideModified) +void UBThumbnailAdaptor::persistScene(const QString& pDocPath, UBGraphicsScene* pScene, int pageIndex, bool overrideModified) { QString fileName = pDocPath + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex + 1); @@ -161,7 +204,7 @@ void UBThumbnailAdaptor::persistScene(const QString& pDocPath, UBGraphicsScene* } -QUrl UBThumbnailAdaptor::thumbnailUrl(UBDocumentProxy* proxy, const int pageIndex) +QUrl UBThumbnailAdaptor::thumbnailUrl(UBDocumentProxy* proxy, int pageIndex) { QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex + 1); diff --git a/src/adaptors/UBThumbnailAdaptor.h b/src/adaptors/UBThumbnailAdaptor.h index f3fc2b08..aa7ea361 100644 --- a/src/adaptors/UBThumbnailAdaptor.h +++ b/src/adaptors/UBThumbnailAdaptor.h @@ -21,21 +21,16 @@ class UBDocument; class UBDocumentProxy; class UBGraphicsScene; -class UBThumbnailAdaptor : public QObject +class UBThumbnailAdaptor //static class { - Q_OBJECT; - +private: UBThumbnailAdaptor() {} public: - - UBThumbnailAdaptor(QObject *parent = 0); - ~UBThumbnailAdaptor(); - - static void persistScene(const QString& pDocPath, UBGraphicsScene* pScene, const int pageIndex, const bool overrideModified = false); + static void persistScene(const QString& pDocPath, UBGraphicsScene* pScene, int pageIndex, bool overrideModified = false); static QList load(UBDocumentProxy* proxy); + static QPixmap load(UBDocumentProxy* proxy, int index); - static QUrl thumbnailUrl(UBDocumentProxy* proxy, const int pageIndex); - + static QUrl thumbnailUrl(UBDocumentProxy* proxy, int pageIndex); }; #endif // UBTHUMBNAILADAPTOR_H diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 72967adc..4ca6aecb 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1166,11 +1166,10 @@ void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, { emit activeDocumentChanged(); UBGraphicsTextItem::lastUsedTextColor = QColor(); + // Notify the navigator palette that the document has changed + emit setDocOnPageNavigator(pDocumentProxy); } - // Notify the navigator palette that the document has changed - emit setDocOnPageNavigator(pDocumentProxy); - if (sceneChange) { emit activeSceneChanged(); diff --git a/src/gui/UBDocumentNavigator.cpp b/src/gui/UBDocumentNavigator.cpp index 592e870a..7abf129b 100644 --- a/src/gui/UBDocumentNavigator.cpp +++ b/src/gui/UBDocumentNavigator.cpp @@ -99,7 +99,7 @@ void UBDocumentNavigator::setDocument(UBDocumentProxy *document) */ void UBDocumentNavigator::generateThumbnails() { - // Get the thumbnails + // Get the thumbnails QList thumbs = UBThumbnailAdaptor::load(mCrntDoc); mThumbsWithLabels.clear(); @@ -155,9 +155,8 @@ void UBDocumentNavigator::updateSpecificThumbnail(int iPage) UBThumbnailAdaptor::persistScene(mCrntDoc->persistencePath(), pScene, iPage); // Load it - QList thumbs = UBThumbnailAdaptor::load(mCrntDoc); - QPixmap pix = thumbs.at(iPage); - QGraphicsPixmapItem* pixmapItem = new UBSceneThumbnailNavigPixmap(pix, mCrntDoc, iPage); + QPixmap pix = UBThumbnailAdaptor::load(mCrntDoc, iPage); + UBSceneThumbnailNavigPixmap* pixmapItem = new UBSceneThumbnailNavigPixmap(pix, mCrntDoc, iPage); if(pixmapItem) { // Get the old thumbnail @@ -307,27 +306,29 @@ void UBDocumentNavigator::mousePressEvent(QMouseEvent *event) } } } - else - { - if(NULL != mCrntItem && mCrntItem != pCrntItem) - { - // Unselect the previous item - int iOldPage = -1; + else + { + if(NULL != mCrntItem && mCrntItem != pCrntItem) + { + // Unselect the previous item + mCrntItem->setSelected(false); + int iOldPage = -1; for(int i = 0; i < mThumbsWithLabels.size(); i++) if (mThumbsWithLabels.at(i).getThumbnail() == mCrntItem) { iOldPage = i; break; } - updateSpecificThumbnail(iOldPage); - mCrntItem = pCrntItem; - } + updateSpecificThumbnail(iOldPage); + mCrntItem = pCrntItem; + } - // Then display the related page - emit changeCurrentPage(); - refreshScene(); - } - bNavig = false; + // Then display the related page + emit changeCurrentPage(); + refreshScene(); + } + + bNavig = false; } QGraphicsView::mousePressEvent(event); } diff --git a/src/gui/UBDocumentNavigator.h b/src/gui/UBDocumentNavigator.h index 1d8c6796..5f322355 100644 --- a/src/gui/UBDocumentNavigator.h +++ b/src/gui/UBDocumentNavigator.h @@ -58,7 +58,7 @@ private slots: private: void refreshScene(); - void updateSpecificThumbnail(int iPage); + void updateSpecificThumbnail(int iPage); int border();