@ -53,6 +53,7 @@
# include "domain/UBGraphicsTextItem.h"
# include "domain/UBPageSizeUndoCommand.h"
# include "domain/UBGraphicsGroupContainerItem.h"
# include "domain/UBItem.h"
# include "tools/UBToolsManager.h"
@ -529,6 +530,92 @@ void UBBoardController::duplicateScene()
duplicateScene ( mActiveSceneIndex ) ;
}
void UBBoardController : : duplicateItem ( UBItem * item )
{
if ( ! item )
return ;
QUrl sourceUrl ;
QByteArray pData ;
//common parameters for any item
QPointF itemPos ;
QSizeF itemSize ;
QGraphicsItem * commonItem = dynamic_cast < QGraphicsItem * > ( item ) ;
if ( commonItem )
{
itemPos = commonItem - > pos ( ) ;
itemSize = commonItem - > boundingRect ( ) . size ( ) ;
}
QString contentTypeHeader = UBFileSystemUtils : : mimeTypeFromFileName ( item - > sourceUrl ( ) . toLocalFile ( ) ) ;
UBMimeType : : Enum itemMimeType = UBFileSystemUtils : : mimeTypeFromString ( contentTypeHeader ) ;
switch ( static_cast < int > ( itemMimeType ) )
{
case UBMimeType : : AppleWidget :
case UBMimeType : : W3CWidget :
{
UBGraphicsWidgetItem * witem = dynamic_cast < UBGraphicsWidgetItem * > ( item ) ;
if ( witem )
{
sourceUrl = witem - > getOwnFolder ( ) ;
}
} break ;
case UBMimeType : : Video :
case UBMimeType : : Audio :
{
UBGraphicsMediaItem * mitem = dynamic_cast < UBGraphicsMediaItem * > ( item ) ;
if ( mitem )
{
sourceUrl = mitem - > mediaFileUrl ( ) ;
}
} break ;
case UBMimeType : : VectorImage :
{
UBGraphicsSvgItem * viitem = dynamic_cast < UBGraphicsSvgItem * > ( item ) ;
if ( viitem )
{
pData = viitem - > fileData ( ) ;
sourceUrl = item - > sourceUrl ( ) ;
}
} break ;
case UBMimeType : : RasterImage :
{
UBGraphicsPixmapItem * pixitem = dynamic_cast < UBGraphicsPixmapItem * > ( item ) ;
if ( pixitem )
{
QBuffer buffer ( & pData ) ;
buffer . open ( QIODevice : : WriteOnly ) ;
QString format = UBFileSystemUtils : : extension ( item - > sourceUrl ( ) . toLocalFile ( ) ) ;
pixitem - > pixmap ( ) . save ( & buffer , format . toLatin1 ( ) ) ;
}
} break ;
case UBMimeType : : UNKNOWN :
{
QGraphicsItem * gitem = dynamic_cast < QGraphicsItem * > ( item - > deepCopy ( ) ) ;
if ( gitem )
{
mActiveScene - > addItem ( gitem ) ;
gitem - > setPos ( itemPos ) ;
}
return ;
} break ;
}
UBItem * createdItem = downloadFinished ( true , sourceUrl , contentTypeHeader , pData , itemPos , QSize ( itemSize . width ( ) , itemSize . height ( ) ) , false ) ;
if ( createdItem )
{
createdItem - > setSourceUrl ( item - > sourceUrl ( ) ) ;
item - > copyItemParameters ( createdItem ) ;
}
}
void UBBoardController : : deleteScene ( int nIndex )
{
if ( selectedDocument ( ) - > pageCount ( ) > 2 )
@ -854,7 +941,7 @@ 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 )
UBItem * UBBoardController : : downloadFinished ( bool pSuccess , QUrl sourceUrl , QString pContentTypeHeader , QByteArray pData , QPointF pPos , QSize pSize , bool isBackground )
{
QString mimeType = pContentTypeHeader ;
@ -869,7 +956,7 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
if ( ! pSuccess )
{
UBApplication : : showMessage ( tr ( " Downloading content %1 failed " ) . arg ( sourceUrl . toString ( ) ) ) ;
return ;
return NULL ;
}
if ( ! sourceUrl . toString ( ) . startsWith ( " file:// " ) & & ! sourceUrl . toString ( ) . startsWith ( " uniboardTool:// " ) )
@ -897,12 +984,14 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
pixItem - > setSelected ( true ) ;
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
}
return pixItem ;
}
else if ( UBMimeType : : VectorImage = = itemMimeType )
{
qDebug ( ) < < " accepting mime type " < < mimeType < < " as vecto image " ;
UBGraphicsSvgItem * svgItem = mActiveScene - > addSvg ( sourceUrl , pPos ) ;
UBGraphicsSvgItem * svgItem = mActiveScene - > addSvg ( sourceUrl , pPos , pData ) ;
svgItem - > setSourceUrl ( sourceUrl ) ;
if ( isBackground )
@ -915,6 +1004,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
svgItem - > setSelected ( true ) ;
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
}
return svgItem ;
}
else if ( UBMimeType : : AppleWidget = = itemMimeType ) //mime type invented by us :-(
{
@ -939,6 +1030,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
{
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
}
return appleWidgetItem ;
}
else if ( UBMimeType : : W3CWidget = = itemMimeType )
{
@ -960,6 +1053,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
{
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
}
return w3cWidgetItem ;
}
else if ( UBMimeType : : Video = = itemMimeType )
{
@ -989,6 +1084,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
}
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
return mediaVideoItem ;
}
else if ( UBMimeType : : Audio = = itemMimeType )
{
@ -1018,6 +1115,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
}
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
return audioMediaItem ;
}
else if ( UBMimeType : : Flash = = itemMimeType )
@ -1061,6 +1160,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
widgetItem - > setSourceUrl ( sourceUrl ) ;
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
return widgetItem ;
}
if ( eduMediaFile )
@ -1182,6 +1283,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
widgetItem - > setSourceUrl ( sourceUrl ) ;
UBDrawingController : : drawingController ( ) - > setStylusTool ( UBStylusTool : : Selector ) ;
return widgetItem ;
}
}
}
@ -1193,6 +1296,8 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
UBApplication : : showMessage ( tr ( " Unknown content type %1 " ) . arg ( pContentTypeHeader ) ) ;
qWarning ( ) < < " ignoring mime type " < < pContentTypeHeader ;
}
return NULL ;
}
void UBBoardController : : setActiveDocumentScene ( int pSceneIndex )
@ -1902,7 +2007,7 @@ UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QP
}
return 0 ;
return w3cWidgetItem ;
}
void UBBoardController : : cut ( )
@ -1957,7 +2062,11 @@ void UBBoardController::copy()
UBItem * ubItem = dynamic_cast < UBItem * > ( gi ) ;
if ( ubItem & & ! mActiveScene - > tools ( ) . contains ( gi ) )
selected < < ubItem - > deepCopy ( ) ;
{
UBItem * itemCopy = ubItem - > deepCopy ( ) ;
if ( itemCopy )
selected < < itemCopy ;
}
}
if ( selected . size ( ) > 0 )
@ -2014,13 +2123,7 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint
{
foreach ( UBItem * item , mimeData - > items ( ) )
{
QGraphicsItem * gi = dynamic_cast < QGraphicsItem * > ( item - > deepCopy ( ) ) ;
if ( gi )
{
mActiveScene - > addItem ( gi ) ;
gi - > setPos ( gi - > pos ( ) + QPointF ( 50 , 50 ) ) ;
}
duplicateItem ( item ) ;
}
return ;