diff --git a/resources/sankore.qrc b/resources/sankore.qrc index 9941c519..425c21c5 100644 --- a/resources/sankore.qrc +++ b/resources/sankore.qrc @@ -364,5 +364,6 @@ images/teacherGuide/w3c_24x24.svg images/teacherGuide/pencil.svg images/duplicateDisabled.svg + images/teacherGuide/flash_24x24.svg diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index 954af5b5..2c025a7c 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -878,6 +878,34 @@ QString UBPersistenceManager::addObjectToTeacherGuideDirectory(UBDocumentProxy* return destPath; } +QString UBPersistenceManager::addWidgetToTeacherGuideDirectory(UBDocumentProxy* pDocumentProxy, QString pPath) +{ + QString path = UBFileSystemUtils::removeLocalFilePrefix(pPath); + QFileInfo fi(path); + Q_ASSERT(fi.isDir()); + + int lastIndex = path.lastIndexOf("."); + QString extension(""); + if(lastIndex != -1) + extension = path.right(path.length() - lastIndex); + + QString uuid = QUuid::createUuid(); + + if (!fi.exists() || !pDocumentProxy) + return ""; + + QString directoryName = UBPersistenceManager::teacherGuideDirectory + "/" + uuid + extension; + QString destPath = pDocumentProxy->persistencePath() + "/" + directoryName; + + if (!QDir(destPath).exists()){ + QDir dir; + dir.mkdir(pDocumentProxy->persistencePath() + "/" + UBPersistenceManager::teacherGuideDirectory); + UBFileSystemUtils::copyDir(path,destPath); + } + + return destPath; +} + bool UBPersistenceManager::addFileToDocument(UBDocumentProxy* pDocumentProxy, QString path, const QString& subdir, diff --git a/src/core/UBPersistenceManager.h b/src/core/UBPersistenceManager.h index 9ea21db3..79624b18 100644 --- a/src/core/UBPersistenceManager.h +++ b/src/core/UBPersistenceManager.h @@ -83,6 +83,7 @@ class UBPersistenceManager : public QObject QString teacherGuideAbsoluteObjectPath(UBDocumentProxy* pDocumentProxy); QString addObjectToTeacherGuideDirectory(UBDocumentProxy* proxy, QString pPath); + QString addWidgetToTeacherGuideDirectory(UBDocumentProxy* pDocumentProxy, QString pPath); virtual void addDirectoryContentToDocument(const QString& documentRootFolder, UBDocumentProxy* pDocument); diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp index 666c64e0..d7fd3493 100644 --- a/src/gui/UBTeacherGuideWidget.cpp +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -565,7 +565,7 @@ void UBTeacherGuidePresentationWidget::showData( QVector data } else if (element->name == "media") { createMediaButtonItem(); - QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem( mpMediaSwitchItem); + QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(mpMediaSwitchItem); newWidgetItem->setIcon(0, QIcon( ":images/teacherGuide/" + element->attributes.value("mediaType") + "_24x24.svg")); newWidgetItem->setText(0, element->attributes.value("title")); newWidgetItem->setData(0, tUBTGTreeWidgetItemRole_HasAnAction, tUBTGActionAssociateOnClickItem_MEDIA); @@ -582,7 +582,8 @@ void UBTeacherGuidePresentationWidget::showData( QVector data QTreeWidgetItem* mediaItem = new QTreeWidgetItem(newWidgetItem); mediaItem->setData(0, tUBTGTreeWidgetItemRole_HasAnAction, tUBTGActionAssociateOnClickItem_NONE); - UBTGMediaWidget* mediaWidget = new UBTGMediaWidget(element->attributes.value("relativePath"), newWidgetItem); + qDebug() << element->attributes.value("mediaType"); + UBTGMediaWidget* mediaWidget = new UBTGMediaWidget(element->attributes.value("relativePath"), newWidgetItem,0,element->attributes.value("mediaType").contains("flash")); newWidgetItem->setExpanded(false); mpTreeWidget->setItemWidget(mediaItem, 0, mediaWidget); } diff --git a/src/gui/UBTeacherGuideWidgetsTools.cpp b/src/gui/UBTeacherGuideWidgetsTools.cpp index 71334fbb..d9c88efd 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.cpp +++ b/src/gui/UBTeacherGuideWidgetsTools.cpp @@ -304,7 +304,7 @@ UBTGMediaWidget::UBTGMediaWidget(QTreeWidgetItem* widget, QWidget* parent,const setMinimumHeight(250); } -UBTGMediaWidget::UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget, QWidget* parent,const char* name): QStackedWidget(parent) +UBTGMediaWidget::UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget, QWidget* parent,bool forceFlashMediaType,const char* name): QStackedWidget(parent) , mpTreeWidgetItem(widget) , mpDropMeWidget(NULL) , mpWorkWidget(NULL) @@ -320,7 +320,7 @@ UBTGMediaWidget::UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget, QWi setObjectName(name); mMediaPath = UBApplication::boardController->selectedDocument()->persistencePath()+ "/" + mediaPath; setAcceptDrops(false); - createWorkWidget(); + createWorkWidget(forceFlashMediaType); setFixedHeight(200); } @@ -343,8 +343,7 @@ void UBTGMediaWidget::initializeWithDom(QDomElement element) mIsInitializationMode = true; setAcceptDrops(false); mMediaPath = UBApplication::boardController->selectedDocument()->persistencePath() + "/" + element.attribute("relativePath"); - qDebug() << mMediaPath; - createWorkWidget(); + createWorkWidget(element.attribute("mediaType").contains("flash")); setFixedHeight(200); mpTitle->setInitialText(element.attribute("title")); mIsInitializationMode = false; @@ -369,8 +368,12 @@ void UBTGMediaWidget::hideEvent(QHideEvent* event) void UBTGMediaWidget::showEvent(QShowEvent* event) { QWidget::showEvent(event); - if(mpWebView) - mpWebView->load(QUrl(mMediaPath + "/index.htm")); + if(mpWebView){ + QString indexPath = mMediaPath+"/index.htm"; + if(!QFile::exists(indexPath)) + indexPath += "l"; + mpWebView->load(QUrl::fromLocalFile(indexPath)); + } } tUBGEElementNode* UBTGMediaWidget::saveData() @@ -392,7 +395,7 @@ void UBTGMediaWidget::dragEnterEvent(QDragEnterEvent *event) event->accept(); } -void UBTGMediaWidget::createWorkWidget() +void UBTGMediaWidget::createWorkWidget(bool forceFlashMediaType) { QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(mMediaPath); bool setMedia = true; @@ -419,12 +422,32 @@ void UBTGMediaWidget::createWorkWidget() mpMediaLabelWidget->setPixmap(pixmap); mpMediaLabelWidget->setScaledContents(true); } - else if(mimeType.contains("application")){ + else if(mimeType.contains("widget") && !forceFlashMediaType){ mMediaType = "w3c"; + if(!(mIsPresentationMode || mIsInitializationMode)){ + mMediaPath = UBPersistenceManager::persistenceManager()->addWidgetToTeacherGuideDirectory(proxyDocument, mMediaPath); + } + mpWebView = new UBDraggableWeb(mMediaPath); + mpWebView->setAcceptDrops(false); + mpWebView->settings()->setAttribute(QWebSettings::JavaEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::PluginsEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true); + mpWebView->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true); + QString indexPath = mMediaPath+"/index.htm"; + if(!QFile::exists(indexPath)) + indexPath += "l"; + mpWebView->load(QUrl::fromLocalFile(indexPath)); + } + else if(mimeType.contains("x-shockwave-flash") || forceFlashMediaType){ + mMediaType = "flash"; if(!(mIsPresentationMode || mIsInitializationMode)){ QDir baseW3CDirectory(UBPersistenceManager::persistenceManager()->teacherGuideAbsoluteObjectPath(proxyDocument)); mMediaPath = UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(mMediaPath,baseW3CDirectory,mimeType,QSize(100,100),QUuid::createUuid()); } + qDebug() << mMediaPath; mpWebView = new UBDraggableWeb(mMediaPath); mpWebView->setAcceptDrops(false); mpWebView->settings()->setAttribute(QWebSettings::JavaEnabled, true); @@ -434,8 +457,10 @@ void UBTGMediaWidget::createWorkWidget() mpWebView->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); mpWebView->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true); mpWebView->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true); - - mpWebView->load(QUrl(mMediaPath+"/index.htm")); + QString indexPath = mMediaPath+"/index.htm"; + if(!QFile::exists(indexPath)) + indexPath += "l"; + mpWebView->load(QUrl::fromLocalFile(indexPath)); } else{ qDebug() << "createWorkWidget mime type not handled" << mimeType; diff --git a/src/gui/UBTeacherGuideWidgetsTools.h b/src/gui/UBTeacherGuideWidgetsTools.h index 43e726e3..e4ee8c53 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.h +++ b/src/gui/UBTeacherGuideWidgetsTools.h @@ -137,7 +137,7 @@ class UBTGMediaWidget : public QStackedWidget , public iUBTGSaveData Q_OBJECT public: UBTGMediaWidget(QTreeWidgetItem* widget = 0, QWidget* parent = 0, const char* name = "UBTGMediaWidget"); - UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget = 0, QWidget* parent = 0, const char* name = "UBTGMediaWidget"); + UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget = 0, QWidget* parent = 0, bool forceFlashMediaType = false, const char *name = "UBTGMediaWidget"); ~UBTGMediaWidget(); tUBGEElementNode* saveData(); void initializeWithDom(QDomElement element); @@ -152,7 +152,7 @@ protected: private: void parseMimeData(const QMimeData* pMimeData); - void createWorkWidget(); + void createWorkWidget(bool forceFlashMediaType = false); void updateSize(); QTreeWidgetItem* mpTreeWidgetItem;