diff --git a/Sankore 3.1.iss b/Sankore 3.1.iss index e16cb426..9663c03d 100644 --- a/Sankore 3.1.iss +++ b/Sankore 3.1.iss @@ -6,8 +6,8 @@ ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{E63D17F8-D9DA-479D-B9B5-0D101A03703B} -AppName=Open-Sankore -AppVerName=Open-Sankore +AppName=Open-Sankoré +AppVerName=Open-Sankoré AppPublisher=Open-Sankore AppPublisherURL=http://dev.open-sankore.org @@ -15,7 +15,7 @@ AppSupportURL=http://dev.open-sankore.org AppUpdatesURL=http://dev.open-sankore.org DefaultDirName={pf}\Open-Sankore -DefaultGroupName=Open-Sankore +DefaultGroupName=Open-Sankoré OutputDir=.\install\win32\ OutputBaseFilename=Open-Sankore @@ -86,10 +86,10 @@ Source: "..\Qt-4.8\plugins\phonon_backend\phonon_ds94.dll"; DestDir: "{app}\phon ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] -Name: "{group}\Open-Sankore"; Filename: "{app}\Open-Sankore.exe" -Name: "{group}\{cm:UninstallProgram,Open-Sankore}"; Filename: "{uninstallexe}" -Name: "{commondesktop}\Open-Sankore"; Filename: "{app}\Open-Sankore.exe"; Tasks: desktopicon -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Open-Sankore"; Filename: "{app}\Open-Sankore.exe"; Tasks: quicklaunchicon +Name: "{group}\Open-Sankoré"; Filename: "{app}\Open-Sankore.exe" +Name: "{group}\{cm:UninstallProgram,Open-Sankoré}"; Filename: "{uninstallexe}" +Name: "{commondesktop}\Open-Sankoré"; Filename: "{app}\Open-Sankore.exe"; Tasks: desktopicon +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Open-Sankoré"; Filename: "{app}\Open-Sankore.exe"; Tasks: quicklaunchicon [Registry] Root: HKCR; Subkey: ".ubz"; ValueType: string; ValueName: ""; ValueData: "SankoreFile"; Flags: uninsdeletevalue @@ -112,12 +112,12 @@ Root: HKLM64; Subkey: "SOFTWARE\Open-Sankore"; ValueType: dword; ValueName: "EMF Root: HKLM64; Subkey: "SOFTWARE\Open-Sankore\Defaults"; ValueType: dword; ValueName: "PDF: Enabled"; ValueData: "1"; Flags: uninsdeletevalue; Check: isProcessorX64 Root: HKLM64; Subkey: "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Low Rights\DragDrop\{{E63D17F8-D9DA-479D-B9B5-0D101A03703B}"; ValueType: dword; ValueName: "Policy"; ValueData: "3"; Flags: uninsdeletevalue; Check: isProcessorX64 -Root: HKLM64; Subkey: "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Low Rights\DragDrop\{{E63D17F8-D9DA-479D-B9B5-0D101A03703B}"; ValueType: string; ValueName: "AppName"; ValueData: "Sankore 3.1.exe"; Flags: uninsdeletevalue; Check: isProcessorX64 +Root: HKLM64; Subkey: "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Low Rights\DragDrop\{{E63D17F8-D9DA-479D-B9B5-0D101A03703B}"; ValueType: string; ValueName: "AppName"; ValueData: "Open-Sankore.exe"; Flags: uninsdeletevalue; Check: isProcessorX64 Root: HKLM64; Subkey: "SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Low Rights\DragDrop\{{E63D17F8-D9DA-479D-B9B5-0D101A03703B}"; ValueType: string; ValueName: "AppPath"; ValueData: "{app}"; Flags: uninsdeletevalue; Check: isProcessorX64 [Run] Filename: "{tmp}\vcredist_x86.exe";WorkingDir:"{tmp}"; Parameters: "/q:a/c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""""""; StatusMsg: Installing CRT ... -Filename: "{app}\Open-Sankore.exe"; Description: "{cm:LaunchProgram,Open-Sankore}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\Open-Sankore.exe"; Description: "{cm:LaunchProgram,Open-Sankoré}"; Flags: nowait postinstall skipifsilent [UninstallDelete] ; cleanup and delete whole installation directory diff --git a/resources/customizations/fonts/AlphoneticGB.ttf b/resources/customizations/fonts/AlphoneticGB.ttf new file mode 100644 index 00000000..caa9a297 Binary files /dev/null and b/resources/customizations/fonts/AlphoneticGB.ttf differ diff --git a/resources/customizations/fonts/AndBasR.ttf b/resources/customizations/fonts/AndBasR.ttf old mode 100644 new mode 100755 diff --git a/resources/customizations/fonts/Cursive standard Bold.ttf b/resources/customizations/fonts/Cursive standard Bold.ttf new file mode 100755 index 00000000..10d2f039 Binary files /dev/null and b/resources/customizations/fonts/Cursive standard Bold.ttf differ diff --git a/resources/customizations/fonts/Cursive standard.ttf b/resources/customizations/fonts/Cursive standard.ttf old mode 100644 new mode 100755 diff --git a/resources/customizations/fonts/ScriptEcole2.ttf b/resources/customizations/fonts/ScriptEcole2.ttf new file mode 100644 index 00000000..196aea5f Binary files /dev/null and b/resources/customizations/fonts/ScriptEcole2.ttf differ diff --git a/resources/forms/preferences.ui b/resources/forms/preferences.ui index c3c60a58..ff2df4dd 100644 --- a/resources/forms/preferences.ui +++ b/resources/forms/preferences.ui @@ -1382,7 +1382,44 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;id=andika</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier@sfr.fr)</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Écolier pointillés</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Écolier CP</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Écolier CP pointillés</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier@sfr.fr)</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet@laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet &lt;h.rogelet@free.fr&gt;</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet &lt;h.rogelet@free.fr&gt;</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html> Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse diff --git a/src/domain/UBGraphicsDelegateFrame.cpp b/src/domain/UBGraphicsDelegateFrame.cpp index 97694e9c..5d26595b 100644 --- a/src/domain/UBGraphicsDelegateFrame.cpp +++ b/src/domain/UBGraphicsDelegateFrame.cpp @@ -582,7 +582,7 @@ void UBGraphicsDelegateFrame::positionHandles() { QRectF itemRect = delegated()->boundingRect(); - if (mDelegate->getToolBarItem()->isVisibleOnBoard() + if (mDelegate->getToolBarItem() && mDelegate->getToolBarItem()->isVisibleOnBoard() && mDelegate->getToolBarItem()->isShifting()) { QPointF graphicsItemPosition = itemRect.topLeft(); diff --git a/src/domain/UBGraphicsGroupContainerItemDelegate.cpp b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp index a78749f1..d514c0e5 100644 --- a/src/domain/UBGraphicsGroupContainerItemDelegate.cpp +++ b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp @@ -13,7 +13,7 @@ #include "core/memcheck.h" UBGraphicsGroupContainerItemDelegate::UBGraphicsGroupContainerItemDelegate(QGraphicsItem *pDelegated, QObject *parent) : - UBGraphicsItemDelegate(pDelegated, parent), mDestroyGroupButton(0) + UBGraphicsItemDelegate(pDelegated, parent, true, false, false), mDestroyGroupButton(0) { diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index e4a7f747..8234a02f 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -94,7 +94,7 @@ void DelegateButton::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) event->setAccepted(!mIsTransparentToMouseEvent); } -UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObject * parent, bool respectRatio, bool canRotate) +UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObject * parent, bool respectRatio, bool canRotate, bool useToolBar) : QObject(parent) , mDelegated(pDelegated) , mDeleteButton(NULL) @@ -113,13 +113,15 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec , mMimeData(NULL) , mFlippable(false) , mToolBarItem(NULL) + , mToolBarUsed(useToolBar) { // NOOP } void UBGraphicsItemDelegate::init() { - mToolBarItem = new UBGraphicsToolBarItem(mDelegated); + if (mToolBarUsed) + mToolBarItem = new UBGraphicsToolBarItem(mDelegated); mFrame = new UBGraphicsDelegateFrame(this, QRectF(0, 0, 0, 0), mFrameWidth, mRespectRatio); mFrame->hide(); @@ -334,7 +336,7 @@ void UBGraphicsItemDelegate::positionHandles() updateButtons(true); - if (mToolBarItem->isVisibleOnBoard()) + if (mToolBarItem && mToolBarItem->isVisibleOnBoard()) { mToolBarItem->positionHandles(); mToolBarItem->update(); @@ -345,7 +347,8 @@ void UBGraphicsItemDelegate::positionHandles() button->hide(); mFrame->hide(); - mToolBarItem->hide(); + if (mToolBarItem) + mToolBarItem->hide(); } } @@ -385,7 +388,6 @@ void UBGraphicsItemDelegate::remove(bool canUndo) scene->removeItem(mFrame); scene->removeItem(mDelegated); - scene->removeItem(mToolBarItem); if (canUndo) { diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index 9092f015..78ab50db 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -183,7 +183,7 @@ class UBGraphicsItemDelegate : public QObject Q_OBJECT public: - UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObject * parent = 0, bool respectRatio = true, bool canRotate = false); + UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObject * parent = 0, bool respectRatio = true, bool canRotate = false, bool useToolBar = true); virtual ~UBGraphicsItemDelegate(); @@ -300,6 +300,7 @@ private: /** A boolean saying that this object can be flippable (mirror effect) */ bool mFlippable; + bool mToolBarUsed; }; diff --git a/src/domain/UBGraphicsPDFItem.cpp b/src/domain/UBGraphicsPDFItem.cpp index fcaa5a7c..2383c82c 100644 --- a/src/domain/UBGraphicsPDFItem.cpp +++ b/src/domain/UBGraphicsPDFItem.cpp @@ -28,7 +28,7 @@ UBGraphicsPDFItem::UBGraphicsPDFItem(PDFRenderer *renderer, int pageNumber, QGra { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); //deprecated setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::BackgroundItem)); //Necessary to set if we want z value to be assigned correctly - mDelegate = new UBGraphicsItemDelegate(this,0); + mDelegate = new UBGraphicsItemDelegate(this,0, true, false, false); mDelegate->init(); } diff --git a/src/domain/UBGraphicsPixmapItem.cpp b/src/domain/UBGraphicsPixmapItem.cpp index 2df5c6fc..634a150f 100644 --- a/src/domain/UBGraphicsPixmapItem.cpp +++ b/src/domain/UBGraphicsPixmapItem.cpp @@ -28,7 +28,7 @@ UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent) : QGraphicsPixmapItem(parent) { - mDelegate = new UBGraphicsItemDelegate(this, 0, true, true); + mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); mDelegate->init(); mDelegate->setFlippable(true); diff --git a/src/domain/UBGraphicsProxyWidget.cpp b/src/domain/UBGraphicsProxyWidget.cpp index 106b6ed3..91238efd 100644 --- a/src/domain/UBGraphicsProxyWidget.cpp +++ b/src/domain/UBGraphicsProxyWidget.cpp @@ -29,7 +29,7 @@ UBGraphicsProxyWidget::UBGraphicsProxyWidget(QGraphicsItem* parent) { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - mDelegate = new UBGraphicsItemDelegate(this,0); + mDelegate = new UBGraphicsItemDelegate(this,0, true, false, false); mDelegate->init(); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index 80ad9281..7fdbd1a7 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -4,7 +4,7 @@ UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsItemGroup(parent) { - mDelegate = new UBGraphicsItemDelegate(this, 0, true, true); + mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); mDelegate->init(); mDelegate->setFlippable(true); setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); diff --git a/src/domain/UBGraphicsSvgItem.cpp b/src/domain/UBGraphicsSvgItem.cpp index 5138e362..31386bcb 100644 --- a/src/domain/UBGraphicsSvgItem.cpp +++ b/src/domain/UBGraphicsSvgItem.cpp @@ -53,7 +53,7 @@ void UBGraphicsSvgItem::init() { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - mDelegate = new UBGraphicsItemDelegate(this, 0, true, true); + mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); mDelegate->init(); mDelegate->setFlippable(true); diff --git a/src/domain/UBGraphicsWidgetItemDelegate.cpp b/src/domain/UBGraphicsWidgetItemDelegate.cpp index 79a835f5..a17a72d7 100644 --- a/src/domain/UBGraphicsWidgetItemDelegate.cpp +++ b/src/domain/UBGraphicsWidgetItemDelegate.cpp @@ -30,7 +30,7 @@ #include "core/memcheck.h" UBGraphicsWidgetItemDelegate::UBGraphicsWidgetItemDelegate(UBGraphicsWidgetItem* pDelegated, int widgetType) - : UBGraphicsItemDelegate(pDelegated, 0, true, false) + : UBGraphicsItemDelegate(pDelegated, 0, true, false, false) , freezeAction(0) , setAsToolAction(0) { diff --git a/src/tools/UBGraphicsCurtainItemDelegate.cpp b/src/tools/UBGraphicsCurtainItemDelegate.cpp index 7dfd06e5..7e9785dd 100644 --- a/src/tools/UBGraphicsCurtainItemDelegate.cpp +++ b/src/tools/UBGraphicsCurtainItemDelegate.cpp @@ -25,7 +25,7 @@ #include "core/memcheck.h" UBGraphicsCurtainItemDelegate::UBGraphicsCurtainItemDelegate(UBGraphicsCurtainItem* pDelegated, QObject * parent) - : UBGraphicsItemDelegate(pDelegated, parent, false) + : UBGraphicsItemDelegate(pDelegated, parent, false, false, false) { setCanDuplicate(false); }