Merge branch 'master' of github.com:Sankore/Sankore-3.1

preferencesAboutTextFull
Claudio Valerio 13 years ago
commit 2b29e06323
  1. 24
      Sankore_3.1.pro
  2. 5
      resources/forms/mainWindow.ui
  3. 3327
      resources/i18n/sankore_cs.ts
  4. 3523
      resources/i18n/sankore_el.ts
  5. 148
      resources/i18n/sankore_es.ts
  6. 269
      resources/i18n/sankore_it.ts
  7. 148
      resources/i18n/sankore_ja.ts
  8. 146
      resources/i18n/sankore_nl.ts
  9. 153
      resources/i18n/sankore_pt.ts
  10. 871
      resources/i18n/sankore_sk.ts
  11. BIN
      resources/images/toolbar/group.png
  12. BIN
      resources/images/toolbar/ungroup.png
  13. BIN
      resources/library/interactivities/Transformation.wgt/css/images/trgDown.png
  14. BIN
      resources/library/interactivities/Transformation.wgt/css/images/trgLeft.png
  15. BIN
      resources/library/interactivities/Transformation.wgt/css/images/trgRight.png
  16. BIN
      resources/library/interactivities/Transformation.wgt/css/images/trgUp.png
  17. 57
      resources/library/interactivities/Transformation.wgt/css/ubw-main.css
  18. 481
      resources/library/interactivities/Transformation.wgt/js/lib/ubw-main.js
  19. 339
      resources/library/interactivities/Transformation.wgt/js/main.js
  20. 73
      src/adaptors/UBCFFSubsetAdaptor.cpp
  21. 4
      src/adaptors/UBCFFSubsetAdaptor.h
  22. 2
      src/adaptors/UBSvgSubsetAdaptor.cpp
  23. 4
      src/board/UBBoardController.cpp
  24. 4
      src/board/UBBoardView.cpp
  25. 5
      src/board/UBDrawingController.cpp
  26. 3
      src/core/UB.h
  27. 4
      src/core/UBSettings.cpp
  28. 37
      src/domain/UBGraphicsGroupContainerItem.cpp
  29. 4
      src/domain/UBGraphicsGroupContainerItemDelegate.cpp
  30. 22
      src/domain/UBGraphicsItemDelegate.cpp
  31. 5
      src/domain/UBGraphicsItemDelegate.h
  32. 15
      src/domain/UBGraphicsMediaItem.cpp
  33. 11
      src/domain/UBGraphicsMediaItem.h
  34. 6
      src/domain/UBGraphicsMediaItemDelegate.cpp
  35. 4
      src/domain/UBGraphicsPixmapItem.cpp
  36. 12
      src/domain/UBGraphicsScene.cpp
  37. 2
      src/domain/UBGraphicsStrokesGroup.cpp
  38. 1
      src/domain/UBGraphicsSvgItem.cpp
  39. 2
      src/domain/UBGraphicsTextItem.cpp
  40. 2
      src/domain/UBGraphicsTextItemDelegate.cpp
  41. 2
      src/domain/UBGraphicsWebView.cpp
  42. 10
      src/domain/UBItem.cpp
  43. 3
      src/domain/UBItem.h
  44. 23
      src/gui/UBFeaturesWidget.cpp
  45. 2
      src/gui/UBFeaturesWidget.h
  46. 1
      src/tools/UBGraphicsCurtainItem.cpp

@ -327,6 +327,25 @@ macx {
TRANSLATION_ca.path = "$$RESOURCES_DIR/ca.lproj"
QMAKE_BUNDLE_DATA += TRANSLATION_ca
}
exists(resources/i18n/sankore_el.qm) {
TRANSLATION_el.files = resources/i18n/sankore_el.qm \
resources/i18n/Localizable.strings
TRANSLATION_el.path = "$$RESOURCES_DIR/el.lproj"
QMAKE_BUNDLE_DATA += TRANSLATION_el
}
exists(resources/i18n/sankore_tr.qm) {
TRANSLATION_tr.files = resources/i18n/sankore_tr.qm \
resources/i18n/Localizable.strings
TRANSLATION_tr.path = "$$RESOURCES_DIR/tr.lproj"
QMAKE_BUNDLE_DATA += TRANSLATION_tr
}
exists(resources/i18n/sankore_cs.qm) {
TRANSLATION_cs.files = resources/i18n/sankore_cs.qm \
resources/i18n/Localizable.strings
TRANSLATION_cs.path = "$$RESOURCES_DIR/cs.lproj"
QMAKE_BUNDLE_DATA += TRANSLATION_cs
}
QMAKE_BUNDLE_DATA += UB_ETC \
UB_LIBRARY \
@ -391,7 +410,10 @@ TRANSLATIONS = resources/i18n/sankore_en.ts \
resources/i18n/sankore_pt.ts \
resources/i18n/sankore_sk.ts \
resources/i18n/sankore_bg.ts \
resources/i18n/sankore_ca.ts
resources/i18n/sankore_ca.ts \
resources/i18n/sankore_el.ts \
resources/i18n/sankore_tr.ts \
resources/i18n/sankore_cs.ts
INSTALLS = UB_ETC \
UB_I18N \

@ -1632,6 +1632,9 @@
</property>
</action>
<action name="actionGroupItems">
<property name="checkable">
<bool>true</bool>
</property>
<property name="enabled">
<bool>false</bool>
</property>
@ -1641,7 +1644,7 @@
<normalon>:/images/toolbar/ungroup.png</normalon>:/images/toolbar/group.png</iconset>
</property>
<property name="text">
<string>Group Items</string>
<string>Group</string>
</property>
<property name="toolTip">
<string>Group items</string>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en_US">
<TS version="2.0" language="es_ES">
<context>
<name>BlackoutWidget</name>
<message>
@ -801,27 +801,27 @@
</message>
<message>
<source>Group Items</source>
<translation type="unfinished"></translation>
<translation>Agrupar Elementos</translation>
</message>
<message>
<source>Group items</source>
<translation type="unfinished"></translation>
<translation>Agrupar elementos</translation>
</message>
<message>
<source>Play</source>
<translation type="unfinished"></translation>
<translation>Reproducir</translation>
</message>
<message>
<source>Interact with items</source>
<translation type="unfinished"></translation>
<translation>Interactuar con los elementos</translation>
</message>
<message>
<source>Erase Background</source>
<translation type="unfinished"></translation>
<translation>Borrar el Fondo</translation>
</message>
<message>
<source>Remove the backgound</source>
<translation type="unfinished"></translation>
<translation>Eliminar el fondo</translation>
</message>
</context>
<context>
@ -951,7 +951,7 @@
</message>
<message>
<source>CapturedImage</source>
<translation type="unfinished"></translation>
<translation>Imagen capturada</translation>
</message>
</context>
<context>
@ -1135,7 +1135,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Portada</translation>
</message>
</context>
<context>
@ -1181,7 +1181,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Portada</translation>
</message>
</context>
<context>
@ -1248,23 +1248,23 @@
<name>UBExportCFF</name>
<message>
<source>Export to IWB</source>
<translation type="unfinished"></translation>
<translation>Exportar a IWB</translation>
</message>
<message>
<source>Export as IWB File</source>
<translation type="unfinished"></translation>
<translation>Exportar como fichero IWB</translation>
</message>
<message>
<source>Exporting document...</source>
<translation type="unfinished">Exportando documento...</translation>
<translation>Exportando documento...</translation>
</message>
<message>
<source>Export successful.</source>
<translation type="unfinished">Exportación satisfactoria.</translation>
<translation>Exportación satisfactoria.</translation>
</message>
<message>
<source>Export failed.</source>
<translation type="unfinished"></translation>
<translation>Fallo en la exportación</translation>
</message>
</context>
<context>
@ -1367,61 +1367,61 @@
<name>UBFeatureProperties</name>
<message>
<source>Add to page</source>
<translation type="unfinished">Añadir a la página</translation>
<translation>Añadir a la página</translation>
</message>
<message>
<source>Set as background</source>
<translation type="unfinished">Definir como fondo</translation>
<translation>Definir como fondo</translation>
</message>
<message>
<source>Add to library</source>
<translation type="unfinished">Añadir a biblioteca</translation>
<translation>Añadir a biblioteca</translation>
</message>
<message>
<source>Object informations</source>
<translation type="unfinished">Información del objeto</translation>
<translation>Información del objeto</translation>
</message>
</context>
<context>
<name>UBFeaturesActionBar</name>
<message>
<source>Add to favorites</source>
<translation type="unfinished">Añadir a favoritos</translation>
<translation>Añadir a favoritos</translation>
</message>
<message>
<source>Share</source>
<translation type="unfinished">Compartir</translation>
<translation>Compartir</translation>
</message>
<message>
<source>Search</source>
<translation type="unfinished"></translation>
<translation>Buscar</translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished">Eliminar</translation>
<translation>Eliminar</translation>
</message>
<message>
<source>Back to folder</source>
<translation type="unfinished">Regresar a la carpeta</translation>
<translation>Regresar a la carpeta</translation>
</message>
<message>
<source>Remove from favorites</source>
<translation type="unfinished">Eliminar de favoritos</translation>
<translation>Eliminar de favoritos</translation>
</message>
<message>
<source>Create new folder</source>
<translation type="unfinished">Crear nueva carpeta</translation>
<translation>Crear nueva carpeta</translation>
</message>
<message>
<source>Rescan file system</source>
<translation type="unfinished"></translation>
<translation>Comprobar los ficheros del sistema</translation>
</message>
</context>
<context>
<name>UBFeaturesController</name>
<message>
<source>ImportedImage</source>
<translation type="unfinished">Imagen importada</translation>
<translation>Imagen importada</translation>
</message>
</context>
<context>
@ -1765,23 +1765,23 @@ Do you want to ignore these errors for this host?</source>
<name>UBPlatformUtils</name>
<message>
<source>English</source>
<translation type="unfinished"></translation>
<translation>Inglés</translation>
</message>
<message>
<source>Russian</source>
<translation type="unfinished"></translation>
<translation>Ruso</translation>
</message>
<message>
<source>German</source>
<translation type="unfinished"></translation>
<translation>Alemán</translation>
</message>
<message>
<source>French</source>
<translation type="unfinished"></translation>
<translation>Francés</translation>
</message>
<message>
<source>Swiss French</source>
<translation type="unfinished"></translation>
<translation>Francés-Suizo</translation>
</message>
</context>
<context>
@ -1911,33 +1911,33 @@ Do you want to ignore these errors for this host?</source>
<name>UBTGActionWidget</name>
<message>
<source>Teacher</source>
<translation type="unfinished"></translation>
<translation>Profesor</translation>
</message>
<message>
<source>Student</source>
<translation type="unfinished"></translation>
<translation>Estudiante</translation>
</message>
<message>
<source>Type task here ...</source>
<translation type="unfinished"></translation>
<translation>Escribir la tarea aquí ...</translation>
</message>
</context>
<context>
<name>UBTGMediaWidget</name>
<message>
<source>drop media here ...</source>
<translation type="unfinished"></translation>
<translation>Suelte el elemento multimedia aquí ...</translation>
</message>
<message>
<source>Type title here...</source>
<translation type="unfinished"></translation>
<translation>Escriba aquí el título ...</translation>
</message>
</context>
<context>
<name>UBTGUrlWidget</name>
<message>
<source>Insert link title here...</source>
<translation type="unfinished"></translation>
<translation>Inserte aquí el título del enlace ...</translation>
</message>
</context>
<context>
@ -1951,131 +1951,131 @@ Do you want to ignore these errors for this host?</source>
<name>UBTeacherGuideEditionWidget</name>
<message>
<source>Type title here ...</source>
<translation type="unfinished"></translation>
<translation>Escriba el título aquí ...</translation>
</message>
<message>
<source>Type comment here ...</source>
<translation type="unfinished"></translation>
<translation>Escriba el comentario aquí ...</translation>
</message>
<message>
<source>Add an action</source>
<translation type="unfinished"></translation>
<translation>Añadir una acción</translation>
</message>
<message>
<source>Add a media</source>
<translation type="unfinished"></translation>
<translation>Añadir un fichero multimedia</translation>
</message>
<message>
<source>Add a link</source>
<translation type="unfinished"></translation>
<translation>Añadir un enlace</translation>
</message>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Página: %0</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePageZeroWidget</name>
<message>
<source>Type session title here ...</source>
<translation type="unfinished"></translation>
<translation>Escriba aquí el título de la sesión ...</translation>
</message>
<message>
<source>Author(s)</source>
<translation type="unfinished"></translation>
<translation>Autor(es)</translation>
</message>
<message>
<source>Type authors here ...</source>
<translation type="unfinished"></translation>
<translation>Escriba aquí los autores ...</translation>
</message>
<message>
<source>Objective(s)</source>
<translation type="unfinished"></translation>
<translation>Objetivo(s)</translation>
</message>
<message>
<source>Type objectives here...</source>
<translation type="unfinished"></translation>
<translation>Escriba aquí los objetivos ...</translation>
</message>
<message>
<source>Resource indexing</source>
<translation type="unfinished"></translation>
<translation>Ordenando los recursos</translation>
</message>
<message>
<source>Keywords:</source>
<translation type="unfinished"></translation>
<translation>Palabras Clave:</translation>
</message>
<message>
<source>Type keywords here ...</source>
<translation type="unfinished"></translation>
<translation>Escriba aquí las palabras clave ...</translation>
</message>
<message>
<source>Level:</source>
<translation type="unfinished"></translation>
<translation>Nivel:</translation>
</message>
<message>
<source>Subjects:</source>
<translation type="unfinished"></translation>
<translation>Materias:</translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished"></translation>
<translation>Tipo:</translation>
</message>
<message>
<source>Licence</source>
<translation type="unfinished"></translation>
<translation>Licencia</translation>
</message>
<message>
<source>Attribution CC BY</source>
<translation type="unfinished"></translation>
<translation>Atribución CC BY</translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
<translation type="unfinished"></translation>
<translation>Atribución-NoDerivs CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
<translation type="unfinished"></translation>
<translation>Atribución-ShareAlike CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
<translation type="unfinished"></translation>
<translation>Atribución-NonCommercial CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
<translation type="unfinished"></translation>
<translation>Atribución-NonCommercial-Noderivs CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
<translation type="unfinished"></translation>
<translation>Atribución-NonCommercial-ShareAlike CC BY-NC-SA</translation>
</message>
<message>
<source>Public domain</source>
<translation type="unfinished"></translation>
<translation>Dominio Público</translation>
</message>
<message>
<source>Copyright</source>
<translation type="unfinished"></translation>
<translation>Copyright</translation>
</message>
<message>
<source>Created the:
</source>
<translation type="unfinished"></translation>
<translation>Creado el:</translation>
</message>
<message>
<source>Updated the:
</source>
<translation type="unfinished"></translation>
<translation>Actualizado el:</translation>
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Portada</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Página: %0</translation>
</message>
</context>
<context>
@ -3266,7 +3266,11 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;The licences are in English to respect the official and legal approved translation.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Lucida Grande&apos;; font-size:10pt;&quot;&gt;Al hacer clic en &apos;Descargar&apos; usted certifica que posee todos los derechos sobre el contenido o que está autorizado por el propietario a publicar el contenido en YouTube, y que éste cumple con los términos de servicio de YouTube que aparecen en&lt;/span&gt;&lt;a href=&quot;http://www.youtube.com/t/terms&quot;&gt;&lt;span style=&quot; font-family:&apos;Lucida Grande&apos;; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.youtube.com/t/terms&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3281,7 +3285,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Credits</source>
<translation type="unfinished"></translation>
<translation>Créditos</translation>
</message>
<message utf8="true">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3338,7 +3342,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Henri Rogelet &amp;lt;h.rogelet@free.fr&amp;gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Autorisation pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices.html&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0">
<!DOCTYPE TS><TS>
<context>
<name>BlackoutWidget</name>
<message>
@ -50,7 +48,7 @@
<name>IntranetPodcastPublishingDialog</name>
<message>
<source>Publish Podcast to YouTube</source>
<translation>Pubblica su youtube</translation>
<translation>Pubblica su YouTube</translation>
</message>
<message>
<source>Title</source>
@ -141,7 +139,7 @@
</message>
<message>
<source>Manage Documents</source>
<translation>Organizza documenti</translation>
<translation>Gestione documenti</translation>
</message>
<message>
<source>Ctrl+D</source>
@ -273,7 +271,7 @@
</message>
<message>
<source>Show Library</source>
<translation>Visualizza biblioteca</translation>
<translation>Visualizza Biblioteca</translation>
</message>
<message>
<source>Ctrl+L</source>
@ -649,7 +647,7 @@
</message>
<message>
<source>Add To Library</source>
<translation>Aggiungi alla biblioteca</translation>
<translation>Aggiungi alla Biblioteca</translation>
</message>
<message>
<source>Add Item To Library</source>
@ -767,27 +765,27 @@
<source>Ctrl+H</source>
<translation>Ctrl+H</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Open-Sankoré</source>
<translation>Open-Sankoré</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Quit Open-Sankoré</source>
<translation>Chiudi Open-Sankoré</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Open-Sankoré Editor</source>
<translation>Editore Open-Sankoré</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Show Open-Sankoré Widgets Editor</source>
<translation>Mostra l&apos;editore dei Widgets Open-Sankoré</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Hide Open-Sankoré</source>
<translation>Nascondi Open-Sankoré</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Hide Open-Sankoré Application</source>
<translation>Nascondi l&apos;applicazione Open-Sankoré</translation>
</message>
@ -801,27 +799,27 @@
</message>
<message>
<source>Group Items</source>
<translation type="unfinished"></translation>
<translation>Raggruppa</translation>
</message>
<message>
<source>Group items</source>
<translation type="unfinished"></translation>
<translation>Raggruppa gli oggetti selezionati</translation>
</message>
<message>
<source>Play</source>
<translation type="unfinished"></translation>
<translation>Riproduci</translation>
</message>
<message>
<source>Interact with items</source>
<translation type="unfinished"></translation>
<translation>Interagisci con gli oggetti</translation>
</message>
<message>
<source>Erase Background</source>
<translation type="unfinished"></translation>
<translation>Cancella sfondo</translation>
</message>
<message>
<source>Remove the backgound</source>
<translation type="unfinished"></translation>
<translation>Rimuove lo sfondo</translation>
</message>
</context>
<context>
@ -832,7 +830,7 @@
</message>
<message>
<source>Username:</source>
<translation>Nome utente</translation>
<translation>Nome utente:</translation>
</message>
<message>
<source>Password:</source>
@ -843,11 +841,11 @@
<name>ProxyDialog</name>
<message>
<source>Proxy Authentication</source>
<translation>Autenticazione con Proxy</translation>
<translation>Autenticazione Proxy</translation>
</message>
<message>
<source>Connect to Proxy</source>
<translation>Connessione con Proxy</translation>
<translation>Connessione al Proxy</translation>
</message>
<message>
<source>Username:</source>
@ -947,11 +945,11 @@
<name>UBBoardPaletteManager</name>
<message>
<source>Error Adding Image to Library</source>
<translation>Errore durante l&apos;aggiunta dell&apos;immagine alla biblioteca</translation>
<translation>Errore durante l&apos;aggiunta dell&apos;immagine alla Biblioteca</translation>
</message>
<message>
<source>CapturedImage</source>
<translation type="unfinished"></translation>
<translation>Immagine catturata</translation>
</message>
</context>
<context>
@ -1126,16 +1124,15 @@
<source>The document &apos;%1&apos; has been generated with a newer version of Sankore (%2). By opening it, you may lose some information. Do you want to proceed?</source>
<translation>Il documento &apos;%1&apos; è stato generato con una versione più recente di Sankore (%2). Aprendolo, si potrebbero perdere alcune informazioni. Vuoi continuare?</translation>
</message>
<message numerus="yes">
<message>
<source>Are you sure you want to remove %n page(s) from the selected document &apos;%1&apos;?</source>
<translation type="unfinished">
<numerusform>
</numerusform>
<translation>
Sei sicuro di voler rimuovere %n pagina(e) dal documento &apos;%1&apos; selezionato?
</translation>
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Titolo pagina</translation>
</message>
</context>
<context>
@ -1181,7 +1178,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Titolo pagina</translation>
</message>
</context>
<context>
@ -1225,11 +1222,10 @@
<source>Copying page %1/%2</source>
<translation>Sto copiando pagina %1/%2</translation>
</message>
<message numerus="yes">
<message>
<source>%1 pages copied</source>
<translation type="unfinished">
<numerusform>%1 pagine copiate
</numerusform>
<translation>%1 pagine copiate
</translation>
</message>
</context>
@ -1248,23 +1244,23 @@
<name>UBExportCFF</name>
<message>
<source>Export to IWB</source>
<translation type="unfinished"></translation>
<translation>Esporta come IWB</translation>
</message>
<message>
<source>Export as IWB File</source>
<translation type="unfinished"></translation>
<translation>Esporta come file IWB</translation>
</message>
<message>
<source>Exporting document...</source>
<translation type="unfinished">Esportazione documento in corso...</translation>
<translation>Esportazione documento in corso...</translation>
</message>
<message>
<source>Export successful.</source>
<translation type="unfinished"></translation>
<translation>Esportazione conclusa con successo.</translation>
</message>
<message>
<source>Export failed.</source>
<translation type="unfinished">Esportazione fallita.</translation>
<translation>Esportazione fallita.</translation>
</message>
</context>
<context>
@ -1367,61 +1363,61 @@
<name>UBFeatureProperties</name>
<message>
<source>Add to page</source>
<translation type="unfinished">Aggiungi alla pagina</translation>
<translation>Aggiungi alla pagina</translation>
</message>
<message>
<source>Set as background</source>
<translation type="unfinished">Imposta come sfondo</translation>
<translation>Imposta come sfondo</translation>
</message>
<message>
<source>Add to library</source>
<translation type="unfinished">Aggiungi alla libreria</translation>
<translation>Aggiungi alla Biblioteca</translation>
</message>
<message>
<source>Object informations</source>
<translation type="unfinished">Informazioni sull&apos;oggetto</translation>
<translation>Informazioni sull&apos;oggetto</translation>
</message>
</context>
<context>
<name>UBFeaturesActionBar</name>
<message>
<source>Add to favorites</source>
<translation type="unfinished">Aggiungi ai preferiti</translation>
<translation>Aggiungi ai preferiti</translation>
</message>
<message>
<source>Share</source>
<translation type="unfinished">Condividi</translation>
<translation>Condividi</translation>
</message>
<message>
<source>Search</source>
<translation type="unfinished"></translation>
<translation>Cerca</translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished">Cancella</translation>
<translation>Cancella</translation>
</message>
<message>
<source>Back to folder</source>
<translation type="unfinished">Torna alla cartella</translation>
<translation>Torna alla cartella</translation>
</message>
<message>
<source>Remove from favorites</source>
<translation type="unfinished">Rimuovi dai preferiti</translation>
<translation>Rimuovi dai preferiti</translation>
</message>
<message>
<source>Create new folder</source>
<translation type="unfinished">Crea nuova cartella</translation>
<translation>Crea nuova cartella</translation>
</message>
<message>
<source>Rescan file system</source>
<translation type="unfinished"></translation>
<translation>Ripeti la scansione del file system</translation>
</message>
</context>
<context>
<name>UBFeaturesController</name>
<message>
<source>ImportedImage</source>
<translation type="unfinished">Immagine importata</translation>
<translation>Immagine importata</translation>
</message>
</context>
<context>
@ -1612,7 +1608,7 @@
</message>
<message>
<source>Add to library</source>
<translation>Aggiungi alla libreria</translation>
<translation>Aggiungi alla Biblioteca</translation>
</message>
<message>
<source>Object informations</source>
@ -1623,7 +1619,7 @@
<name>UBLibraryController</name>
<message>
<source>Added 1 Image to Library</source>
<translation>Aggiungi un&apos;immagine alla libreria</translation>
<translation>Aggiungi un&apos;immagine alla Biblioteca</translation>
</message>
<message>
<source>Audios</source>
@ -1771,23 +1767,23 @@ Vuoi ignorare gli errori per questo host?</translation>
<name>UBPlatformUtils</name>
<message>
<source>English</source>
<translation type="unfinished"></translation>
<translation>Inglese</translation>
</message>
<message>
<source>Russian</source>
<translation type="unfinished"></translation>
<translation>Russo</translation>
</message>
<message>
<source>German</source>
<translation type="unfinished"></translation>
<translation>Tedesco</translation>
</message>
<message>
<source>French</source>
<translation type="unfinished"></translation>
<translation>Francese</translation>
</message>
<message>
<source>Swiss French</source>
<translation type="unfinished"></translation>
<translation>Franco Svizzero</translation>
</message>
</context>
<context>
@ -1917,33 +1913,34 @@ Vuoi ignorare gli errori per questo host?</translation>
<name>UBTGActionWidget</name>
<message>
<source>Teacher</source>
<translation type="unfinished"></translation>
<translation>Docente</translation>
</message>
<message>
<source>Student</source>
<translation type="unfinished"></translation>
<translation>Studente</translation>
</message>
<message>
<source>Type task here ...</source>
<translation type="unfinished"></translation>
<translation>Digita qui l&apos;attività ...</translation>
</message>
</context>
<context>
<name>UBTGMediaWidget</name>
<message>
<source>drop media here ...</source>
<translation type="unfinished"></translation>
<translation>Trascina qui una
risorsa multimediale ...</translation>
</message>
<message>
<source>Type title here...</source>
<translation type="unfinished"></translation>
<translation>Digita qui il titolo ...</translation>
</message>
</context>
<context>
<name>UBTGUrlWidget</name>
<message>
<source>Insert link title here...</source>
<translation type="unfinished"></translation>
<translation>Inserisci qui il titolo del link...</translation>
</message>
</context>
<context>
@ -1957,131 +1954,133 @@ Vuoi ignorare gli errori per questo host?</translation>
<name>UBTeacherGuideEditionWidget</name>
<message>
<source>Type title here ...</source>
<translation type="unfinished"></translation>
<translation>Digita qui il titolo ...</translation>
</message>
<message>
<source>Type comment here ...</source>
<translation type="unfinished"></translation>
<translation>Digita qui un commento ...</translation>
</message>
<message>
<source>Add an action</source>
<translation type="unfinished"></translation>
<translation>Aggiungi una attività</translation>
</message>
<message>
<source>Add a media</source>
<translation type="unfinished"></translation>
<translation>Aggiungi una risorsa multimediale</translation>
</message>
<message>
<source>Add a link</source>
<translation type="unfinished"></translation>
<translation>Aggiungi un link</translation>
</message>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Pagina: %0</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePageZeroWidget</name>
<message>
<source>Type session title here ...</source>
<translation type="unfinished"></translation>
<translation>Digita qui il titolo della sessione ...</translation>
</message>
<message>
<source>Author(s)</source>
<translation type="unfinished"></translation>
<translation>Autore(i)</translation>
</message>
<message>
<source>Type authors here ...</source>
<translation type="unfinished"></translation>
<translation>Digita qui gli autori ...</translation>
</message>
<message>
<source>Objective(s)</source>
<translation type="unfinished"></translation>
<translation>Obiettivo(i)</translation>
</message>
<message>
<source>Type objectives here...</source>
<translation type="unfinished"></translation>
<translation>Digita qui gli obiettivi...</translation>
</message>
<message>
<source>Resource indexing</source>
<translation type="unfinished"></translation>
<translation>Indicizzazione della risorsa</translation>
</message>
<message>
<source>Keywords:</source>
<translation type="unfinished"></translation>
<translation>Parole chiavi:</translation>
</message>
<message>
<source>Type keywords here ...</source>
<translation type="unfinished"></translation>
<translation>Digita qui le parole chiavi ...</translation>
</message>
<message>
<source>Level:</source>
<translation type="unfinished"></translation>
<translation>Livello:</translation>
</message>
<message>
<source>Subjects:</source>
<translation type="unfinished"></translation>
<translation>Soggetto:</translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished"></translation>
<translation>Tipo:</translation>
</message>
<message>
<source>Licence</source>
<translation type="unfinished"></translation>
<translation>Licenza</translation>
</message>
<message>
<source>Attribution CC BY</source>
<translation type="unfinished"></translation>
<translation>Attribuzione CC BY</translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
<translation type="unfinished"></translation>
<translation>Attribuzione - Non opere derivate CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
<translation type="unfinished"></translation>
<translation>Attribuzione - Condividi allo stesso modo CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
<translation type="unfinished"></translation>
<translation>Attribuzione - Non Commerciale CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
<translation type="unfinished"></translation>
<translation>Attribuzione - Non opere derivate, Non commerciale CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
<translation type="unfinished"></translation>
<translation>Attribuzione - Non commerciale, Condividi allo stesso modo CC BY-NC-SA</translation>
</message>
<message>
<source>Public domain</source>
<translation type="unfinished"></translation>
<translation>Pubblico dominio</translation>
</message>
<message>
<source>Copyright</source>
<translation type="unfinished"></translation>
<translation>Copyright</translation>
</message>
<message>
<source>Created the:
</source>
<translation type="unfinished"></translation>
<translation>Creato il:
</translation>
</message>
<message>
<source>Updated the:
</source>
<translation type="unfinished"></translation>
<translation>Aggiornato il:
</translation>
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Titolo pagina</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Pagina: %0</translation>
</message>
</context>
<context>
@ -2662,13 +2661,13 @@ p, li { white-space: pre-wrap; }
<source>Preferences</source>
<translation>Preferenze</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>version : </source>
<translation>versione: ...</translation>
</message>
<message>
<source>Default Settings</source>
<translation>Settaggio predefinito</translation>
<translation>Impostazioni predefinite</translation>
</message>
<message>
<source>Close</source>
@ -2770,7 +2769,7 @@ p, li { white-space: pre-wrap; }
<source>Network</source>
<translation>Rete</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Open-Sankoré</source>
<translation>Open-Sankoré</translation>
</message>
@ -2810,7 +2809,7 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Password:</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>Planète Sankoré ID</source>
<translation>ID Planete Sankoré</translation>
</message>
@ -3261,7 +3260,7 @@ DAMAGES.
END OF TERMS AND CONDITIONS
</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3272,7 +3271,14 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;The licences are in English to respect the official and legal approved translation.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;table border=&quot;0&quot; style=&quot;-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Le licenze sono in Inglese per rispettare le traduzioni ufficiali e legalmente approvate.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3283,13 +3289,13 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt;Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; This software is provided &apos;as-is&apos;, without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 3. This notice may not be removed or altered from any source distribution.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Credits</source>
<translation type="unfinished"></translation>
<translation>Crediti</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -3299,9 +3305,17 @@ p, li { white-space: pre-wrap; }
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;&lt;br /&gt;Open-Sankoré est un logiciel libre : vous pouvez le redistribuer et/ou le modifier en respectant les termes de la Lesser GNU general Public Licence (GNU LGPL) telle que publiée par la Free Software Foundation en version 2 ou une version plus récente.&lt;br /&gt;Vous pouvez consulter et charger le code source du logiciel sur &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré est distribué dans l&apos;espoir qu&apos;il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D&apos;ADAPTATION A UN OBJET PARTICULIER.&lt;br /&gt;Veuillez consulter la licence Lesser GNU General Public Licence située dans l&apos;onglet Licences ou consulter le site &lt;/span&gt;&lt;a href=&quot;http://www.gnu.org/licenses/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;http://www.gnu.org/licenses/&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;.&lt;br /&gt;&lt;br /&gt;Open-Sankoré is free software: you can redistribute it and/or modify it under the terms of the Lesser GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version. You can find the source code of this software at &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public License below for more details.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Contact : &lt;br /&gt;Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;Délégation Interministérielle à l&apos;Education Numérique en Afrique&lt;br /&gt;20 Avenue Ségur Paris 75007&lt;br /&gt;Téléphone : 01 43 17 68 08&lt;br /&gt;email: &lt;/span&gt;&lt;a href=&quot;mailto:contact@sankore.org&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;contact@sankore.org&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;table border=&quot;0&quot; style=&quot;-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;&lt;br /&gt;Open-Sankoré est un logiciel libre : vous pouvez le redistribuer et/ou le modifier en respectant les termes de la Lesser GNU general Public Licence (GNU LGPL) telle que publiée par la Free Software Foundation en version 2 ou une version plus récente.&lt;br /&gt;Vous pouvez consulter et charger le code source du logiciel sur &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré est distribué dans l&apos;espoir qu&apos;il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D&apos;ADAPTATION A UN OBJET PARTICULIER.&lt;br /&gt;Veuillez consulter la licence Lesser GNU General Public Licence située dans l&apos;onglet Licences ou consulter le site &lt;/span&gt;&lt;a href=&quot;http://www.gnu.org/licenses/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;http://www.gnu.org/licenses/&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;.&lt;br /&gt;&lt;br /&gt;Open-Sankoré is free software: you can redistribute it and/or modify it under the terms of the Lesser GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version. You can find the source code of this software at &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public License below for more details.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Contact : &lt;br /&gt;Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;Délégation Interministérielle à l&apos;Education Numérique en Afrique&lt;br /&gt;20 Avenue Ségur Paris 75007&lt;br /&gt;Téléphone : 01 43 17 68 08&lt;br /&gt;email: &lt;/span&gt;&lt;a href=&quot;mailto:contact@sankore.org&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;contact@sankore.org&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message utf8="true">
<message encoding="UTF-8">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -3344,7 +3358,48 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Henri Rogelet &amp;lt;h.rogelet@free.fr&amp;gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Autorisation pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices.html&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Crédits police scolaire Open-Sankoré : &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;La police Andika Basic dispose d&apos;une licence Open Font License &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Sil international&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;amp;id=andika&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Les polices Ecolier suivantes sont l&apos;oeuvre de Jean-Marie Douteau et disposent d&apos;une licence OFL : &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;- Ecolier Court &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;- Ecolier Ligne Court&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Jean-Marie Douteau (douteau.ecolier@sfr.fr)&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Les polices Ecolier suivantes sont l&apos;oeuvre de Jean-Marie Douteau et disposent d&apos;une licence Creative Commons BY NC ND :&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;- Ecolier lignes pointillés&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;- Écolier pointillés&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;- Écolier CP&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;- Écolier CP pointillés&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Jean-Marie Douteau (douteau.ecolier@sfr.fr)&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Les polices Cursive sont l&apos;oeuvre d&apos;Antoine Fetet (antoine.fetet@laposte.net) à partir d&apos;une police proposée par Jean-Claude Gineau&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;L&apos;auteur en autorise l&apos;utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Les polices Script (Ecole et CaseEcole) sont l&apos;oeuvre d&apos;Henri Rogelet&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices/SCRIPTCO.zip&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices/SCRIPTCA.zip&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Henri Rogelet &amp;lt;h.rogelet@free.fr&amp;gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Autorisation pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices.html&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;La police phonétique, Alphonet est l&apos;oeuvre d&apos;Henri Rogelet&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices/ALPHONET.zip&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Henri Rogelet &amp;lt;h.rogelet@free.fr&amp;gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Autorisation pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices.html&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>

@ -801,27 +801,27 @@
</message>
<message>
<source>Group Items</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Group items</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Play</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Interact with items</source>
<translation type="unfinished"></translation>
<translation>使</translation>
</message>
<message>
<source>Erase Background</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Remove the backgound</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -951,7 +951,7 @@
</message>
<message>
<source>CapturedImage</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -1134,7 +1134,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -1180,7 +1180,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -1246,23 +1246,23 @@
<name>UBExportCFF</name>
<message>
<source>Export to IWB</source>
<translation type="unfinished"></translation>
<translation>IWBへエクスポート</translation>
</message>
<message>
<source>Export as IWB File</source>
<translation type="unfinished"></translation>
<translation>IWB </translation>
</message>
<message>
<source>Exporting document...</source>
<translation type="unfinished">... </translation>
<translation>... </translation>
</message>
<message>
<source>Export successful.</source>
<translation type="unfinished"></translation>
<translation>. </translation>
</message>
<message>
<source>Export failed.</source>
<translation type="unfinished"></translation>
<translation>. </translation>
</message>
</context>
<context>
@ -1365,61 +1365,61 @@
<name>UBFeatureProperties</name>
<message>
<source>Add to page</source>
<translation type="unfinished"> </translation>
<translation> </translation>
</message>
<message>
<source>Set as background</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Add to library</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Object informations</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
<name>UBFeaturesActionBar</name>
<message>
<source>Add to favorites</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Share</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Search</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Back to folder</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Remove from favorites</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Create new folder</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Rescan file system</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
<name>UBFeaturesController</name>
<message>
<source>ImportedImage</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -1770,23 +1770,23 @@ Do you want to ignore these errors for this host?</source>
<name>UBPlatformUtils</name>
<message>
<source>English</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Russian</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>German</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>French</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Swiss French</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -1916,33 +1916,33 @@ Do you want to ignore these errors for this host?</source>
<name>UBTGActionWidget</name>
<message>
<source>Teacher</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Student</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Type task here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
</context>
<context>
<name>UBTGMediaWidget</name>
<message>
<source>drop media here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Type title here...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
</context>
<context>
<name>UBTGUrlWidget</name>
<message>
<source>Insert link title here...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
</context>
<context>
@ -1956,131 +1956,131 @@ Do you want to ignore these errors for this host?</source>
<name>UBTeacherGuideEditionWidget</name>
<message>
<source>Type title here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Type comment here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Add an action</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Add a media</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Add a link</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>%0</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePageZeroWidget</name>
<message>
<source>Type session title here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Author(s)</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Type authors here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Objective(s)</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Type objectives here...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Resource indexing</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Keywords:</source>
<translation type="unfinished"></translation>
<translation>:</translation>
</message>
<message>
<source>Type keywords here ...</source>
<translation type="unfinished"></translation>
<translation>...</translation>
</message>
<message>
<source>Level:</source>
<translation type="unfinished"></translation>
<translation>:</translation>
</message>
<message>
<source>Subjects:</source>
<translation type="unfinished"></translation>
<translation>:</translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished"></translation>
<translation>:</translation>
</message>
<message>
<source>Licence</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Attribution CC BY</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Public domain</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Copyright</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Created the:
</source>
<translation type="unfinished"></translation>
<translation>:</translation>
</message>
<message>
<source>Updated the:
</source>
<translation type="unfinished"></translation>
<translation>:</translation>
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>%0</translation>
</message>
</context>
<context>
@ -3256,7 +3256,7 @@ DAMAGES.
END OF TERMS AND CONDITIONS
</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3267,7 +3267,7 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;The licences are in English to respect the official and legal approved translation.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3278,11 +3278,11 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt;Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; This software is provided &apos;as-is&apos;, without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 3. This notice may not be removed or altered from any source distribution.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Credits</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message utf8="true">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3294,7 +3294,7 @@ p, li { white-space: pre-wrap; }
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;&lt;br /&gt;Open-Sankoré est un logiciel libre : vous pouvez le redistribuer et/ou le modifier en respectant les termes de la Lesser GNU general Public Licence (GNU LGPL) telle que publiée par la Free Software Foundation en version 2 ou une version plus récente.&lt;br /&gt;Vous pouvez consulter et charger le code source du logiciel sur &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré est distribué dans l&apos;espoir qu&apos;il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D&apos;ADAPTATION A UN OBJET PARTICULIER.&lt;br /&gt;Veuillez consulter la licence Lesser GNU General Public Licence située dans l&apos;onglet Licences ou consulter le site &lt;/span&gt;&lt;a href=&quot;http://www.gnu.org/licenses/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;http://www.gnu.org/licenses/&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;.&lt;br /&gt;&lt;br /&gt;Open-Sankoré is free software: you can redistribute it and/or modify it under the terms of the Lesser GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version. You can find the source code of this software at &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public License below for more details.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Contact : &lt;br /&gt;Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;Délégation Interministérielle à l&apos;Education Numérique en Afrique&lt;br /&gt;20 Avenue Ségur Paris 75007&lt;br /&gt;Téléphone : 01 43 17 68 08&lt;br /&gt;email: &lt;/span&gt;&lt;a href=&quot;mailto:contact@sankore.org&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;contact@sankore.org&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message utf8="true">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3339,7 +3339,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Henri Rogelet &amp;lt;h.rogelet@free.fr&amp;gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Autorisation pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices.html&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>

@ -5,7 +5,7 @@
<name>BlackoutWidget</name>
<message>
<source>Click to Return to Application</source>
<translation>Klik om terug te keren naar de applicatie</translation>
<translation>Klik om terug te keren naar de toepassing</translation>
</message>
</context>
<context>
@ -101,7 +101,7 @@
</message>
<message>
<source>Undo</source>
<translation>annuleren</translation>
<translation>ongedaan maken</translation>
</message>
<message>
<source>Ctrl+Z</source>
@ -365,7 +365,7 @@
</message>
<message>
<source>Duplicate Selected Content</source>
<translation>De geselecteerde tekst dupliceren</translation>
<translation>De geselecteerde inhoud dupliceren</translation>
</message>
<message>
<source>Delete</source>
@ -801,27 +801,27 @@
</message>
<message>
<source>Group Items</source>
<translation type="unfinished"></translation>
<translation>Groep onderdelen</translation>
</message>
<message>
<source>Group items</source>
<translation type="unfinished"></translation>
<translation>groep onderdelen</translation>
</message>
<message>
<source>Play</source>
<translation type="unfinished"></translation>
<translation>Speel</translation>
</message>
<message>
<source>Interact with items</source>
<translation type="unfinished"></translation>
<translation>Aan de slag met onderdelen</translation>
</message>
<message>
<source>Erase Background</source>
<translation type="unfinished"></translation>
<translation>Achtergrond wissen</translation>
</message>
<message>
<source>Remove the backgound</source>
<translation type="unfinished"></translation>
<translation>Achtyergrond verwijderen</translation>
</message>
</context>
<context>
@ -951,7 +951,7 @@
</message>
<message>
<source>CapturedImage</source>
<translation type="unfinished"></translation>
<translation>Gegrepen afbeelding</translation>
</message>
</context>
<context>
@ -1135,7 +1135,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Titel pagina</translation>
</message>
</context>
<context>
@ -1181,7 +1181,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Titel pagina</translation>
</message>
</context>
<context>
@ -1228,7 +1228,7 @@
<message numerus="yes">
<source>%1 pages copied</source>
<translation>
<numerusform>%1 gekopieerd</numerusform>
<numerusform>%1 pagina gekopieerd</numerusform>
<numerusform>%1 pagina&apos;s gekopieerd</numerusform>
</translation>
</message>
@ -1248,23 +1248,23 @@
<name>UBExportCFF</name>
<message>
<source>Export to IWB</source>
<translation type="unfinished"></translation>
<translation>Exporteer naar IWB</translation>
</message>
<message>
<source>Export as IWB File</source>
<translation type="unfinished"></translation>
<translation>Exporteer als IWB bestand</translation>
</message>
<message>
<source>Exporting document...</source>
<translation type="unfinished">Document wordt geëxporteerd...</translation>
<translation>Document wordt geëxporteerd...</translation>
</message>
<message>
<source>Export successful.</source>
<translation type="unfinished">Export gelukt.</translation>
<translation>Export gelukt.</translation>
</message>
<message>
<source>Export failed.</source>
<translation type="unfinished"></translation>
<translation>Export mislukt.</translation>
</message>
</context>
<context>
@ -1367,61 +1367,61 @@
<name>UBFeatureProperties</name>
<message>
<source>Add to page</source>
<translation type="unfinished">Aan pagina toevoegen</translation>
<translation>Aan pagina toevoegen</translation>
</message>
<message>
<source>Set as background</source>
<translation type="unfinished">Als achtergrond gebruiken</translation>
<translation>Als achtergrond gebruiken</translation>
</message>
<message>
<source>Add to library</source>
<translation type="unfinished">Aan bibliotheek toevoegen</translation>
<translation>Aan bibliotheek toevoegen</translation>
</message>
<message>
<source>Object informations</source>
<translation type="unfinished">Object informatie</translation>
<translation>Object informatie</translation>
</message>
</context>
<context>
<name>UBFeaturesActionBar</name>
<message>
<source>Add to favorites</source>
<translation type="unfinished">Aan favorieten toevoegen</translation>
<translation>Aan favorieten toevoegen</translation>
</message>
<message>
<source>Share</source>
<translation type="unfinished">Delen</translation>
<translation>Delen</translation>
</message>
<message>
<source>Search</source>
<translation type="unfinished">Zoeken</translation>
<translation>Zoeken</translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished">Verwijderen</translation>
<translation>Verwijderen</translation>
</message>
<message>
<source>Back to folder</source>
<translation type="unfinished">Terug naar map</translation>
<translation>Terug naar map</translation>
</message>
<message>
<source>Remove from favorites</source>
<translation type="unfinished">Uit favorieten verwijderen</translation>
<translation>Uit favorieten verwijderen</translation>
</message>
<message>
<source>Create new folder</source>
<translation type="unfinished">Nieuwe map maken</translation>
<translation>Nieuwe map maken</translation>
</message>
<message>
<source>Rescan file system</source>
<translation type="unfinished"></translation>
<translation>Bestand systeem opnieuw scannen</translation>
</message>
</context>
<context>
<name>UBFeaturesController</name>
<message>
<source>ImportedImage</source>
<translation type="unfinished">Geïmporteerd beeld</translation>
<translation>Geïmporteerd beeld</translation>
</message>
</context>
<context>
@ -1765,23 +1765,23 @@ Do you want to ignore these errors for this host?</source>
<name>UBPlatformUtils</name>
<message>
<source>English</source>
<translation type="unfinished"></translation>
<translation>Engels</translation>
</message>
<message>
<source>Russian</source>
<translation type="unfinished"></translation>
<translation>Russisch</translation>
</message>
<message>
<source>German</source>
<translation type="unfinished"></translation>
<translation>Duits</translation>
</message>
<message>
<source>French</source>
<translation type="unfinished"></translation>
<translation>Frans</translation>
</message>
<message>
<source>Swiss French</source>
<translation type="unfinished"></translation>
<translation>Zwitsers Frans</translation>
</message>
</context>
<context>
@ -1911,33 +1911,33 @@ Do you want to ignore these errors for this host?</source>
<name>UBTGActionWidget</name>
<message>
<source>Teacher</source>
<translation type="unfinished"></translation>
<translation>Leerkracht</translation>
</message>
<message>
<source>Student</source>
<translation type="unfinished"></translation>
<translation>Student</translation>
</message>
<message>
<source>Type task here ...</source>
<translation type="unfinished"></translation>
<translation>Typ opdracht hier ...</translation>
</message>
</context>
<context>
<name>UBTGMediaWidget</name>
<message>
<source>drop media here ...</source>
<translation type="unfinished"></translation>
<translation>Plaats media hier ...</translation>
</message>
<message>
<source>Type title here...</source>
<translation type="unfinished"></translation>
<translation>Typ titel hier ...</translation>
</message>
</context>
<context>
<name>UBTGUrlWidget</name>
<message>
<source>Insert link title here...</source>
<translation type="unfinished"></translation>
<translation>Voeg titel van de link hier toe ...</translation>
</message>
</context>
<context>
@ -1951,131 +1951,131 @@ Do you want to ignore these errors for this host?</source>
<name>UBTeacherGuideEditionWidget</name>
<message>
<source>Type title here ...</source>
<translation type="unfinished"></translation>
<translation>Typ de titel hier ...</translation>
</message>
<message>
<source>Type comment here ...</source>
<translation type="unfinished"></translation>
<translation>Typ de commentaar hier ...</translation>
</message>
<message>
<source>Add an action</source>
<translation type="unfinished"></translation>
<translation>Voeg de werkvorm toe</translation>
</message>
<message>
<source>Add a media</source>
<translation type="unfinished"></translation>
<translation>Voeg de media toe</translation>
</message>
<message>
<source>Add a link</source>
<translation type="unfinished"></translation>
<translation>Voeg een link toe</translation>
</message>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Pagina: %0</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePageZeroWidget</name>
<message>
<source>Type session title here ...</source>
<translation type="unfinished"></translation>
<translation>Typ de lesfase hier ...</translation>
</message>
<message>
<source>Author(s)</source>
<translation type="unfinished"></translation>
<translation>Auteur</translation>
</message>
<message>
<source>Type authors here ...</source>
<translation type="unfinished"></translation>
<translation>Typ de auteurs hier ...</translation>
</message>
<message>
<source>Objective(s)</source>
<translation type="unfinished"></translation>
<translation>Doelstelling(en)</translation>
</message>
<message>
<source>Type objectives here...</source>
<translation type="unfinished"></translation>
<translation>Typ de doelstellingen hier ...</translation>
</message>
<message>
<source>Resource indexing</source>
<translation type="unfinished"></translation>
<translation>Oplijsting bronmateriaal</translation>
</message>
<message>
<source>Keywords:</source>
<translation type="unfinished"></translation>
<translation>Sleutelwoorden:</translation>
</message>
<message>
<source>Type keywords here ...</source>
<translation type="unfinished"></translation>
<translation>Typ hier de sleutelwoorden ...</translation>
</message>
<message>
<source>Level:</source>
<translation type="unfinished"></translation>
<translation>Niveau:</translation>
</message>
<message>
<source>Subjects:</source>
<translation type="unfinished"></translation>
<translation>Onderwerpen:</translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished"></translation>
<translation>Type:</translation>
</message>
<message>
<source>Licence</source>
<translation type="unfinished"></translation>
<translation>Licentie</translation>
</message>
<message>
<source>Attribution CC BY</source>
<translation type="unfinished"></translation>
<translation>Naamsvermelding CC BY</translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
<translation type="unfinished"></translation>
<translation>Naamsvermelding-GeenAfgeleideWerken CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
<translation type="unfinished"></translation>
<translation>Naamsvermelding-GelijkDelen CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
<translation type="unfinished"></translation>
<translation>Naamsvermelding-NietCommercieel CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
<translation type="unfinished"></translation>
<translation>Naamsvermelding-NietCommercieel-GeenAfgeleideWerken CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
<translation type="unfinished"></translation>
<translation>Naamsvermelding-NietCommercieel-GelijkDelen CC BY-NC-SA</translation>
</message>
<message>
<source>Public domain</source>
<translation type="unfinished"></translation>
<translation>Publiek domein</translation>
</message>
<message>
<source>Copyright</source>
<translation type="unfinished"></translation>
<translation>Copyright</translation>
</message>
<message>
<source>Created the:
</source>
<translation type="unfinished"></translation>
<translation>Aangemaakt op:</translation>
</message>
<message>
<source>Updated the:
</source>
<translation type="unfinished"></translation>
<translation>Bijgewerkt op:</translation>
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Titel pagina</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Pagina: %0</translation>
</message>
</context>
<context>
@ -3280,7 +3280,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Credits</source>
<translation type="unfinished"></translation>
<translation>Credits</translation>
</message>
<message utf8="true">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;

@ -281,7 +281,8 @@
</message>
<message>
<source>Show Desktop</source>
<translation>Mostrar o ambiente de trabalho</translation>
<translatorcomment>&quot;Mostrar Ambiente de Trabalho&quot; (muito longo) - Mostrar a mesa</translatorcomment>
<translation>Mostrar mesa</translation>
</message>
<message>
<source>Show Computer Desktop</source>
@ -801,27 +802,28 @@
</message>
<message>
<source>Group Items</source>
<translation type="unfinished"></translation>
<translation>Agrupar itens</translation>
</message>
<message>
<source>Group items</source>
<translation type="unfinished"></translation>
<translation>Agrupar itens</translation>
</message>
<message>
<source>Play</source>
<translation type="unfinished"></translation>
<translatorcomment>Começar(?)</translatorcomment>
<translation>Iniciar</translation>
</message>
<message>
<source>Interact with items</source>
<translation type="unfinished"></translation>
<translation>Interagir com itens</translation>
</message>
<message>
<source>Erase Background</source>
<translation type="unfinished"></translation>
<translation>Apagar o fundo</translation>
</message>
<message>
<source>Remove the backgound</source>
<translation type="unfinished"></translation>
<translation>Remover o fundo</translation>
</message>
</context>
<context>
@ -953,7 +955,7 @@
</message>
<message>
<source>CapturedImage</source>
<translation type="unfinished"></translation>
<translation>Imagem capturada</translation>
</message>
</context>
<context>
@ -1137,7 +1139,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Página de Título</translation>
</message>
</context>
<context>
@ -1183,7 +1185,7 @@
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translation>Página de Título</translation>
</message>
</context>
<context>
@ -1250,23 +1252,23 @@
<name>UBExportCFF</name>
<message>
<source>Export to IWB</source>
<translation type="unfinished"></translation>
<translation>Exportar para IWB</translation>
</message>
<message>
<source>Export as IWB File</source>
<translation type="unfinished"></translation>
<translation>Exportar como ficheiro IWB</translation>
</message>
<message>
<source>Exporting document...</source>
<translation type="unfinished">A exportar documento...</translation>
<translation>A exportar documento...</translation>
</message>
<message>
<source>Export successful.</source>
<translation type="unfinished">Exportação bem sucedida.</translation>
<translation>Exportação bem sucedida.</translation>
</message>
<message>
<source>Export failed.</source>
<translation type="unfinished"></translation>
<translation>Falha na Exportação.</translation>
</message>
</context>
<context>
@ -1369,61 +1371,62 @@
<name>UBFeatureProperties</name>
<message>
<source>Add to page</source>
<translation type="unfinished">Adicionar à página</translation>
<translation>Adicionar à página</translation>
</message>
<message>
<source>Set as background</source>
<translation type="unfinished">Definir como fundo</translation>
<translation>Definir como fundo</translation>
</message>
<message>
<source>Add to library</source>
<translation type="unfinished">Adicionar à biblioteca</translation>
<translation>Adicionar à biblioteca</translation>
</message>
<message>
<source>Object informations</source>
<translation type="unfinished">Informações do Objecto</translation>
<translation>Informações do Objecto</translation>
</message>
</context>
<context>
<name>UBFeaturesActionBar</name>
<message>
<source>Add to favorites</source>
<translation type="unfinished">Adicionar aos favoritos</translation>
<translation>Adicionar aos favoritos</translation>
</message>
<message>
<source>Share</source>
<translation type="unfinished">Partilhar</translation>
<translation>Partilhar</translation>
</message>
<message>
<source>Search</source>
<translation type="unfinished"></translation>
<translation>Procurar</translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished">Apagar</translation>
<translation>Apagar</translation>
</message>
<message>
<source>Back to folder</source>
<translation type="unfinished">Voltar à pasta</translation>
<translation>Voltar à pasta</translation>
</message>
<message>
<source>Remove from favorites</source>
<translation type="unfinished">Remover dos favoritos</translation>
<translation>Remover dos favoritos</translation>
</message>
<message>
<source>Create new folder</source>
<translation type="unfinished">Criar uma nova pasta</translation>
<translation>Criar uma nova pasta</translation>
</message>
<message>
<source>Rescan file system</source>
<translation type="unfinished"></translation>
<translatorcomment>&quot;Procurar ficheiro de Sistema&quot;(?)</translatorcomment>
<translation>Voltar a procurar ficheiro de Sistema</translation>
</message>
</context>
<context>
<name>UBFeaturesController</name>
<message>
<source>ImportedImage</source>
<translation type="unfinished">Imagem Importada</translation>
<translation>Imagem Importada</translation>
</message>
</context>
<context>
@ -1919,164 +1922,167 @@ Quer ignorar estes erros, deste servidor?</translation>
<name>UBTGActionWidget</name>
<message>
<source>Teacher</source>
<translation type="unfinished"></translation>
<translation>Professor</translation>
</message>
<message>
<source>Student</source>
<translation type="unfinished"></translation>
<translation>Aluno</translation>
</message>
<message>
<source>Type task here ...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui a tarefa ...</translation>
</message>
</context>
<context>
<name>UBTGMediaWidget</name>
<message>
<source>drop media here ...</source>
<translation type="unfinished"></translation>
<translation>Largar o ficheiro media aqui ...</translation>
</message>
<message>
<source>Type title here...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui o tíitulo...</translation>
</message>
</context>
<context>
<name>UBTGUrlWidget</name>
<message>
<source>Insert link title here...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui o título do link...</translation>
</message>
</context>
<context>
<name>UBTeacherGuideEditionWidget</name>
<message>
<source>Type title here ...</source>
<translation type="unfinished"></translation>
<translation>Colocar o título aqui...</translation>
</message>
<message>
<source>Type comment here ...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui o comentário ...</translation>
</message>
<message>
<source>Add an action</source>
<translation type="unfinished"></translation>
<translation>Adicionar uma ação</translation>
</message>
<message>
<source>Add a media</source>
<translation type="unfinished"></translation>
<translatorcomment>&quot;Adicionar ficheiro multimédia&quot;</translatorcomment>
<translation>Adicionar multimédia</translation>
</message>
<message>
<source>Add a link</source>
<translation type="unfinished"></translation>
<translation>Adicionar um link</translation>
</message>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Página: %0</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePageZeroWidget</name>
<message>
<source>Type session title here ...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui tipo de sessão ...</translation>
</message>
<message>
<source>Author(s)</source>
<translation type="unfinished"></translation>
<translation>Autor(es)</translation>
</message>
<message>
<source>Type authors here ...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui os autores ...</translation>
</message>
<message>
<source>Objective(s)</source>
<translation type="unfinished"></translation>
<translation>Objetivo(s)</translation>
</message>
<message>
<source>Type objectives here...</source>
<translation type="unfinished"></translation>
<translation>Colocar aqui o tipo de objetivo...</translation>
</message>
<message>
<source>Resource indexing</source>
<translation type="unfinished"></translation>
<translatorcomment>&quot;Índice de recursos&quot;?</translatorcomment>
<translation>Indexar recursos</translation>
</message>
<message>
<source>Keywords:</source>
<translation type="unfinished"></translation>
<translation>Palavra(s) Chave:</translation>
</message>
<message>
<source>Type keywords here ...</source>
<translation type="unfinished"></translation>
<translation>Colocar a(s) palavra(s) chave aqui ...</translation>
</message>
<message>
<source>Level:</source>
<translation type="unfinished"></translation>
<translation>Nível:</translation>
</message>
<message>
<source>Subjects:</source>
<translation type="unfinished"></translation>
<translation>Assunto:</translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished"></translation>
<translation>Tipo:</translation>
</message>
<message>
<source>Licence</source>
<translation type="unfinished"></translation>
<translation>Licença</translation>
</message>
<message>
<source>Attribution CC BY</source>
<translation type="unfinished"></translation>
<translation>Atribuição CC BY</translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
<translation type="unfinished"></translation>
<translation>Atribuição-SemDerivados CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
<translation type="unfinished"></translation>
<translation>Atribuição-CompartilhaIgual CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
<translation type="unfinished"></translation>
<translation>Atribuição - NãoComercial CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
<translation type="unfinished"></translation>
<translation>Atribuição-NãoComercial-SemDerivados CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
<translation type="unfinished"></translation>
<translation>Atribuição-NãoComercial-CompartilhaIgual CC BY-NC-SA</translation>
</message>
<message>
<source>Public domain</source>
<translation type="unfinished"></translation>
<translation>Domínio Público</translation>
</message>
<message>
<source>Copyright</source>
<translation type="unfinished"></translation>
<translation>Copyright</translation>
</message>
<message>
<source>Created the:
</source>
<translation type="unfinished"></translation>
<translation>Criou:</translation>
</message>
<message>
<source>Updated the:
</source>
<translation type="unfinished"></translation>
<translation>Actualizou:</translation>
</message>
<message>
<source>Title page</source>
<translation type="unfinished"></translation>
<translatorcomment>Página Inicial</translatorcomment>
<translation>Página de Título</translation>
</message>
</context>
<context>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
<translation type="unfinished"></translation>
<translation>Página: %0</translation>
</message>
</context>
<context>
@ -3262,7 +3268,7 @@ DAMAGES.
END OF TERMS AND CONDITIONS
</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3273,7 +3279,14 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;The licences are in English to respect the official and legal approved translation.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;table border=&quot;0&quot; style=&quot;-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;As licenças estãao em Inglês para respeitar a tradução oficial e legalmente aceite.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3284,11 +3297,11 @@ p, li { white-space: pre-wrap; }
&lt;tr&gt;
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt;Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; This software is provided &apos;as-is&apos;, without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-size:9pt; color:#1a1a1a;&quot;&gt; 3. This notice may not be removed or altered from any source distribution.&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Credits</source>
<translation type="unfinished"></translation>
<translation>Créditos</translation>
</message>
<message utf8="true">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3300,7 +3313,7 @@ p, li { white-space: pre-wrap; }
&lt;td style=&quot;border: none;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;&lt;br /&gt;Open-Sankoré est un logiciel libre : vous pouvez le redistribuer et/ou le modifier en respectant les termes de la Lesser GNU general Public Licence (GNU LGPL) telle que publiée par la Free Software Foundation en version 2 ou une version plus récente.&lt;br /&gt;Vous pouvez consulter et charger le code source du logiciel sur &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré est distribué dans l&apos;espoir qu&apos;il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D&apos;ADAPTATION A UN OBJET PARTICULIER.&lt;br /&gt;Veuillez consulter la licence Lesser GNU General Public Licence située dans l&apos;onglet Licences ou consulter le site &lt;/span&gt;&lt;a href=&quot;http://www.gnu.org/licenses/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;http://www.gnu.org/licenses/&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;.&lt;br /&gt;&lt;br /&gt;Open-Sankoré is free software: you can redistribute it and/or modify it under the terms of the Lesser GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version. You can find the source code of this software at &lt;/span&gt;&lt;a href=&quot;https://github.com/Sankore&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&amp;lt;https://github.com/Sankore&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;br /&gt;Open-Sankoré is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public License below for more details.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Contact : &lt;br /&gt;Groupement d&apos;Intérêt Public pour l&apos;Education Numérique en Afrique (GIP ENA)&lt;br /&gt;Délégation Interministérielle à l&apos;Education Numérique en Afrique&lt;br /&gt;20 Avenue Ségur Paris 75007&lt;br /&gt;Téléphone : 01 43 17 68 08&lt;br /&gt;email: &lt;/span&gt;&lt;a href=&quot;mailto:contact@sankore.org&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;contact@sankore.org&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message utf8="true">
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -3345,7 +3358,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; © Henri Rogelet &amp;lt;h.rogelet@free.fr&amp;gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Autorisation pour un usage non commercial&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Source : http://pointecole.free.fr/polices.html&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

@ -6,6 +6,63 @@ html, body {
color: #666666;
}
::-webkit-scrollbar {
width: 14px;
}
::-webkit-scrollbar-thumb {
/*border-radius: 10px; */
background-color:lightgray;
border: 2px solid gray;
}
::-webkit-scrollbar-button:vertical:start{
border-top-right-radius: 10px;
border-top-left-radius: 10px;
background-color:lightgray;
background-image: url(images/trgUp.png);
background-size: 8px auto;
background-position: center;
background-repeat: no-repeat;
border: 2px solid gray;
}
::-webkit-scrollbar-button:vertical:end{
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
background-color:lightgray;
background-image: url(images/trgDown.png);
background-size: 8px auto;
background-position: center;
background-repeat: no-repeat;
border: 2px solid gray;
}
::-webkit-scrollbar-button:horizontal:start{
width: 14px;
border-bottom-left-radius: 10px;
border-top-left-radius: 10px;
background-color:lightgray;
background-image: url(images/trgLeft.png);
background-size: 8px auto;
background-position: center;
background-repeat: no-repeat;
border: 2px solid gray;
}
::-webkit-scrollbar-button:horizontal:end{
width: 14px;
border-bottom-right-radius: 10px;
border-top-right-radius: 10px;
background-color:lightgray;
background-image: url(images/trgRight.png);
background-size: 8px auto;
background-position: center;
background-repeat: no-repeat;
border: 2px solid gray;
}
#ubwidget {
position: absolute;
top: 0;

@ -13,257 +13,294 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
function log(object) {
console.log(object);
console.log(object);
}
function initAfterI18nMessagesLoaded(reload, templates, callbacks) {
document.title = fr.njin.i18n.document.title;
document.title = fr.njin.i18n.document.title;
var ubwidget = $("#ubwidget");
var ubwidget = $("#ubwidget");
var parameters = Object.create(Parameters,{
container: {
value: ubwidget
},
delegate: {
value: window.sankore || Object.create(ParametersDelegate)
}
});
var parameters = Object.create(Parameters,{
container: {
value: ubwidget
},
delegate: {
value: window.sankore || Object.create(ParametersDelegate)
}
});
var app = Object.create(App, {
container: {
value: ubwidget
},
parameters: {
value: parameters
},
reload: {
value: reload
}
});
var app = Object.create(App, {
container: {
value: ubwidget
},
parameters: {
value: parameters
},
reload: {
value: reload
}
});
app.init();
app.onEdit = false;
app.init();
app.onEdit = false;
if(templates.toolbar) {
$("#toolbar").html(Mustache.render(templates.toolbar, window));
}
if(templates.parameters) {
$("#parameters").html(Mustache.render(templates.parameters, window));
}
if(templates.toolbar) {
$("#toolbar").html(Mustache.render(templates.toolbar, window));
}
if(templates.parameters) {
$("#parameters").html(Mustache.render(templates.parameters, window));
}
if(callbacks.onTemplatesLoaded && typeof callbacks.onTemplatesLoaded === 'function') {
callbacks.onTemplatesLoaded(app);
}
if(callbacks.onTemplatesLoaded && typeof callbacks.onTemplatesLoaded === 'function') {
callbacks.onTemplatesLoaded(app);
}
log("Update setting views with stored parameters");
$("#parameters (input|select)[role=parameter]").each(function(i, input) {
(function(input){
var key = input.name;
var type = input.type;
var isRadioOrcheckbox = (type !== undefined && (type === "checkbox" || type === "radio"));
var stored = parameters.value(key);
if(isRadioOrcheckbox)
$(input).attr("checked", (typeof stored === "string" ? stored === "true" : stored));
else
$(input).val(stored);
$(input).change(function(){
var val = (isRadioOrcheckbox ? $(this).is(":checked") : $(this).val());
parameters.value(key, val);
});
})(input);
});
log("Update setting views with stored parameters");
$("#parameters (input|select)[role=parameter]").each(function(i, input) {
(function(input){
var key = input.name;
var type = input.type;
var isRadioOrcheckbox = (type !== undefined && (type === "checkbox" || type === "radio"));
var stored = parameters.value(key);
if(isRadioOrcheckbox)
$(input).attr("checked", (typeof stored === "string" ? stored === "true" : stored));
else
$(input).val(stored);
$(input).change(function(){
var val = (isRadioOrcheckbox ? $(this).is(":checked") : $(this).val());
parameters.value(key, val);
});
})(input);
});
log("Toobar Initialisation");
$("button[role=edit]").click(function(){
app.onEdit = true;
$(document.body).addClass("onEdit");
if(callbacks.onEdit && typeof callbacks.onEdit === 'function') {
callbacks.onEdit(app);
}
});
$("button[role=view]").click(function(){
app.onEdit = false;
$(document.body).removeClass("onEdit");
if(callbacks.onView && typeof callbacks.onView === 'function') {
callbacks.onView(app);
}
});
$("button[role=reload]").click(function(){
app.reload();
});
$("button[role=help]").click(function(){
$("body").toggleClass("showHelp");
});
log("Toobar Initialisation");
$("button[role=edit]").click(function(){
app.onEdit = true;
if(window.sankore)
window.sankore.enableDropOnWidget(app.onEdit);
$(document.body).addClass("onEdit");
if(callbacks.onEdit && typeof callbacks.onEdit === 'function') {
callbacks.onEdit(app);
}
});
$("button[role=view]").click(function(){
app.onEdit = false;
if(window.sankore)
window.sankore.enableDropOnWidget(app.onEdit);
$(document.body).removeClass("onEdit");
if(callbacks.onView && typeof callbacks.onView === 'function') {
callbacks.onView(app);
}
});
$("button[role=reload]").click(function(){
app.reload();
});
$("button[role=help]").click(function(){
$("body").toggleClass("showHelp");
});
$("select[name='themes']").change(function() {
$("body").get(0).className = $("body")[0].className.replace(/\btheme-[^\s]*\b/gi, '');
$("body").addClass("theme-"+$(this).val());
});
$("body").addClass("theme-"+$("select[name='themes']").val());
$("select[name='themes']").change(function() {
$("body").get(0).className = $("body")[0].className.replace(/\btheme-[^\s]*\b/gi, '');
$("body").addClass("theme-"+$(this).val());
});
$("body").addClass("theme-"+$("select[name='themes']").val());
}
function init(reload, templates, callbacks){
var locale = window.sankore ? sankore.locale() : "";
$.i18n.properties({
name: 'Messages',
path: 'i18n/',
language: locale,
callback: function(){
initAfterI18nMessagesLoaded(reload, templates, callbacks);
}
});
var locale = window.sankore ? sankore.locale() : "";
$.i18n.properties({
name: 'Messages',
path: 'i18n/',
language: locale,
callback: function(){
initAfterI18nMessagesLoaded(reload, templates, callbacks);
}
});
}
var Parameters = (function(){
var self = Object.create({}, {
container: {
value: null
},
delegate: {
value: null
},
value: {
value: function(key, value) {
if(value === undefined) {
var val = this.delegate.preference(key);
log("Retrieve parameter value ["+val+"] as type ["+(typeof val)+"] for key : ["+key+"]");
return (val !== undefined && (typeof val !== "string" || val)) ? val : $("#ubwidget").data(key);
}
else {
log("Set parameter value ["+value+"] for key : ["+key+"]");
this.delegate.setPreference(key, value);
this.container.trigger("preferenceChange", {key: key, value: value});
}
}
}
});
return self;
var self = Object.create({}, {
container: {
value: null
},
delegate: {
value: null
},
value: {
value: function(key, value) {
if(value === undefined) {
var val = this.delegate.preference(key);
log("Retrieve parameter value ["+val+"] as type ["+(typeof val)+"] for key : ["+key+"]");
return (val !== undefined && (typeof val !== "string" || val)) ? val : $("#ubwidget").data(key);
}
else {
log("Set parameter value ["+value+"] for key : ["+key+"]");
this.delegate.setPreference(key, value);
this.container.trigger("preferenceChange", {
key: key,
value: value
});
}
}
}
});
return self;
})();
var ParametersDelegate = (function(){
var self = Object.create({}, {
preference: {
value: function(key) {
return this[key];
}
},
setPreference: {
value: function(key, value) {
this[key] = value;
}
}
});
return self;
var self = Object.create({}, {
preference: {
value: function(key) {
return this[key];
}
},
setPreference: {
value: function(key, value) {
this[key] = value;
}
}
});
return self;
})();
var App = (function() {
var self = Object.create({}, {
container: {
value: null
},
parameters: {
value: null
},
container: {
value: null
},
parameters: {
value: null
},
init: {
value: function() {
var that = this;
this.container.bind("preferenceChange", function(evt, parameter) {
that.reload(parameter);
});
this.reload();
}
value: function() {
var that = this;
this.container.bind("preferenceChange", function(evt, parameter) {
that.reload(parameter);
});
this.reload();
}
},
reload: {
value: function(parameter) {
if(parameter === undefined)
log("Reload");
else
log("Update");
}
},
reload: {
value: function(parameter) {
if(parameter === undefined)
log("Reload");
else
log("Update");
}
},
utils: {
value: Object.create({}, {
shuffle: {
value: function(array) {
var unpickedSize = array.length;
while(unpickedSize > 0) {
var n = Math.floor(Math.random()*unpickedSize);
var temp = array[unpickedSize-1];
array[unpickedSize-1] = array[n];
array[n] = temp;
unpickedSize--;
}
}
},
guid: {
value: function() {
var S4 = function() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
};
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
},
droppable: {
value: function($e, callback) {
$e.bind("dragover", function(){
$(this).addClass("hover");
return false;
});
$e.bind("dragleave", function(){
$(this).removeClass("hover");
return false;
});
$e.bind("drop", function(e){
$(this).removeClass("hover");
e = e || window.event;
e.preventDefault();
// jQuery wraps the originalEvent, so we try to detect that here...
e = e.originalEvent || e;
utils: {
value: Object.create({}, {
shuffle: {
value: function(array) {
var unpickedSize = array.length;
while(unpickedSize > 0) {
var n = Math.floor(Math.random()*unpickedSize);
var temp = array[unpickedSize-1];
array[unpickedSize-1] = array[n];
array[n] = temp;
unpickedSize--;
}
}
},
guid: {
value: function() {
var S4 = function() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
};
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
},
droppable: {
value: function($e, callback) {
$e.bind("dragover", function(){
$(this).addClass("hover");
return false;
});
$e.bind("dragleave", function(){
$(this).removeClass("hover");
return false;
});
$e.bind("drop", function(e){
$(this).removeClass("hover");
e = e || window.event;
e.preventDefault();
// jQuery wraps the originalEvent, so we try to detect that here...
e = e.originalEvent || e;
if(window.sankore) {
function stringToXML(text){
if (window.ActiveXObject){
var doc=new ActiveXObject('Microsoft.XMLDOM');
doc.async='false';
doc.loadXML(text);
} else {
var parser=new DOMParser();
doc=parser.parseFromString(text,'text/xml');
}
return doc;
}
var file = stringToXML(e.dataTransfer.getData("text/plain"));
callback({
src: $(file).find("path:eq(0)").text()
});
return false;
}
if(window.sankore) {
function stringToXML(text){
if (window.ActiveXObject){
var doc=new ActiveXObject('Microsoft.XMLDOM');
doc.async='false';
doc.loadXML(text);
} else {
var parser=new DOMParser();
doc=parser.parseFromString(text,'text/xml');
}
return doc;
}
var file = stringToXML(e.dataTransfer.getData("text/plain"));
var tmp_img = $("<img/>").attr("src", $(file).find("path:eq(0)").text());
var w = 0;
var h = 0;
$(this).append(tmp_img);
setTimeout(function(){
if(tmp_img.height() >= tmp_img.width()){
if(tmp_img.height() > 180){
h = 180;
tmp_img.attr("height",h);
w = tmp_img.width();
} else {
h = tmp_img.height();
w = tmp_img.width();
}
}
else{
if(tmp_img.width() > 180){
w = 180;
tmp_img.attr("width",w);
h = tmp_img.height();
} else {
h = tmp_img.height();
w = tmp_img.width();
}
}
callback({
src: $(file).find("path:eq(0)").text(),
width: w,
height: h
});
tmp_img.remove();
}, 6)
return false;
}
// Using e.files with fallback because e.dataTransfer is immutable and can't be overridden in Polyfills (http://sandbox.knarly.com/js/dropfiles/).
var files = (e.files || e.dataTransfer.files);
for (var i = 0; i < files.length; i++) {
// Loop through our files with a closure so each of our FileReader's are isolated.
(function (i) {
if(typeof FileReader !== "undefined") {
var reader = new FileReader();
reader.onload = function (event) {
callback({
src: event.target.result,
title: (files[i].name),
alt: (files[i].name)
});
};
reader.readAsDataURL(files[i]);
}
})(i);
}
return false;
});
}
}
})
}
// Using e.files with fallback because e.dataTransfer is immutable and can't be overridden in Polyfills (http://sandbox.knarly.com/js/dropfiles/).
var files = (e.files || e.dataTransfer.files);
for (var i = 0; i < files.length; i++) {
// Loop through our files with a closure so each of our FileReader's are isolated.
(function (i) {
if(typeof FileReader !== "undefined") {
var reader = new FileReader();
reader.onload = function (event) {
callback({
src: event.target.result,
title: (files[i].name),
alt: (files[i].name)
});
};
reader.readAsDataURL(files[i]);
}
})(i);
}
return false;
});
}
}
})
}
});
return self;
})();

@ -3,197 +3,200 @@ function onTemplateLoadedCallback() {
}
function editRow(app, index) {
var parameters = app.parameters;
var row = $("<div/>");
row.append("<div class='label'><div>"+fr.njin.i18n.transformation.row.label(index+1)+"</div></div>");
var cards = $("<div class='cards'/>");
row.append(cards);
var parameters = app.parameters;
var row = $("<div/>");
row.append("<div class='label'><div>"+fr.njin.i18n.transformation.row.label(index+1)+"</div></div>");
var cards = $("<div class='cards'/>");
row.append(cards);
var beforecontent = parameters.value("#"+index+"before");
var aftercontent = parameters.value("#"+index+"after");
var beforecontent = parameters.value("#"+index+"before");
var aftercontent = parameters.value("#"+index+"after");
var before = $("<div rel='before'><div class='switch'><label>"+fr.njin.i18n.transformation.label.usePicture+"<input type='checkbox' name='switch'></label></div><div class='card'><div class='text'><div>"+( beforecontent !== undefined ? beforecontent : "" )+"</div></div><div class='picture'><div></div><div class='dropzone'><div>"+fr.njin.i18n.transformation.label.drop+"</div></div></div></div><div class='label'>"+fr.njin.i18n.transformation.label.before+"</div></div>");
var after = $("<div rel='after'><div class='switch'><label>"+fr.njin.i18n.transformation.label.usePicture+"<input type='checkbox' name='switch'></label></div><div class='card'><div class='text'><div>"+( aftercontent !== undefined ? aftercontent : "" )+"</div></div><div class='picture'><div></div><div class='dropzone'><div>"+fr.njin.i18n.transformation.label.drop+"</div></div></div></div><div class='label'>"+fr.njin.i18n.transformation.label.after+"</div></div>");
var before = $("<div rel='before'><div class='switch'><label>"+fr.njin.i18n.transformation.label.usePicture+"<input type='checkbox' name='switch'></label></div><div class='card'><div class='text'><div>"+( beforecontent !== undefined ? beforecontent : "" )+"</div></div><div class='picture'><div></div><div class='dropzone'><div>"+fr.njin.i18n.transformation.label.drop+"</div></div></div></div><div class='label'>"+fr.njin.i18n.transformation.label.before+"</div></div>");
var after = $("<div rel='after'><div class='switch'><label>"+fr.njin.i18n.transformation.label.usePicture+"<input type='checkbox' name='switch'></label></div><div class='card'><div class='text'><div>"+( aftercontent !== undefined ? aftercontent : "" )+"</div></div><div class='picture'><div></div><div class='dropzone'><div>"+fr.njin.i18n.transformation.label.drop+"</div></div></div></div><div class='label'>"+fr.njin.i18n.transformation.label.after+"</div></div>");
makeEditable(app, before, index);
makeEditable(app, after, index);
makeEditable(app, before, index);
makeEditable(app, after, index);
cards.append(before);
cards.append(after);
cards.append(before);
cards.append(after);
return row;
return row;
}
function cards(app, index) {
var parameters = app.parameters;
var beforecard = $("<div class='part before closed'/>");
var aftercard = $("<div class='part after'/>");
var beforecontent = parameters.value("#"+index+"before");
var aftercontent = parameters.value("#"+index+"after");
var before = $("<div rel='before'><div class='card'><div class='text'><div>"+( beforecontent !== undefined ? beforecontent : "" )+"</div></div><div class='picture'><div></div></div></div></div>");
var after = $("<div rel='after'><div class='card'><div class='text'><div>"+( aftercontent !== undefined ? aftercontent : "" )+"</div></div><div class='picture'><div></div></div></div></div>");
var usePicture = parameters.value("#UsePicture"+index+"before") === "true"
|| parameters.value("#UsePicture"+index+"before") == true;
if(usePicture) {
before.addClass("usePicture");
var f = $.parseJSON(parameters.value("#Picture"+index+"before"));
if(f !== null) {
var $img = $('<img src="" class="uploadPic" title="" alt="" />').attr(f);
before.find(".picture>div:eq(0)").append($img);
}
}
usePicture = parameters.value("#UsePicture"+index+"after") === "true"
|| parameters.value("#UsePicture"+index+"after") == true;
if(usePicture) {
after.addClass("usePicture");
var f = $.parseJSON(parameters.value("#Picture"+index+"after"));
if(f !== null) {
var $img = $('<img src="" class="uploadPic" title="" alt="" />').attr(f);
after.find(".picture>div:eq(0)").append($img);
}
}
beforecard.append(before);
aftercard.append(after);
return [beforecard, aftercard];
var parameters = app.parameters;
var beforecard = $("<div class='part before closed'/>");
var aftercard = $("<div class='part after'/>");
var beforecontent = parameters.value("#"+index+"before");
var aftercontent = parameters.value("#"+index+"after");
var before = $("<div rel='before'><div class='card'><div class='text'><div>"+( beforecontent !== undefined ? beforecontent : "" )+"</div></div><div class='picture'><div></div></div></div></div>");
var after = $("<div rel='after'><div class='card'><div class='text'><div>"+( aftercontent !== undefined ? aftercontent : "" )+"</div></div><div class='picture'><div></div></div></div></div>");
var usePicture = parameters.value("#UsePicture"+index+"before") === "true"
|| parameters.value("#UsePicture"+index+"before") == true;
if(usePicture) {
before.addClass("usePicture");
var f = $.parseJSON(parameters.value("#Picture"+index+"before"));
if(f !== null) {
var $img = $('<img src="" class="uploadPic" title="" alt="" />').attr(f);
before.find(".picture>div:eq(0)").append($img);
}
}
usePicture = parameters.value("#UsePicture"+index+"after") === "true"
|| parameters.value("#UsePicture"+index+"after") == true;
if(usePicture) {
after.addClass("usePicture");
var f = $.parseJSON(parameters.value("#Picture"+index+"after"));
if(f !== null) {
var $img = $('<img src="" class="uploadPic" title="" alt="" />').attr(f);
after.find(".picture>div:eq(0)").append($img);
}
}
beforecard.append(before);
aftercard.append(after);
return [beforecard, aftercard];
}
function makeEditable(app, row, index) {
var parameters = app.parameters;
var editable = row.find(".text>div").eq(0);
var key = index+editable.parent().parent().parent().attr('rel');
editable.get(0).contentEditable = true;
editable.bind('blur keyup paste', function(){
parameters.value("#"+key, $(this).html());
});
var checkbox = row.find("input[name='switch']");
function setSwicth() {
var val = parameters.value("#UsePicture"+key) === "true"
|| parameters.value("#UsePicture"+key) === true;
if(val) {
row.addClass("usePicture");
}else {
row.removeClass("usePicture");
}
checkbox.attr("checked", val);
}
checkbox.change(function() {
parameters.value("#UsePicture"+key, $(this).is(':checked'));
setSwicth();
});
setSwicth();
var dropzone = row.find(".dropzone");
var pictureHolder = dropzone.parent().find(">div:eq(0)");
var parameters = app.parameters;
var editable = row.find(".text>div").eq(0);
var key = index+editable.parent().parent().parent().attr('rel');
editable.get(0).contentEditable = true;
editable.bind('blur keyup paste', function(){
parameters.value("#"+key, $(this).html());
});
var checkbox = row.find("input[name='switch']");
function setSwicth() {
var val = parameters.value("#UsePicture"+key) === "true"
|| parameters.value("#UsePicture"+key) === true;
if(val) {
row.addClass("usePicture");
}else {
row.removeClass("usePicture");
}
checkbox.attr("checked", val);
}
checkbox.change(function() {
parameters.value("#UsePicture"+key, $(this).is(':checked'));
setSwicth();
});
setSwicth();
var dropzone = row.find(".dropzone");
var pictureHolder = dropzone.parent().find(">div:eq(0)");
function setPicture() {
var f = $.parseJSON(parameters.value("#Picture"+key));
if(f !== null) {
var $img = $('<img src="" class="uploadPic" title="" alt="" />').attr(f);
pictureHolder.empty();
pictureHolder.append($img);
}
}
function setPicture() {
var f = $.parseJSON(parameters.value("#Picture"+key));
if(f !== null) {
var $img = $('<img src="" class="uploadPic" title="" alt="" />').attr(f);
pictureHolder.empty();
pictureHolder.append($img);
}
}
app.utils.droppable(dropzone, function(f) {
parameters.value("#Picture"+key, JSON.stringify(f));
setPicture();
});
setPicture();
app.utils.droppable(dropzone, function(f) {
parameters.value("#Picture"+key, JSON.stringify(f));
setPicture();
});
setPicture();
}
function reloadApp(app) {
var number = app.parameters.value("number");
var scene = $("#scene");
scene.empty();
if(app.onEdit) {
var editcards = $("#edit-cards");
editcards.empty();
for(var i=0 ; i<number ; i++) {
editcards.append(editRow(app, i));
}
return;
}
var table = $("<div id='table'/>");
scene.append(table);
var before = $("<div class='deck before'><div></div></div>");
var box = $("<div class='box'><div></div></div>");
var after = $("<div class='deck after'><div></div></div>");
if(number === 0)
before.addClass("empty");
after.addClass("empty");
table.append(before);
table.append(box);
table.append(after);
box.find(">div").css("z-index", number+1);
var beforeDeck = before.find(">div");
var afterDeck = after.find(">div");
var beforeLeftPosition = box.find(">div").position().left - beforeDeck.position().left + 10 + 40; //10px de padding dans la box + 40px d'ombre dans l'image
function makeCard(i, cards) {
beforeDeck.append(cards[0]);
afterDeck.append(cards[1]);
cards[1].css("left", -beforeLeftPosition+"px");
cards[1].css("z-index", i);
var number = app.parameters.value("number");
var scene = $("#scene");
scene.empty();
if(app.onEdit) {
var editcards = $("#edit-cards");
editcards.empty();
for(var i=0 ; i<number ; i++) {
editcards.append(editRow(app, i));
}
return;
}
var table = $("<div id='table'/>");
scene.append(table);
var before = $("<div class='deck before'><div></div></div>");
var box = $("<div class='box'><div></div></div>");
var after = $("<div class='deck after'><div></div></div>");
if(number === 0)
before.addClass("empty");
after.addClass("empty");
table.append(before);
table.append(box);
table.append(after);
box.find(">div").css("z-index", number+1);
var beforeDeck = before.find(">div");
var afterDeck = after.find(">div");
var beforeLeftPosition = box.find(">div").position().left - beforeDeck.position().left + 10 + 40; //10px de padding dans la box + 40px d'ombre dans l'image
function makeCard(i, cards) {
beforeDeck.append(cards[0]);
afterDeck.append(cards[1]);
cards[1].css("left", -beforeLeftPosition+"px");
cards[1].css("z-index", i);
cards[0].click(function(e) {
var c = $(this);
c.removeClass("closed");
c.unbind(e);
c.animate({
left : beforeLeftPosition
}, 1000, function(){
setTimeout(function(){
cards[1].animate({
left: 0
}, 1000, function(){
after.removeClass("empty");
});
}, 1000);
c.remove();
});
if(i === 0) {
before.addClass("empty");
}
});
}
cards[0].click(function(e) {
var c = $(this);
c.removeClass("closed");
c.unbind(e);
c.animate({
left : beforeLeftPosition
}, 1000, function(){
setTimeout(function(){
cards[1].animate({
left: 0
}, 1000, function(){
after.removeClass("empty");
});
}, 1000);
c.remove();
});
if(i === 0) {
before.addClass("empty");
}
});
}
for(var i=number ; i>0 ; i--) {
makeCard(i-1, cards(app, i-1));
}
for(var i=number ; i>0 ; i--) {
makeCard(i-1, cards(app, i-1));
}
if(window.sankore)
window.sankore.enableDropOnWidget(app.onEdit);
if(window.sankore)
window.sankore.enableDropOnWidget(app.onEdit);
}
function reloadCallback(parameter) {
if(parameter === undefined || parameter.key === "number" )
reloadApp(this);
if(parameter === undefined || parameter.key === "number" )
reloadApp(this);
}
$(document).ready(function(){
var callbacks = {
onTemplatesLoaded: onTemplateLoadedCallback,
onEdit: reloadApp,
onView: reloadApp
};
init(reloadCallback, {toolbar: toolbarTemplate, parameters: parametersTemplate}, callbacks);
var callbacks = {
onTemplatesLoaded: onTemplateLoadedCallback,
onEdit: reloadApp,
onView: reloadApp
};
init(reloadCallback, {
toolbar: toolbarTemplate,
parameters: parametersTemplate
}, callbacks);
});

@ -32,6 +32,7 @@
#include "domain/UBGraphicsTextItem.h"
#include "domain/UBGraphicsTextItemDelegate.h"
#include "domain/UBGraphicsWidgetItem.h"
#include "domain/UBGraphicsGroupContainerItem.h"
#include "frameworks/UBFileSystemUtils.h"
@ -128,8 +129,9 @@ bool UBCFFSubsetAdaptor::ConvertCFFFileToUbz(QString &cffSourceFile, UBDocumentP
return result;
}
UBCFFSubsetAdaptor::UBCFFSubsetReader::UBCFFSubsetReader(UBDocumentProxy *proxy, QFile *content):
mProxy(proxy)
UBCFFSubsetAdaptor::UBCFFSubsetReader::UBCFFSubsetReader(UBDocumentProxy *proxy, QFile *content)
: mProxy(proxy)
, mGSectionContainer(NULL)
{
int errorLine, errorColumn;
QString errorStr;
@ -168,6 +170,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parse()
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &element)
{
mGSectionContainer = new UBGraphicsGroupContainerItem();
QDomElement currentSvgElement = element.firstChildElement();
while (!currentSvgElement.isNull()) {
if (!parseSvgElement(currentSvgElement))
@ -176,6 +180,16 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &ele
currentSvgElement = currentSvgElement.nextSiblingElement();
}
if (mGSectionContainer->childItems().count())
{
mCurrentScene->addGroup(mGSectionContainer);
}
else
{
delete mGSectionContainer;
mGSectionContainer = NULL;
}
return true;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSwitchSection(const QDomElement &element)
@ -247,6 +261,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgRect(const QDomElement &elem
repositionSvgItem(svgItem, width, height, x1, y1, transform);
hashSceneItem(element, svgItem);
if (mGSectionContainer)
{
addItemToGSection(svgItem);
}
delete generator;
return true;
@ -293,6 +312,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgEllipse(const QDomElement &e
repositionSvgItem(svgItem, rx * 2, ry * 2, cx - 2*rx, cy+ry, transform);
hashSceneItem(element, svgItem);
if (mGSectionContainer)
{
addItemToGSection(svgItem);
}
delete generator;
return true;
@ -375,6 +399,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &e
repositionSvgItem(svgItem, width +strokeWidth, height + strokeWidth, x1 - strokeWidth/2 + transform.m31(), y1 + strokeWidth/2 + transform.m32(), transform);
hashSceneItem(element, svgItem);
if (mGSectionContainer)
{
addItemToGSection(svgItem);
}
delete generator;
return true;
@ -454,6 +483,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
repositionSvgItem(svgItem, width +strokeWidth, height + strokeWidth, x1 + transform.m31() - strokeWidth/2, y1 + transform.m32() + strokeWidth/2, transform);
hashSceneItem(element, svgItem);
if (mGSectionContainer)
{
addItemToGSection(svgItem);
}
delete generator;
return true;
@ -593,6 +627,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgText(const QDomElement &elem
repositionSvgItem(svgItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, svgItem);
if (mGSectionContainer)
{
addItemToGSection(svgItem);
}
delete generator;
return true;
}
@ -712,6 +751,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgTextarea(const QDomElement &
repositionSvgItem(svgItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, svgItem);
if (mGSectionContainer)
{
addItemToGSection(svgItem);
}
return true;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgImage(const QDomElement &element)
@ -749,6 +793,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgImage(const QDomElement &ele
repositionSvgItem(pixItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, pixItem);
if (mGSectionContainer)
{
addItemToGSection(pixItem);
}
return true;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgFlash(const QDomElement &element)
@ -791,6 +840,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgFlash(const QDomElement &ele
repositionSvgItem(flashItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, flashItem);
if (mGSectionContainer)
{
addItemToGSection(flashItem);
}
return true;
}
@ -829,6 +883,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgAudio(const QDomElement &ele
repositionSvgItem(audioItem, audioItem->boundingRect().width(), audioItem->boundingRect().height(), x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, audioItem);
if (mGSectionContainer)
{
addItemToGSection(audioItem);
}
return true;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgVideo(const QDomElement &element)
@ -867,6 +926,11 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgVideo(const QDomElement &ele
repositionSvgItem(videoItem, videoItem->boundingRect().width(), videoItem->boundingRect().height(), x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, videoItem);
if (mGSectionContainer)
{
addItemToGSection(videoItem);
}
return true;
}
@ -877,6 +941,11 @@ void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSectionAttr(const QDomElemen
svgSection.attribute(aHeight).toInt());
}
void UBCFFSubsetAdaptor::UBCFFSubsetReader::addItemToGSection(QGraphicsItem *item)
{
mGSectionContainer->addToGroup(item);
}
void UBCFFSubsetAdaptor::UBCFFSubsetReader::hashSceneItem(const QDomElement &element, UBGraphicsItem *item)
{
// adding element pointer to hash to refer if needed

@ -35,6 +35,7 @@ class QGraphicsItem;
class QTextBlockFormat;
class QTextCharFormat;
class QTextCursor;
class UBGraphicsStrokesGroup;
class UBCFFSubsetAdaptor
@ -66,6 +67,8 @@ private:
QPointF mViewBoxCenter;
QSize mSize;
QPointF mShiftVector;
bool mSvgGSectionIsOpened;
UBGraphicsGroupContainerItem *mGSectionContainer;
private:
QDomDocument mDOMdoc;
@ -73,6 +76,7 @@ private:
QHash<QString, UBGraphicsItem*> persistedItems;
QDir mTmpFlashDir;
void addItemToGSection(QGraphicsItem *item);
bool hashElements();
void addExtentionsToHash(QDomElement *parent, QDomElement *topGroup);

@ -396,6 +396,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
if (!mScene)
{
mScene = new UBGraphicsScene(mProxy);
mScene->setURStackEnable(false);
}
// introduced in UB 4.2
@ -1013,6 +1014,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
delete annotationGroup;
}
mScene->setURStackEnable(true);
return mScene;
}

@ -880,7 +880,7 @@ void UBBoardController::groupButtonClicked()
}
if (groupAction->text() == UBSettings::settings()->actionGroupText) { //The only way to get information from item, considering using smth else
UBGraphicsGroupContainerItem *groupItem = activeScene()->createGroup(selItems);
UBGraphicsGroupContainerItem *groupItem = activeScene()->createGroup(selItems);
groupItem->setSelected(true);
UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
@ -1102,7 +1102,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri
QUuid uuid = QUuid::createUuid();
QUrl url = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(selectedDocument(), sourceUrl, pData, uuid));
->addAudioFileToDocument(selectedDocument(), sourceUrl, pData, uuid));
audioMediaItem = mActiveScene->addMedia(url, false, pPos);

@ -106,8 +106,7 @@ UBBoardView::~UBBoardView () {
delete suspendedMousePressEvent;
}
void
UBBoardView::init ()
void UBBoardView::init ()
{
connect (UBSettings::settings ()->boardPenPressureSensitive, SIGNAL (changed (QVariant)),
this, SLOT (settingChanged (QVariant)));
@ -1439,4 +1438,3 @@ UBBoardView::setToolCursor (int tool)
controlViewport->setCursor (UBResources::resources ()->penCursor);
}
}

@ -18,8 +18,10 @@
#include "core/UBSettings.h"
#include "core/UBApplication.h"
#include "gui/UBMainWindow.h"
#include "domain/UBGraphicsScene.h"
#include "board/UBBoardController.h"
#include "gui/UBMainWindow.h"
#include "core/memcheck.h"
UBDrawingController* UBDrawingController::sDrawingController = 0;
@ -87,6 +89,7 @@ void UBDrawingController::setStylusTool(int tool)
{
if (tool != mStylusTool)
{
UBApplication::boardController->activeScene()->deselectAllItems();
if (mStylusTool == UBStylusTool::Pen || mStylusTool == UBStylusTool::Marker
|| mStylusTool == UBStylusTool::Line)
{

@ -117,6 +117,9 @@ struct UBGraphicsItemData
, ItemOwnZValue
, itemLayerType //use instead of deprecated ItemLayerType
, ItemUuid //storing uuid in QGraphicsItem for fast finding operations
//Duplicating delegate's functions to make possible working with pure QGraphicsItem
, ItemFlippable // (bool)
, ItemRotatable // (bool)
};
};

@ -399,8 +399,8 @@ void UBSettings::init()
libIconSize = new UBSetting(this, "Library", "LibIconSize", defaultLibraryIconSize);
actionGroupText = "Group items";
actionUngroupText = "Ungroup items";
actionGroupText = tr("Group");
actionUngroupText = tr("Ungroup");
}

@ -29,6 +29,7 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent
setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly
}
void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
@ -42,6 +43,19 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
return;
}
//Check if group is allready rotatable or flippable
if (childItems().count()) {
if (UBGraphicsItem::isFlippable(this) && !UBGraphicsItem::isFlippable(item)) {
mDelegate->setFlippable(false);
}
if (UBGraphicsItem::isRotatable(this) && !UBGraphicsItem::isRotatable(item)) {
mDelegate->setRotatable(false);
}
} else {
mDelegate->setFlippable(UBGraphicsItem::isFlippable(item));
mDelegate->setRotatable(UBGraphicsItem::isRotatable(item));
}
// COMBINE
bool ok;
QTransform itemTransform = item->itemTransform(this, &ok);
@ -80,7 +94,7 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
// ### Expensive, we could maybe use dirtySceneTransform bit for optimization
item->setTransform(newItemTransform);
// item->d_func()->setIsMemberOfGroup(true);
// item->d_func()->setIsMemberOfGroup(true);
prepareGeometryChange();
itemsBoundingRect |= itemTransform.mapRect(item->boundingRect() | item->childrenBoundingRect());
update();
@ -270,6 +284,27 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item)
QGraphicsItem *newParent = parentItem();
if (childItems().count()) {
if (!UBGraphicsItem::isFlippable(item) || !UBGraphicsItem::isRotatable(item)) {
bool flippableNow = true;
bool rotatableNow = true;
foreach (QGraphicsItem *item, childItems()) {
if (!UBGraphicsItem::isFlippable(item)) {
flippableNow = false;
}
if (!UBGraphicsItem::isRotatable(item)) {
rotatableNow = false;
}
if (!rotatableNow && !flippableNow) {
break;
}
}
mDelegate->setFlippable(flippableNow);
mDelegate->setRotatable(rotatableNow);
}
}
// COMBINE
bool ok;
QTransform itemTransform;

@ -16,7 +16,9 @@ UBGraphicsGroupContainerItemDelegate::UBGraphicsGroupContainerItemDelegate(QGrap
UBGraphicsItemDelegate(pDelegated, parent, true, false, false), mDestroyGroupButton(0)
{
//Wrapper function. Use it to set correct data() to QGraphicsItem as well
setFlippable(false);
setRotatable(false);
}
UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItemDelegate::delegated()

@ -158,6 +158,10 @@ void UBGraphicsItemDelegate::init()
button->setFlag(QGraphicsItem::ItemIsSelectable, true);
}
}
//Wrapper function. Use it to set correct data() to QGraphicsItem as well
setFlippable(false);
setRotatable(false);
}
@ -410,7 +414,7 @@ void UBGraphicsItemDelegate::remove(bool canUndo)
}
bool UBGraphicsItemDelegate::isLocked()
bool UBGraphicsItemDelegate::isLocked() const
{
return mDelegated->data(UBGraphicsItemData::ItemLocked).toBool();
}
@ -598,6 +602,22 @@ void UBGraphicsItemDelegate::showMenu()
void UBGraphicsItemDelegate::setFlippable(bool flippable)
{
mFlippable = flippable;
Q_ASSERT (mDelegated);
if (mDelegated) {
mDelegated->setData(UBGraphicsItemData::ItemFlippable, QVariant(flippable));
}
}
void UBGraphicsItemDelegate::setRotatable(bool pCanRotate)
{
mCanRotate = pCanRotate;
Q_ASSERT(mDelegated);
if (mDelegated) {
mDelegated->setData(UBGraphicsItemData::ItemRotatable, QVariant(pCanRotate));
}
}
bool UBGraphicsItemDelegate::isFlippable()

@ -224,8 +224,8 @@ class UBGraphicsItemDelegate : public QObject
UBGraphicsDelegateFrame* frame() { return mFrame; }
bool canRotate() { return mCanRotate; }
bool isLocked();
bool canRotate() const { return mCanRotate; }
bool isLocked() const;
bool canDuplicate() { return mCanDuplicate; }
QMimeData* mimeData(){ return mMimeData; }
@ -233,6 +233,7 @@ class UBGraphicsItemDelegate : public QObject
void setDragPixmap(const QPixmap &pix) {mDragPixmap = pix;}
void setFlippable(bool flippable);
void setRotatable(bool pCanRotate);
bool isFlippable();
void setButtonsVisible(bool visible);

@ -42,7 +42,7 @@ void UBAudioPresentationWidget::paintEvent(QPaintEvent *event)
mask_img.fill(0xff);
QPainter mask_painter(&mask_img);
mask_painter.setBrush(QBrush( QColor(0, 0, 0)));
mask_painter.drawRoundedRect(1,1, width()-3, height()-3, height()/5, height()/5);
mask_painter.drawRoundedRect(1,1, width()-2, height()-2, height()/5, height()/5);
setMask(QBitmap::fromImage(mask_img));
@ -131,7 +131,6 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte
connect(mDelegate, SIGNAL(showOnDisplayChanged(bool)), this, SLOT(showOnDisplayChanged(bool)));
connect(mMediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasMediaChanged(bool)));
}
@ -179,6 +178,18 @@ QVariant UBGraphicsMediaItem::itemChange(GraphicsItemChange change, const QVaria
return UBGraphicsProxyWidget::itemChange(change, value);
}
void UBGraphicsMediaItem::setSourceUrl(const QUrl &pSourceUrl)
{
UBAudioPresentationWidget* pAudioWidget = dynamic_cast<UBAudioPresentationWidget*>(mAudioWidget);
if (pAudioWidget)
{
pAudioWidget->setTitle(UBFileSystemUtils::lastPathComponent(pSourceUrl.toString()));
}
UBItem::setSourceUrl(pSourceUrl);
}
void UBGraphicsMediaItem::clearSource()
{
QString path = mediaFileUrl().toLocalFile();

@ -97,16 +97,7 @@ public:
virtual void copyItemParameters(UBItem *copy) const;
virtual void setSourceUrl(const QUrl &pSourceUrl)
{
UBAudioPresentationWidget* pAudioWidget = dynamic_cast<UBAudioPresentationWidget*>(mAudioWidget);
if (pAudioWidget)
{
pAudioWidget->setTitle(UBFileSystemUtils::lastPathComponent(pSourceUrl.toLocalFile()));
}
UBItem::setSourceUrl(pSourceUrl);
}
virtual void setSourceUrl(const QUrl &pSourceUrl);
public slots:

@ -56,6 +56,10 @@ UBGraphicsMediaItemDelegate::UBGraphicsMediaItemDelegate(UBGraphicsMediaItem* pD
{
delegated()->setMute(true);
}
//Wrapper function. Use it to set correct data() to QGraphicsItem as well
setFlippable(false);
setRotatable(false);
}
bool UBGraphicsMediaItemDelegate::mousePressEvent(QGraphicsSceneMouseEvent *event)
@ -269,4 +273,4 @@ void UBGraphicsMediaItemDelegate::updateTicker(qint64 time)
void UBGraphicsMediaItemDelegate::totalTimeChanged(qint64 newTotalTime)
{
mMediaControl->totalTimeChanged(newTotalTime);
}
}

@ -28,10 +28,10 @@
UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent)
: QGraphicsPixmapItem(parent)
{
mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false);
mDelegate = new UBGraphicsItemDelegate(this, 0, true);
mDelegate->init();
mDelegate->setFlippable(true);
mDelegate->setRotatable(true);
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
setTransformationMode(Qt::SmoothTransformation);

@ -308,9 +308,10 @@ UBGraphicsScene::~UBGraphicsScene()
void UBGraphicsScene::selectionChangedProcessing()
{
if (selectedItems().count()){
qDebug() << "Selected item bounding rect: " << selectedItems().first()->boundingRect();
UBApplication::showMessage("ZValue is " + QString::number(selectedItems().first()->zValue(), 'f') + "own z value is "
+ QString::number(selectedItems().first()->data(UBGraphicsItemData::ItemOwnZValue).toReal(), 'f'));
// UBApplication::showMessage("ZValue is " + QString::number(selectedItems().first()->zValue(), 'f') + "own z value is "
// + QString::number(selectedItems().first()->data(UBGraphicsItemData::ItemOwnZValue).toReal(), 'f'));
qDebug() << "flippable" << selectedItems().first()->data(UBGraphicsItemData::ItemFlippable).toBool() << endl
<< "rotatable" << selectedItems().first()->data(UBGraphicsItemData::ItemRotatable).toBool();
}
}
@ -1269,7 +1270,7 @@ void UBGraphicsScene::clearAnnotations()
while (itItems.hasNext())
{
QGraphicsItem* item = itItems.next();
UBGraphicsPolygonItem* pi = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
UBGraphicsStrokesGroup* pi = qgraphicsitem_cast<UBGraphicsStrokesGroup*>(item);
if (pi)
{
removeItem(item);
@ -1998,8 +1999,6 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos, bool forceGrab)
QPoint dvZeroPoint = dView->mapToGlobal(QPoint(0,0));
QRect qcr = cView->geometry();
QRect qdr = dView->geometry();
int cvW = cView->width();
int dvW = dView->width();
qreal wCoeff = (qreal)dvW / (qreal)cvW;
@ -2352,6 +2351,7 @@ void UBGraphicsScene::keyReleaseEvent(QKeyEvent * keyEvent)
default:
{
item->setSelected(false);
UBGraphicsItem *ubgi = dynamic_cast<UBGraphicsItem*>(item);
if (0 != ubgi)
ubgi->remove();

@ -9,6 +9,8 @@ UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsI
mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false);
mDelegate->init();
mDelegate->setFlippable(true);
mDelegate->setRotatable(true);
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
setUuid(QUuid::createUuid());

@ -56,6 +56,7 @@ void UBGraphicsSvgItem::init()
mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false);
mDelegate->init();
mDelegate->setFlippable(true);
mDelegate->setRotatable(true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);

@ -38,6 +38,8 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent)
mDelegate->init();
mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing);
mDelegate->setFlippable(false);
mDelegate->setRotatable(true);
mTypeTextHereLabel = tr("<Type Text Here>");

@ -402,4 +402,4 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(qreal factor, textChangeMode cha
void UBGraphicsTextItemDelegate::scaleTextSize(qreal multiplyer)
{
ChangeTextSize(multiplyer, scaleSize);
}
}

@ -28,7 +28,7 @@ UBGraphicsWebView::UBGraphicsWebView(QGraphicsItem* parent)
{
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
mDelegate = new UBGraphicsItemDelegate(this, 0, true, false, false);
mDelegate = new UBGraphicsItemDelegate(this, 0, true);
mDelegate->init();
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);

@ -34,3 +34,13 @@ void UBGraphicsItem::assignZValue(QGraphicsItem *item, qreal value)
item->setZValue(value);
item->setData(UBGraphicsItemData::ItemOwnZValue, value);
}
bool UBGraphicsItem::isFlippable(QGraphicsItem *item)
{
return item->data(UBGraphicsItemData::ItemFlippable).toBool();
}
bool UBGraphicsItem::isRotatable(QGraphicsItem *item)
{
return item->data(UBGraphicsItemData::ItemRotatable).toBool();
}

@ -105,6 +105,9 @@ protected:
public:
static void assignZValue(QGraphicsItem*, qreal value);
static bool isRotatable(QGraphicsItem *item);
static bool isFlippable(QGraphicsItem *item);
virtual UBGraphicsItemDelegate *Delegate() const = 0;
virtual void remove() = 0;

@ -107,7 +107,7 @@ void UBFeaturesWidget::currentSelected(const QModelIndex &current)
QString objName = sender()->objectName();
if (objName.isEmpty()) {
qWarning() << "incorrrect sender";
qWarning() << "incorrect sender";
} else if (objName == objNamePathList) {
//Calling to reset the model for listView. Maybe separate function needed
controller->searchStarted("", centralWidget->listView());
@ -478,12 +478,12 @@ UBFeaturesCentralWidget::UBFeaturesCentralWidget(QWidget *parent) : QWidget(pare
//Used to show search bar on the search widget
webView = new UBFeaturesWebView(this);
//filling stackwidget
mStackedWidget->addWidget(mNavigator);
mStackedWidget->addWidget(mFeatureProperties);
mStackedWidget->addWidget(webView);
mStackedWidget->setCurrentIndex(MainList);
mStackedWidget->setContentsMargins(0, 0, 0, 0);
//filling stackwidget
mStackedWidget->addWidget(mNavigator);
mStackedWidget->addWidget(mFeatureProperties);
mStackedWidget->addWidget(webView);
mStackedWidget->setCurrentIndex(MainList);
mStackedWidget->setContentsMargins(0, 0, 0, 0);
mAdditionalDataContainer = new QStackedWidget(this);
@ -542,7 +542,7 @@ void UBFeaturesCentralWidget::setPropertiesThumbnail(const QPixmap &pix)
UBFeature UBFeaturesCentralWidget::getCurElementFromProperties()
{
return mFeatureProperties->getCurrentElement();
return mFeatureProperties->getCurrentElement();
}
void UBFeaturesCentralWidget::showAdditionalData(AddWidget pWidgetType, AddWidgetState pState)
@ -732,7 +732,7 @@ UBFeaturesWebView::UBFeaturesWebView(QWidget* parent, const char* name):QWidget(
mpView->setObjectName("SearchEngineView");
mpSankoreAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene());
mpView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI);
connect(mpView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared()));
mpWebSettings = QWebSettings::globalSettings();
mpWebSettings->setAttribute(QWebSettings::JavaEnabled, true);
mpWebSettings->setAttribute(QWebSettings::PluginsEnabled, true);
@ -767,6 +767,11 @@ UBFeaturesWebView::~UBFeaturesWebView()
}
}
void UBFeaturesWebView::javaScriptWindowObjectCleared()
{
mpView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI);
}
void UBFeaturesWebView::showElement(const UBFeature &elem)
{
QString qsWidgetName;

@ -248,7 +248,6 @@ private slots:
void setFileNameList(const QStringList &pLst);
void reactOnTextChanged(const QString &pStr);
private:
QLineEdit *mLineEdit;
QRegExpValidator *mValidator;
@ -289,6 +288,7 @@ public:
private slots:
void onLoadFinished(bool ok);
void javaScriptWindowObjectCleared();
private:
QWebView* mpView;

@ -39,6 +39,7 @@ UBGraphicsCurtainItem::UBGraphicsCurtainItem(QGraphicsItem* parent)
{
mDelegate = new UBGraphicsCurtainItemDelegate(this, 0);
mDelegate->init();
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);

Loading…
Cancel
Save