Release for improved document-related functionality

preferencesAboutTextFull
Anatoly Mihalchenko 13 years ago
parent aa106fa128
commit 350fd8ff79
  1. 4
      src/adaptors/UBCFFSubsetAdaptor.cpp
  2. 4
      src/adaptors/UBSvgSubsetAdaptor.cpp
  3. 51
      src/adaptors/UBThumbnailAdaptor.cpp
  4. 13
      src/adaptors/UBThumbnailAdaptor.h
  5. 52
      src/adaptors/publishing/UBDocumentPublisher.cpp
  6. 7
      src/adaptors/publishing/UBDocumentPublisher.h
  7. 2
      src/api/UBWidgetUniboardAPI.cpp
  8. 259
      src/board/UBBoardController.cpp
  9. 29
      src/board/UBBoardController.h
  10. 6
      src/board/UBBoardPaletteManager.cpp
  11. 2
      src/board/UBLibraryController.cpp
  12. 3
      src/core/UBApplicationController.cpp
  13. 4
      src/core/UBPersistenceManager.cpp
  14. 127
      src/document/UBDocumentContainer.cpp
  15. 67
      src/document/UBDocumentContainer.h
  16. 230
      src/document/UBDocumentController.cpp
  17. 15
      src/document/UBDocumentController.h
  18. 6
      src/document/UBDocumentProxy.h
  19. 2
      src/document/document.pri
  20. 3
      src/frameworks/UBFileSystemUtils.cpp
  21. 200
      src/gui/UBDocumentNavigator.cpp
  22. 25
      src/gui/UBDocumentNavigator.h
  23. 9
      src/gui/UBDocumentThumbnailWidget.cpp
  24. 4
      src/gui/UBDocumentTreeWidget.cpp
  25. 23
      src/gui/UBNavigatorPalette.cpp
  26. 2
      src/gui/UBNavigatorPalette.h
  27. 47
      src/gui/UBPageNavigationWidget.cpp
  28. 6
      src/gui/UBPageNavigationWidget.h
  29. 19
      src/gui/UBThumbnailWidget.cpp
  30. 8
      src/gui/UBThumbnailWidget.h

@ -1078,7 +1078,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistCurrentScene()
{ {
if (mCurrentScene != 0 && mCurrentScene->isModified()) if (mCurrentScene != 0 && mCurrentScene->isModified())
{ {
UBThumbnailAdaptor::persistScene(mProxy->persistencePath(), mCurrentScene, mProxy->pageCount() - 1); UBThumbnailAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1);
UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1); UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1);
mCurrentScene->setModified(false); mCurrentScene->setModified(false);
@ -1102,7 +1102,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistScenes()
UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, i); UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, i);
UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i); UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i);
tmpScene->setModified(true); tmpScene->setModified(true);
UBThumbnailAdaptor::persistScene(mProxy->persistencePath(), tmpScene, i); UBThumbnailAdaptor::persistScene(mProxy, tmpScene, i);
delete tmpScene; delete tmpScene;
mCurrentScene->setModified(false); mCurrentScene->setModified(false);

@ -56,6 +56,8 @@
#include "interfaces/IDataStorage.h" #include "interfaces/IDataStorage.h"
#include "document/UBDocumentContainer.h"
#include "pdf/PDFRenderer.h" #include "pdf/PDFRenderer.h"
#include "core/memcheck.h" #include "core/memcheck.h"
@ -313,7 +315,7 @@ QString UBSvgSubsetAdaptor::readTeacherGuideNode(int sceneIndex)
{ {
QString result; QString result;
QString fileName = UBApplication::boardController->activeDocument()->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", sceneIndex); QString fileName = UBApplication::boardController->selectedDocument()->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", sceneIndex);
QFile file(fileName); QFile file(fileName);
file.open(QIODevice::ReadOnly); file.open(QIODevice::ReadOnly);
QByteArray fileByteArray=file.readAll(); QByteArray fileByteArray=file.readAll();

@ -58,7 +58,7 @@ void UBThumbnailAdaptor::generateMissingThumbnails(UBDocumentProxy* proxy)
if (displayMessage && thumbCount == 1) if (displayMessage && thumbCount == 1)
UBApplication::showMessage(tr("Generating preview thumbnails ...")); UBApplication::showMessage(tr("Generating preview thumbnails ..."));
persistScene(proxy->persistencePath(), scene, iPageNo); persistScene(proxy, scene, iPageNo);
} }
if (displayMessage && thumbCount > 0) if (displayMessage && thumbCount > 0)
@ -68,10 +68,49 @@ void UBThumbnailAdaptor::generateMissingThumbnails(UBDocumentProxy* proxy)
} }
} }
const QPixmap* UBThumbnailAdaptor::get(UBDocumentProxy* proxy, int pageIndex)
{
QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
QFile file(fileName);
if (!file.exists())
{
generateMissingThumbnails(proxy);
}
if (file.exists())
{
QPixmap* pix = new QPixmap();
//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 NULL;
}
void UBThumbnailAdaptor::load(UBDocumentProxy* proxy, QList<const QPixmap*>& list)
{
generateMissingThumbnails(proxy);
foreach(const QPixmap* pm, list)
delete pm;
list.clear();
for(int i=0; i<proxy->pageCount(); i++)
list.append(get(proxy, i));
}
/*
QList<QPixmap> UBThumbnailAdaptor::load(UBDocumentProxy* proxy) QList<QPixmap> UBThumbnailAdaptor::load(UBDocumentProxy* proxy)
{ {
QList<QPixmap> thumbnails; QList<QPixmap> thumbnails;
qDebug() << "Loadinf thumbnails for " << proxy->name();
if (!proxy || proxy->persistencePath().isEmpty()) if (!proxy || proxy->persistencePath().isEmpty())
return thumbnails; return thumbnails;
@ -107,6 +146,8 @@ QList<QPixmap> UBThumbnailAdaptor::load(UBDocumentProxy* proxy)
QPixmap UBThumbnailAdaptor::load(UBDocumentProxy* proxy, int index) QPixmap UBThumbnailAdaptor::load(UBDocumentProxy* proxy, int index)
{ {
qDebug() << "Loadinf thumbnails for " << proxy->name();
int existingPageCount = proxy->pageCount(); int existingPageCount = proxy->pageCount();
if (!proxy || proxy->persistencePath().size() == 0 || index < 0 || index > existingPageCount) if (!proxy || proxy->persistencePath().size() == 0 || index < 0 || index > existingPageCount)
@ -131,10 +172,14 @@ QPixmap UBThumbnailAdaptor::load(UBDocumentProxy* proxy, int index)
} }
return QPixmap(); return QPixmap();
} }
*/
void UBThumbnailAdaptor::persistScene(const QString& pDocPath, UBGraphicsScene* pScene, int pageIndex, bool overrideModified) void UBThumbnailAdaptor::persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, int pageIndex, bool overrideModified)
{ {
QString fileName = pDocPath + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
qDebug() << "Persiste scene on path " << proxy->persistencePath() << ", index " << pageIndex;
QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
QFile thumbFile(fileName); QFile thumbFile(fileName);

@ -25,15 +25,18 @@ class UBThumbnailAdaptor //static class
{ {
Q_DECLARE_TR_FUNCTIONS(UBThumbnailAdaptor) Q_DECLARE_TR_FUNCTIONS(UBThumbnailAdaptor)
private: UBThumbnailAdaptor() {}
public: public:
static void persistScene(const QString& pDocPath, UBGraphicsScene* pScene, int pageIndex, bool overrideModified = false); static QUrl thumbnailUrl(UBDocumentProxy* proxy, int pageIndex);
static void persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, int pageIndex, bool overrideModified = false);
static const QPixmap* get(UBDocumentProxy* proxy, int index);
static void load(UBDocumentProxy* proxy, QList<const QPixmap*>& list);
private:
static void generateMissingThumbnails(UBDocumentProxy* proxy); static void generateMissingThumbnails(UBDocumentProxy* proxy);
static QList<QPixmap> load(UBDocumentProxy* proxy);
static QPixmap load(UBDocumentProxy* proxy, int index);
static QUrl thumbnailUrl(UBDocumentProxy* proxy, int pageIndex); UBThumbnailAdaptor() {}
}; };
#endif // UBTHUMBNAILADAPTOR_H #endif // UBTHUMBNAILADAPTOR_H

@ -33,6 +33,7 @@
#include "gui/UBMainWindow.h" #include "gui/UBMainWindow.h"
#include "document/UBDocumentProxy.h" #include "document/UBDocumentProxy.h"
#include "document/UBDocumentContainer.h"
#include "domain/UBGraphicsWidgetItem.h" #include "domain/UBGraphicsWidgetItem.h"
@ -57,7 +58,6 @@ THIRD_PARTY_WARNINGS_ENABLE
UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *parent) UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *parent)
: QObject(parent) : QObject(parent)
, mSourceDocument(pDocument) , mSourceDocument(pDocument)
, mPublishingDocument(0)
, mUsername("") , mUsername("")
, mPassword("") , mPassword("")
, bLoginCookieSet(false) , bLoginCookieSet(false)
@ -69,10 +69,6 @@ UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *pa
UBDocumentPublisher::~UBDocumentPublisher() UBDocumentPublisher::~UBDocumentPublisher()
{ {
if(mPublishingDocument){
delete mPublishingDocument;
mPublishingDocument = NULL;
}
} }
@ -115,8 +111,8 @@ void UBDocumentPublisher::buildUbwFile()
{ {
QUuid publishingUuid = QUuid::createUuid(); QUuid publishingUuid = QUuid::createUuid();
mPublishingDocument = new UBDocumentProxy(tmpDir); mPublishingPath = tmpDir;
mPublishingDocument->setPageCount(mSourceDocument->pageCount()); mPublishingSize = mSourceDocument->pageCount();
rasterizeScenes(); rasterizeScenes();
@ -124,24 +120,24 @@ void UBDocumentPublisher::buildUbwFile()
UBExportFullPDF pdfExporter; UBExportFullPDF pdfExporter;
pdfExporter.setVerbode(false); pdfExporter.setVerbode(false);
pdfExporter.persistsDocument(mSourceDocument, mPublishingDocument->persistencePath() + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".pdf"); pdfExporter.persistsDocument(mSourceDocument, mPublishingPath + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".pdf");
UBExportDocument ubzExporter; UBExportDocument ubzExporter;
ubzExporter.setVerbode(false); ubzExporter.setVerbode(false);
ubzExporter.persistsDocument(mSourceDocument, mPublishingDocument->persistencePath() + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".ubz"); ubzExporter.persistsDocument(mSourceDocument, mPublishingPath + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".ubz");
// remove all useless files // remove all useless files
for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) { for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++) {
QString filename = mPublishingDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg",pageIndex); QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.svg",pageIndex);
QFile::remove(filename); QFile::remove(filename);
} }
UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::imageDirectory); UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::imageDirectory);
UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::objectDirectory); UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::objectDirectory);
UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::videoDirectory); UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::videoDirectory);
UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::audioDirectory); UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::audioDirectory);
mTmpZipFile = UBFileSystemUtils::defaultTempDirPath() + "/" + UBStringUtils::toCanonicalUuid(QUuid::createUuid()) + ".ubw~"; mTmpZipFile = UBFileSystemUtils::defaultTempDirPath() + "/" + UBStringUtils::toCanonicalUuid(QUuid::createUuid()) + ".ubw~";
@ -156,7 +152,7 @@ void UBDocumentPublisher::buildUbwFile()
QuaZipFile outFile(&zip); QuaZipFile outFile(&zip);
if (!UBFileSystemUtils::compressDirInZip(mPublishingDocument->persistencePath(), "", &outFile, true)) if (!UBFileSystemUtils::compressDirInZip(mPublishingPath, "", &outFile, true))
{ {
qWarning("Export failed. compressDirInZip failed ..."); qWarning("Export failed. compressDirInZip failed ...");
zip.close(); zip.close();
@ -187,13 +183,14 @@ void UBDocumentPublisher::buildUbwFile()
void UBDocumentPublisher::rasterizeScenes() void UBDocumentPublisher::rasterizeScenes()
{ {
for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++)
{ {
UBApplication::showMessage(tr("Converting page %1/%2 ...").arg(UBApplication::boardController->pageFromSceneIndex(pageIndex)).arg(mPublishingDocument->pageCount()), true); UBApplication::showMessage(tr("Converting page %1/%2 ...").arg(UBDocumentContainer::pageFromSceneIndex(pageIndex)).arg(mPublishingSize), true);
UBSvgSubsetRasterizer rasterizer(mPublishingDocument, pageIndex); UBDocumentProxy publishingDocument(mPublishingPath);
UBSvgSubsetRasterizer rasterizer(&publishingDocument, pageIndex);
QString filename = mPublishingDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.jpg",pageIndex); QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.jpg",pageIndex);
rasterizer.rasterizeToFile(filename); rasterizer.rasterizeToFile(filename);
@ -203,7 +200,7 @@ void UBDocumentPublisher::rasterizeScenes()
void UBDocumentPublisher::updateGoogleMapApiKey() void UBDocumentPublisher::updateGoogleMapApiKey()
{ {
QDir widgestDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::widgetDirectory); QDir widgestDir(mPublishingPath + "/" + UBPersistenceManager::widgetDirectory);
QString uniboardWebGoogleMapApiKey = UBSettings::settings()->uniboardWebGoogleMapApiKey->get().toString(); QString uniboardWebGoogleMapApiKey = UBSettings::settings()->uniboardWebGoogleMapApiKey->get().toString();
@ -242,9 +239,10 @@ void UBDocumentPublisher::updateGoogleMapApiKey()
void UBDocumentPublisher::upgradeDocumentForPublishing() void UBDocumentPublisher::upgradeDocumentForPublishing()
{ {
for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++)
{ {
UBGraphicsScene *scene = UBSvgSubsetAdaptor::loadScene(mPublishingDocument, pageIndex); UBDocumentProxy publishingDocument(mPublishingPath);
UBGraphicsScene *scene = UBSvgSubsetAdaptor::loadScene(&publishingDocument, pageIndex);
QList<UBGraphicsW3CWidgetItem*> widgets; QList<UBGraphicsW3CWidgetItem*> widgets;
@ -252,12 +250,12 @@ void UBDocumentPublisher::upgradeDocumentForPublishing()
UBGraphicsW3CWidgetItem *widgetItem = dynamic_cast<UBGraphicsW3CWidgetItem*>(item); UBGraphicsW3CWidgetItem *widgetItem = dynamic_cast<UBGraphicsW3CWidgetItem*>(item);
if(widgetItem){ if(widgetItem){
generateWidgetPropertyScript(widgetItem, UBApplication::boardController->pageFromSceneIndex(pageIndex)); generateWidgetPropertyScript(widgetItem, UBDocumentContainer::pageFromSceneIndex(pageIndex));
widgets << widgetItem; widgets << widgetItem;
} }
} }
QString filename = mPublishingDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.json",pageIndex); QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.json",pageIndex);
QFile jsonFile(filename); QFile jsonFile(filename);
if (jsonFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) if (jsonFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
@ -369,7 +367,7 @@ void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *
if (!startFileName.startsWith("http://")) if (!startFileName.startsWith("http://"))
{ {
QString startFilePath = mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + widgetItem->uuid().toString() + ".wgt/" + startFileName; QString startFilePath = mPublishingPath + "/" + UBPersistenceManager::widgetDirectory + "/" + widgetItem->uuid().toString() + ".wgt/" + startFileName;
QFile startFile(startFilePath); QFile startFile(startFilePath);
@ -434,7 +432,7 @@ void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *
lines << " widget.preferences.clear = function() {}"; lines << " widget.preferences.clear = function() {}";
lines << " var uniboard = {};"; lines << " var uniboard = {};";
lines << " uniboard.pageCount = " + QString("%1").arg(mPublishingDocument->pageCount()) + ";"; lines << " uniboard.pageCount = " + QString("%1").arg(mPublishingSize) + ";";
lines << " uniboard.currentPageNumber = " + QString("%1").arg(pageNumber) + ";"; lines << " uniboard.currentPageNumber = " + QString("%1").arg(pageNumber) + ";";
lines << " uniboard.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "'"; lines << " uniboard.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "'";
lines << " uniboard.lang = navigator.language;"; lines << " uniboard.lang = navigator.language;";

@ -106,7 +106,12 @@ private slots:
private: private:
UBDocumentProxy *mSourceDocument; UBDocumentProxy *mSourceDocument;
UBDocumentProxy *mPublishingDocument;
//UBDocumentProxy *mPublishingDocument;
QString mPublishingPath;
int mPublishingSize;
void init(); void init();
void sendUbw(QString username, QString password); void sendUbw(QString username, QString password);
QString getBase64Of(QString stringToEncode); QString getBase64Of(QString stringToEncode);

@ -346,7 +346,7 @@ QString UBWidgetUniboardAPI::pageThumbnail(const int pageNumber)
if (UBApplication::boardController->activeScene() != mScene) if (UBApplication::boardController->activeScene() != mScene)
return ""; return "";
UBDocumentProxy *doc = UBApplication::boardController->activeDocument(); UBDocumentProxy *doc = UBApplication::boardController->selectedDocument();
if (!doc) if (!doc)
return ""; return "";

@ -1,7 +1,7 @@
/* /*
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
@ -72,9 +72,8 @@
//#include <typeinfo> //#include <typeinfo>
UBBoardController::UBBoardController(UBMainWindow* mainWindow) UBBoardController::UBBoardController(UBMainWindow* mainWindow)
: QObject(mainWindow->centralWidget()) : UBDocumentContainer(mainWindow->centralWidget())
, mMainWindow(mainWindow) , mMainWindow(mainWindow)
, mActiveDocument(0)
, mActiveScene(0) , mActiveScene(0)
, mActiveSceneIndex(-1) , mActiveSceneIndex(-1)
, mPaletteManager(0) , mPaletteManager(0)
@ -88,7 +87,6 @@ UBBoardController::UBBoardController(UBMainWindow* mainWindow)
, mIsClosing(false) , mIsClosing(false)
, mSystemScaleFactor(1.0) , mSystemScaleFactor(1.0)
, mCleanupDone(false) , mCleanupDone(false)
, mCacheWidgetIsEnabled(false)
{ {
mZoomFactor = UBSettings::settings()->boardZoomFactor->get().toDouble(); mZoomFactor = UBSettings::settings()->boardZoomFactor->get().toDouble();
@ -107,17 +105,17 @@ void UBBoardController::init()
setupViews(); setupViews();
setupToolbar(); setupToolbar();
connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentWillBeDeleted(UBDocumentProxy*)) //connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentWillBeDeleted(UBDocumentProxy*))
, this, SLOT(documentWillBeDeleted(UBDocumentProxy*))); // , this, SLOT(documentWillBeDeleted(UBDocumentProxy*)));
connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneCreated(UBDocumentProxy*, int)) //connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneCreated(UBDocumentProxy*, int))
, this, SLOT(documentSceneChanged(UBDocumentProxy*, int))); // , this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneDeleted(UBDocumentProxy*, int)) //connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneDeleted(UBDocumentProxy*, int))
, this, SLOT(documentSceneChanged(UBDocumentProxy*, int))); // , this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneMoved(UBDocumentProxy*, int)) //connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneMoved(UBDocumentProxy*, int))
, this, SLOT(documentSceneChanged(UBDocumentProxy*, int))); // , this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
connect(UBApplication::undoStack, SIGNAL(canUndoChanged(bool)) connect(UBApplication::undoStack, SIGNAL(canUndoChanged(bool))
, this, SLOT(undoRedoStateChange(bool))); , this, SLOT(undoRedoStateChange(bool)));
@ -160,20 +158,6 @@ int UBBoardController::currentPage()
return mActiveSceneIndex + 1; return mActiveSceneIndex + 1;
} }
int UBBoardController::pageFromSceneIndex(int sceneIndex)
{
if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
return sceneIndex;
return sceneIndex+1;
}
int UBBoardController::sceneIndexFromPage(int page)
{
if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
return page-1;
return page;
}
void UBBoardController::setupViews() void UBBoardController::setupViews()
{ {
mControlContainer = new QWidget(mMainWindow->centralWidget()); mControlContainer = new QWidget(mMainWindow->centralWidget());
@ -400,11 +384,6 @@ void UBBoardController::stopScript()
freezeW3CWidgets(true); freezeW3CWidgets(true);
} }
bool UBBoardController::cacheIsVisible()
{
return mCacheWidgetIsEnabled;
}
void UBBoardController::initToolbarTexts() void UBBoardController::initToolbarTexts()
{ {
QList<QAction*> allToolbarActions; QList<QAction*> allToolbarActions;
@ -480,12 +459,12 @@ void UBBoardController::addScene()
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene(); persistCurrentScene();
UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mActiveDocument, mActiveSceneIndex + 1); UBDocumentContainer::addPage(mActiveSceneIndex + 1);
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex + 1); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
setActiveDocumentScene(mActiveSceneIndex + 1);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
emit newPageAdded();
} }
@ -495,12 +474,12 @@ void UBBoardController::addScene(UBGraphicsScene* scene, bool replaceActiveIfEmp
{ {
UBGraphicsScene* clone = scene->sceneDeepCopy(); UBGraphicsScene* clone = scene->sceneDeepCopy();
if (scene->document() && (scene->document() != mActiveDocument)) if (scene->document() && (scene->document() != selectedDocument()))
{ {
foreach(QUrl relativeFile, scene->relativeDependencies()) foreach(QUrl relativeFile, scene->relativeDependencies())
{ {
QString source = scene->document()->persistencePath() + "/" + relativeFile.toString(); QString source = scene->document()->persistencePath() + "/" + relativeFile.toString();
QString target = mActiveDocument->persistencePath() + "/" + relativeFile.toString(); QString target = selectedDocument()->persistencePath() + "/" + relativeFile.toString();
QFileInfo fi(target); QFileInfo fi(target);
QDir d = fi.dir(); QDir d = fi.dir();
@ -512,17 +491,16 @@ void UBBoardController::addScene(UBGraphicsScene* scene, bool replaceActiveIfEmp
if (replaceActiveIfEmpty && mActiveScene->isEmpty()) if (replaceActiveIfEmpty && mActiveScene->isEmpty())
{ {
UBPersistenceManager::persistenceManager()->persistDocumentScene(mActiveDocument, clone, mActiveSceneIndex); setActiveDocumentScene(mActiveSceneIndex);
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex);
} }
else else
{ {
persistCurrentScene(); persistCurrentScene();
UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(mActiveDocument, clone, mActiveSceneIndex + 1); UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(selectedDocument(), clone, mActiveSceneIndex + 1);
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex + 1); setActiveDocumentScene(mActiveSceneIndex + 1);
} }
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
} }
} }
@ -537,22 +515,48 @@ void UBBoardController::addScene(UBDocumentProxy* proxy, int sceneIndex, bool re
} }
} }
void UBBoardController::duplicateScene(int nIndex)
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene();
QList<int> scIndexes;
scIndexes << nIndex;
duplicatePages(scIndexes);
selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
setActiveDocumentScene(nIndex + 1);
QApplication::restoreOverrideCursor();
emit pageChanged();
}
void UBBoardController::duplicateScene() void UBBoardController::duplicateScene()
{ {
if (UBApplication::applicationController->displayMode() != UBApplicationController::Board) if (UBApplication::applicationController->displayMode() != UBApplicationController::Board)
return; return;
duplicateScene(mActiveSceneIndex);
}
void UBBoardController::deleteScene(int nIndex)
{
if (selectedDocument()->pageCount()>2)
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene(); persistCurrentScene();
UBPersistenceManager::persistenceManager()->duplicateDocumentScene(mActiveDocument, mActiveSceneIndex); QList<int> scIndexes;
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); scIndexes << nIndex;
deletePages(scIndexes);
selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex + 1);
QApplication::restoreOverrideCursor();
emit pageChanged(); if (nIndex >= pageCount())
nIndex = pageCount()-1;
setActiveDocumentScene(nIndex);
QApplication::restoreOverrideCursor();
}
} }
@ -598,7 +602,7 @@ void UBBoardController::clearSceneBackground()
void UBBoardController::showDocumentsDialog() void UBBoardController::showDocumentsDialog()
{ {
if (mActiveDocument) if (selectedDocument())
persistCurrentScene(); persistCurrentScene();
UBApplication::mainWindow->actionLibrary->setChecked(false); UBApplication::mainWindow->actionLibrary->setChecked(false);
@ -725,7 +729,7 @@ void UBBoardController::previousScene()
{ {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene(); persistCurrentScene();
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex - 1); setActiveDocumentScene(mActiveSceneIndex - 1);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
@ -736,11 +740,11 @@ void UBBoardController::previousScene()
void UBBoardController::nextScene() void UBBoardController::nextScene()
{ {
if (mActiveSceneIndex < mActiveDocument->pageCount() - 1) if (mActiveSceneIndex < selectedDocument()->pageCount() - 1)
{ {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene(); persistCurrentScene();
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex + 1); setActiveDocumentScene(mActiveSceneIndex + 1);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
@ -755,7 +759,7 @@ void UBBoardController::firstScene()
{ {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene(); persistCurrentScene();
setActiveDocumentScene(mActiveDocument, 0); setActiveDocumentScene(0);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
@ -766,11 +770,11 @@ void UBBoardController::firstScene()
void UBBoardController::lastScene() void UBBoardController::lastScene()
{ {
if (mActiveSceneIndex < mActiveDocument->pageCount() - 1) if (mActiveSceneIndex < selectedDocument()->pageCount() - 1)
{ {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene(); persistCurrentScene();
setActiveDocumentScene(mActiveDocument, mActiveDocument->pageCount() - 1); setActiveDocumentScene(selectedDocument()->pageCount() - 1);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
@ -855,13 +859,9 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const
void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground) void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground)
{ {
QGraphicsItem *oldBackgroundObject = NULL;
if (isBackground)
oldBackgroundObject = mActiveScene->backgroundObject();
QString mimeType = pContentTypeHeader; QString mimeType = pContentTypeHeader;
// In some cases "image/jpeg;charset=" is returned by the drag-n-drop. That is // In some cases "image/jpeg;charset=" is retourned by the drag-n-drop. That is
// why we will check if an ; exists and take the first part (the standard allows this kind of mimetype) // why we will check if an ; exists and take the first part (the standard allows this kind of mimetype)
int position=mimeType.indexOf(";"); int position=mimeType.indexOf(";");
if(position != -1) if(position != -1)
@ -977,7 +977,7 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
QUrl url = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager() QUrl url = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(mActiveDocument, sourceUrl, pData, uuid)); ->addVideoFileToDocument(selectedDocument(), sourceUrl, pData, uuid));
mediaVideoItem = mActiveScene->addMedia(url, false, pPos); mediaVideoItem = mActiveScene->addMedia(url, false, pPos);
@ -1006,9 +1006,10 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
QUrl url = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager() QUrl url = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(mActiveDocument, sourceUrl, pData, uuid)); ->addVideoFileToDocument(selectedDocument(), sourceUrl, pData, uuid));
audioMediaItem = mActiveScene->addMedia(url, false, pPos); audioMediaItem = mActiveScene->addMedia(url, false, pPos);
audioMediaItem->setSourceUrl(sourceUrl); audioMediaItem->setSourceUrl(sourceUrl);
audioMediaItem->setUuid(uuid); audioMediaItem->setUuid(uuid);
} }
@ -1079,20 +1080,20 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
int result = 0; int result = 0;
if(!sourceUrl.isEmpty()){ if(!sourceUrl.isEmpty()){
QFile sourceFile(sourceUrl.toLocalFile()); QFile sourceFile(sourceUrl.toLocalFile());
result = UBDocumentManager::documentManager()->addFileToDocument(mActiveDocument, sourceFile); result = UBDocumentManager::documentManager()->addFileToDocument(selectedDocument(), sourceFile);
} }
else if(pData.size()){ else if(pData.size()){
QTemporaryFile pdfFile("XXXXXX.pdf"); QTemporaryFile pdfFile("XXXXXX.pdf");
if (pdfFile.open()) if (pdfFile.open())
{ {
pdfFile.write(pData); pdfFile.write(pData);
result = UBDocumentManager::documentManager()->addFileToDocument(mActiveDocument, pdfFile); result = UBDocumentManager::documentManager()->addFileToDocument(selectedDocument(), pdfFile);
pdfFile.close(); pdfFile.close();
} }
} }
if (result){ if (result){
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
} }
} }
else if (mimeType.startsWith("application/vnd.mnemis-uniboard-tool")) else if (mimeType.startsWith("application/vnd.mnemis-uniboard-tool"))
@ -1197,23 +1198,18 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
UBApplication::showMessage(tr("Unknown content type %1").arg(pContentTypeHeader)); UBApplication::showMessage(tr("Unknown content type %1").arg(pContentTypeHeader));
qWarning() << "ignoring mime type" << pContentTypeHeader ; qWarning() << "ignoring mime type" << pContentTypeHeader ;
} }
if (isBackground && oldBackgroundObject != mActiveScene->backgroundObject())
{
if (mActiveScene->isURStackIsEnabled()) { //should be deleted after scene own undo stack implemented
UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(mActiveScene, oldBackgroundObject, mActiveScene->backgroundObject());
UBApplication::undoStack->push(uc);
} }
} void UBBoardController::setActiveDocumentScene(int pSceneIndex)
{
setActiveDocumentScene(selectedDocument(), pSceneIndex);
} }
void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, const int pSceneIndex, bool forceReload)
void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, const int pSceneIndex)
{ {
saveViewState(); saveViewState();
bool documentChange = mActiveDocument != pDocumentProxy; bool documentChange = selectedDocument() != pDocumentProxy;
int index = pSceneIndex; int index = pSceneIndex;
int sceneCount = pDocumentProxy->pageCount(); int sceneCount = pDocumentProxy->pageCount();
@ -1231,11 +1227,14 @@ void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy,
if(sceneChange) if(sceneChange)
emit activeSceneWillChange(); emit activeSceneWillChange();
persistCurrentScene();
ClearUndoStack(); ClearUndoStack();
mActiveScene = targetScene; mActiveScene = targetScene;
mActiveDocument = pDocumentProxy;
mActiveSceneIndex = index; mActiveSceneIndex = index;
setDocument(pDocumentProxy, forceReload);
updateSystemScaleFactor(); updateSystemScaleFactor();
@ -1260,9 +1259,6 @@ void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy,
if(documentChange) if(documentChange)
{ {
emit activeDocumentChanged();
// Notify the navigator palette that the document has changed
emit setDocOnPageNavigator(pDocumentProxy);
UBGraphicsTextItem::lastUsedTextColor = QColor(); UBGraphicsTextItem::lastUsedTextColor = QColor();
} }
@ -1274,6 +1270,22 @@ void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy,
} }
} }
void UBBoardController::moveSceneToIndex(int source, int target)
{
if (selectedDocument())
{
persistCurrentScene();
UBDocumentContainer::movePageToIndex(source, target);
selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(selectedDocument());
setActiveDocumentScene(target);
}
}
void UBBoardController::ClearUndoStack() void UBBoardController::ClearUndoStack()
{ {
QSet<QGraphicsItem*> uniqueItems; QSet<QGraphicsItem*> uniqueItems;
@ -1331,7 +1343,7 @@ void UBBoardController::adjustDisplayViews()
if (UBApplication::applicationController) if (UBApplication::applicationController)
{ {
UBApplication::applicationController->adjustDisplayView(); UBApplication::applicationController->adjustDisplayView();
UBApplication::applicationController->adjustPreviousViews(mActiveSceneIndex, mActiveDocument); UBApplication::applicationController->adjustPreviousViews(mActiveSceneIndex, selectedDocument());
} }
} }
@ -1381,7 +1393,7 @@ void UBBoardController::boardViewResized(QResizeEvent* event)
void UBBoardController::documentWillBeDeleted(UBDocumentProxy* pProxy) void UBBoardController::documentWillBeDeleted(UBDocumentProxy* pProxy)
{ {
if (mActiveDocument == pProxy) if (selectedDocument() == pProxy)
{ {
if (!mIsClosing) if (!mIsClosing)
setActiveDocumentScene(UBPersistenceManager::persistenceManager()->createDocument()); setActiveDocumentScene(UBPersistenceManager::persistenceManager()->createDocument());
@ -1411,6 +1423,7 @@ void UBBoardController::setDisabled(bool disable)
void UBBoardController::selectionChanged() void UBBoardController::selectionChanged()
{ {
updateActionStates(); updateActionStates();
emit pageSelectionChanged(activeSceneIndex());
} }
@ -1427,18 +1440,12 @@ void UBBoardController::undoRedoStateChange(bool canUndo)
void UBBoardController::updateActionStates() void UBBoardController::updateActionStates()
{ {
mMainWindow->actionBack->setEnabled(mActiveDocument && (mActiveSceneIndex > 0)); mMainWindow->actionBack->setEnabled(selectedDocument() && (mActiveSceneIndex > 0));
mMainWindow->actionForward->setEnabled(mActiveDocument && (mActiveSceneIndex < mActiveDocument->pageCount() - 1)); mMainWindow->actionForward->setEnabled(selectedDocument() && (mActiveSceneIndex < selectedDocument()->pageCount() - 1));
mMainWindow->actionErase->setEnabled(mActiveScene && !mActiveScene->isEmpty()); mMainWindow->actionErase->setEnabled(mActiveScene && !mActiveScene->isEmpty());
} }
UBDocumentProxy* UBBoardController::activeDocument() const
{
return mActiveDocument;
}
UBGraphicsScene* UBBoardController::activeScene() const UBGraphicsScene* UBBoardController::activeScene() const
{ {
return mActiveScene; return mActiveScene;
@ -1455,9 +1462,9 @@ void UBBoardController::documentSceneChanged(UBDocumentProxy* pDocumentProxy, in
{ {
Q_UNUSED(pIndex); Q_UNUSED(pIndex);
if(mActiveDocument == pDocumentProxy) if(selectedDocument() == pDocumentProxy)
{ {
setActiveDocumentScene(mActiveDocument, mActiveSceneIndex); setActiveDocumentScene(mActiveSceneIndex);
} }
} }
@ -1472,9 +1479,9 @@ void UBBoardController::lastWindowClosed()
{ {
if (!mCleanupDone) if (!mCleanupDone)
{ {
if (mActiveDocument->pageCount() == 1 && (!mActiveScene || mActiveScene->isEmpty())) if (selectedDocument()->pageCount() == 1 && (!mActiveScene || mActiveScene->isEmpty()))
{ {
UBPersistenceManager::persistenceManager()->deleteDocument(mActiveDocument); UBPersistenceManager::persistenceManager()->deleteDocument(selectedDocument());
} }
else else
{ {
@ -1597,13 +1604,14 @@ void UBBoardController::show()
void UBBoardController::persistCurrentScene() void UBBoardController::persistCurrentScene()
{ {
if(UBPersistenceManager::persistenceManager() if(UBPersistenceManager::persistenceManager()
&& mActiveDocument && mActiveScene && selectedDocument() && mActiveScene
&& (mActiveSceneIndex >= 0)) && (mActiveSceneIndex >= 0)
&& mActiveScene->isModified())
{ {
emit activeSceneWillBePersisted(); emit activeSceneWillBePersisted();
UBPersistenceManager::persistenceManager()->persistDocumentScene(mActiveDocument, mActiveScene, mActiveSceneIndex); UBPersistenceManager::persistenceManager()->persistDocumentScene(selectedDocument(), mActiveScene, mActiveSceneIndex);
UBMetadataDcSubsetAdaptor::persist(mActiveDocument); updatePage(mActiveSceneIndex);
} }
} }
@ -1688,7 +1696,7 @@ void UBBoardController::setPageSize(QSize newSize)
updateSystemScaleFactor(); updateSystemScaleFactor();
updatePageSizeState(); updatePageSizeState();
adjustDisplayViews(); adjustDisplayViews();
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBSettings::settings()->pageSize->set(newSize); UBSettings::settings()->pageSize->set(newSize);
} }
@ -1704,8 +1712,6 @@ void UBBoardController::notifyCache(bool visible)
{ {
emit cacheDisabled(); emit cacheDisabled();
} }
mCacheWidgetIsEnabled = visible;
} }
void UBBoardController::updatePageSizeState() void UBBoardController::updatePageSizeState()
@ -1811,7 +1817,7 @@ void UBBoardController::grabScene(const QRectF& pSceneRect)
mActiveScene->setRenderingQuality(UBItem::RenderingQualityNormal); mActiveScene->setRenderingQuality(UBItem::RenderingQualityNormal);
mPaletteManager->addItem(QPixmap::fromImage(image)); mPaletteManager->addItem(QPixmap::fromImage(image));
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
} }
} }
@ -1839,11 +1845,16 @@ UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool st
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
QUrl concreteUrl = pSourceUrl; QUrl concreteUrl = pSourceUrl;
concreteUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager() #ifdef Q_WS_X11
concreteUrl = QUrl::fromLocalFile(mActiveDocument->persistencePath() + "/" + UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(mActiveDocument, pSourceUrl.toLocalFile(), uuid)); ->addVideoFileToDocument(mActiveDocument, pSourceUrl.toLocalFile(), uuid));
#else
concreteUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(selectedDocument(), pSourceUrl.toLocalFile(), uuid));
#endif
UBGraphicsMediaItem* vi = mActiveScene->addMedia(concreteUrl, startPlay, pos); UBGraphicsMediaItem* vi = mActiveScene->addMedia(concreteUrl, startPlay, pos);
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
if (vi) { if (vi) {
vi->setUuid(uuid); vi->setUuid(uuid);
@ -1859,11 +1870,16 @@ UBGraphicsMediaItem* UBBoardController::addAudio(const QUrl& pSourceUrl, bool st
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
QUrl concreteUrl = pSourceUrl; QUrl concreteUrl = pSourceUrl;
concreteUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager() #ifdef Q_WS_X11
concreteUrl = QUrl::fromLocalFile(mActiveDocument->persistencePath() + "/" + UBPersistenceManager::persistenceManager()
->addAudioFileToDocument(mActiveDocument, pSourceUrl.toLocalFile(), uuid)); ->addAudioFileToDocument(mActiveDocument, pSourceUrl.toLocalFile(), uuid));
#else
concreteUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addAudioFileToDocument(selectedDocument(), pSourceUrl.toLocalFile(), uuid));
#endif
UBGraphicsMediaItem* ai = mActiveScene->addMedia(concreteUrl, startPlay, pos); UBGraphicsMediaItem* ai = mActiveScene->addMedia(concreteUrl, startPlay, pos);
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
if (ai){ if (ai){
ai->setUuid(uuid); ai->setUuid(uuid);
@ -1881,7 +1897,7 @@ UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QP
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
QUrl newUrl = pUrl; QUrl newUrl = pUrl;
newUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()->addGraphicsWidgteToDocument(mActiveDocument, pUrl.toLocalFile(), uuid)); newUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()->addGraphicsWidgteToDocument(selectedDocument(), pUrl.toLocalFile(), uuid));
w3cWidgetItem = mActiveScene->addW3CWidget(newUrl, pos); w3cWidgetItem = mActiveScene->addW3CWidget(newUrl, pos);
@ -1891,14 +1907,15 @@ UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QP
w3cWidgetItem->setSourceUrl(pUrl); w3cWidgetItem->setSourceUrl(pUrl);
QString struuid = UBStringUtils::toCanonicalUuid(uuid); QString struuid = UBStringUtils::toCanonicalUuid(uuid);
QString snapshotPath = mActiveDocument->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + struuid + ".png"; QString snapshotPath = selectedDocument()->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + struuid + ".png";
w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath)); w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath));
UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem); UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem);
if (tmpItem) if (tmpItem)
tmpItem->widgetWebView()->takeSnapshot().save(snapshotPath, "PNG"); tmpItem->widgetWebView()->takeSnapshot().save(snapshotPath, "PNG");
} }
return w3cWidgetItem;
return 0;
} }
void UBBoardController::cut() void UBBoardController::cut()
@ -1937,7 +1954,7 @@ void UBBoardController::cut()
mimeGi->setData(UBApplication::mimeTypeUniboardPageItem, QByteArray()); mimeGi->setData(UBApplication::mimeTypeUniboardPageItem, QByteArray());
clipboard->setMimeData(mimeGi); clipboard->setMimeData(mimeGi);
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
} }
//---------------------------------------------------------// //---------------------------------------------------------//
@ -1975,7 +1992,7 @@ void UBBoardController::paste()
QPointF pos(0, 0); QPointF pos(0, 0);
processMimeData(clipboard->mimeData(), pos); processMimeData(clipboard->mimeData(), pos);
mActiveDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
} }
@ -1988,15 +2005,15 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint
if (mimeData) if (mimeData)
{ {
int previousActiveSceneIndex = activeSceneIndex(); int previousActiveSceneIndex = activeSceneIndex();
int previousPageCount = activeDocument()->pageCount(); int previousPageCount = selectedDocument()->pageCount();
foreach (UBMimeDataItem sourceItem, mimeData->items()) foreach (UBMimeDataItem sourceItem, mimeData->items())
addScene(sourceItem.documentProxy(), sourceItem.sceneIndex(), true); addScene(sourceItem.documentProxy(), sourceItem.sceneIndex(), true);
if (activeDocument()->pageCount() < previousPageCount + mimeData->items().count()) if (selectedDocument()->pageCount() < previousPageCount + mimeData->items().count())
setActiveDocumentScene(activeDocument(), previousActiveSceneIndex); setActiveDocumentScene(previousActiveSceneIndex);
else else
setActiveDocumentScene(activeDocument(), previousActiveSceneIndex + 1); setActiveDocumentScene(previousActiveSceneIndex + 1);
return; return;
} }
@ -2031,13 +2048,9 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint
if("" != url) if("" != url)
{ {
downloadURL(url, pPos); downloadURL(url, pPos);
}
else
{
mActiveScene->addTextHtml(qsHtml, pPos);
}
return; return;
} }
}
if (pMimeData->hasUrls()) if (pMimeData->hasUrls())
{ {
@ -2072,11 +2085,11 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint
if("" != pMimeData->text()){ if("" != pMimeData->text()){
// Sometimes, it is possible to have an URL as text. we check here if it is the case // Sometimes, it is possible to have an URL as text. we check here if it is the case
QString qsTmp = pMimeData->text().remove(QRegExp("[\\0]")); QString qsTmp = pMimeData->text().remove(QRegExp("[\\0]"));
if(qsTmp.startsWith("http://") || qsTmp.startsWith("https://")){ if(qsTmp.startsWith("http")){
downloadURL(QUrl(qsTmp), pPos); downloadURL(QUrl(qsTmp), pPos);
} }
else{ else{
mActiveScene->addTextHtml(pMimeData->text(), pPos); mActiveScene->addTextHtml(pMimeData->html(), pPos);
} }
} }
else{ else{
@ -2196,11 +2209,11 @@ void UBBoardController::addItem()
void UBBoardController::importPage() void UBBoardController::importPage()
{ {
int pageCount = mActiveDocument->pageCount(); int pageCount = selectedDocument()->pageCount();
if (UBApplication::documentController->addFileToDocument(mActiveDocument)) if (UBApplication::documentController->addFileToDocument(selectedDocument()))
{ {
setActiveDocumentScene(mActiveDocument, pageCount); setActiveDocumentScene(pageCount);
} }
} }

@ -19,6 +19,7 @@
#include <QtGui> #include <QtGui>
#include <QObject> #include <QObject>
#include "document/UBDocumentContainer.h"
class UBMainWindow; class UBMainWindow;
class UBApplication; class UBApplication;
@ -40,7 +41,7 @@ class UBGraphicsWidgetItem;
class UBBoardPaletteManager; class UBBoardPaletteManager;
class UBBoardController : public QObject class UBBoardController : public UBDocumentContainer
{ {
Q_OBJECT Q_OBJECT
@ -50,7 +51,7 @@ class UBBoardController : public QObject
void init(); void init();
void setupLayout(); void setupLayout();
UBDocumentProxy* activeDocument() const;
UBGraphicsScene* activeScene() const; UBGraphicsScene* activeScene() const;
int activeSceneIndex() const; int activeSceneIndex() const;
QSize displayViewport(); QSize displayViewport();
@ -60,14 +61,6 @@ class UBBoardController : public QObject
int currentPage(); int currentPage();
int pageFromSceneIndex(int sceneIndex);
int sceneIndexFromPage(int page);
UBDocumentProxy* activeDocument()
{
return mActiveDocument;
}
QWidget* controlContainer() QWidget* controlContainer()
{ {
return mControlContainer; return mControlContainer;
@ -158,10 +151,15 @@ class UBBoardController : public QObject
void displayMetaData(QMap<QString, QString> metadatas); void displayMetaData(QMap<QString, QString> metadatas);
void ClearUndoStack(); void ClearUndoStack();
void emitScrollSignal() { emit scrollToSelectedPage(); }
void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0, bool forceReload = false);
void setActiveDocumentScene(int pSceneIndex);
void moveSceneToIndex(int source, int target);
void duplicateScene(int index);
void deleteScene(int index);
public slots: public slots:
void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0);
void showDocumentsDialog(); void showDocumentsDialog();
void showKeyboard(bool show); void showKeyboard(bool show);
void togglePodcast(bool checked); void togglePodcast(bool checked);
@ -222,14 +220,12 @@ class UBBoardController : public QObject
void freezeW3CWidget(QGraphicsItem* item, bool freeze); void freezeW3CWidget(QGraphicsItem* item, bool freeze);
void startScript(); void startScript();
void stopScript(); void stopScript();
bool cacheIsVisible();
signals: signals:
void newPageAdded(); void newPageAdded();
void activeSceneWillBePersisted(); void activeSceneWillBePersisted();
void activeSceneWillChange(); void activeSceneWillChange();
void activeSceneChanged(); void activeSceneChanged();
void activeDocumentChanged();
void zoomChanged(qreal pZoomFactor); void zoomChanged(qreal pZoomFactor);
void systemScaleFactorChanged(qreal pSystemScaleFactor); void systemScaleFactorChanged(qreal pSystemScaleFactor);
void penColorChanged(); void penColorChanged();
@ -238,10 +234,9 @@ class UBBoardController : public QObject
void cacheEnabled(); void cacheEnabled();
void cacheDisabled(); void cacheDisabled();
void pageChanged(); void pageChanged();
void setDocOnPageNavigator(UBDocumentProxy* doc);
void documentReorganized(int index); void documentReorganized(int index);
void displayMetadata(QMap<QString, QString> metadata); void displayMetadata(QMap<QString, QString> metadata);
void scrollToSelectedPage(); void pageSelectionChanged(int index);
protected: protected:
void setupViews(); void setupViews();
@ -263,7 +258,6 @@ class UBBoardController : public QObject
void adjustDisplayViews(); void adjustDisplayViews();
UBMainWindow *mMainWindow; UBMainWindow *mMainWindow;
UBDocumentProxy* mActiveDocument;
UBGraphicsScene* mActiveScene; UBGraphicsScene* mActiveScene;
int mActiveSceneIndex; int mActiveSceneIndex;
UBBoardPaletteManager *mPaletteManager; UBBoardPaletteManager *mPaletteManager;
@ -283,7 +277,6 @@ class UBBoardController : public QObject
qreal mSystemScaleFactor; qreal mSystemScaleFactor;
bool mCleanupDone; bool mCleanupDone;
QMap<QAction*, QPair<QString, QString> > mActionTexts; QMap<QAction*, QPair<QString, QString> > mActionTexts;
bool mCacheWidgetIsEnabled;
private slots: private slots:
void stylusToolDoubleClicked(int tool); void stylusToolDoubleClicked(int tool);

@ -134,8 +134,6 @@ void UBBoardPaletteManager::setupDockPaletteWidgets()
//------------------------------------------------// //------------------------------------------------//
// Create the widgets for the dock palettes // Create the widgets for the dock palettes
mpPageNavigWidget = new UBPageNavigationWidget();
#ifdef USE_WEB_WIDGET #ifdef USE_WEB_WIDGET
mpLibWidget = new UBLibWidget(); mpLibWidget = new UBLibWidget();
#endif #endif
@ -352,7 +350,7 @@ void UBBoardPaletteManager::pagePaletteButtonReleased()
QList<QAction*>pageActions; QList<QAction*>pageActions;
pageActions << UBApplication::mainWindow->actionNewPage; pageActions << UBApplication::mainWindow->actionNewPage;
UBBoardController* boardController = UBApplication::boardController; UBBoardController* boardController = UBApplication::boardController;
if(UBApplication::documentController->pageCanBeDuplicated(boardController->pageFromSceneIndex(boardController->activeSceneIndex()))) if(UBApplication::documentController->pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(boardController->activeSceneIndex())))
pageActions << UBApplication::mainWindow->actionDuplicatePage; pageActions << UBApplication::mainWindow->actionDuplicatePage;
pageActions << UBApplication::mainWindow->actionImportPage; pageActions << UBApplication::mainWindow->actionImportPage;
@ -568,7 +566,7 @@ void UBBoardPaletteManager::activeSceneChanged()
if (mpPageNavigWidget) if (mpPageNavigWidget)
{ {
mpPageNavigWidget->setPageNumber(UBApplication::boardController->pageFromSceneIndex(pageIndex), activeScene->document()->pageCount()); mpPageNavigWidget->setPageNumber(UBDocumentContainer::pageFromSceneIndex(pageIndex), activeScene->document()->pageCount());
} }
if (mZoomPalette) if (mZoomPalette)

@ -562,7 +562,7 @@ void UBLibraryController::removeBackground()
UBGraphicsScene* UBLibraryController::activeScene() UBGraphicsScene* UBLibraryController::activeScene()
{ {
if (mBoardController->activeDocument()) if (mBoardController->selectedDocument())
return mBoardController->activeScene(); return mBoardController->activeScene();
return 0; return 0;

@ -340,8 +340,7 @@ void UBApplicationController::showBoard()
int selectedSceneIndex = UBApplication::documentController->getSelectedItemIndex(); int selectedSceneIndex = UBApplication::documentController->getSelectedItemIndex();
if (selectedSceneIndex != -1) if (selectedSceneIndex != -1)
{ {
UBApplication::boardController->setActiveDocumentScene(UBApplication::documentController->getCurrentDocument(), selectedSceneIndex); UBApplication::boardController->setActiveDocumentScene(UBApplication::documentController->selectedDocument(), selectedSceneIndex, true);
UBApplication::boardController->emitScrollSignal();
} }
} }

@ -608,10 +608,10 @@ void UBPersistenceManager::persistDocumentScene(UBDocumentProxy* pDocumentProxy,
if (pScene->isModified()) if (pScene->isModified())
{ {
UBThumbnailAdaptor::persistScene(pDocumentProxy->persistencePath(), pScene, pSceneIndex);
UBSvgSubsetAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex); UBSvgSubsetAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex);
UBThumbnailAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex);
pScene->setModified(false); pScene->setModified(false);
} }

@ -0,0 +1,127 @@
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "UBDocumentContainer.h"
#include "adaptors/UBThumbnailAdaptor.h"
#include "core/UBPersistenceManager.h"
#include "core/memcheck.h"
UBDocumentContainer::UBDocumentContainer(QObject * parent)
:QObject(parent)
,mCurrentDocument(NULL)
{}
UBDocumentContainer::~UBDocumentContainer()
{
foreach(const QPixmap* pm, mDocumentThumbs)
delete pm;
}
void UBDocumentContainer::setDocument(UBDocumentProxy* document, bool forceReload)
{
if (mCurrentDocument != document || forceReload)
{
mCurrentDocument = document;
reloadThumbnails();
emit documentSet(mCurrentDocument);
}
}
void UBDocumentContainer::duplicatePages(QList<int>& pageIndexes)
{
int offset = 0;
foreach(int sceneIndex, pageIndexes)
{
UBPersistenceManager::persistenceManager()->duplicateDocumentScene(mCurrentDocument, sceneIndex + offset);
insertThumbPage(sceneIndex + offset);
offset++;
}
emit documentThumbnailsUpdated(this);
}
void UBDocumentContainer::movePageToIndex(int source, int target)
{
UBPersistenceManager::persistenceManager()->moveSceneToIndex(mCurrentDocument, source, target);
deleteThumbPage(source);
insertThumbPage(target);
emit documentThumbnailsUpdated(this);
}
void UBDocumentContainer::deletePages(QList<int>& pageIndexes)
{
UBPersistenceManager::persistenceManager()->deleteDocumentScenes(mCurrentDocument, pageIndexes);
int offset = 0;
foreach(int index, pageIndexes)
{
deleteThumbPage(index - offset);
offset++;
}
emit documentThumbnailsUpdated(this);
}
void UBDocumentContainer::addPage(int index)
{
UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mCurrentDocument, index);
insertThumbPage(index);
emit documentThumbnailsUpdated(this);
}
void UBDocumentContainer::updatePage(int index)
{
updateThumbPage(index);
emit documentThumbnailsUpdated(this);
}
void UBDocumentContainer::deleteThumbPage(int index)
{
mDocumentThumbs.removeAt(index);
emit documentPageDeleted(index);
}
void UBDocumentContainer::updateThumbPage(int index)
{
mDocumentThumbs[index] = UBThumbnailAdaptor::get(mCurrentDocument, index);
emit documentPageUpdated(index);
}
void UBDocumentContainer::insertThumbPage(int index)
{
mDocumentThumbs.insert(index, UBThumbnailAdaptor::get(mCurrentDocument, index));
emit documentPageAdded(index);
}
void UBDocumentContainer::reloadThumbnails()
{
if (mCurrentDocument)
{
UBThumbnailAdaptor::load(mCurrentDocument, mDocumentThumbs);
emit documentThumbnailsUpdated(this);
}
}
int UBDocumentContainer::pageFromSceneIndex(int sceneIndex)
{
if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
return sceneIndex;
return sceneIndex+1;
}
int UBDocumentContainer::sceneIndexFromPage(int page)
{
if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
return page;
return page-1;
}

@ -0,0 +1,67 @@
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBDOCUMENTCONTAINER_H_
#define UBDOCUMENTCONTAINER_H_
#include <QtGui>
#include "UBDocumentProxy.h"
class UBDocumentContainer : public QObject
{
Q_OBJECT
public:
UBDocumentContainer(QObject * parent = 0);
virtual ~UBDocumentContainer();
void setDocument(UBDocumentProxy* document, bool forceReload = false);
UBDocumentProxy* selectedDocument(){return mCurrentDocument;}
int pageCount(){return mDocumentThumbs.size();}
const QPixmap* pageAt(int index){return mDocumentThumbs[index];}
static int pageFromSceneIndex(int sceneIndex);
static int sceneIndexFromPage(int sceneIndex);
void duplicatePages(QList<int>& pageIndexes);
void movePageToIndex(int source, int target);
void deletePages(QList<int>& pageIndexes);
void addPage(int index);
void updatePage(int index);
private:
void deleteThumbPage(int index);
void updateThumbPage(int index);
void insertThumbPage(int index);
UBDocumentProxy* mCurrentDocument;
QList<const QPixmap*> mDocumentThumbs;
protected:
void reloadThumbnails();
signals:
void documentSet(UBDocumentProxy* document);
void documentPageAdded(int index);
void documentPageDeleted(int index);
void documentPageUpdated(int index);
void documentThumbnailsUpdated(UBDocumentContainer* source);
};
#endif /* UBDOCUMENTPROXY_H_ */

@ -58,7 +58,7 @@
#include "core/memcheck.h" #include "core/memcheck.h"
UBDocumentController::UBDocumentController(UBMainWindow* mainWindow) UBDocumentController::UBDocumentController(UBMainWindow* mainWindow)
: QObject(mainWindow->centralWidget()) : UBDocumentContainer(mainWindow->centralWidget())
, mSelectionType(None) , mSelectionType(None)
, mParentWidget(mainWindow->centralWidget()) , mParentWidget(mainWindow->centralWidget())
, mBoardController(UBApplication::boardController) , mBoardController(UBApplication::boardController)
@ -72,15 +72,16 @@ UBDocumentController::UBDocumentController(UBMainWindow* mainWindow)
{ {
setupViews(); setupViews();
setupToolbar(); setupToolbar();
this->selectDocument(UBApplication::boardController->activeDocument()); this->selectDocument(UBApplication::boardController->selectedDocument());
connect(this, SIGNAL(exportDone()), mMainWindow, SLOT(onExportDone())); connect(this, SIGNAL(exportDone()), mMainWindow, SLOT(onExportDone()));
connect(mMainWindow->actionNewPage, SIGNAL(triggered()), this, SLOT(reloadThumbs())); //connect(mMainWindow->actionNewPage, SIGNAL(triggered()), this, SLOT(reloadThumbs()));
connect(this, SIGNAL(documentThumbnailsUpdated(UBDocumentContainer*)), this, SLOT(refreshDocumentThumbnailsView(UBDocumentContainer*)));
} }
void UBDocumentController::reloadThumbs() //void UBDocumentController::reloadThumbs()
{ //{
mDocumentThumbs = UBThumbnailAdaptor::load(selectedDocumentProxy()); // UBThumbnailAdaptor::load(selectedDocumentProxy(), mDocumentThumbs);
} //}
UBDocumentController::~UBDocumentController() UBDocumentController::~UBDocumentController()
{ {
@ -154,6 +155,8 @@ void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurr
if (selected) if (selected)
{ {
setDocument(proxy);
selected->setSelected(true); selected->setSelected(true);
selected->parent()->setExpanded(true); selected->parent()->setExpanded(true);
@ -162,7 +165,7 @@ void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurr
if (setAsCurrentDocument) if (setAsCurrentDocument)
{ {
selected->setIcon(0, QIcon(":/images/currentDocument.png")); selected->setIcon(0, QIcon(":/images/currentDocument.png"));
if (proxy != mBoardController->activeDocument()) if (proxy != mBoardController->selectedDocument())
mBoardController->setActiveDocumentScene(proxy); mBoardController->setActiveDocumentScene(proxy);
} }
@ -170,9 +173,6 @@ void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurr
mDocumentUI->documentTreeWidget->scrollToItem(selected); mDocumentUI->documentTreeWidget->scrollToItem(selected);
mDocumentThumbs = UBThumbnailAdaptor::load(selectedDocumentProxy());
refreshDocumentThumbnailsView();
mSelectionType = Document; mSelectionType = Document;
} }
} }
@ -253,7 +253,7 @@ UBDocumentGroupTreeItem* UBDocumentController::selectedDocumentGroupTreeItem()
void UBDocumentController::itemSelectionChanged() void UBDocumentController::itemSelectionChanged()
{ {
refreshDocumentThumbnailsView(); reloadThumbnails();
if (selectedDocumentProxy()) if (selectedDocumentProxy())
mSelectionType = Document; mSelectionType = Document;
@ -266,62 +266,6 @@ void UBDocumentController::itemSelectionChanged()
} }
void UBDocumentController::refreshDocumentThumbnailsView()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
QList<QGraphicsItem*> items;
QList<QUrl> itemsPath;
UBDocumentProxy *proxy = selectedDocumentProxy();
QGraphicsPixmapItem *selection = 0;
QStringList labels;
if (proxy)
{
mCurrentDocument = proxy;
for (int i = 0; i < mDocumentThumbs.count(); i++)
{
QPixmap pix = mDocumentThumbs.at(i);
QGraphicsPixmapItem *pixmapItem = new UBSceneThumbnailPixmap(pix, proxy, i); // deleted by the tree widget
if (proxy == mBoardController->activeDocument() && mBoardController->activeSceneIndex() == i)
{
selection = pixmapItem;
}
items << pixmapItem;
labels << tr("Page %1").arg(UBApplication::boardController->pageFromSceneIndex(i));
itemsPath.append(QUrl::fromLocalFile(proxy->persistencePath() + QString("/pages/%1").arg(UBApplication::boardController->pageFromSceneIndex(i))));
}
}
mDocumentUI->thumbnailWidget->setGraphicsItems(items, itemsPath, labels, UBApplication::mimeTypeUniboardPage);
UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
if (proxyTi && (proxyTi->parent() == mTrashTi))
mDocumentUI->thumbnailWidget->setDragEnabled(false);
else
mDocumentUI->thumbnailWidget->setDragEnabled(true);
mDocumentUI->thumbnailWidget->ensureVisible(0, 0, 10, 10);
if (selection) {
disconnect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
UBSceneThumbnailPixmap *currentScene = dynamic_cast<UBSceneThumbnailPixmap*>(selection);
if (currentScene)
mDocumentUI->thumbnailWidget->hightlightItem(currentScene->sceneIndex());
connect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
}
emit refreshThumbnails();
QApplication::restoreOverrideCursor();
}
void UBDocumentController::setupViews() void UBDocumentController::setupViews()
{ {
@ -485,7 +429,7 @@ void UBDocumentController::setupPalettes()
void UBDocumentController::show() void UBDocumentController::show()
{ {
selectDocument(mBoardController->activeDocument()); selectDocument(mBoardController->selectedDocument());
selectionChanged(); selectionChanged();
@ -559,22 +503,11 @@ void UBDocumentController::duplicateSelectedItem()
} }
if (selectedSceneIndexes.count() > 0) if (selectedSceneIndexes.count() > 0)
{ {
UBSceneThumbnailPixmap *thumb = dynamic_cast<UBSceneThumbnailPixmap*>(selectedItems.at(0)); duplicatePages(selectedSceneIndexes);
UBDocumentProxy *proxy = thumb->proxy();
int offset = 0; selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
if (proxy) UBMetadataDcSubsetAdaptor::persist(selectedDocument());
{ mDocumentUI->thumbnailWidget->selectItemAt(selectedSceneIndexes.last() + selectedSceneIndexes.size());
foreach (int sceneIndex, selectedSceneIndexes)
{
UBPersistenceManager::persistenceManager()->duplicateDocumentScene(proxy, sceneIndex + offset);
mDocumentThumbs.insert(sceneIndex + offset, mDocumentThumbs.at(sceneIndex + offset));
offset++;
}
}
refreshDocumentThumbnailsView();
proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(proxy);
mDocumentUI->thumbnailWidget->selectItemAt(selectedSceneIndexes.last() + offset);
} }
} }
else else
@ -626,7 +559,7 @@ void UBDocumentController::deleteSelectedItem()
if (index >= 0) if (index >= 0)
{ {
if (proxyTi->proxy() == mBoardController->activeDocument()) if (proxyTi->proxy() == mBoardController->selectedDocument())
{ {
selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy()); selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy());
} }
@ -635,7 +568,7 @@ void UBDocumentController::deleteSelectedItem()
} }
else if (proxyTi->parent()->childCount() > 1) else if (proxyTi->parent()->childCount() > 1)
{ {
if (proxyTi->proxy() == mBoardController->activeDocument()) if (proxyTi->proxy() == mBoardController->selectedDocument())
{ {
selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy()); selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy());
} }
@ -644,7 +577,7 @@ void UBDocumentController::deleteSelectedItem()
} }
else else
{ {
if (proxyTi->proxy() == mBoardController->activeDocument()) if (proxyTi->proxy() == mBoardController->selectedDocument())
{ {
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
{ {
@ -665,7 +598,7 @@ void UBDocumentController::deleteSelectedItem()
UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy()); UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
refreshDocumentThumbnailsView(); reloadThumbnails();
} }
else else
{ {
@ -722,7 +655,7 @@ void UBDocumentController::deleteSelectedItem()
for (int i = 0; i < groupTi->childCount(); i++) for (int i = 0; i < groupTi->childCount(); i++)
{ {
UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i)); UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->activeDocument()) if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument())
{ {
changeCurrentDocument = true; changeCurrentDocument = true;
break; break;
@ -780,7 +713,7 @@ void UBDocumentController::deleteSelectedItem()
} }
} }
refreshDocumentThumbnailsView(); reloadThumbnails();
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
@ -818,19 +751,6 @@ void UBDocumentController::documentZoomSliderValueChanged (int value)
} }
UBGraphicsScene* UBDocumentController::activeScene()
{
if (mBoardController->activeDocument())
{
return mBoardController->activeScene();
}
else
{
return 0;
}
}
void UBDocumentController::loadDocumentProxies() void UBDocumentController::loadDocumentProxies()
{ {
QList<QPointer<UBDocumentProxy> > proxies = UBPersistenceManager::persistenceManager()->documentProxies; QList<QPointer<UBDocumentProxy> > proxies = UBPersistenceManager::persistenceManager()->documentProxies;
@ -890,7 +810,7 @@ void UBDocumentController::loadDocumentProxies()
QTreeWidgetItem* docItem = new UBDocumentProxyTreeItem(docGroupItem, proxy, !isInTrash); QTreeWidgetItem* docItem = new UBDocumentProxyTreeItem(docGroupItem, proxy, !isInTrash);
docItem->setText(0, docName); docItem->setText(0, docName);
if (mBoardController->activeDocument() == proxy) if (mBoardController->selectedDocument() == proxy)
{ {
mDocumentUI->documentTreeWidget->expandItem(docGroupItem); mDocumentUI->documentTreeWidget->expandItem(docGroupItem);
mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem); mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem);
@ -1051,8 +971,7 @@ void UBDocumentController::addFolderOfImages()
{ {
document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(document); UBMetadataDcSubsetAdaptor::persist(document);
mDocumentThumbs = UBThumbnailAdaptor::load(selectedDocumentProxy()); reloadThumbnails();
refreshDocumentThumbnailsView();
} }
} }
} }
@ -1066,8 +985,7 @@ void UBDocumentController::addFileToDocument()
if (document) if (document)
{ {
addFileToDocument(document); addFileToDocument(document);
mDocumentThumbs = UBThumbnailAdaptor::load(document); reloadThumbnails();
refreshDocumentThumbnailsView();
} }
} }
@ -1114,12 +1032,11 @@ bool UBDocumentController::addFileToDocument(UBDocumentProxy* document)
void UBDocumentController::moveSceneToIndex(UBDocumentProxy* proxy, int source, int target) void UBDocumentController::moveSceneToIndex(UBDocumentProxy* proxy, int source, int target)
{ {
UBPersistenceManager::persistenceManager()->moveSceneToIndex(proxy, source, target); UBDocumentContainer::movePageToIndex(source, target);
proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(proxy); UBMetadataDcSubsetAdaptor::persist(proxy);
mDocumentThumbs.insert(target, mDocumentThumbs.takeAt(source));
refreshDocumentThumbnailsView();
mDocumentUI->thumbnailWidget->hightlightItem(target); mDocumentUI->thumbnailWidget->hightlightItem(target);
} }
@ -1183,11 +1100,11 @@ void UBDocumentController::selectionChanged()
else if(pageSelected){ else if(pageSelected){
QList<QGraphicsItem*> selection = mDocumentUI->thumbnailWidget->selectedItems(); QList<QGraphicsItem*> selection = mDocumentUI->thumbnailWidget->selectedItems();
if(pageCount == 1) if(pageCount == 1)
mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBApplication::boardController->pageFromSceneIndex(0))); mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
else{ else{
for(int i = 0; i < selection.count() && !firstSceneSelected; i += 1){ for(int i = 0; i < selection.count() && !firstSceneSelected; i += 1){
if(dynamic_cast<UBSceneThumbnailPixmap*>(selection.at(i))->sceneIndex() == 0){ if(dynamic_cast<UBSceneThumbnailPixmap*>(selection.at(i))->sceneIndex() == 0){
mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBApplication::boardController->pageFromSceneIndex(0))); mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
firstSceneSelected = true; firstSceneSelected = true;
} }
} }
@ -1202,7 +1119,7 @@ void UBDocumentController::selectionChanged()
mMainWindow->actionRename->setEnabled((groupSelected || docSelected) && !trashSelected && !defaultGroupSelected); mMainWindow->actionRename->setEnabled((groupSelected || docSelected) && !trashSelected && !defaultGroupSelected);
mMainWindow->actionAddToWorkingDocument->setEnabled(pageSelected mMainWindow->actionAddToWorkingDocument->setEnabled(pageSelected
&& !(selectedDocumentProxy() == mBoardController->activeDocument()) && !trashSelected); && !(selectedDocumentProxy() == mBoardController->selectedDocument()) && !trashSelected);
bool deleteEnabled = false; bool deleteEnabled = false;
if (trashSelected) if (trashSelected)
@ -1261,7 +1178,7 @@ void UBDocumentController::documentSceneChanged(UBDocumentProxy* proxy, int pSce
if (proxy == selectedDocumentProxy()) if (proxy == selectedDocumentProxy())
{ {
refreshDocumentThumbnailsView(); reloadThumbnails();
} }
} }
@ -1350,11 +1267,11 @@ void UBDocumentController::addToDocument()
mBoardController->addScene(pageInfoList.at(i).first, pageInfoList.at(i).second, true); mBoardController->addScene(pageInfoList.at(i).first, pageInfoList.at(i).second, true);
} }
int newActiveSceneIndex = selectedItems.count() == mBoardController->activeDocument()->pageCount() ? 0 : oldActiveSceneIndex + 1; int newActiveSceneIndex = selectedItems.count() == mBoardController->selectedDocument()->pageCount() ? 0 : oldActiveSceneIndex + 1;
mDocumentUI->thumbnailWidget->selectItemAt(newActiveSceneIndex, false); mDocumentUI->thumbnailWidget->selectItemAt(newActiveSceneIndex, false);
selectDocument(mBoardController->activeDocument()); selectDocument(mBoardController->selectedDocument());
mBoardController->activeDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); mBoardController->selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(mBoardController->activeDocument()); UBMetadataDcSubsetAdaptor::persist(mBoardController->selectedDocument());
UBApplication::applicationController->showBoard(); UBApplication::applicationController->showBoard();
} }
@ -1527,8 +1444,7 @@ void UBDocumentController::addImages()
{ {
document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(document); UBMetadataDcSubsetAdaptor::persist(document);
mDocumentThumbs = UBThumbnailAdaptor::load(selectedDocumentProxy()); reloadThumbnails();
refreshDocumentThumbnailsView();
} }
} }
} }
@ -1635,20 +1551,12 @@ void UBDocumentController::deletePages(QList<QGraphicsItem *> itemsToDelete)
if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Page"), tr("Are you sure you want to remove %n page(s) from the selected document '%1'?", "", sceneIndexes.count()).arg(proxy->metaData(UBSettings::documentName).toString()))) if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Page"), tr("Are you sure you want to remove %n page(s) from the selected document '%1'?", "", sceneIndexes.count()).arg(proxy->metaData(UBSettings::documentName).toString())))
{ {
UBPersistenceManager::persistenceManager()->deleteDocumentScenes(proxy, sceneIndexes); UBDocumentContainer::deletePages(sceneIndexes);
proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBMetadataDcSubsetAdaptor::persist(proxy); UBMetadataDcSubsetAdaptor::persist(proxy);
int offset = 0;
foreach(int index, sceneIndexes)
{
mDocumentThumbs.removeAt(index - offset);
offset++;
}
refreshDocumentThumbnailsView();
int minIndex = proxy->pageCount() - 1; int minIndex = proxy->pageCount() - 1;
foreach (int i, sceneIndexes) foreach (int i, sceneIndexes)
minIndex = qMin(i, minIndex); minIndex = qMin(i, minIndex);
@ -1680,9 +1588,9 @@ bool UBDocumentController::pageCanBeMovedUp(int page)
bool UBDocumentController::pageCanBeMovedDown(int page) bool UBDocumentController::pageCanBeMovedDown(int page)
{ {
if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool()) if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
return page != 0 && page < mCurrentDocument->pageCount() - 1; return page != 0 && page < selectedDocument()->pageCount() - 1;
else else
return page < mCurrentDocument->pageCount() - 1; return page < selectedDocument()->pageCount() - 1;
} }
bool UBDocumentController::pageCanBeDuplicated(int page) bool UBDocumentController::pageCanBeDuplicated(int page)
@ -1695,3 +1603,57 @@ bool UBDocumentController::pageCanBeDeleted(int page)
return page != 0; return page != 0;
} }
void UBDocumentController::refreshDocumentThumbnailsView(UBDocumentContainer*)
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
QList<QGraphicsItem*> items;
QList<QUrl> itemsPath;
UBDocumentProxy *proxy = selectedDocumentProxy();
QGraphicsPixmapItem *selection = 0;
QStringList labels;
if (proxy)
{
setDocument(proxy);
for (int i = 0; i < selectedDocument()->pageCount(); i++)
{
const QPixmap* pix = pageAt(i);
QGraphicsPixmapItem *pixmapItem = new UBSceneThumbnailPixmap(*pix, proxy, i); // deleted by the tree widget
if (proxy == mBoardController->selectedDocument() && mBoardController->activeSceneIndex() == i)
{
selection = pixmapItem;
}
items << pixmapItem;
labels << tr("Page %1").arg(pageFromSceneIndex(i));
itemsPath.append(QUrl::fromLocalFile(proxy->persistencePath() + QString("/pages/%1").arg(UBDocumentContainer::pageFromSceneIndex(i))));
}
}
mDocumentUI->thumbnailWidget->setGraphicsItems(items, itemsPath, labels, UBApplication::mimeTypeUniboardPage);
UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
if (proxyTi && (proxyTi->parent() == mTrashTi))
mDocumentUI->thumbnailWidget->setDragEnabled(false);
else
mDocumentUI->thumbnailWidget->setDragEnabled(true);
mDocumentUI->thumbnailWidget->ensureVisible(0, 0, 10, 10);
if (selection) {
disconnect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
UBSceneThumbnailPixmap *currentScene = dynamic_cast<UBSceneThumbnailPixmap*>(selection);
if (currentScene)
mDocumentUI->thumbnailWidget->hightlightItem(currentScene->sceneIndex());
connect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
}
//emit refreshThumbnails();
QApplication::restoreOverrideCursor();
}

@ -17,6 +17,7 @@
#define UBDOCUMENTCONTROLLER_H_ #define UBDOCUMENTCONTROLLER_H_
#include <QtGui> #include <QtGui>
#include "document/UBDocumentContainer.h"
namespace Ui namespace Ui
{ {
@ -35,7 +36,7 @@ class UBDocumentProxyTreeItem;
class UBMainWindow; class UBMainWindow;
class UBDocumentToolsPalette; class UBDocumentToolsPalette;
class UBDocumentController : public QObject class UBDocumentController : public UBDocumentContainer
{ {
Q_OBJECT; Q_OBJECT;
@ -47,7 +48,6 @@ class UBDocumentController : public QObject
QWidget* controlView(); QWidget* controlView();
UBDocumentProxyTreeItem* findDocument(UBDocumentProxy* proxy); UBDocumentProxyTreeItem* findDocument(UBDocumentProxy* proxy);
bool addFileToDocument(UBDocumentProxy* document); bool addFileToDocument(UBDocumentProxy* document);
UBDocumentProxy* getCurrentDocument() { return mCurrentDocument; };
void deletePages(QList<QGraphicsItem*> itemsToDelete); void deletePages(QList<QGraphicsItem*> itemsToDelete);
int getSelectedItemIndex(); int getSelectedItemIndex();
@ -57,9 +57,9 @@ class UBDocumentController : public QObject
bool pageCanBeDeleted(int page); bool pageCanBeDeleted(int page);
signals: signals:
void refreshThumbnails(); //void refreshThumbnails();
void exportDone(); void exportDone();
void movedToIndex(int index); //void movedToIndex(int index);
public slots: public slots:
void createNewDocument(); void createNewDocument();
@ -80,14 +80,13 @@ class UBDocumentController : public QObject
void copy(); void copy();
void paste(); void paste();
void focusChanged(QWidget *old, QWidget *current); void focusChanged(QWidget *old, QWidget *current);
void reloadThumbs(); //void reloadThumbs();
protected: protected:
virtual void setupViews(); virtual void setupViews();
virtual void setupToolbar(); virtual void setupToolbar();
void setupPalettes(); void setupPalettes();
bool isOKToOpenDocument(UBDocumentProxy* proxy); bool isOKToOpenDocument(UBDocumentProxy* proxy);
UBGraphicsScene* activeScene();
UBDocumentProxy* selectedDocumentProxy(); UBDocumentProxy* selectedDocumentProxy();
UBDocumentProxyTreeItem* selectedDocumentProxyTreeItem(); UBDocumentProxyTreeItem* selectedDocumentProxyTreeItem();
UBDocumentGroupTreeItem* selectedDocumentGroupTreeItem(); UBDocumentGroupTreeItem* selectedDocumentGroupTreeItem();
@ -114,14 +113,11 @@ class UBDocumentController : public QObject
UBDocumentToolsPalette *mToolsPalette; UBDocumentToolsPalette *mToolsPalette;
bool mToolsPalettePositionned; bool mToolsPalettePositionned;
UBDocumentGroupTreeItem* mTrashTi; UBDocumentGroupTreeItem* mTrashTi;
UBDocumentProxy* mCurrentDocument;
QList<QPixmap> mDocumentThumbs;
private slots: private slots:
void documentZoomSliderValueChanged (int value); void documentZoomSliderValueChanged (int value);
void loadDocumentProxies(); void loadDocumentProxies();
void itemSelectionChanged(); void itemSelectionChanged();
void refreshDocumentThumbnailsView();
void exportDocument(); void exportDocument();
void itemChanged(QTreeWidgetItem * item, int column); void itemChanged(QTreeWidgetItem * item, int column);
void thumbnailViewResized(); void thumbnailViewResized();
@ -138,6 +134,7 @@ class UBDocumentController : public QObject
void addFileToDocument(); void addFileToDocument();
void addImages(); void addImages();
void refreshDocumentThumbnailsView(UBDocumentContainer* source);
}; };

@ -26,7 +26,9 @@ class UBGraphicsScene;
class UBDocumentProxy : public QObject class UBDocumentProxy : public QObject
{ {
Q_OBJECT; Q_OBJECT
friend class UBPersistenceManager;
public: public:
@ -60,6 +62,8 @@ class UBDocumentProxy : public QObject
bool isModified() const; bool isModified() const;
int pageCount(); int pageCount();
protected:
void setPageCount(int pPageCount); void setPageCount(int pPageCount);
int incPageCount(); int incPageCount();
int decPageCount(); int decPageCount();

@ -1,6 +1,8 @@
HEADERS += src/document/UBDocumentController.h \ HEADERS += src/document/UBDocumentController.h \
src/document/UBDocumentContainer.h \
src/document/UBDocumentProxy.h src/document/UBDocumentProxy.h
SOURCES += src/document/UBDocumentController.cpp \ SOURCES += src/document/UBDocumentController.cpp \
src/document/UBDocumentContainer.cpp \
src/document/UBDocumentProxy.cpp src/document/UBDocumentProxy.cpp

@ -20,6 +20,7 @@
#include "core/UBApplication.h" #include "core/UBApplication.h"
#include "board/UBBoardController.h" #include "board/UBBoardController.h"
#include "document/UBDocumentContainer.h"
#include "globals/UBGlobals.h" #include "globals/UBGlobals.h"
@ -334,7 +335,7 @@ QString UBFileSystemUtils::normalizeFilePath(const QString& pFilePath)
QString UBFileSystemUtils::digitFileFormat(const QString& s, int digit) QString UBFileSystemUtils::digitFileFormat(const QString& s, int digit)
{ {
int pageDigit = UBApplication::boardController->pageFromSceneIndex(digit); int pageDigit = UBDocumentContainer::pageFromSceneIndex(digit);
return s.arg(pageDigit, 3, 10, QLatin1Char('0')); return s.arg(pageDigit, 3, 10, QLatin1Char('0'));
} }

@ -1,7 +1,7 @@
/* /*
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
@ -40,12 +40,9 @@
*/ */
UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGraphicsView(parent) UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGraphicsView(parent)
, mScene(NULL) , mScene(NULL)
, mCrntItem(NULL)
, mCrntDoc(NULL)
, mNbColumns(1) , mNbColumns(1)
, mThumbnailWidth(0) , mThumbnailWidth(0)
, mThumbnailMinWidth(100) , mThumbnailMinWidth(100)
, bNavig(false)
{ {
setObjectName(name); setObjectName(name);
mScene = new QGraphicsScene(this); mScene = new QGraphicsScene(this);
@ -55,11 +52,9 @@ UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGra
setFrameShadow(QFrame::Plain); setFrameShadow(QFrame::Plain);
connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(generateThumbnails())); connect(UBApplication::boardController, SIGNAL(documentThumbnailsUpdated(UBDocumentContainer*)), this, SLOT(generateThumbnails(UBDocumentContainer*)));
connect(UBApplication::boardController, SIGNAL(newPageAdded()), this, SLOT(addNewPage())); connect(UBApplication::boardController, SIGNAL(documentPageUpdated(int)), this, SLOT(updateSpecificThumbnail(int)));
connect(mScene, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); connect(UBApplication::boardController, SIGNAL(pageSelectionChanged(int)), this, SLOT(onScrollToSelectedPage(int)));
connect(UBApplication::boardController, SIGNAL(documentReorganized(int)), this, SLOT(onMovedToIndex(int)));
connect(UBApplication::boardController, SIGNAL(scrollToSelectedPage()), this, SLOT(onScrollToSelectedPage()));
} }
/** /**
@ -67,12 +62,6 @@ UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGra
*/ */
UBDocumentNavigator::~UBDocumentNavigator() UBDocumentNavigator::~UBDocumentNavigator()
{ {
if(NULL != mCrntItem)
{
delete mCrntItem;
mCrntItem = NULL;
}
if(NULL != mScene) if(NULL != mScene)
{ {
delete mScene; delete mScene;
@ -80,27 +69,11 @@ UBDocumentNavigator::~UBDocumentNavigator()
} }
} }
/**
* \brief Set the current document
* @param document as the new document
*/
void UBDocumentNavigator::setDocument(UBDocumentProxy *document)
{
// Here we set a new document to the navigator. We must clear the current
// content and add all the pages of the given document.
if(document)
{
mCrntDoc = document;
}
}
/** /**
* \brief Generate the thumbnails * \brief Generate the thumbnails
*/ */
void UBDocumentNavigator::generateThumbnails() void UBDocumentNavigator::generateThumbnails(UBDocumentContainer* source)
{ {
// Get the thumbnails
QList<QPixmap> thumbs = UBThumbnailAdaptor::load(mCrntDoc);
mThumbsWithLabels.clear(); mThumbsWithLabels.clear();
foreach(QGraphicsItem* it, mScene->items()) foreach(QGraphicsItem* it, mScene->items())
@ -109,11 +82,11 @@ void UBDocumentNavigator::generateThumbnails()
delete it; delete it;
} }
for(int i = 0; i < thumbs.count(); i++) for(int i = 0; i < source->selectedDocument()->pageCount(); i++)
{ {
QPixmap pix = thumbs.at(i); const QPixmap* pix = source->pageAt(i);
QGraphicsPixmapItem* pixmapItem = new UBSceneThumbnailNavigPixmap(pix, mCrntDoc, i); UBSceneThumbnailNavigPixmap* pixmapItem = new UBSceneThumbnailNavigPixmap(*pix, source->selectedDocument(), i);
UBThumbnailTextItem *labelItem = new UBThumbnailTextItem(tr("Page %0").arg(UBApplication::boardController->pageFromSceneIndex(i))); UBThumbnailTextItem *labelItem = new UBThumbnailTextItem(tr("Page %0").arg(UBDocumentContainer::pageFromSceneIndex(i)));
UBImgTextThumbnailElement thumbWithText(pixmapItem, labelItem); UBImgTextThumbnailElement thumbWithText(pixmapItem, labelItem);
thumbWithText.setBorder(border()); thumbWithText.setBorder(border());
@ -125,8 +98,7 @@ void UBDocumentNavigator::generateThumbnails()
// Get the selected item // Get the selected item
if(UBApplication::boardController->activeSceneIndex() == i) if(UBApplication::boardController->activeSceneIndex() == i)
{ {
mCrntItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(pixmapItem); pixmapItem->setSelected(true);
mCrntItem->setSelected(true);
} }
} }
@ -134,61 +106,48 @@ void UBDocumentNavigator::generateThumbnails()
refreshScene(); refreshScene();
} }
/** void UBDocumentNavigator::onScrollToSelectedPage(int index)
* \brief Refresh the given thumbnail
* @param iPage as the given page related thumbnail
*/
void UBDocumentNavigator::updateSpecificThumbnail(int iPage)
{ {
// Generate the new thumbnail int c = 0;
UBGraphicsScene* pScene = UBApplication::boardController->activeScene(); foreach(UBImgTextThumbnailElement el, mThumbsWithLabels)
if(NULL != pScene)
{ {
// Save the current state of the scene if (c==index)
pScene->setModified(true);
if(UBApplication::boardController)
{ {
UBApplication::boardController->persistCurrentScene(); el.getThumbnail()->setSelected(true);
}else centerOn(el.getThumbnail());
{
UBThumbnailAdaptor::persistScene(mCrntDoc->persistencePath(), pScene, iPage);
} }
else
// Load it
QPixmap pix = UBThumbnailAdaptor::load(mCrntDoc, iPage);
UBSceneThumbnailNavigPixmap* pixmapItem = new UBSceneThumbnailNavigPixmap(pix, mCrntDoc, iPage);
if(pixmapItem)
{
// Get the old thumbnail
QGraphicsItem* pItem = mThumbsWithLabels.at(iPage).getThumbnail();
if(NULL != pItem)
{ {
mScene->removeItem(pItem); el.getThumbnail()->setSelected(false);
mScene->addItem(pixmapItem);
mThumbsWithLabels[iPage].setThumbnail(pixmapItem);
delete pItem;
}
} }
c++;
} }
refreshScene();
} }
/** /**
* \brief Add a new page to the thumbnails list * \brief Refresh the given thumbnail
* * @param iPage as the given page related thumbnail
* This method is called automatically by the board controller each time the user
* adds a new page, duplicates a page or imports a document.
*/ */
void UBDocumentNavigator::addNewPage() void UBDocumentNavigator::updateSpecificThumbnail(int iPage)
{
if(!bNavig)
{ {
generateThumbnails(); // Generate the new thumbnail
if(NULL != mCrntItem) //UBGraphicsScene* pScene = UBApplication::boardController->activeScene();
const QPixmap* pix = UBApplication::boardController->pageAt(iPage);
UBSceneThumbnailNavigPixmap* newItem = new UBSceneThumbnailNavigPixmap(*pix,
UBApplication::boardController->selectedDocument(), iPage);
// Get the old thumbnail
UBSceneThumbnailNavigPixmap* oldItem = mThumbsWithLabels.at(iPage).getThumbnail();
if(NULL != oldItem)
{ {
mCrntItem->setSelected(true); mScene->removeItem(oldItem);
} mScene->addItem(newItem);
mThumbsWithLabels[iPage].setThumbnail(newItem);
delete oldItem;
} }
} }
/** /**
@ -277,7 +236,6 @@ void UBDocumentNavigator::mousePressEvent(QMouseEvent *event)
QGraphicsItem* pClickedItem = itemAt(event->pos()); QGraphicsItem* pClickedItem = itemAt(event->pos());
if(NULL != pClickedItem) if(NULL != pClickedItem)
{ {
bNavig = true;
// First, select the clicked item // First, select the clicked item
UBSceneThumbnailNavigPixmap* pCrntItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(pClickedItem); UBSceneThumbnailNavigPixmap* pCrntItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(pClickedItem);
@ -293,92 +251,24 @@ void UBDocumentNavigator::mousePressEvent(QMouseEvent *event)
const UBImgTextThumbnailElement& el = mThumbsWithLabels.at(i); const UBImgTextThumbnailElement& el = mThumbsWithLabels.at(i);
if(el.getCaption() == pTextItem) if(el.getCaption() == pTextItem)
{ {
pCrntItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(el.getThumbnail()); pCrntItem = el.getThumbnail();
break; break;
} }
} }
} }
} }
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;
// Then display the related page int index = 0;
emit changeCurrentPage();
refreshScene();
}
}
bNavig = false;
}
QGraphicsView::mousePressEvent(event);
}
/**
* \brief Get the selected page number
* @return the selected page number
*/
int UBDocumentNavigator::selectedPageNumber()
{
int nbr = NO_PAGESELECTED;
if(NULL != mCrntItem)
{
for(int i = 0; i < mThumbsWithLabels.size(); i++) for(int i = 0; i < mThumbsWithLabels.size(); i++)
if (mThumbsWithLabels.at(i).getThumbnail() == mCrntItem)
{ {
nbr = i; if (mThumbsWithLabels.at(i).getThumbnail() == pCrntItem)
{
index = i;
break; break;
} }
} }
UBApplication::boardController->setActiveDocumentScene(index);
return nbr;
} }
QGraphicsView::mousePressEvent(event);
/**
* \brief Get the current document
* @return the current document
*/
UBDocumentProxy* UBDocumentNavigator::currentDoc()
{
return mCrntDoc;
}
/**
* \brief Occurs when the selection changed
*/
void UBDocumentNavigator::onSelectionChanged()
{
// QList<QGraphicsItem*> qlItems = mScene->selectedItems();
// qDebug() << "The number of selected items is " << qlItems.count();
} }
/**
* \brief Occurs when a page has been moved to another index in the document
* @param index as the new index
*/
void UBDocumentNavigator::onMovedToIndex(int index)
{
if(index < mThumbsWithLabels.size()){
UBSceneThumbnailNavigPixmap* pItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(mThumbsWithLabels.at(index).getThumbnail());
if(NULL != pItem)
{
if(mCrntItem) mCrntItem->setSelected(false);//deselecting previous one
mCrntItem = pItem;
mCrntItem->setSelected(true);
centerOn(mCrntItem);
}
}
}

@ -22,6 +22,7 @@
#include <QThread> #include <QThread>
#include "document/UBDocumentProxy.h" #include "document/UBDocumentProxy.h"
#include "document/UBDocumentContainer.h"
#include "UBThumbnailWidget.h" #include "UBThumbnailWidget.h"
#define NO_PAGESELECTED -1 #define NO_PAGESELECTED -1
@ -33,42 +34,30 @@ public:
UBDocumentNavigator(QWidget* parent=0, const char* name="documentNavigator"); UBDocumentNavigator(QWidget* parent=0, const char* name="documentNavigator");
~UBDocumentNavigator(); ~UBDocumentNavigator();
void setDocument(UBDocumentProxy* document);
void setNbColumns(int nbColumns); void setNbColumns(int nbColumns);
int nbColumns(); int nbColumns();
void setThumbnailMinWidth(int width); void setThumbnailMinWidth(int width);
int thumbnailMinWidth(); int thumbnailMinWidth();
int selectedPageNumber();
UBDocumentProxy* currentDoc();
signals:
void changeCurrentPage();
public slots: public slots:
void onMovedToIndex(int index); void onScrollToSelectedPage(int index);// { if (mCrntItem) centerOn(mCrntItem); }
void onScrollToSelectedPage() { centerOn(mCrntItem); } void generateThumbnails(UBDocumentContainer* source);
void updateSpecificThumbnail(int iPage);
protected: protected:
virtual void resizeEvent(QResizeEvent *event); virtual void resizeEvent(QResizeEvent *event);
virtual void mousePressEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event);
private slots:
void addNewPage();
void onSelectionChanged();
void generateThumbnails();
private: private:
void refreshScene(); void refreshScene();
void updateSpecificThumbnail(int iPage);
int border(); int border();
/** The scene */ /** The scene */
QGraphicsScene* mScene; QGraphicsScene* mScene;
/** The current selected item */ /** The current selected item */
UBSceneThumbnailNavigPixmap* mCrntItem; //UBSceneThumbnailNavigPixmap* mCrntItem;
/** The current document */
UBDocumentProxy* mCrntDoc;
/** The list of current thumbnails with labels*/ /** The list of current thumbnails with labels*/
QList<UBImgTextThumbnailElement> mThumbsWithLabels; QList<UBImgTextThumbnailElement> mThumbsWithLabels;
/** The current number of columns */ /** The current number of columns */
@ -77,8 +66,6 @@ private:
int mThumbnailWidth; int mThumbnailWidth;
/** The current thumbnails minimum width */ /** The current thumbnails minimum width */
int mThumbnailMinWidth; int mThumbnailMinWidth;
/** A flag indicating that a thumbnail refresh is in progress */
bool bNavig;
}; };
#endif // UBDOCUMENTNAVIGATOR_H #endif // UBDOCUMENTNAVIGATOR_H

@ -68,7 +68,7 @@ void UBDocumentThumbnailWidget::mouseMoveEvent(QMouseEvent *event)
if (sceneItem) if (sceneItem)
{ {
int pageIndex = UBApplication::boardController->pageFromSceneIndex(sceneItem->sceneIndex()); int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneItem->sceneIndex());
if(pageIndex != 0){ if(pageIndex != 0){
QDrag *drag = new QDrag(this); QDrag *drag = new QDrag(this);
QList<UBMimeDataItem> mimeDataItems; QList<UBMimeDataItem> mimeDataItems;
@ -153,7 +153,7 @@ void UBDocumentThumbnailWidget::dragMoveEvent(QDragMoveEvent *event)
int pageIndex = -1; int pageIndex = -1;
if(mClosestDropItem){ if(mClosestDropItem){
pageIndex = UBApplication::boardController->pageFromSceneIndex(mClosestDropItem->sceneIndex()); pageIndex = UBDocumentContainer::pageFromSceneIndex(mClosestDropItem->sceneIndex());
if(pageIndex == 0){ if(pageIndex == 0){
event->acceptProposedAction(); event->acceptProposedAction();
return; return;
@ -173,7 +173,7 @@ void UBDocumentThumbnailWidget::dragMoveEvent(QDragMoveEvent *event)
{ {
mClosestDropItem = item; mClosestDropItem = item;
minDistance = distance; minDistance = distance;
pageIndex = UBApplication::boardController->pageFromSceneIndex(mClosestDropItem->sceneIndex()); pageIndex = UBDocumentContainer::pageFromSceneIndex(mClosestDropItem->sceneIndex());
} }
} }
} }
@ -221,7 +221,7 @@ void UBDocumentThumbnailWidget::dropEvent(QDropEvent *event)
if (mClosestDropItem) if (mClosestDropItem)
{ {
int targetIndex = mDropIsRight ? mGraphicItems.indexOf(mClosestDropItem) + 1 : mGraphicItems.indexOf(mClosestDropItem); int targetIndex = mDropIsRight ? mGraphicItems.indexOf(mClosestDropItem) + 1 : mGraphicItems.indexOf(mClosestDropItem);
if(UBApplication::boardController->pageFromSceneIndex(targetIndex) == 0){ if(UBDocumentContainer::pageFromSceneIndex(targetIndex) == 0){
event->ignore(); event->ignore();
return; return;
} }
@ -279,7 +279,6 @@ void UBDocumentThumbnailWidget::deleteDropCaret()
} }
} }
void UBDocumentThumbnailWidget::setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems, void UBDocumentThumbnailWidget::setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems,
const QList<QUrl>& pItemPaths, const QStringList pLabels, const QList<QUrl>& pItemPaths, const QStringList pLabels,
const QString& pMimeType) const QString& pMimeType)

@ -200,7 +200,9 @@ void UBDocumentTreeWidget::focusInEvent(QFocusEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
itemSelectionChanged(); // Tolik
//itemSelectionChanged();
QTreeWidget::focusInEvent(event); QTreeWidget::focusInEvent(event);
} }

@ -63,7 +63,6 @@ UBNavigatorPalette::UBNavigatorPalette(QWidget *parent, const char *name):
mTimeFormat = mTimeFormat.remove(":s"); mTimeFormat = mTimeFormat.remove(":s");
mTimerID = startTimer(1000); mTimerID = startTimer(1000);
connect(mNavigator, SIGNAL(changeCurrentPage()), this, SLOT(changeCurrentPage()));
} }
/** /**
@ -104,34 +103,12 @@ UBNavigatorPalette::~UBNavigatorPalette()
* \brief Set the current document in the navigator * \brief Set the current document in the navigator
* @param document as the given document * @param document as the given document
*/ */
void UBNavigatorPalette::setDocument(UBDocumentProxy *document)
{
if(mNavigator->currentDoc() != document)
{
mNavigator->setDocument(document);
}
}
/**
* \brief Change the current page
*/
void UBNavigatorPalette::changeCurrentPage()
{
// Get the index of the page to display
int iPage = mNavigator->selectedPageNumber();
if(NO_PAGESELECTED != iPage)
{
// Display the selected page
UBApplication::boardController->setActiveDocumentScene(mNavigator->currentDoc(), iPage);
}
}
/** /**
* \brief Refresh the thumbnails widget * \brief Refresh the thumbnails widget
*/ */
void UBNavigatorPalette::refresh() void UBNavigatorPalette::refresh()
{ {
mNavigator->setDocument(UBApplication::boardController->activeDocument());
} }
/** /**

@ -58,8 +58,6 @@ private:
QString mTimeFormat; QString mTimeFormat;
int mTimerID; int mTimerID;
private slots:
void changeCurrentPage();
}; };

@ -17,6 +17,8 @@
#include "board/UBBoardController.h" #include "board/UBBoardController.h"
#include "document/UBDocumentContainer.h"
#include "globals/UBGlobals.h" #include "globals/UBGlobals.h"
#include "core/memcheck.h" #include "core/memcheck.h"
@ -72,8 +74,8 @@ UBPageNavigationWidget::UBPageNavigationWidget(QWidget *parent, const char *name
mTimeFormat = mTimeFormat.remove(":s"); mTimeFormat = mTimeFormat.remove(":s");
mTimerID = startTimer(1000); mTimerID = startTimer(1000);
connect(mNavigator, SIGNAL(changeCurrentPage()), this, SLOT(changeCurrentPage())); //connect(mNavigator, SIGNAL(changeCurrentPage()), this, SLOT(changeCurrentPage()));
connect(UBApplication::boardController, SIGNAL(setDocOnPageNavigator(UBDocumentProxy*)), this, SLOT(onSetDocOnPageNavigator(UBDocumentProxy*))); //connect(UBApplication::boardController, SIGNAL(setDocOnPageNavigator(UBDocumentProxy*)), this, SLOT(onSetDocOnPageNavigator(UBDocumentProxy*)));
} }
/** /**
@ -110,41 +112,14 @@ UBPageNavigationWidget::~UBPageNavigationWidget()
} }
} }
/**
* \brief Set the current document in the navigator
* @param document as the given document
*/
void UBPageNavigationWidget::setDocument(UBDocumentProxy *document)
{
if(mNavigator->currentDoc() != document)
{
mNavigator->setDocument(document);
}
}
/**
* \brief Change the current page
*/
void UBPageNavigationWidget::changeCurrentPage()
{
// Get the index of the page to display
int iPage = mNavigator->selectedPageNumber();
if(NO_PAGESELECTED != iPage)
{
// Display the selected page
UBApplication::boardController->setActiveDocumentScene(mNavigator->currentDoc(), iPage);
// emit here the signal to indicate that page change
UBApplication::boardController->notifyPageChanged();
}
}
/** /**
* \brief Refresh the thumbnails widget * \brief Refresh the thumbnails widget
*/ */
void UBPageNavigationWidget::refresh() void UBPageNavigationWidget::refresh()
{ {
mNavigator->setDocument(UBApplication::boardController->activeDocument()); // TOLIK!!!
// mNavigator->setDocument(UBApplication::boardController->activeDocument());
} }
/** /**
@ -175,7 +150,7 @@ void UBPageNavigationWidget::updateTime()
*/ */
void UBPageNavigationWidget::setPageNumber(int current, int total) void UBPageNavigationWidget::setPageNumber(int current, int total)
{ {
mPageNbr->setText(QString("%1 / %2").arg(current).arg(UBApplication::boardController->sceneIndexFromPage(total))); mPageNbr->setText(QString("%1 / %2").arg(current).arg(UBDocumentContainer::sceneIndexFromPage(total)));
} }
/** /**
@ -196,11 +171,3 @@ int UBPageNavigationWidget::border()
return 15; return 15;
} }
/**
* \brief Set the current document
* @param doc as the current document
*/
void UBPageNavigationWidget::onSetDocOnPageNavigator(UBDocumentProxy *doc)
{
setDocument(doc);
}

@ -33,7 +33,7 @@ class UBPageNavigationWidget : public UBDockPaletteWidget
public: public:
UBPageNavigationWidget(QWidget* parent=0, const char* name="UBPageNavigationWidget"); UBPageNavigationWidget(QWidget* parent=0, const char* name="UBPageNavigationWidget");
~UBPageNavigationWidget(); ~UBPageNavigationWidget();
void setDocument(UBDocumentProxy* document); //void setDocument(UBDocumentProxy* document);
void refresh(); void refresh();
bool visibleInMode(eUBDockPaletteWidgetMode mode) bool visibleInMode(eUBDockPaletteWidgetMode mode)
@ -50,8 +50,6 @@ public slots:
protected: protected:
virtual void timerEvent(QTimerEvent *event); virtual void timerEvent(QTimerEvent *event);
private slots:
void onSetDocOnPageNavigator(UBDocumentProxy* doc);
private: private:
void updateTime(); void updateTime();
@ -68,8 +66,6 @@ private:
QString mTimeFormat; QString mTimeFormat;
int mTimerID; int mTimerID;
private slots:
void changeCurrentPage();
}; };
#endif // UBPAGENAVIGATIONWIDGET_H #endif // UBPAGENAVIGATIONWIDGET_H

@ -211,7 +211,7 @@ void UBThumbnailWidget::mousePressEvent(QMouseEvent *event)
UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(itemAt(mMousePressPos)); UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(itemAt(mMousePressPos));
if(sceneItem){ if(sceneItem){
int pageIndex = UBApplication::boardController->pageFromSceneIndex(sceneItem->sceneIndex()); int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneItem->sceneIndex());
if(pageIndex == 0){ if(pageIndex == 0){
event->ignore(); event->ignore();
return; return;
@ -761,7 +761,7 @@ UBSceneThumbnailNavigPixmap::UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBD
, bCanMoveDown(false) , bCanMoveDown(false)
, bCanDuplicate(false) , bCanDuplicate(false)
{ {
if(0 <= UBApplication::boardController->pageFromSceneIndex(pSceneIndex)){ if(0 <= UBDocumentContainer::pageFromSceneIndex(pSceneIndex)){
setAcceptsHoverEvents(true); setAcceptsHoverEvents(true);
setFlag(QGraphicsItem::ItemIsSelectable, true); setFlag(QGraphicsItem::ItemIsSelectable, true);
} }
@ -839,7 +839,7 @@ void UBSceneThumbnailNavigPixmap::updateButtonsState()
bCanDuplicate = false; bCanDuplicate = false;
if(proxy()){ if(proxy()){
int pageIndex = UBApplication::boardController->pageFromSceneIndex(sceneIndex()); int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneIndex());
UBDocumentController* documentController = UBApplication::documentController; UBDocumentController* documentController = UBApplication::documentController;
bCanDelete = documentController->pageCanBeDeleted(pageIndex); bCanDelete = documentController->pageCanBeDeleted(pageIndex);
bCanMoveUp = documentController->pageCanBeMovedUp(pageIndex); bCanMoveUp = documentController->pageCanBeMovedUp(pageIndex);
@ -853,25 +853,24 @@ void UBSceneThumbnailNavigPixmap::updateButtonsState()
void UBSceneThumbnailNavigPixmap::deletePage() void UBSceneThumbnailNavigPixmap::deletePage()
{ {
QList<QGraphicsItem*> itemsToDelete; UBApplication::boardController->deleteScene(sceneIndex());
itemsToDelete << this;
UBApplication::documentController->deletePages(itemsToDelete);
} }
void UBSceneThumbnailNavigPixmap::duplicatePage() void UBSceneThumbnailNavigPixmap::duplicatePage()
{ {
UBApplication::boardController->duplicateScene(); UBApplication::boardController->duplicateScene(sceneIndex());
} }
void UBSceneThumbnailNavigPixmap::moveUpPage() void UBSceneThumbnailNavigPixmap::moveUpPage()
{ {
UBApplication::documentController->moveSceneToIndex(proxy(), sceneIndex(), sceneIndex() - 1); if (sceneIndex()!=0)
UBApplication::boardController->moveSceneToIndex(sceneIndex(), sceneIndex() - 1);
} }
void UBSceneThumbnailNavigPixmap::moveDownPage() void UBSceneThumbnailNavigPixmap::moveDownPage()
{ {
UBApplication::documentController->moveSceneToIndex(proxy(), sceneIndex(), sceneIndex() + 1); if (sceneIndex() < UBApplication::boardController->selectedDocument()->pageCount()-1)
UBApplication::boardController->moveSceneToIndex(sceneIndex(), sceneIndex() + 1);
} }
void UBImgTextThumbnailElement::Place(int row, int col, qreal width, qreal height) void UBImgTextThumbnailElement::Place(int row, int col, qreal width, qreal height)

@ -400,19 +400,19 @@ class UBThumbnailTextItem : public QGraphicsTextItem
class UBImgTextThumbnailElement class UBImgTextThumbnailElement
{ {
private: private:
QGraphicsItem* thumbnail; UBSceneThumbnailNavigPixmap* thumbnail;
UBThumbnailTextItem* caption; UBThumbnailTextItem* caption;
int border; int border;
public: public:
UBImgTextThumbnailElement(QGraphicsItem* thumb, UBThumbnailTextItem* text): border(0) UBImgTextThumbnailElement(UBSceneThumbnailNavigPixmap* thumb, UBThumbnailTextItem* text): border(0)
{ {
this->thumbnail = thumb; this->thumbnail = thumb;
this->caption = text; this->caption = text;
} }
QGraphicsItem* getThumbnail() const { return this->thumbnail; } UBSceneThumbnailNavigPixmap* getThumbnail() const { return this->thumbnail; }
void setThumbnail(QGraphicsItem* newGItem) { this->thumbnail = newGItem; } void setThumbnail(UBSceneThumbnailNavigPixmap* newGItem) { this->thumbnail = newGItem; }
UBThumbnailTextItem* getCaption() const { return this->caption; } UBThumbnailTextItem* getCaption() const { return this->caption; }
void setCaption(UBThumbnailTextItem* newcaption) { this->caption = newcaption; } void setCaption(UBThumbnailTextItem* newcaption) { this->caption = newcaption; }

Loading…
Cancel
Save