Merge remote-tracking branch 'origin/claudio-dev'

preferencesAboutTextFull
Claudio Valerio 12 years ago
commit 4d8dad7434
  1. 18
      plugins/cffadaptor/src/UBCFFAdaptor.cpp
  2. 1
      resources/sankore.qrc
  3. 9
      resources/style.qss
  4. 24
      src/board/UBBoardController.cpp
  5. 28
      src/core/UBPersistenceManager.cpp
  6. 1
      src/core/UBPersistenceManager.h
  7. 6
      src/domain/UBGraphicsWidgetItem.cpp
  8. 18
      src/gui/UBTeacherGuideWidget.cpp
  9. 6
      src/gui/UBTeacherGuideWidget.h
  10. 45
      src/gui/UBTeacherGuideWidgetsTools.cpp
  11. 4
      src/gui/UBTeacherGuideWidgetsTools.h

@ -919,7 +919,7 @@ bool UBCFFAdaptor::UBToCFFConverter::ibwAddLine(int x1, int y1, int x2, int y2,
QDomElement svgBackgroundCrossPart = doc.createElementNS(svgIWBNS,svgIWBNSPrefix + ":line");
QDomElement iwbBackgroundCrossPart = doc.createElementNS(iwbNS,iwbNsPrefix + ":" + tElement);
QString sUUID = QUuid::createUuid().toString().remove("{").remove("}");
QString sUUID = QUuid::createUuid().toString();
svgBackgroundCrossPart.setTagName(tIWBLine);
@ -1061,7 +1061,7 @@ bool UBCFFAdaptor::UBToCFFConverter::setContentFromUBZ(const QDomElement &ubzEle
QString sSrcFileName = sourcePath + "/" + srcPath ;
QString fileExtention = getExtentionFromFileName(sSrcFileName);
QString sDstContentFolder = getDstContentFolderName(ubzElement.tagName());
QString sDstFileName(QString(QUuid::createUuid().toString()+"."+convertExtention(fileExtention)).remove("{").remove("}"));
QString sDstFileName(QString(QUuid::createUuid().toString()+"."+convertExtention(fileExtention)));
if (itIsSupportedFormat(fileExtention)) // format is supported and we can copy src. files without changing.
@ -1268,7 +1268,7 @@ bool UBCFFAdaptor::UBToCFFConverter::setCFFAttribute(const QString &attributeNam
QString id = tl.at(tl.count()-1);
// if element already have an ID, we use it. Else we create new id for element.
if (QString() == id)
id = QUuid::createUuid().toString().remove("{").remove("}");
id = QUuid::createUuid().toString();
svgElement.setAttribute(aID, id);
iwbElement.setAttribute(aRef, id);
@ -1382,11 +1382,9 @@ bool UBCFFAdaptor::UBToCFFConverter::createBackground(const QDomElement &element
if (0 <= mViewbox.topLeft().y())
bckRect.topLeft().setY(0);
// QString backgroundImagePath = createBackgroundImage(element, QSize(bckRect.width(), bckRect.height()));
// if (QString() != backgroundImagePath)
if (QRect() != bckRect)
{
QString sElementID = QUuid::createUuid().toString().remove("{").remove("}");
QString sElementID = QUuid::createUuid().toString();
bool darkBackground = (avTrue == element.attribute(aDarkBackground));
svgBackgroundElementPart.setAttribute(aFill, darkBackground ? "black" : "white");
@ -1635,7 +1633,7 @@ bool UBCFFAdaptor::UBToCFFConverter::parseUBZAudio(const QDomElement &element, Q
//we must create image-containers for audio files
int audioImageDimention = qMin(svgElementPart.attribute(aWidth).toInt(), svgElementPart.attribute(aHeight).toInt());
QString srcAudioImageFile(sAudioElementImage);
QString elementId = QString(QUuid::createUuid().toString()).remove("{").remove("}");
QString elementId = QString(QUuid::createUuid().toString());
QString sDstAudioImageFileName = elementId+"."+fePng;
QString dstAudioImageFilePath = destinationPath+"/"+cfImages+"/"+sDstAudioImageFileName;
QString dstAudioImageRelativePath = cfImages+"/"+sDstAudioImageFileName;
@ -1793,7 +1791,7 @@ bool UBCFFAdaptor::UBToCFFConverter::parseUBZPolygon(const QDomElement &element,
if (0 < iwbElementPart.attributes().count())
{
QString id = QUuid::createUuid().toString().remove("{").remove("}");
QString id = QUuid::createUuid().toString();
svgElementPart.setAttribute(aID, id);
iwbElementPart.setAttribute(aRef, id);
@ -1826,7 +1824,7 @@ bool UBCFFAdaptor::UBToCFFConverter::parseUBZPolyline(const QDomElement &element
if (0 < iwbElementPart.attributes().count())
{
QString id = QUuid::createUuid().toString().remove("{").remove("}");
QString id = QUuid::createUuid().toString();
svgElementPart.setAttribute(aID, id);
iwbElementPart.setAttribute(aRef, id);
@ -1858,7 +1856,7 @@ bool UBCFFAdaptor::UBToCFFConverter::parseUBZLine(const QDomElement &element, QM
if (0 < iwbElementPart.attributes().count())
{
QString id = QUuid::createUuid().toString().remove("{").remove("}");
QString id = QUuid::createUuid().toString();
svgElementPart.setAttribute(aID, id);
iwbElementPart.setAttribute(aRef, id);

@ -364,5 +364,6 @@
<file>images/teacherGuide/w3c_24x24.svg</file>
<file>images/teacherGuide/pencil.svg</file>
<file>images/duplicateDisabled.svg</file>
<file>images/teacherGuide/flash_24x24.svg</file>
</qresource>
</RCC>

@ -14,6 +14,15 @@ QWidget#UBFeaturesCentralWidget
border: 2px solid #999999;
}
QTextEdit,
QLineEdit,
QComboBox#DockPaletteWidgetComboBox QAbstractItemView
{
selection-background-color: lightgreen;
selection-color: black;
}
QWidget#mAdditionalDataContainer
{
border-radius: 10px;

@ -946,7 +946,7 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const
else if (sUrl.startsWith("file://") || sUrl.startsWith("/"))
{
QString fileName = url.toLocalFile();
QUrl formedUrl = sUrl.startsWith("file://") ? sUrl : QUrl::fromLocalFile(sUrl);
QString contentType = UBFileSystemUtils::mimeTypeFromFileName(fileName);
bool shouldLoadFileData =
@ -959,7 +959,7 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const
if (shouldLoadFileData)
file.open(QIODevice::ReadOnly);
downloadFinished(true, url, contentType, file.readAll(), pPos, pSize, isBackground, internalData);
downloadFinished(true, formedUrl, contentType, file.readAll(), pPos, pSize, isBackground, internalData);
if (shouldLoadFileData)
file.close();
@ -990,6 +990,9 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
// 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)
if(mimeType.isEmpty())
mimeType = UBFileSystemUtils::mimeTypeFromFileName(sourceUrl.toString());
int position=mimeType.indexOf(";");
if(position != -1)
mimeType=mimeType.left(position);
@ -1010,9 +1013,16 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
qDebug() << "accepting mime type" << mimeType << "as raster image";
QImage img;
img.loadFromData(pData);
QPixmap pix = QPixmap::fromImage(img);
QPixmap pix;
if(pData.length() == 0){
pix.load(sourceUrl.toLocalFile());
}
else{
QImage img;
img.loadFromData(pData);
pix = QPixmap::fromImage(img);
}
UBGraphicsPixmapItem* pixItem = mActiveScene->addPixmap(pix, NULL, pPos, 1.);
pixItem->setSourceUrl(sourceUrl);
@ -1226,7 +1236,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
if (widgetUrl.length() > 0)
{
UBGraphicsWidgetItem *widgetItem = mActiveScene->addW3CWidget(QUrl::fromLocalFile(widgetUrl), pPos);
widgetItem->setUuid(QUuid::createUuid());
widgetItem->setSourceUrl(sourceUrl);
UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
@ -1969,7 +1979,7 @@ UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool st
QString destFile;
bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
pSourceUrl.toLocalFile(),
pSourceUrl.toLocalFile(),
UBPersistenceManager::videoDirectory,
uuid,
destFile);

@ -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,

@ -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);

@ -114,7 +114,8 @@ void UBGraphicsWidgetItem::initialize()
connect(page(), SIGNAL(linkClicked(const QUrl&)), this, SLOT(onLinkClicked(const QUrl&)));
}
void UBGraphicsWidgetItem::onLinkClicked(const QUrl& url){
void UBGraphicsWidgetItem::onLinkClicked(const QUrl& url)
{
UBApplication::webController->loadUrl(url);
}
@ -846,6 +847,9 @@ UBGraphicsW3CWidgetItem::UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphi
/* is it a valid local file ? */
QFile f(mMainHtmlUrl.toLocalFile());
qDebug() << mMainHtmlFileName;
qDebug() << mMainHtmlUrl.toLocalFile();
if(!f.exists())
mMainHtmlUrl = QUrl(mMainHtmlFileName);

@ -457,7 +457,6 @@ UBTeacherGuidePresentationWidget::UBTeacherGuidePresentationWidget(QWidget *pare
mpLayout->addWidget(mpTreeWidget);
mpRootWidgetItem = mpTreeWidget->invisibleRootItem();
mpTreeWidget->setSelectionMode(QAbstractItemView::NoSelection);
mpTreeWidget->setDragEnabled(true);
mpTreeWidget->setRootIsDecorated(false);
mpTreeWidget->setIndentation(0);
@ -468,6 +467,10 @@ UBTeacherGuidePresentationWidget::UBTeacherGuidePresentationWidget(QWidget *pare
mpTreeWidget->setIconSize(QSize(24,24));
connect(mpTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(onAddItemClicked(QTreeWidgetItem*,int)));
connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(onActiveSceneChanged()));
#ifdef Q_WS_MAC
// on mac and with the custom qt the widget on the tree are not automatically relocated when using the vertical scrollbar. To relocate them we link the valueChange signal of the vertical scrollbar witht a local signal to trig a change and a repaint of the tree widget
connect(mpTreeWidget->verticalScrollBar(),SIGNAL(valueChanged(int)),this,SLOT(onSliderMoved(int)));
#endif
}
UBTeacherGuidePresentationWidget::~UBTeacherGuidePresentationWidget()
@ -484,6 +487,14 @@ UBTeacherGuidePresentationWidget::~UBTeacherGuidePresentationWidget()
DELETEPTR(mpLayout);
}
#ifdef Q_WS_MAC
void UBTeacherGuidePresentationWidget::onSliderMoved(int size)
{
Q_UNUSED(size);
mpMediaSwitchItem->setExpanded(true);
}
#endif
bool UBTeacherGuidePresentationWidget::eventFilter(QObject* object, QEvent* event)
{
Q_UNUSED(object);
@ -553,7 +564,7 @@ void UBTeacherGuidePresentationWidget::showData( QVector<tUBGEElementNode*> 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);
@ -570,7 +581,8 @@ void UBTeacherGuidePresentationWidget::showData( QVector<tUBGEElementNode*> 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);
}

@ -114,6 +114,12 @@ private:
QTreeWidgetItem* mpRootWidgetItem;
QTreeWidgetItem* mpMediaSwitchItem;
#ifdef Q_WS_MACX
private slots:
void onSliderMoved(int size);
#endif
};
/***************************************************************************

@ -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;

@ -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;

Loading…
Cancel
Save