From 8ee8b59ba8f0b5ff8618d8ca4454e66090441c5b Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Tue, 2 Oct 2012 11:41:22 +0300 Subject: [PATCH 1/5] Fixed duplication of groups. --- src/board/UBBoardController.cpp | 65 ++++++++++++++++----------------- src/board/UBBoardController.h | 2 +- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index b269b8fa..a929434f 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -537,7 +537,7 @@ void UBBoardController::duplicateScene() duplicateScene(mActiveSceneIndex); } -UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) +UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync) { if (!item) return NULL; @@ -593,9 +593,13 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) if (mitem) { sourceUrl = mitem->mediaFileUrl(); - downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false); + if (bAsync) + { + downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false); + return NULL; // async operation + } } - }return NULL; // async operation + }break; case UBMimeType::VectorImage: { @@ -621,35 +625,22 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) case UBMimeType::Group: { - UBGraphicsGroupContainerItem* groupItem = dynamic_cast(item); - UBGraphicsGroupContainerItem* duplicatedGroup = NULL; - if(groupItem){ - QTransform groupTransform = groupItem->transform(); - groupItem->resetTransform(); - - QList children = groupItem->childItems(); - foreach(QGraphicsItem* pIt, children){ - UBItem* pItem = dynamic_cast(pIt); - if(NULL != pItem){ - duplicateItem(pItem); - } - } - groupItem->setTransform(groupTransform); - groupItem->setSelected(false); - UBApplication::mainWindow->actionGroupItems->trigger(); - QList selItems = mActiveScene->selectedItems(); - if(!selItems.empty()){ - // I don't like this solution but for now this is the only way I found. - // Normally, at this state, only the duplicated group should be selected - duplicatedGroup = dynamic_cast(selItems.at(0)); - if(NULL != duplicatedGroup){ - duplicatedGroup->setTransform(groupTransform); - } - } - } - retItem = dynamic_cast(duplicatedGroup); - break; - } + UBGraphicsGroupContainerItem* groupItem = dynamic_cast(item); + UBGraphicsGroupContainerItem* duplicatedGroup = new UBGraphicsGroupContainerItem(); + + QList children = groupItem->childItems(); + foreach(QGraphicsItem* pIt, children){ + UBItem* pItem = dynamic_cast(pIt); + if(pItem) // we diong sync duplication of all childs. + duplicatedGroup->addToGroup(dynamic_cast(duplicateItem(pItem, false))); + } + + duplicatedGroup->setTransform(groupItem->transform()); + groupItem->setSelected(false); + + retItem = dynamic_cast(duplicatedGroup); + + }break; case UBMimeType::UNKNOWN: { @@ -666,9 +657,17 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) } if (retItem) + { + QGraphicsItem * itemToAdd = dynamic_cast(retItem); + if (itemToAdd) + { + mActiveScene->addItem(itemToAdd); + itemToAdd->setSelected(true); + } return retItem; + } - UBItem *createdItem = downloadFinished(true, sourceUrl, sourceUrl, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); + UBItem *createdItem = downloadFinished(true, sourceUrl, srcFile, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); if (createdItem) { createdItem->setSourceUrl(item->sourceUrl()); diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h index d7f44e37..aa27b788 100644 --- a/src/board/UBBoardController.h +++ b/src/board/UBBoardController.h @@ -159,7 +159,7 @@ class UBBoardController : public UBDocumentContainer void moveSceneToIndex(int source, int target); void duplicateScene(int index); - UBGraphicsItem *duplicateItem(UBItem *item); + UBGraphicsItem *duplicateItem(UBItem *item, bool bAsync = true); void deleteScene(int index); bool cacheIsVisible() {return mCacheWidgetIsEnabled;} From d0a24fd30a8549a6b8db54182fb452dc72e0a338 Mon Sep 17 00:00:00 2001 From: bmagnin Date: Tue, 2 Oct 2012 11:35:36 +0200 Subject: [PATCH 2/5] Wording in help for interactivities --- .../interactivities/Ass images.wgt/locales/fr/js/script.js | 2 +- .../interactivities/Ass sons.wgt/locales/fr/js/script.js | 2 +- .../interactivities/Cat text.wgt/locales/fr/js/script.js | 2 +- .../Choisir.wgt/locales/fr/scripts/selQuestionApp.js | 2 +- .../interactivities/Enveloppe.wgt/js/help_fr-template.js | 2 +- .../library/interactivities/Etudier.wgt/locales/fr/js/script.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js b/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js index cf4e8353..0f7ebd13 100644 --- a/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js @@ -23,7 +23,7 @@ var sankoreLang = { "

En mode édition, pour créer un nouvel exercice, cliquez sur “Nouveau bloc” en bas, puis

"+ "
  • insérez une consigne en cliquant sur le champ de texte “Saisir la consigne ici ...”,
  • "+ -"
  • ajoutez des zones image en cliquant sur le gros signe + en dessous,
  • "+ +"
  • ajoutez des zones image(s) en cliquant sur le gros signe + en dessous,
  • "+ "
  • insérez des images dans ces zones par glisser-déposer des images à partir de votre bibliothèque,
  • "+ "
  • définissez l’image correcte de l’interactivité en cliquant sur le bouton valider “v” situé en bas à droite de l’image concernée.
"+ "

Pour supprimer une zone image, cliquez sur la croix située dans le coin supérieur droit de l’image.

"+ diff --git a/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js b/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js index e2aff630..04aa507d 100644 --- a/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js @@ -24,7 +24,7 @@ var sankoreLang = { "

En mode édition, pour créer un nouvel exercice, cliquez sur “Nouveau bloc” en bas, puis

"+ "
  • insérez une consigne en cliquant sur le champ de texte “Saisir votre description ici ...”,"+ "
  • insérez un son dans la zone à gauche de la consigne par glisser-déposer d’un son à partir de votre bibliothèque,
  • "+ -"
  • ajoutez des zones image en cliquant sur le gros signe + en dessous,
  • "+ +"
  • ajoutez des zones image(s) en cliquant sur le gros signe + en dessous,
  • "+ "
  • insérez des images par glisser-déposer des images à partir de votre bibliothèque,
  • "+ "
  • définissez l’image correcte de l’interactivité en cliquant sur le bouton valider “v” situé en bas à droite de l’image concernée.
"+ "

Pour supprimer une zone image, cliquez sur la croix située dans le coin supérieur droit de l’image.

"+ diff --git a/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js b/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js index 8d7149ed..f8526612 100644 --- a/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js @@ -28,7 +28,7 @@ var sankoreLang = { "
  • de choisir le thème de l’interactivité : tablette, ardoise ou aucun (par défaut aucun),
  • "+ "
  • de modifier un exercice ou d’en créer de nouveaux dans la même activité.
"+ -"

En mode édition, pour créer un nouvel exercice, cliquez sur “Nouveau bloc” en bas, une zone bleue apparaît, c’est une catégorie, puis.

"+ +"

En mode édition, pour créer un nouvel exercice, cliquez sur “Nouveau bloc” en bas, une zone bleue apparaît, c’est une catégorie, puis :

"+ "
  • insérez le nom de la catégorie (par exemple “fruits”, “légumes”, “mammifères”...) en cliquant dans le champ de texte “Saisir le nom de la catégorie ici …”,
  • "+ "
  • cliquez sur le gros “+” situé à gauche de la catégorie ce qui vous permet de rajouter des étiquettes de mots,
  • "+ "
  • entrez des mots dans ces étiquettes,
  • "+ diff --git a/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js b/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js index 4de4b35a..ad481ba2 100644 --- a/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js +++ b/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js @@ -52,7 +52,7 @@ var sankoreLang = { "
    • de choisir le thème de l’interactivité : tablette, ardoise ou aucun (par défaut aucun),
    • "+ "
    • de modifier un exercice ou d’en créer de nouveaux dans la même activité.
    "+ -"

    En mode édition, pour créer un nouvel exercice, cliquez sur “Ajouter une nouvelle question …”, puis.

    "+ +"

    En mode édition, pour créer un nouvel exercice, cliquez sur “Ajouter une nouvelle question …”, puis :

    "+ "
    • insérez la question en cliquant sur le champ de texte “Saisir la question ici ...”,
    • "+ "
    • cliquez sur ”Options” pour choisir l’affichage des propositions (une seule bonne réponse, plusieurs bonnes réponses, liste déroulante). Cliquez sur “Fermer”,
    • "+ "
    • cliquez sur ”Ajouter une proposition” et saisissez la proposition dans le champ de texte,
    • "+ diff --git a/resources/library/interactivities/Enveloppe.wgt/js/help_fr-template.js b/resources/library/interactivities/Enveloppe.wgt/js/help_fr-template.js index 17301536..44e0fc11 100644 --- a/resources/library/interactivities/Enveloppe.wgt/js/help_fr-template.js +++ b/resources/library/interactivities/Enveloppe.wgt/js/help_fr-template.js @@ -8,7 +8,7 @@

      Le bouton “Modifier” vous permet :

      • de choisir le thème de l’interactivité : tablette, ardoise ou aucun (par défaut tablette),
      • -
      • de déterminer le nombre de trombone(s) souhaités.
      • +
      • de déterminer le nombre de trombone(s) souhaité(s).

      Le bouton “Afficher” vous permet d’utiliser l’activité.

      \ No newline at end of file diff --git a/resources/library/interactivities/Etudier.wgt/locales/fr/js/script.js b/resources/library/interactivities/Etudier.wgt/locales/fr/js/script.js index 2b10962a..07a889a4 100644 --- a/resources/library/interactivities/Etudier.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Etudier.wgt/locales/fr/js/script.js @@ -19,7 +19,7 @@ var sankoreLang = { "
    • de modifier les pages du livret.
    "+ "

    Sur chaque page, vous pouvez :

    "+ -"
    • insérer des zones de texte avec le bouton “+T” situé en haut à gauche de l’interactivité. (pour modifier ces zones de texte, cliquez à l’intérieur et écrivez du texte),
    • "+ +"
      • insérer des zones de texte avec le bouton “+T” situé en haut à gauche de l’interactivité (pour modifier ces zones de texte, cliquez à l’intérieur et écrivez du texte),
      • "+ "
      • insérer des images, sons et vidéos par glisser-déposer de fichiers depuis la bibliothèque jusqu’à l’intérieur de la page du livret,
      • "+ "
      • déplacer les textes, images, sons et vidéos à l’intérieur de la page en cliquant et en déplaçant la flèche multidirectionnelle qui se situe dans le coin supérieur gauche de chaque élément,
      • "+ "
      • agrandir la taille d’un élément avec la double flèche en bas à droite de celui-ci,
      • "+ From 0ed0540d3e52125ec145b5965ea91d42d3661bb4 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Tue, 2 Oct 2012 12:42:09 +0300 Subject: [PATCH 3/5] Fixed creation duplicated groups - used scene mechanism. Excluded case of trying to determine mime type for empty string. --- src/board/UBBoardController.cpp | 31 ++++++++++++++++------------ src/frameworks/UBFileSystemUtils.cpp | 2 +- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index a929434f..be837e6a 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -568,7 +568,10 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync) if (srcFile.isEmpty()) srcFile = item->sourceUrl().toString(); - QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile); + QString contentTypeHeader; + if (!srcFile.isEmpty()) + contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile); + if(NULL != qgraphicsitem_cast(commonItem)) itemMimeType = UBMimeType::Group; else @@ -626,20 +629,30 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync) case UBMimeType::Group: { UBGraphicsGroupContainerItem* groupItem = dynamic_cast(item); - UBGraphicsGroupContainerItem* duplicatedGroup = new UBGraphicsGroupContainerItem(); + UBGraphicsGroupContainerItem* duplicatedGroup = NULL; + QList duplicatedItems; QList children = groupItem->childItems(); foreach(QGraphicsItem* pIt, children){ UBItem* pItem = dynamic_cast(pIt); - if(pItem) // we diong sync duplication of all childs. - duplicatedGroup->addToGroup(dynamic_cast(duplicateItem(pItem, false))); + if(pItem){ // we diong sync duplication of all childs. + QGraphicsItem * itemToGroup = dynamic_cast(duplicateItem(pItem, false)); + if (itemToGroup) + duplicatedItems.append(itemToGroup); + } } - + duplicatedGroup = mActiveScene->createGroup(duplicatedItems); duplicatedGroup->setTransform(groupItem->transform()); groupItem->setSelected(false); retItem = dynamic_cast(duplicatedGroup); + QGraphicsItem * itemToAdd = dynamic_cast(retItem); + if (itemToAdd) + { + mActiveScene->addItem(itemToAdd); + itemToAdd->setSelected(true); + } }break; case UBMimeType::UNKNOWN: @@ -657,15 +670,7 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync) } if (retItem) - { - QGraphicsItem * itemToAdd = dynamic_cast(retItem); - if (itemToAdd) - { - mActiveScene->addItem(itemToAdd); - itemToAdd->setSelected(true); - } return retItem; - } UBItem *createdItem = downloadFinished(true, sourceUrl, srcFile, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); if (createdItem) diff --git a/src/frameworks/UBFileSystemUtils.cpp b/src/frameworks/UBFileSystemUtils.cpp index 2bde7364..101dbb2d 100644 --- a/src/frameworks/UBFileSystemUtils.cpp +++ b/src/frameworks/UBFileSystemUtils.cpp @@ -853,4 +853,4 @@ QString UBFileSystemUtils::readTextFile(QString path) } return ""; -} \ No newline at end of file +} From df59b2e9ac224627e560da1ece81c50ace0ce30f Mon Sep 17 00:00:00 2001 From: bmagnin Date: Tue, 2 Oct 2012 11:59:51 +0200 Subject: [PATCH 4/5] Wording in interactivities --- .../interactivities/Ass images.wgt/locales/fr/js/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js b/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js index 967256d0..3895c032 100644 --- a/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js @@ -1,5 +1,5 @@ var sankoreLang = { - display: "Fermer", + display: "Afficher", edit: "Modifier", short_desc: "Sélectionner le numéro «trois».", add: "Nouveau bloc", From cbe8469b70de5b1f0e65cb12474e612deae65b06 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Tue, 2 Oct 2012 13:22:21 +0300 Subject: [PATCH 5/5] Fixed fall on assertion if svg writer. --- src/adaptors/UBSvgSubsetAdaptor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index 17e25564..91e67e88 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -1229,10 +1229,10 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) //disabling g section parsing as a group of elements. Use groups refs instead // mXmlWriter.writeStartElement("g"); // mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "uuid", UBStringUtils::toCanonicalUuid(strokesGroupItem->uuid())); - QMatrix matrix = item->sceneMatrix(); - if (!matrix.isIdentity()){ - mXmlWriter.writeAttribute("transform", toSvgTransform(matrix)); - } +// QMatrix matrix = item->sceneMatrix(); +// if (!matrix.isIdentity()){ +// mXmlWriter.writeAttribute("transform", toSvgTransform(matrix)); +// } // Add the polygons foreach(QGraphicsItem* item, strokesGroupItem->childItems()){